summaryrefslogtreecommitdiffstats
path: root/bitbake
diff options
context:
space:
mode:
authorDavid Reyna <David.Reyna@windriver.com>2015-02-26 19:46:23 -0800
committerRichard Purdie <richard.purdie@linuxfoundation.org>2015-03-09 14:33:49 +0000
commit4f3664705cf17160f0112c9bad3e6800267fed94 (patch)
tree462b41c6ece589aaa413c7a858ad146b6e9f1105 /bitbake
parent48c48a41bfd0bcc5612350ef890b4566f577dc6f (diff)
downloadpoky-4f3664705cf17160f0112c9bad3e6800267fed94.tar.gz
bitbake: toaster: hide special code for core vars not present, disable add button
Hide the special config variable management sections when the respective variables are not present. Disable the variable add button after a variable is added so that blank values cannot be added, and also when a variable name managed in the project detail page (e.g. BBLAYERS and MACHINE) is entered. [YOCTO #7246] [YOCTO #7371] (Bitbake rev: 1f9aaa7747351f7b0063f80c56cf7fa2c9cc3cf9) Signed-off-by: David Reyna <David.Reyna@windriver.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake')
-rw-r--r--bitbake/lib/toaster/toastergui/templates/projectconf.html81
-rwxr-xr-xbitbake/lib/toaster/toastergui/views.py26
2 files changed, 92 insertions, 15 deletions
diff --git a/bitbake/lib/toaster/toastergui/templates/projectconf.html b/bitbake/lib/toaster/toastergui/templates/projectconf.html
index 774e9ea417..c994f31bbc 100644
--- a/bitbake/lib/toaster/toastergui/templates/projectconf.html
+++ b/bitbake/lib/toaster/toastergui/templates/projectconf.html
@@ -14,6 +14,7 @@
14 <div style="padding-left:19px;"> 14 <div style="padding-left:19px;">
15 15
16 <dl class="dl-vertical"> 16 <dl class="dl-vertical">
17 {% if distro_defined %}
17 <dt> 18 <dt>
18 <span class="js-config-var-name js-config-var-managed-name">DISTRO</span> 19 <span class="js-config-var-name js-config-var-managed-name">DISTRO</span>
19 <i class="icon-question-sign get-help" title="The short name of the distribution. If the variable is blank, meta/conf/distro/defaultsetup.conf will be used. <br /><a href='http://www.yoctoproject.org/docs/1.6.1/ref-manual/ref-manual.html#var-DISTRO' target='_blank'>Read more in the manual</a>"></i> 20 <i class="icon-question-sign get-help" title="The short name of the distribution. If the variable is blank, meta/conf/distro/defaultsetup.conf will be used. <br /><a href='http://www.yoctoproject.org/docs/1.6.1/ref-manual/ref-manual.html#var-DISTRO' target='_blank'>Read more in the manual</a>"></i>
@@ -32,6 +33,9 @@
32 </div> 33 </div>
33 </form> 34 </form>
34 </dd> 35 </dd>
36 {% endif %}
37
38 {% if fstypes_defined %}
35 <dt> 39 <dt>
36 <span class="js-config-var-name js-config-var-managed-name">IMAGE_FSTYPES</span> 40 <span class="js-config-var-name js-config-var-managed-name">IMAGE_FSTYPES</span>
37 <i class="icon-question-sign get-help" title="Formats of root file system images that you want to have created <br /><a href='http://www.yoctoproject.org/docs/1.6.1/ref-manual/ref-manual.html#var-IMAGE_FSTYPES' target='_blank'>Read more in the manual</a>"></i> 41 <i class="icon-question-sign get-help" title="Formats of root file system images that you want to have created <br /><a href='http://www.yoctoproject.org/docs/1.6.1/ref-manual/ref-manual.html#var-IMAGE_FSTYPES' target='_blank'>Read more in the manual</a>"></i>
@@ -47,6 +51,9 @@
47 <button id="cancel-change-image_fstypes" type="button" class="btn btn-link">Cancel</button> 51 <button id="cancel-change-image_fstypes" type="button" class="btn btn-link">Cancel</button>
48 </form> 52 </form>
49 </dd> 53 </dd>
54 {% endif %}
55
56 {% if image_install_append_defined %}
50 <dt> 57 <dt>
51 <span class="js-config-var-name js-config-var-managed-name">IMAGE_INSTALL_append</span> 58 <span class="js-config-var-name js-config-var-managed-name">IMAGE_INSTALL_append</span>
52 <i class="icon-question-sign get-help" title="Specifies additional packages to install into an image. If your build creates more than one image, the packages will be installed in <strong>all of them</strong> <br /><a href='http://www.yoctoproject.org/docs/1.6.1/ref-manual/ref-manual.html#var-IMAGE_INSTALL' target='_blank'>Read more in the manual</a>"></i> 59 <i class="icon-question-sign get-help" title="Specifies additional packages to install into an image. If your build creates more than one image, the packages will be installed in <strong>all of them</strong> <br /><a href='http://www.yoctoproject.org/docs/1.6.1/ref-manual/ref-manual.html#var-IMAGE_INSTALL' target='_blank'>Read more in the manual</a>"></i>
@@ -66,6 +73,9 @@
66 </div> 73 </div>
67 </form> 74 </form>
68 </dd> 75 </dd>
76 {% endif %}
77
78 {% if package_classes_defined %}
69 <dt> 79 <dt>
70 <span class="js-config-var-name js-config-var-managed-name">PACKAGE_CLASSES</span> 80 <span class="js-config-var-name js-config-var-managed-name">PACKAGE_CLASSES</span>
71 <i class="icon-question-sign get-help" title="Specifies the package manager to use when packaging data <br /><a href='http://www.yoctoproject.org/docs/1.6.1/ref-manual/ref-manual.html#var-PACKAGE_CLASSES' target='_blank'>Read more in the manual</a>"></i> 81 <i class="icon-question-sign get-help" title="Specifies the package manager to use when packaging data <br /><a href='http://www.yoctoproject.org/docs/1.6.1/ref-manual/ref-manual.html#var-PACKAGE_CLASSES' target='_blank'>Read more in the manual</a>"></i>
@@ -99,6 +109,9 @@
99 </div> 109 </div>
100 </form> 110 </form>
101 </dd> 111 </dd>
112 {% endif %}
113
114 {% if sdk_machine_defined %}
102 <dt> 115 <dt>
103 <span class="js-config-var-name js-config-var-managed-name">SDKMACHINE</span> 116 <span class="js-config-var-name js-config-var-managed-name">SDKMACHINE</span>
104 <i class="icon-question-sign get-help" title="Specifies the architecture (i.e. i686 or x86_64) for which to build SDK and ADT items <br /><a href='http://www.yoctoproject.org/docs/1.6.1/ref-manual/ref-manual.html#var-SDKMACHINE' target='_blank'>Read more in the manual</a>"></i> 117 <i class="icon-question-sign get-help" title="Specifies the architecture (i.e. i686 or x86_64) for which to build SDK and ADT items <br /><a href='http://www.yoctoproject.org/docs/1.6.1/ref-manual/ref-manual.html#var-SDKMACHINE' target='_blank'>Read more in the manual</a>"></i>
@@ -121,6 +134,7 @@
121 </div> 134 </div>
122 </form> 135 </form>
123 </dd> 136 </dd>
137 {% endif %}
124 138
125 </dl> 139 </dl>
126 140
@@ -137,7 +151,7 @@
137 <input type="hidden" class="js-config-blacklist-name" value="{{b}}"> 151 <input type="hidden" class="js-config-blacklist-name" value="{{b}}">
138 {% endfor %} 152 {% endfor %}
139 {% for b in vars_managed %} 153 {% for b in vars_managed %}
140 <input type="hidden" class="js-config-var-managed-name" value="{{b}}"> 154 <input type="hidden" class="js-config-managed-name" value="{{b}}">
141 {% endfor %} 155 {% endfor %}
142 156
143 <div class="row-fluid"> 157 <div class="row-fluid">
@@ -187,6 +201,9 @@
187 201
188 <script> 202 <script>
189 203
204 // global variables
205 var do_reload=false;
206
190 // validate new variable name 207 // validate new variable name
191 function validate_new_variable() { 208 function validate_new_variable() {
192 var variable = $("input#variable").val(); 209 var variable = $("input#variable").val();
@@ -210,6 +227,13 @@
210 } 227 }
211 } 228 }
212 229
230 var managed_configvars = document.getElementsByClassName('js-config-managed-name');
231 for (var i = 0, length = managed_configvars.length; i < length; i++) {
232 if (managed_configvars[i].value.toUpperCase() == variable.toUpperCase()) {
233 error_msg = "You cannot set this variable here. Please set it in the <a href=\"{% url 'project' project.id %}\">project main page</a>";
234 }
235 }
236
213 var bad_chars = /[^a-zA-Z0-9\-_]/.test(variable); 237 var bad_chars = /[^a-zA-Z0-9\-_]/.test(variable);
214 var has_spaces = (0 <= variable.indexOf(" ")); 238 var has_spaces = (0 <= variable.indexOf(" "));
215 var only_spaces = (0 < variable.length) && (0 == variable.trim().length); 239 var only_spaces = (0 < variable.length) && (0 == variable.trim().length);
@@ -223,16 +247,22 @@
223 } 247 }
224 248
225 if ("" != error_msg) { 249 if ("" != error_msg) {
226 $('#new-variable-error-message').text(error_msg); 250 $('#new-variable-error-message').html(error_msg);
227 $(".save").attr("disabled","disabled"); 251 $(".save").attr("disabled","disabled");
228 252
253 // add one (and only one) error class append
229 var d = document.getElementById("add-configvar-name-div"); 254 var d = document.getElementById("add-configvar-name-div");
230 d.className = d.className + " control-group error"; 255 d.className = d.className.replace(" error","");
256 d.className = d.className + " error";
231 257
232 return false; 258 return false;
259 } else if (0 == variable.length) {
260 $(".save").attr("disabled","disabled");
261 return false;
233 } 262 }
263
234 var d = document.getElementById("add-configvar-name-div"); 264 var d = document.getElementById("add-configvar-name-div");
235 d.className = d.className.replace(" control-group error",""); 265 d.className = d.className.replace(" error","");
236 266
237 // now set the "Save" enablement if 'value' also passes 267 // now set the "Save" enablement if 'value' also passes
238 if (value.trim().length > 0) { 268 if (value.trim().length > 0) {
@@ -264,14 +294,16 @@
264 $('#distro-error-message').text(error_msg); 294 $('#distro-error-message').text(error_msg);
265 $("#apply-change-distro").attr("disabled","disabled"); 295 $("#apply-change-distro").attr("disabled","disabled");
266 296
297 // add one (and only one) error class append
267 var d = document.getElementById("edit-distro-name-div"); 298 var d = document.getElementById("edit-distro-name-div");
268 d.className = d.className + " control-group error"; 299 d.className = d.className.replace(" error","");
300 d.className = d.className + " error";
269 301
270 return false; 302 return false;
271 } 303 }
272 304
273 var d = document.getElementById("edit-distro-name-div"); 305 var d = document.getElementById("edit-distro-name-div");
274 d.className = d.className.replace(" control-group error",""); 306 d.className = d.className.replace(" error","");
275 $("#apply-change-distro").removeAttr("disabled"); 307 $("#apply-change-distro").removeAttr("disabled");
276 return true; 308 return true;
277 } 309 }
@@ -421,7 +453,14 @@
421 alert("error on request:\n" + data.error); 453 alert("error on request:\n" + data.error);
422 return; 454 return;
423 } 455 }
424 onEditPageUpdate(data); 456
457 // delayed page reload?
458 if (do_reload) {
459 do_reload=false;
460 location.reload(true);
461 } else {
462 onEditPageUpdate(data);
463 }
425 } 464 }
426 465
427 function onEditAjaxError(jqXHR, textstatus, error) { 466 function onEditAjaxError(jqXHR, textstatus, error) {
@@ -454,6 +493,7 @@
454 // Register handlers for static elements 493 // Register handlers for static elements
455 // 494 //
456 495
496 {% if distro_defined %}
457 // change distro variable 497 // change distro variable
458 $('#change-distro-icon').click(function() { 498 $('#change-distro-icon').click(function() {
459 $('#change-distro-icon, #distro').hide(); 499 $('#change-distro-icon, #distro').hide();
@@ -468,7 +508,7 @@
468 // reset any dangling error state 508 // reset any dangling error state
469 $('#distro-error-message').text(""); 509 $('#distro-error-message').text("");
470 var d = document.getElementById("edit-distro-name-div"); 510 var d = document.getElementById("edit-distro-name-div");
471 d.className = d.className.replace(" control-group error",""); 511 d.className = d.className.replace(" error","");
472 }); 512 });
473 }); 513 });
474 514
@@ -486,11 +526,12 @@
486 $('#distro, #change-distro-icon').show(); 526 $('#distro, #change-distro-icon').show();
487 }); 527 });
488 }); 528 });
529 {% endif %}
489 530
490 // init IMAGE_FSTYPES trash icon
491 setDeleteTooltip($('#delete-image_install-icon'));
492 531
532 {% if fstypes_defined %}
493 // change IMAGE_FSTYPES variable 533 // change IMAGE_FSTYPES variable
534
494 $('#change-image_fstypes-icon').click(function() { 535 $('#change-image_fstypes-icon').click(function() {
495 $('#change-image_fstypes-icon, #image_fstypes').hide(); 536 $('#change-image_fstypes-icon, #image_fstypes').hide();
496 $("#change-image_fstypes-form").slideDown(); 537 $("#change-image_fstypes-form").slideDown();
@@ -525,7 +566,6 @@
525 $("input#filter-image_fstypes").val(""); 566 $("input#filter-image_fstypes").val("");
526 }); 567 });
527 568
528
529 $('#cancel-change-image_fstypes').click(function(){ 569 $('#cancel-change-image_fstypes').click(function(){
530 $("#change-image_fstypes-form").slideUp(function() { 570 $("#change-image_fstypes-form").slideUp(function() {
531 $('#image_fstypes, #change-image_fstypes-icon').show(); 571 $('#image_fstypes, #change-image_fstypes-icon').show();
@@ -570,8 +610,14 @@
570 $('#image_fstypes, #change-image_fstypes-icon').show(); 610 $('#image_fstypes, #change-image_fstypes-icon').show();
571 }); 611 });
572 }); 612 });
613 {% endif %}
573 614
574 615
616 {% if image_install_append_defined %}
617
618 // init IMAGE_INSTALL_append trash icon
619 setDeleteTooltip($('#delete-image_install-icon'));
620
575 // change IMAGE_INSTALL_append variable 621 // change IMAGE_INSTALL_append variable
576 $('#change-image_install-icon').click(function() { 622 $('#change-image_install-icon').click(function() {
577 // preset the edit value 623 // preset the edit value
@@ -630,8 +676,10 @@
630 $('#image_install').parent().fadeIn(1000); 676 $('#image_install').parent().fadeIn(1000);
631 }); 677 });
632 }); 678 });
679 {% endif %}
633 680
634 681
682 {% if package_classes_defined %}
635 // change PACKAGE_CLASSES variable 683 // change PACKAGE_CLASSES variable
636 $('#change-package_classes-icon').click(function() { 684 $('#change-package_classes-icon').click(function() {
637 $('#change-package_classes-icon, #package_classes').hide(); 685 $('#change-package_classes-icon, #package_classes').hide();
@@ -695,8 +743,10 @@
695 $('#package_classes, #change-package_classes-icon').show(); 743 $('#package_classes, #change-package_classes-icon').show();
696 }); 744 });
697 }); 745 });
746 {% endif %}
698 747
699 748
749 {% if sdk_machine_defined %}
700 // change SDKMACHINE variable 750 // change SDKMACHINE variable
701 $('#change-sdkmachine-icon').click(function() { 751 $('#change-sdkmachine-icon').click(function() {
702 var current_value = document.getElementById("sdkmachine").innerHTML; 752 var current_value = document.getElementById("sdkmachine").innerHTML;
@@ -734,6 +784,7 @@
734 }); 784 });
735 785
736 }); 786 });
787 {% endif %}
737 788
738 789
739 // add new variable 790 // add new variable
@@ -746,6 +797,14 @@
746 // clear the previous values 797 // clear the previous values
747 $("input#variable").val(""); 798 $("input#variable").val("");
748 $("input#value").val(""); 799 $("input#value").val("");
800 // Disable add button
801 $(".save").attr("disabled","disabled");
802
803 // Reload page if admin-removed core managed value is manually added back in
804 if (0 <= " DISTRO IMAGE_FSTYPES IMAGE_INSTALL_append PACKAGE_CLASSES SDKMACHINE ".indexOf( " "+variable+" " )) {
805 // delayed reload to avoid race condition with postEditAjaxRequest
806 do_reload=true;
807 }
749 }); 808 });
750 809
751 // validate new variable name and value 810 // validate new variable name and value
diff --git a/bitbake/lib/toaster/toastergui/views.py b/bitbake/lib/toaster/toastergui/views.py
index ed27ca0ac9..df893483c6 100755
--- a/bitbake/lib/toaster/toastergui/views.py
+++ b/bitbake/lib/toaster/toastergui/views.py
@@ -2418,11 +2418,17 @@ if toastermain.settings.MANAGED:
2418 t=request.POST['configvarDel'].strip() 2418 t=request.POST['configvarDel'].strip()
2419 pt = ProjectVariable.objects.get(pk = int(t)).delete() 2419 pt = ProjectVariable.objects.get(pk = int(t)).delete()
2420 2420
2421 # return all project settings 2421 # return all project settings, filter out blacklist and elsewhere-managed variables
2422 vars_managed,vars_fstypes,vars_blacklist = get_project_configvars_context() 2422 vars_managed,vars_fstypes,vars_blacklist = get_project_configvars_context()
2423 configvars_query = ProjectVariable.objects.filter(project_id = pid).all()
2424 for var in vars_managed:
2425 configvars_query = configvars_query.exclude(name = var)
2426 for var in vars_blacklist:
2427 configvars_query = configvars_query.exclude(name = var)
2428
2423 return_data = { 2429 return_data = {
2424 "error": "ok", 2430 "error": "ok",
2425 'configvars' : map(lambda x: (x.name, x.value, x.pk), ProjectVariable.objects.filter(project_id = pid).all()), 2431 'configvars' : map(lambda x: (x.name, x.value, x.pk), configvars_query),
2426 } 2432 }
2427 try: 2433 try:
2428 return_data['distro'] = ProjectVariable.objects.get(project = prj, name = "DISTRO").value, 2434 return_data['distro'] = ProjectVariable.objects.get(project = prj, name = "DISTRO").value,
@@ -2899,7 +2905,7 @@ if toastermain.settings.MANAGED:
2899 def get_project_configvars_context(): 2905 def get_project_configvars_context():
2900 # Vars managed outside of this view 2906 # Vars managed outside of this view
2901 vars_managed = { 2907 vars_managed = {
2902 'MACHINE' 2908 'MACHINE', 'BBLAYERS'
2903 } 2909 }
2904 2910
2905 vars_blacklist = { 2911 vars_blacklist = {
@@ -2926,9 +2932,16 @@ if toastermain.settings.MANAGED:
2926 except Project.DoesNotExist: 2932 except Project.DoesNotExist:
2927 return HttpResponseNotFound("<h1>Project id " + pid + " is unavailable</h1>") 2933 return HttpResponseNotFound("<h1>Project id " + pid + " is unavailable</h1>")
2928 2934
2935 # remove blacklist and externally managed varaibles from this list
2929 vars_managed,vars_fstypes,vars_blacklist = get_project_configvars_context() 2936 vars_managed,vars_fstypes,vars_blacklist = get_project_configvars_context()
2937 configvars = ProjectVariable.objects.filter(project_id = pid).all()
2938 for var in vars_managed:
2939 configvars = configvars.exclude(name = var)
2940 for var in vars_blacklist:
2941 configvars = configvars.exclude(name = var)
2942
2930 context = { 2943 context = {
2931 'configvars': ProjectVariable.objects.filter(project_id = pid).all(), 2944 'configvars': configvars,
2932 'vars_managed': vars_managed, 2945 'vars_managed': vars_managed,
2933 'vars_fstypes': vars_fstypes, 2946 'vars_fstypes': vars_fstypes,
2934 'vars_blacklist': vars_blacklist, 2947 'vars_blacklist': vars_blacklist,
@@ -2936,22 +2949,27 @@ if toastermain.settings.MANAGED:
2936 2949
2937 try: 2950 try:
2938 context['distro'] = ProjectVariable.objects.get(project = prj, name = "DISTRO").value 2951 context['distro'] = ProjectVariable.objects.get(project = prj, name = "DISTRO").value
2952 context['distro_defined'] = "1"
2939 except ProjectVariable.DoesNotExist: 2953 except ProjectVariable.DoesNotExist:
2940 pass 2954 pass
2941 try: 2955 try:
2942 context['fstypes'] = ProjectVariable.objects.get(project = prj, name = "IMAGE_FSTYPES").value 2956 context['fstypes'] = ProjectVariable.objects.get(project = prj, name = "IMAGE_FSTYPES").value
2957 context['fstypes_defined'] = "1"
2943 except ProjectVariable.DoesNotExist: 2958 except ProjectVariable.DoesNotExist:
2944 pass 2959 pass
2945 try: 2960 try:
2946 context['image_install_append'] = ProjectVariable.objects.get(project = prj, name = "IMAGE_INSTALL_append").value 2961 context['image_install_append'] = ProjectVariable.objects.get(project = prj, name = "IMAGE_INSTALL_append").value
2962 context['image_install_append_defined'] = "1"
2947 except ProjectVariable.DoesNotExist: 2963 except ProjectVariable.DoesNotExist:
2948 pass 2964 pass
2949 try: 2965 try:
2950 context['package_classes'] = ProjectVariable.objects.get(project = prj, name = "PACKAGE_CLASSES").value 2966 context['package_classes'] = ProjectVariable.objects.get(project = prj, name = "PACKAGE_CLASSES").value
2967 context['package_classes_defined'] = "1"
2951 except ProjectVariable.DoesNotExist: 2968 except ProjectVariable.DoesNotExist:
2952 pass 2969 pass
2953 try: 2970 try:
2954 context['sdk_machine'] = ProjectVariable.objects.get(project = prj, name = "SDKMACHINE").value 2971 context['sdk_machine'] = ProjectVariable.objects.get(project = prj, name = "SDKMACHINE").value
2972 context['sdk_machine_defined'] = "1"
2955 except ProjectVariable.DoesNotExist: 2973 except ProjectVariable.DoesNotExist:
2956 pass 2974 pass
2957 2975