bitbake: toaster: custom image enable layer add, protect pre-cloned layers

When creating custom image recipes, the layer add for new layers
needs missing xhrLayerUrl data. Also, code is needed to check
and inform user if the newly added layer has not been cloned yet,
and provide helpful error message instead of the current frozen
dialog.

[YOCTO #12887]

(Bitbake rev: b310031972a53d0881a87a627f07bdcf7d9c6b79)

Signed-off-by: David Reyna <David.Reyna@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
David Reyna
2018-10-03 23:10:51 -07:00
committed by Richard Purdie
parent f0cf4b0972
commit fa8ade3695
5 changed files with 23 additions and 5 deletions

View File

@@ -1750,8 +1750,8 @@ class CustomImageRecipe(Recipe):
if base_recipe_path:
base_recipe = open(base_recipe_path, 'r').read()
else:
raise IOError("Based on recipe file not found: %s" %
base_recipe_path)
# Pass back None to trigger error message to user
return None
# Add a special case for when the recipe we have based a custom image
# recipe on requires another recipe.

View File

@@ -677,7 +677,13 @@ class XhrCustomRecipe(View):
recipe_path = os.path.join(layerpath, "recipes", "%s.bb" %
recipe.name)
with open(recipe_path, "w") as recipef:
recipef.write(recipe.generate_recipe_file_contents())
content = recipe.generate_recipe_file_contents()
if not content:
# Delete this incomplete image recipe object
recipe.delete()
return error_response("recipe-parent-not-exist")
else:
recipef.write(recipe.generate_recipe_file_contents())
return JsonResponse(
{"error": "ok",

View File

@@ -275,7 +275,8 @@ var libtoaster = (function () {
function _addRmLayer(layerObj, add, doneCb){
if (layerObj.xhrLayerUrl === undefined){
throw("xhrLayerUrl is undefined")
alert("ERROR: missing xhrLayerUrl object. Please file a bug.");
return;
}
if (add === true) {

View File

@@ -25,6 +25,8 @@ function newCustomImageModalInit(){
var duplicateNameMsg = "An image with this name already exists. Image names must be unique.";
var duplicateImageInProjectMsg = "An image with this name already exists in this project."
var invalidBaseRecipeIdMsg = "Please select an image to customise.";
var missingParentRecipe = "The parent recipe file was not found. Cancel this action, build any target (like 'quilt-native') to force all new layers to clone, and try again";
var unknownError = "Unexpected error: ";
// set button to "submit" state and enable text entry so user can
// enter the custom recipe name
@@ -62,6 +64,7 @@ function newCustomImageModalInit(){
if (nameInput.val().length > 0) {
libtoaster.createCustomRecipe(nameInput.val(), baseRecipeId,
function(ret) {
showSubmitState();
if (ret.error !== "ok") {
console.warn(ret.error);
if (ret.error === "invalid-name") {
@@ -73,6 +76,10 @@ function newCustomImageModalInit(){
} else if (ret.error === "image-already-exists") {
showNameError(duplicateImageInProjectMsg);
return;
} else if (ret.error === "recipe-parent-not-exist") {
showNameError(missingParentRecipe);
} else {
showNameError(unknownError + ret.error);
}
} else {
imgCustomModal.modal('hide');

View File

@@ -5,7 +5,11 @@
>
Customise
</button>
<button class="btn btn-default btn-block layer-add-{{data.layer_version.pk}} layerbtn" data-layer='{ "id": {{data.layer_version.pk}}, "name": "{{data.layer_version.layer.name}}", "layerdetailurl": "{%url 'layerdetails' extra.pid data.layer_version.pk%}"}' data-directive="add"
<button class="btn btn-default btn-block layer-add-{{data.layer_version.pk}} layerbtn"
data-layer='{ "id": {{data.layer_version.pk}}, "name": "{{data.layer_version.layer.name}}",
"layerdetailurl": "{%url 'layerdetails' extra.pid data.layer_version.pk%}",
"xhrLayerUrl": "{% url "xhr_layer" extra.pid data.layer_version.pk %}"}'
data-directive="add"
{% if data.layer_version.pk in extra.current_layers %}
style="display:none;"
{% endif %}