From 6abcc6118d068266947d6fd5acf78f744ec02cb6 Mon Sep 17 00:00:00 2001 From: David Reyna Date: Fri, 16 Jan 2015 16:42:41 +0000 Subject: bitbake: toaster: project configuration variables page Implement the project configuration variables page. AlexD made whitespace changes and a minor fix. [YOCTO #6588] (Bitbake rev: 909fa19f20e909820aa484967b7fe2a34d89ab49) Signed-off-by: David Reyna Signed-off-by: Alexandru DAMIAN Signed-off-by: Richard Purdie --- .../toaster/toastergui/templates/projectconf.html | 649 ++++++++++++++++++++- bitbake/lib/toaster/toastergui/urls.py | 1 + bitbake/lib/toaster/toastergui/views.py | 106 +++- 3 files changed, 730 insertions(+), 26 deletions(-) (limited to 'bitbake') diff --git a/bitbake/lib/toaster/toastergui/templates/projectconf.html b/bitbake/lib/toaster/toastergui/templates/projectconf.html index e8b0c39f25..edcad1821f 100644 --- a/bitbake/lib/toaster/toastergui/templates/projectconf.html +++ b/bitbake/lib/toaster/toastergui/templates/projectconf.html @@ -3,60 +3,659 @@ {% load humanize %} {% block localbreadcrumb %} -
  • Project configuration
  • +
  • Configuration variables
  • {% endblock %} {% block projectinfomain %}
    - {% for c in configvars %}
    - {{c.name}} - + DISTRO +
    - {{c.value}} + {{distro}}
    - {% endfor %} +
    + IMAGE_FSTYPES + +
    +
    + {{fstypes}} + + +
    +
    + IMAGE_INSTALL_append + +
    +
    + {% if image_install_append %}{{image_install_append}}{%else%}Not set{%endif%} + + + +
    +
    + PACKAGE_CLASSES + +
    +
    + {{package_classes}} + + +
    +
    + SDKMACHINE + +
    +
    + {{sdk_machine}} + + +
    +
    + +
    +
    -
    + + + {% for fstype in vars_fstypes %} + + {% endfor %} + {% for b in vars_blacklist %} + + {% endfor %} + {% for b in vars_managed %} + + {% endfor %} + +
    +
    Add variable - - - - -
    - - Add variable - +
    + + + + + + +

    +

    + +
    +
    +
    +
    Some variables are reserved from Toaster
    +

    Toaster cannot set any variables that impact 1) the configuration of the build servers, + or 2) where artifacts produced by the build are stored. Such variables include:

    +

    + BB_DISKMON_DIRS + BB_NUMBER_THREADS + CVS_PROXY_HOST + CVS_PROXY_PORT + DL_DIR + PARALLEL_MAKE + SSTATE_DIR + SSTATE_MIRRORS + TMPDIR

    +

    Plus the following standard shell environment variables:

    +

    http_proxy ftp_proxy https_proxy all_proxy

    - - + +
    + {% endblock %} diff --git a/bitbake/lib/toaster/toastergui/urls.py b/bitbake/lib/toaster/toastergui/urls.py index 5c969f814c..c74c7a651b 100644 --- a/bitbake/lib/toaster/toastergui/urls.py +++ b/bitbake/lib/toaster/toastergui/urls.py @@ -91,6 +91,7 @@ urlpatterns = patterns('toastergui.views', url(r'^xhr_projectbuild/(?P\d+)/$', 'xhr_projectbuild', name='xhr_projectbuild'), url(r'^xhr_projectinfo/$', 'xhr_projectinfo', name='xhr_projectinfo'), url(r'^xhr_projectedit/(?P\d+)/$', 'xhr_projectedit', name='xhr_projectedit'), + url(r'^xhr_configvaredit/(?P\d+)/$', 'xhr_configvaredit', name='xhr_configvaredit'), url(r'^xhr_datatypeahead/$', 'xhr_datatypeahead', name='xhr_datatypeahead'), url(r'^xhr_importlayer/$', 'xhr_importlayer', name='xhr_importlayer'), diff --git a/bitbake/lib/toaster/toastergui/views.py b/bitbake/lib/toaster/toastergui/views.py index 4fae70b48b..5fcad63e45 100755 --- a/bitbake/lib/toaster/toastergui/views.py +++ b/bitbake/lib/toaster/toastergui/views.py @@ -2270,6 +2270,55 @@ if toastermain.settings.MANAGED: return HttpResponse(jsonfilter({"error":str(e) + "\n" + traceback.format_exc()}), content_type = "application/json") + def xhr_configvaredit(request, pid): + try: + prj = Project.objects.get(id = pid) + # add conf variables + if 'configvarAdd' in request.POST: + t=request.POST['configvarAdd'].strip() + if ":" in t: + variable, value = t.split(":") + else: + variable = t + value = "" + + pt, created = ProjectVariable.objects.get_or_create(project = prj, name = variable, value = value) + # change conf variables + if 'configvarChange' in request.POST: + t=request.POST['configvarChange'].strip() + if ":" in t: + variable, value = t.split(":") + else: + variable = t + value = "" + + try: + pt = ProjectVariable.objects.get(project = prj, name = variable) + pt.value=value + pt.save() + except ObjectDoesNotExist: + print("the entry doesn't exist.") + # remove conf variables + if 'configvarDel' in request.POST: + t=request.POST['configvarDel'].strip() + pt = ProjectVariable.objects.get(pk = int(t)).delete() + + # return all project settings + vars_managed,vars_fstypes,vars_blacklist = get_project_configvars_context() + return HttpResponse(json.dumps( { + "error": "ok", + 'configvars' : map(lambda x: (x.name, x.value, x.pk), ProjectVariable.objects.filter(project_id = pid).all()), + 'distro' : ProjectVariable.objects.get(project = prj, name = "DISTRO").value, + 'fstypes' : ProjectVariable.objects.get(project = prj, name = "IMAGE_FSTYPES").value, + 'image_install_append': ProjectVariable.objects.get(project = prj, name = "IMAGE_INSTALL_append").value, + 'package_classes': ProjectVariable.objects.get(project = prj, name = "PACKAGE_CLASSES").value, + 'sdk_machine' : ProjectVariable.objects.get(project = prj, name = "SDKMACHINE").value, + }), content_type = "application/json") + + except Exception as e: + return HttpResponse(json.dumps({"error":str(e) + "\n" + traceback.format_exc()}), content_type = "application/json") + + def xhr_importlayer(request): if (not request.POST.has_key('vcs_url') or not request.POST.has_key('name') or @@ -2737,11 +2786,66 @@ if toastermain.settings.MANAGED: return render(request, template, context) + + def get_project_configvars_context(): + # Vars managed outside of this view + vars_managed = { + 'MACHINE' + } + + vars_blacklist = { + 'DL_DR','PARALLEL_MAKE','BB_NUMBER_THREADS','SSTATE_DIR', + 'BB_DISKMON_DIRS','BB_NUMBER_THREADS','CVS_PROXY_HOST','CVS_PROXY_PORT', + 'DL_DIR','PARALLEL_MAKE','SSTATE_DIR','SSTATE_DIR','SSTATE_MIRRORS','TMPDIR', + 'all_proxy','ftp_proxy','http_proxy ','https_proxy' + } + + vars_fstypes = { + 'btrfs','cpio','cpio.gz','cpio.lz4','cpio.lzma','cpio.xz','cramfs', + 'elf','ext2','ext2.bz2','ext2.gz','ext2.lzma' 'ext3','ext3.gz','hddimg', + 'iso','jffs2','jffs2.sum','squashfs','squashfs-lzo','squashfs-xz','tar.bz2', + 'tar.lz4','tar.xz','tartar.gz','ubi','ubifs','vmdk' + } + + return(vars_managed,sorted(vars_fstypes),vars_blacklist) + def projectconf(request, pid): template = "projectconf.html" + + try: + prj = Project.objects.get(id = pid) + except Project.DoesNotExist: + return HttpResponseNotFound("

    Project id " + pid + " is unavailable

    ") + + vars_managed,vars_fstypes,vars_blacklist = get_project_configvars_context() context = { - 'configvars': ProjectVariable.objects.filter(project_id = pid), + 'configvars': ProjectVariable.objects.filter(project_id = pid).all(), + 'vars_managed': vars_managed, + 'vars_fstypes': vars_fstypes, + 'vars_blacklist': vars_blacklist, } + + try: + context['distro'] = ProjectVariable.objects.get(project = prj, name = "DISTRO").value + except ProjectVariable.DoesNotExist: + pass + try: + context['fstypes'] = ProjectVariable.objects.get(project = prj, name = "IMAGE_FSTYPES").value + except ProjectVariable.DoesNotExist: + pass + try: + context['image_install_append'] = ProjectVariable.objects.get(project = prj, name = "IMAGE_INSTALL_append").value + except ProjectVariable.DoesNotExist: + pass + try: + context['package_classes'] = ProjectVariable.objects.get(project = prj, name = "PACKAGE_CLASSES").value + except ProjectVariable.DoesNotExist: + pass + try: + context['sdk_machine'] = ProjectVariable.objects.get(project = prj, name = "SDKMACHINE").value + except ProjectVariable.DoesNotExist: + pass + return render(request, template, context) def projectbuilds(request, pid): -- cgit v1.2.3-54-g00ecf