[Toaster] [PATCH 04/11] toaster: libtoaster Update implementation of startABuild and cancelABuild

Smith, Elliot elliot.smith at intel.com
Fri Feb 26 03:55:16 PST 2016


I spotted an issue, inline below.

On 25 February 2016 at 18:21, Michael Wood <michael.g.wood at intel.com> wrote:

> Update the implementation of startABuild and cancelAbuild to reflect
> changes to the backend api. We now have a dedicated endpoint to make
> calls into so add this url to libtoaster.ctx and allow passing null in
> as a url value to indicate that we want to use the current project
>
> Also:
>  - Fix some documentation comments
>  - Add the convenience of passing in an array of targets to startABuild
>
> Signed-off-by: Michael Wood <michael.g.wood at intel.com>
> ---
>  .../toaster/toastergui/static/js/customrecipe.js   |  4 +--
>  .../lib/toaster/toastergui/static/js/layerBtn.js   |  3 +-
>  .../lib/toaster/toastergui/static/js/libtoaster.js | 41
> ++++++++++++++--------
>  .../toaster/toastergui/static/js/projectpage.js    |  4 +--
>  .../toaster/toastergui/static/js/projecttopbar.js  |  6 ++--
>  .../toaster/toastergui/static/js/recipedetails.js  |  4 +--
>  bitbake/lib/toaster/toastergui/templates/base.html |  1 +
>  7 files changed, 34 insertions(+), 29 deletions(-)
>
> diff --git a/bitbake/lib/toaster/toastergui/static/js/customrecipe.js
> b/bitbake/lib/toaster/toastergui/static/js/customrecipe.js
> index 3c57899..131ac2a 100644
> --- a/bitbake/lib/toaster/toastergui/static/js/customrecipe.js
> +++ b/bitbake/lib/toaster/toastergui/static/js/customrecipe.js
> @@ -207,9 +207,7 @@ function customRecipePageInit(ctx) {
>
>    /* Trigger a build of your custom image */
>    $(".build-custom-image").click(function(){
> -    libtoaster.startABuild(libtoaster.ctx.projectBuildsUrl,
> -      libtoaster.ctx.projectId,
> -      ctx.recipe.name,
> +    libtoaster.startABuild(null, ctx.recipe.name,
>        function(){
>          window.location.replace(libtoaster.ctx.projectBuildsUrl);
>      });
> diff --git a/bitbake/lib/toaster/toastergui/static/js/layerBtn.js
> b/bitbake/lib/toaster/toastergui/static/js/layerBtn.js
> index b2666ab..aa43284 100644
> --- a/bitbake/lib/toaster/toastergui/static/js/layerBtn.js
> +++ b/bitbake/lib/toaster/toastergui/static/js/layerBtn.js
> @@ -60,8 +60,7 @@ function layerBtnsInit() {
>      e.preventDefault();
>      var recipe = $(this).data('recipe-name');
>
> -    libtoaster.startABuild(libtoaster.ctx.projectBuildsUrl,
> -      libtoaster.ctx.projectId, recipe,
> +    libtoaster.startABuild(null, recipe,
>        function(){
>          /* Success */
>          window.location.replace(libtoaster.ctx.projectBuildsUrl);
> diff --git a/bitbake/lib/toaster/toastergui/static/js/libtoaster.js
> b/bitbake/lib/toaster/toastergui/static/js/libtoaster.js
> index b6b49b6..8d1d20f 100644
> --- a/bitbake/lib/toaster/toastergui/static/js/libtoaster.js
> +++ b/bitbake/lib/toaster/toastergui/static/js/libtoaster.js
> @@ -90,27 +90,35 @@ var libtoaster = (function (){
>      jQElement.data('typeahead').render = customRenderFunc;
>    }
>
> -  /*
> -   * url - the url of the xhr build */
> -  function _startABuild (url, project_id, targets, onsuccess, onfail) {
> +  /* startABuild:
> +   * url: xhr_buildrequest or null for current project
> +   * targets: an array or space separated list of targets to build
> +   * onsuccess: callback for successful execution
> +   * onfail: callback for failed execution
> +   */
> +  function _startABuild (url, targets, onsuccess, onfail) {
>
> -    var data = {
> -      project_id : project_id,
> -      targets : targets,
> +    if (!url)
> +      url = libtoaster.ctx.xhrBuildRequestUrl;
> +
> +    /* Flatten the array of targets into a space spearated list */
> +    if (targets instanceof Array){
> +      targets = targets.reduce(function(prevV, nextV){
> +        return prev + ' ' + next;
> +      });
>      }
>
>      $.ajax( {
>          type: "POST",
>          url: url,
> -        data: data,
> +        data: { 'targets' : targets },
>          headers: { 'X-CSRFToken' : $.cookie('csrftoken')},
>          success: function (_data) {
> -          /* No proper reponse YOCTO #7995
>            if (_data.error !== "ok") {
>              console.warn(_data.error);
> -          } else { */
> +          } else {
>              if (onsuccess !== undefined) onsuccess(_data);
> -        //  }
> +          }
>          },
>          error: function (_data) {
>

The error function has an argument _data, but in the body of that function
you have:

error: function (_data) {
          console.warn("Call failed");
          console.warn(_data);
          if (onfail) onfail(data); <- reference to data, not _data

When a failure does occur (as it did for me), onfail() doesn't execute
(because of a ReferenceError to data), so the page hangs.


>            console.warn("Call failed");
> @@ -120,22 +128,25 @@ var libtoaster = (function (){
>    }
>
>    /* cancelABuild:
> -   * url: projectbuilds
> -   * builds_ids: space separated list of build request ids
> +   * url: xhr_buildrequest url or null for current project
> +   * buildRequestIds: space separated list of build request ids
>     * onsuccess: callback for successful execution
>     * onfail: callback for failed execution
>     */
> -  function _cancelABuild(url, build_ids, onsuccess, onfail){
> +  function _cancelABuild(url, buildRequestIds, onsuccess, onfail){
> +    if (!url)
> +      url = libtoaster.ctx.xhrBuildRequestUrl;
> +
>      $.ajax( {
>          type: "POST",
>          url: url,
> -        data: { 'buildCancel': build_ids },
> +        data: { 'buildCancel': buildRequestIds },
>          headers: { 'X-CSRFToken' : $.cookie('csrftoken')},
>          success: function (_data) {
>            if (_data.error !== "ok") {
>              console.warn(_data.error);
>            } else {
> -            if (onsuccess !== undefined) onsuccess(_data);
> +            if (onsuccess) onsuccess(_data);
>            }
>          },
>          error: function (_data) {
> diff --git a/bitbake/lib/toaster/toastergui/static/js/projectpage.js
> b/bitbake/lib/toaster/toastergui/static/js/projectpage.js
> index 292ceb7..78a9506 100644
> --- a/bitbake/lib/toaster/toastergui/static/js/projectpage.js
> +++ b/bitbake/lib/toaster/toastergui/static/js/projectpage.js
> @@ -232,9 +232,7 @@ function projectPageInit(ctx) {
>
>      toBuild = toBuild.trim();
>
> -    libtoaster.startABuild(libtoaster.ctx.projectBuildsUrl,
> -      libtoaster.ctx.projectId,
> -      toBuild,
> +    libtoaster.startABuild(null, toBuild,
>        function(){
>          /* Build request started */
>          window.location.replace(libtoaster.ctx.projectBuildsUrl);
> diff --git a/bitbake/lib/toaster/toastergui/static/js/projecttopbar.js
> b/bitbake/lib/toaster/toastergui/static/js/projecttopbar.js
> index 58a32a0..b09f974 100644
> --- a/bitbake/lib/toaster/toastergui/static/js/projecttopbar.js
> +++ b/bitbake/lib/toaster/toastergui/static/js/projecttopbar.js
> @@ -82,9 +82,9 @@ function projectTopBarInit(ctx) {
>      selectedTarget = { name: newBuildTargetInput.val() };
>
>      /* Fire off the build */
> -    libtoaster.startABuild(libtoaster.ctx.projectBuildsUrl,
> -      null, selectedTarget.name, function(){
> -      window.location.replace(libtoaster.ctx.projectBuildsUrl);
> +    libtoaster.startABuild(null, selectedTarget.name,
> +      function(){
> +        window.location.replace(libtoaster.ctx.projectBuildsUrl);
>      }, null);
>    });
>  }
> diff --git a/bitbake/lib/toaster/toastergui/static/js/recipedetails.js
> b/bitbake/lib/toaster/toastergui/static/js/recipedetails.js
> index 2bfd0a4..d5f9eac 100644
> --- a/bitbake/lib/toaster/toastergui/static/js/recipedetails.js
> +++ b/bitbake/lib/toaster/toastergui/static/js/recipedetails.js
> @@ -42,9 +42,7 @@ function recipeDetailsPageInit(ctx){
>
>    /* Trigger a build of your custom image */
>    $(".build-recipe-btn").click(function(){
> -    libtoaster.startABuild(libtoaster.ctx.projectBuildsUrl,
> -      libtoaster.ctx.projectId,
> -      ctx.recipe.name,
> +    libtoaster.startABuild(null, ctx.recipe.name,
>        function(){
>          window.location.replace(libtoaster.ctx.projectBuildsUrl);
>      });
> diff --git a/bitbake/lib/toaster/toastergui/templates/base.html
> b/bitbake/lib/toaster/toastergui/templates/base.html
> index 6994bcc..ed15c59 100644
> --- a/bitbake/lib/toaster/toastergui/templates/base.html
> +++ b/bitbake/lib/toaster/toastergui/templates/base.html
> @@ -47,6 +47,7 @@
>          projectBuildsUrl: {% url 'projectbuilds' project.id as pburl
> %}{{pburl|json}},
>          xhrCustomRecipeUrl : "{% url 'xhr_customrecipe' %}",
>          projectId : {{project.id}},
> +        xhrBuildRequestUrl: "{% url 'xhr_buildrequest' project.id %}",
>          {% else %}
>          projectId : undefined,
>          projectPageUrl : undefined,
> --
> 2.1.4
>
> --
> _______________________________________________
> toaster mailing list
> toaster at yoctoproject.org
> https://lists.yoctoproject.org/listinfo/toaster
>



-- 
Elliot Smith
Software Engineer
Intel Open Source Technology Centre
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.yoctoproject.org/pipermail/toaster/attachments/20160226/bf1cfe68/attachment.html>


More information about the toaster mailing list