[oe-commits] [bitbake] 04/10: toaster: only prevent duplicate custom image names within a project

git at git.openembedded.org git at git.openembedded.org
Tue Apr 19 20:13:39 UTC 2016


rpurdie pushed a commit to branch 1.30
in repository bitbake.

commit 9abbb46e799c06757e03addd54e3f5d3c0fe2886
Author: Elliot Smith <elliot.smith at intel.com>
AuthorDate: Tue Apr 19 17:28:41 2016 +0100

    toaster: only prevent duplicate custom image names within a project
    
    We currently prevent the same name being used for multiple custom
    images, but make the check across all projects. This means that
    custom image names have to be unique across all projects in
    the Toaster installation.
    
    Modify how we validate the name of a custom image so that we
    only prevent duplication of custom image names within a project,
    while ensuring that the name of a custom image doesn't duplicate
    the name of a recipe which is not a custom image recipe.
    
    [YOCTO #9209]
    
    Signed-off-by: Elliot Smith <elliot.smith at intel.com>
    Signed-off-by: Michael Wood <michael.g.wood at intel.com>
    Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>
---
 .../toastergui/static/js/newcustomimage_modal.js   |  8 ++++--
 lib/toaster/toastergui/views.py                    | 33 ++++++++++++----------
 2 files changed, 24 insertions(+), 17 deletions(-)

diff --git a/lib/toaster/toastergui/static/js/newcustomimage_modal.js b/lib/toaster/toastergui/static/js/newcustomimage_modal.js
index 328997a..98e87f4 100644
--- a/lib/toaster/toastergui/static/js/newcustomimage_modal.js
+++ b/lib/toaster/toastergui/static/js/newcustomimage_modal.js
@@ -9,6 +9,8 @@ function newCustomImageModalInit(){
   var nameInput = imgCustomModal.find('input');
 
   var invalidMsg = "Image names cannot contain spaces or capital letters. The only allowed special character is dash (-).";
+  var duplicateImageMsg = "An image with this name already exists in this project.";
+  var duplicateRecipeMsg = "A non-image recipe with this name already exists.";
 
   newCustomImgBtn.click(function(e){
     e.preventDefault();
@@ -22,8 +24,10 @@ function newCustomImageModalInit(){
           console.warn(ret.error);
           if (ret.error === "invalid-name") {
             showError(invalidMsg);
-          } else if (ret.error === "already-exists") {
-            showError("An image with this name already exists. Image names must be unique.");
+          } else if (ret.error === "image-already-exists") {
+            showError(duplicateImageMsg);
+          } else if (ret.error === "recipe-already-exists") {
+            showError(duplicateRecipeMsg);
           }
         } else {
           imgCustomModal.modal('hide');
diff --git a/lib/toaster/toastergui/views.py b/lib/toaster/toastergui/views.py
index a11c9da..9744f4e 100755
--- a/lib/toaster/toastergui/views.py
+++ b/lib/toaster/toastergui/views.py
@@ -2409,21 +2409,24 @@ if True:
             if re.search(r'[^a-z|0-9|-]', request.POST["name"]):
                 return {"error": "invalid-name"}
 
-            # Are there any recipes with the name already?
-            for existing_recipe in Recipe.objects.filter(
-                name=request.POST["name"]):
-                try:
-                    ci = CustomImageRecipe.objects.get(pk=existing_recipe.pk)
-                    if ci.project == params["project"]:
-                        return {"error": "already-exists" }
-                    else:
-                        # It is a CustomImageRecipe but not in our project
-                        # this is fine so
-                        continue
-                except:
-                    # It isn't a CustomImageRecipe so is a recipe from
-                    # another source.
-                    return {"error": "already-exists" }
+            custom_images = CustomImageRecipe.objects.all()
+
+            # Are there any recipes with this name already in our project?
+            existing_image_recipes_in_project = custom_images.filter(
+                name=request.POST["name"], project=params["project"])
+
+            if existing_image_recipes_in_project.count() > 0:
+                return {"error": "image-already-exists"}
+
+            # Are there any recipes with this name which aren't custom
+            # image recipes?
+            custom_image_ids = custom_images.values_list('id', flat=True)
+            existing_non_image_recipes = Recipe.objects.filter(
+                Q(name=request.POST["name"]) & ~Q(pk__in=custom_image_ids)
+            )
+
+            if existing_non_image_recipes.count() > 0:
+                return {"error": "recipe-already-exists"}
 
             # create layer 'Custom layer' and verion if needed
             layer = Layer.objects.get_or_create(

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Openembedded-commits mailing list