diff options
author | Elliot Smith <elliot.smith@intel.com> | 2016-04-19 17:28:41 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2016-04-19 21:11:25 +0100 |
commit | cfc22d3a9e2434fb5b9001850c19617dda6d57aa (patch) | |
tree | c90c1e55c48bf901288b2d22993e27c92fde0df6 | |
parent | 3036413000786499d38026ae0c16b916a10b7c65 (diff) | |
download | poky-cfc22d3a9e2434fb5b9001850c19617dda6d57aa.tar.gz |
bitbake: 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]
(Bitbake rev: 9abbb46e799c06757e03addd54e3f5d3c0fe2886)
Signed-off-by: Elliot Smith <elliot.smith@intel.com>
Signed-off-by: Michael Wood <michael.g.wood@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r-- | bitbake/lib/toaster/toastergui/static/js/newcustomimage_modal.js | 8 | ||||
-rwxr-xr-x | bitbake/lib/toaster/toastergui/views.py | 33 |
2 files changed, 24 insertions, 17 deletions
diff --git a/bitbake/lib/toaster/toastergui/static/js/newcustomimage_modal.js b/bitbake/lib/toaster/toastergui/static/js/newcustomimage_modal.js index 328997af3b..98e87f4a6b 100644 --- a/bitbake/lib/toaster/toastergui/static/js/newcustomimage_modal.js +++ b/bitbake/lib/toaster/toastergui/static/js/newcustomimage_modal.js | |||
@@ -9,6 +9,8 @@ function newCustomImageModalInit(){ | |||
9 | var nameInput = imgCustomModal.find('input'); | 9 | var nameInput = imgCustomModal.find('input'); |
10 | 10 | ||
11 | var invalidMsg = "Image names cannot contain spaces or capital letters. The only allowed special character is dash (-)."; | 11 | var invalidMsg = "Image names cannot contain spaces or capital letters. The only allowed special character is dash (-)."; |
12 | var duplicateImageMsg = "An image with this name already exists in this project."; | ||
13 | var duplicateRecipeMsg = "A non-image recipe with this name already exists."; | ||
12 | 14 | ||
13 | newCustomImgBtn.click(function(e){ | 15 | newCustomImgBtn.click(function(e){ |
14 | e.preventDefault(); | 16 | e.preventDefault(); |
@@ -22,8 +24,10 @@ function newCustomImageModalInit(){ | |||
22 | console.warn(ret.error); | 24 | console.warn(ret.error); |
23 | if (ret.error === "invalid-name") { | 25 | if (ret.error === "invalid-name") { |
24 | showError(invalidMsg); | 26 | showError(invalidMsg); |
25 | } else if (ret.error === "already-exists") { | 27 | } else if (ret.error === "image-already-exists") { |
26 | showError("An image with this name already exists. Image names must be unique."); | 28 | showError(duplicateImageMsg); |
29 | } else if (ret.error === "recipe-already-exists") { | ||
30 | showError(duplicateRecipeMsg); | ||
27 | } | 31 | } |
28 | } else { | 32 | } else { |
29 | imgCustomModal.modal('hide'); | 33 | imgCustomModal.modal('hide'); |
diff --git a/bitbake/lib/toaster/toastergui/views.py b/bitbake/lib/toaster/toastergui/views.py index a11c9da5f5..9744f4efaf 100755 --- a/bitbake/lib/toaster/toastergui/views.py +++ b/bitbake/lib/toaster/toastergui/views.py | |||
@@ -2409,21 +2409,24 @@ if True: | |||
2409 | if re.search(r'[^a-z|0-9|-]', request.POST["name"]): | 2409 | if re.search(r'[^a-z|0-9|-]', request.POST["name"]): |
2410 | return {"error": "invalid-name"} | 2410 | return {"error": "invalid-name"} |
2411 | 2411 | ||
2412 | # Are there any recipes with the name already? | 2412 | custom_images = CustomImageRecipe.objects.all() |
2413 | for existing_recipe in Recipe.objects.filter( | 2413 | |
2414 | name=request.POST["name"]): | 2414 | # Are there any recipes with this name already in our project? |
2415 | try: | 2415 | existing_image_recipes_in_project = custom_images.filter( |
2416 | ci = CustomImageRecipe.objects.get(pk=existing_recipe.pk) | 2416 | name=request.POST["name"], project=params["project"]) |
2417 | if ci.project == params["project"]: | 2417 | |
2418 | return {"error": "already-exists" } | 2418 | if existing_image_recipes_in_project.count() > 0: |
2419 | else: | 2419 | return {"error": "image-already-exists"} |
2420 | # It is a CustomImageRecipe but not in our project | 2420 | |
2421 | # this is fine so | 2421 | # Are there any recipes with this name which aren't custom |
2422 | continue | 2422 | # image recipes? |
2423 | except: | 2423 | custom_image_ids = custom_images.values_list('id', flat=True) |
2424 | # It isn't a CustomImageRecipe so is a recipe from | 2424 | existing_non_image_recipes = Recipe.objects.filter( |
2425 | # another source. | 2425 | Q(name=request.POST["name"]) & ~Q(pk__in=custom_image_ids) |
2426 | return {"error": "already-exists" } | 2426 | ) |
2427 | |||
2428 | if existing_non_image_recipes.count() > 0: | ||
2429 | return {"error": "recipe-already-exists"} | ||
2427 | 2430 | ||
2428 | # create layer 'Custom layer' and verion if needed | 2431 | # create layer 'Custom layer' and verion if needed |
2429 | layer = Layer.objects.get_or_create( | 2432 | layer = Layer.objects.get_or_create( |