)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11778,"name":"Diana Whitten","email":"hurgleburgler@gmail.com","username":"hurgleburgler"},"change_message_id":"7ab93f10de65ea6f6745044d244297a7087fec28","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Sam Betts \u003csam@code-smash.net\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-12-09 16:38:14 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Use JQuery promise/deferred objects to track AJAX"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The JQuery library offers objects known as deferred for tracking"},{"line_number":10,"context_line":"multiple call backs, this can be used with AJAX to track cases when we"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"5a710552_04eba3b1","line":7,"updated":"2015-12-15 19:25:14.000000000","message":"JQuery --\u003e jQuery","commit_id":"574228c1ba2e7649ae1a1180b15bdef7ae5bda5c"},{"author":{"_account_id":11778,"name":"Diana Whitten","email":"hurgleburgler@gmail.com","username":"hurgleburgler"},"change_message_id":"7ab93f10de65ea6f6745044d244297a7087fec28","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Use JQuery promise/deferred objects to track AJAX"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The JQuery library offers objects known as deferred for tracking"},{"line_number":10,"context_line":"multiple call backs, this can be used with AJAX to track cases when we"},{"line_number":11,"context_line":"only want to do something once multiple requests are complete such as"},{"line_number":12,"context_line":"re-calling the datatables update method."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"5a710552_e4e777e2","line":9,"updated":"2015-12-15 19:25:14.000000000","message":"JQuery --\u003e jQuery","commit_id":"574228c1ba2e7649ae1a1180b15bdef7ae5bda5c"}],"horizon/static/horizon/js/horizon.communication.js":[{"author":{"_account_id":8040,"name":"Timur Sufiev","email":"tsufiev@gmail.com","username":"tsufiev"},"change_message_id":"4bc26be3ba96e9e0ee48049416b4c669378562a4","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        if (index \u003e -1) {"},{"line_number":32,"context_line":"          active.splice(index, 1);"},{"line_number":33,"context_line":"        }"},{"line_number":34,"context_line":"        item.deferred.resolve();"},{"line_number":35,"context_line":"        horizon.ajax.next();"},{"line_number":36,"context_line":"      };"},{"line_number":37,"context_line":"    }"}],"source_content_type":"text/javascript","patch_set":1,"id":"9aa53dc9_1a016d05","line":34,"updated":"2015-04-09 20:14:45.000000000","message":"Shouldn\u0027t we pass \u0027res\u0027 to resolve()?","commit_id":"0545faa721d170d91383ce57de09e64dfb089fd2"},{"author":{"_account_id":8040,"name":"Timur Sufiev","email":"tsufiev@gmail.com","username":"tsufiev"},"change_message_id":"4bc26be3ba96e9e0ee48049416b4c669378562a4","unresolved":false,"context_lines":[{"line_number":44,"context_line":"      // Add a done callback that resolves the deferred and continues the"},{"line_number":45,"context_line":"      // queue processing by calling horizon.ajax.next"},{"line_number":46,"context_line":"      request.done(done_callback(request, item));"},{"line_number":47,"context_line":"    }"},{"line_number":48,"context_line":"  }"},{"line_number":49,"context_line":"};"}],"source_content_type":"text/javascript","patch_set":1,"id":"9aa53dc9_3ae2f12f","line":47,"updated":"2015-04-09 20:14:45.000000000","message":"What do you think of further customizing it and implementing reject callback on .fail() as well? Possible use-case: loss of connectivity with server and first failure means it useless to send queries for other table\u0027s rows.","commit_id":"0545faa721d170d91383ce57de09e64dfb089fd2"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"16207a959958134d809726e84839661aac657eac","unresolved":false,"context_lines":[{"line_number":44,"context_line":"      // Add a done callback that resolves the deferred and continues the"},{"line_number":45,"context_line":"      // queue processing by calling horizon.ajax.next"},{"line_number":46,"context_line":"      request.done(done_callback(request, item));"},{"line_number":47,"context_line":"    }"},{"line_number":48,"context_line":"  }"},{"line_number":49,"context_line":"};"}],"source_content_type":"text/javascript","patch_set":1,"id":"9aa53dc9_c9cc526c","line":47,"in_reply_to":"9aa53dc9_3ae2f12f","updated":"2015-04-28 12:11:09.000000000","message":"I agree with expanding this to cover all the deferred cases, that will make this much more useful. Done.","commit_id":"0545faa721d170d91383ce57de09e64dfb089fd2"},{"author":{"_account_id":8040,"name":"Timur Sufiev","email":"tsufiev@gmail.com","username":"tsufiev"},"change_message_id":"16745f63a5b919a483f85b13b8f64d12baf2edd2","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    function process_queue(request) {"},{"line_number":28,"context_line":"      return function() {"},{"line_number":29,"context_line":"        // TODO(sambetts) Add some processing for error cases"},{"line_number":30,"context_line":"        // such as unauthorised etc."},{"line_number":31,"context_line":"        var active \u003d horizon.ajax._active;"},{"line_number":32,"context_line":"        var index \u003d $.inArray(request, active);"},{"line_number":33,"context_line":"        if (index \u003e -1) {"}],"source_content_type":"text/javascript","patch_set":6,"id":"9a8ffd7b_8671c0e2","line":30,"updated":"2015-11-25 18:54:55.000000000","message":"I think we also should somehow catch 404 error message that otherwise goes to JS console - and makes developers feel that something is wrong, while in reality that an expected situation (e.g., when Terminating Instances).","commit_id":"1045ec6892fe46a60067e0535c2d6fa939ce6309"},{"author":{"_account_id":8040,"name":"Timur Sufiev","email":"tsufiev@gmail.com","username":"tsufiev"},"change_message_id":"bd8d198b70a74c144a23de5d24ed5850320ec25a","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    function process_queue(request) {"},{"line_number":28,"context_line":"      return function() {"},{"line_number":29,"context_line":"        // TODO(sambetts) Add some processing for error cases"},{"line_number":30,"context_line":"        // such as unauthorised etc."},{"line_number":31,"context_line":"        var active \u003d horizon.ajax._active;"},{"line_number":32,"context_line":"        var index \u003d $.inArray(request, active);"},{"line_number":33,"context_line":"        if (index \u003e -1) {"}],"source_content_type":"text/javascript","patch_set":6,"id":"7a740942_69babe0c","line":30,"in_reply_to":"7a740942_8ec0507e","updated":"2015-12-09 14:50:45.000000000","message":"I\u0027ve googled a bit recently about similar issue, seems there is no way to prevent $.ajax error messages from appearing in browser console. So please ignore my previous question.","commit_id":"1045ec6892fe46a60067e0535c2d6fa939ce6309"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"ab6ba6e99f38717e6c5a69652fb7da8068e1d182","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    function process_queue(request) {"},{"line_number":28,"context_line":"      return function() {"},{"line_number":29,"context_line":"        // TODO(sambetts) Add some processing for error cases"},{"line_number":30,"context_line":"        // such as unauthorised etc."},{"line_number":31,"context_line":"        var active \u003d horizon.ajax._active;"},{"line_number":32,"context_line":"        var index \u003d $.inArray(request, active);"},{"line_number":33,"context_line":"        if (index \u003e -1) {"}],"source_content_type":"text/javascript","patch_set":6,"id":"7a740942_8ec0507e","line":30,"in_reply_to":"9a8ffd7b_8671c0e2","updated":"2015-12-09 14:23:15.000000000","message":"Most of the error handling (404s explicitly) happens in the error: {} function which is part of the ajax request being made from horizon.tables.js, Its been a while since I\u0027ve worked on horizon so I\u0027m not sure of all the error cases which may or may not propagate up through these functions.","commit_id":"1045ec6892fe46a60067e0535c2d6fa939ce6309"},{"author":{"_account_id":8040,"name":"Timur Sufiev","email":"tsufiev@gmail.com","username":"tsufiev"},"change_message_id":"16745f63a5b919a483f85b13b8f64d12baf2edd2","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    }"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    if (queue.length \u0026\u0026 (!limit || horizon.ajax._active.length \u003c limit)) {"},{"line_number":41,"context_line":"      var item \u003d queue.pop();"},{"line_number":42,"context_line":"      var request \u003d $.ajax(item.opts);"},{"line_number":43,"context_line":"      horizon.ajax._active.push(request);"},{"line_number":44,"context_line":""}],"source_content_type":"text/javascript","patch_set":6,"id":"9a8ffd7b_fe59768f","line":41,"updated":"2015-11-25 18:54:55.000000000","message":"I\u0027ve just realized that this queue is not a queue (FIFO), but a stack (LIFO)!\n\nYou can check this in browser console:\n\n arr \u003d []\n  []\n  arr.push(1)\n  1\n  arr.push(2)\n  2\n  arr\n  [1, 2]\n  arr.pop()\n  2\n\nSee http://stackoverflow.com/questions/1590247/how-do-you-implement-a-stack-and-a-queue-in-javascript\n\nI would consider using .shift() instead of .pop()","commit_id":"1045ec6892fe46a60067e0535c2d6fa939ce6309"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"ab6ba6e99f38717e6c5a69652fb7da8068e1d182","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    }"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    if (queue.length \u0026\u0026 (!limit || horizon.ajax._active.length \u003c limit)) {"},{"line_number":41,"context_line":"      var item \u003d queue.pop();"},{"line_number":42,"context_line":"      var request \u003d $.ajax(item.opts);"},{"line_number":43,"context_line":"      horizon.ajax._active.push(request);"},{"line_number":44,"context_line":""}],"source_content_type":"text/javascript","patch_set":6,"id":"7a740942_43548420","line":41,"in_reply_to":"9a8ffd7b_fe59768f","updated":"2015-12-09 14:23:15.000000000","message":"Done","commit_id":"1045ec6892fe46a60067e0535c2d6fa939ce6309"},{"author":{"_account_id":8040,"name":"Timur Sufiev","email":"tsufiev@gmail.com","username":"tsufiev"},"change_message_id":"16745f63a5b919a483f85b13b8f64d12baf2edd2","unresolved":false,"context_lines":[{"line_number":46,"context_line":"      // as well as success and fail callbacks that resolved/rejects"},{"line_number":47,"context_line":"      // the deferred."},{"line_number":48,"context_line":"      request.always(process_queue(request));"},{"line_number":49,"context_line":"      request.then(item.deferred.resolve, item.deferred.reject);"},{"line_number":50,"context_line":"    }"},{"line_number":51,"context_line":"  }"},{"line_number":52,"context_line":"};"}],"source_content_type":"text/javascript","patch_set":6,"id":"9a8ffd7b_865ea074","line":49,"updated":"2015-11-25 18:54:55.000000000","message":"Well, I feel a bit embarrassed, because now I\u0027m going to say a thing contradictory to my own comment from patchset#1.\n\nIt seems to me that additional Deferred() object here is excessive, since we have no way (AFAIU) of injecting any additional handlers to it from client code (which is in that case horizon.tables.js). In other words, we can\u0027t we use the same request object (which is a promise according to $.ajax docs) in horizon.tables.js at line where $.when() is called? Perhaps I\u0027m missing something, but as of now this additional Deferred() proxy seems of no use to me.","commit_id":"1045ec6892fe46a60067e0535c2d6fa939ce6309"},{"author":{"_account_id":8040,"name":"Timur Sufiev","email":"tsufiev@gmail.com","username":"tsufiev"},"change_message_id":"bd8d198b70a74c144a23de5d24ed5850320ec25a","unresolved":false,"context_lines":[{"line_number":46,"context_line":"      // as well as success and fail callbacks that resolved/rejects"},{"line_number":47,"context_line":"      // the deferred."},{"line_number":48,"context_line":"      request.always(process_queue(request));"},{"line_number":49,"context_line":"      request.then(item.deferred.resolve, item.deferred.reject);"},{"line_number":50,"context_line":"    }"},{"line_number":51,"context_line":"  }"},{"line_number":52,"context_line":"};"}],"source_content_type":"text/javascript","patch_set":6,"id":"7a740942_492ee2a6","line":49,"in_reply_to":"7a740942_8b08422f","updated":"2015-12-09 14:50:45.000000000","message":"If we add .done()/.fail() handlers to $.when in horizon.tables.js, they will get the data passed from $.ajax through Deferred callbacks w/o any changes. This AFAIU means that we don\u0027t use Deferred callbacks at all, making it almost useless.\n\nAnyways, I don\u0027t want to block on this, because the patch solves the problem it aims to solve.","commit_id":"1045ec6892fe46a60067e0535c2d6fa939ce6309"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"ab6ba6e99f38717e6c5a69652fb7da8068e1d182","unresolved":false,"context_lines":[{"line_number":46,"context_line":"      // as well as success and fail callbacks that resolved/rejects"},{"line_number":47,"context_line":"      // the deferred."},{"line_number":48,"context_line":"      request.always(process_queue(request));"},{"line_number":49,"context_line":"      request.then(item.deferred.resolve, item.deferred.reject);"},{"line_number":50,"context_line":"    }"},{"line_number":51,"context_line":"  }"},{"line_number":52,"context_line":"};"}],"source_content_type":"text/javascript","patch_set":6,"id":"7a740942_8b08422f","line":49,"in_reply_to":"9a8ffd7b_865ea074","updated":"2015-12-09 14:23:15.000000000","message":"Its been a long time since I worked on this but I believe the advantage of doing it this way is that if we needed to we could add then() and done() or fail() cases to the $.when in horizon.tables.js and they would be called correctly based on the success or failure of the requests being made. I believe the ajax deferred object created by $.ajax(item.opts) when resolved or rejected is passed the response object, and that will be passed through to the deferred.resolve and reject functions which is then means that the then and fail functions in horizon.tables.js would also get them for further processing.","commit_id":"1045ec6892fe46a60067e0535c2d6fa939ce6309"}],"horizon/static/horizon/js/horizon.tables.js":[{"author":{"_account_id":8040,"name":"Timur Sufiev","email":"tsufiev@gmail.com","username":"tsufiev"},"change_message_id":"4bc26be3ba96e9e0ee48049416b4c669378562a4","unresolved":false,"context_lines":[{"line_number":2,"context_line":"horizon.datatables \u003d {"},{"line_number":3,"context_line":"  update: function () {"},{"line_number":4,"context_line":"    var $rows_to_update \u003d $(\u0027tr.status_unknown.ajax-update\u0027);"},{"line_number":5,"context_line":"    var $table \u003d $rows_to_update.closest(\u0027table\u0027);"},{"line_number":6,"context_line":"    var interval \u003d $rows_to_update.attr(\u0027data-update-interval\u0027);"},{"line_number":7,"context_line":"    var decay_constant \u003d $table.attr(\u0027decay_constant\u0027);"},{"line_number":8,"context_line":"    var requests \u003d [];"}],"source_content_type":"text/javascript","patch_set":1,"id":"9aa53dc9_ff66bb4f","line":5,"updated":"2015-04-09 20:14:45.000000000","message":"I wonder whether it\u0027s a requirement of some new js styleguide to put \u0027var\u0027 keyword to each declaration or is a matter of taste?","commit_id":"0545faa721d170d91383ce57de09e64dfb089fd2"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"16207a959958134d809726e84839661aac657eac","unresolved":false,"context_lines":[{"line_number":2,"context_line":"horizon.datatables \u003d {"},{"line_number":3,"context_line":"  update: function () {"},{"line_number":4,"context_line":"    var $rows_to_update \u003d $(\u0027tr.status_unknown.ajax-update\u0027);"},{"line_number":5,"context_line":"    var $table \u003d $rows_to_update.closest(\u0027table\u0027);"},{"line_number":6,"context_line":"    var interval \u003d $rows_to_update.attr(\u0027data-update-interval\u0027);"},{"line_number":7,"context_line":"    var decay_constant \u003d $table.attr(\u0027decay_constant\u0027);"},{"line_number":8,"context_line":"    var requests \u003d [];"}],"source_content_type":"text/javascript","patch_set":1,"id":"9aa53dc9_e9439611","line":5,"in_reply_to":"9aa53dc9_ff66bb4f","updated":"2015-04-28 12:11:09.000000000","message":"I personally do not like the way declarations were done in the original piece, in that case they are actually using a one line var declaration with a newline inserted. I think if your going to use two lines anyway then you may as well make them more explicitly variable declarations. Also when the JavaScript interpreter encounters a variable without a var that was not previously declared then it adds a var to the top of the current scope anyway, I think its good practise to make things explicit. I\u0027m not sure if we\u0027ve added anything to the hacking rules.","commit_id":"0545faa721d170d91383ce57de09e64dfb089fd2"},{"author":{"_account_id":8040,"name":"Timur Sufiev","email":"tsufiev@gmail.com","username":"tsufiev"},"change_message_id":"4bc26be3ba96e9e0ee48049416b4c669378562a4","unresolved":false,"context_lines":[{"line_number":13,"context_line":"    // do not update this row if the action column is expanded"},{"line_number":14,"context_line":"    if ($rows_to_update.find(\u0027.actions_column .btn-group.open\u0027).length) {"},{"line_number":15,"context_line":"      // wait and try to update again in next interval instead"},{"line_number":16,"context_line":"      settimeout(horizon.datatables.update, interval);"},{"line_number":17,"context_line":"      // remove interval decay, since this will not hit server"},{"line_number":18,"context_line":"      $table.removeattr(\u0027decay_constant\u0027);"},{"line_number":19,"context_line":"      return;"}],"source_content_type":"text/javascript","patch_set":1,"id":"9aa53dc9_dffbf779","line":16,"updated":"2015-04-09 20:14:45.000000000","message":"Was this change really made intentionally or due to auto-replacement?","commit_id":"0545faa721d170d91383ce57de09e64dfb089fd2"},{"author":{"_account_id":8040,"name":"Timur Sufiev","email":"tsufiev@gmail.com","username":"tsufiev"},"change_message_id":"4bc26be3ba96e9e0ee48049416b4c669378562a4","unresolved":false,"context_lines":[{"line_number":15,"context_line":"      // wait and try to update again in next interval instead"},{"line_number":16,"context_line":"      settimeout(horizon.datatables.update, interval);"},{"line_number":17,"context_line":"      // remove interval decay, since this will not hit server"},{"line_number":18,"context_line":"      $table.removeattr(\u0027decay_constant\u0027);"},{"line_number":19,"context_line":"      return;"},{"line_number":20,"context_line":"    }"},{"line_number":21,"context_line":""}],"source_content_type":"text/javascript","patch_set":1,"id":"9aa53dc9_df32d75d","line":18,"updated":"2015-04-09 20:14:45.000000000","message":"Ditto","commit_id":"0545faa721d170d91383ce57de09e64dfb089fd2"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"16207a959958134d809726e84839661aac657eac","unresolved":false,"context_lines":[{"line_number":15,"context_line":"      // wait and try to update again in next interval instead"},{"line_number":16,"context_line":"      settimeout(horizon.datatables.update, interval);"},{"line_number":17,"context_line":"      // remove interval decay, since this will not hit server"},{"line_number":18,"context_line":"      $table.removeattr(\u0027decay_constant\u0027);"},{"line_number":19,"context_line":"      return;"},{"line_number":20,"context_line":"    }"},{"line_number":21,"context_line":""}],"source_content_type":"text/javascript","patch_set":1,"id":"9aa53dc9_c679e1c9","line":18,"in_reply_to":"9aa53dc9_df32d75d","updated":"2015-04-28 12:11:09.000000000","message":"I honestly have no idea, how or why this has happened ... fixed :)","commit_id":"0545faa721d170d91383ce57de09e64dfb089fd2"},{"author":{"_account_id":11778,"name":"Diana Whitten","email":"hurgleburgler@gmail.com","username":"hurgleburgler"},"change_message_id":"7ab93f10de65ea6f6745044d244297a7087fec28","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    $rows_to_update.each(function() {"},{"line_number":23,"context_line":"      var $row \u003d $(this);"},{"line_number":24,"context_line":"      var $table \u003d $row.closest(\u0027table.datatable\u0027);"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"      requests.push("},{"line_number":27,"context_line":"        horizon.ajax.queue({"}],"source_content_type":"text/javascript","patch_set":7,"id":"5a710552_84a9d37d","line":24,"updated":"2015-12-15 19:25:14.000000000","message":"Can this be a different table than what is already stored in $table in the outer function?","commit_id":"574228c1ba2e7649ae1a1180b15bdef7ae5bda5c"},{"author":{"_account_id":11778,"name":"Diana Whitten","email":"hurgleburgler@gmail.com","username":"hurgleburgler"},"change_message_id":"397e02caa0c33f6ad20b1eb113edaae70ca52fc2","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    $rows_to_update.each(function() {"},{"line_number":23,"context_line":"      var $row \u003d $(this);"},{"line_number":24,"context_line":"      var $table \u003d $row.closest(\u0027table.datatable\u0027);"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"      requests.push("},{"line_number":27,"context_line":"        horizon.ajax.queue({"}],"source_content_type":"text/javascript","patch_set":7,"id":"9a68dd71_3dd76c4c","line":24,"in_reply_to":"3a7e1126_e04fb168","updated":"2016-01-24 16:18:04.000000000","message":"The update function should work from table down to rows, then if you simply remove the $table in this inner function, would it walk up the JavaScript scope and reference the correct $table?","commit_id":"574228c1ba2e7649ae1a1180b15bdef7ae5bda5c"},{"author":{"_account_id":8040,"name":"Timur Sufiev","email":"tsufiev@gmail.com","username":"tsufiev"},"change_message_id":"e5091006cf77ef5235291c84c7e834ee1a102a94","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    $rows_to_update.each(function() {"},{"line_number":23,"context_line":"      var $row \u003d $(this);"},{"line_number":24,"context_line":"      var $table \u003d $row.closest(\u0027table.datatable\u0027);"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"      requests.push("},{"line_number":27,"context_line":"        horizon.ajax.queue({"}],"source_content_type":"text/javascript","patch_set":7,"id":"3a7e1126_e04fb168","line":24,"in_reply_to":"5a710552_84a9d37d","updated":"2015-12-22 12:00:57.000000000","message":"Theoretically, there could be the case when multiple tables on the same page are present (as in Network details, where both Ports and Subnets are displayed). Although having multiple table would also mean that we cannot rely on the outer $table reference containing a deterministic value. Hm, so this code should be broken for multiple tables :/. \n\nEither we forbid using them (then we don\u0027t need internal $table assignment), or if we allow having 2 tables on a page, we should somehow fix the above code.","commit_id":"574228c1ba2e7649ae1a1180b15bdef7ae5bda5c"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"33a0255fbd21042d12a373161974aea5879d67ab","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    $rows_to_update.each(function() {"},{"line_number":23,"context_line":"      var $row \u003d $(this);"},{"line_number":24,"context_line":"      var $table \u003d $row.closest(\u0027table.datatable\u0027);"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"      requests.push("},{"line_number":27,"context_line":"        horizon.ajax.queue({"}],"source_content_type":"text/javascript","patch_set":7,"id":"9abb7d3a_476e6997","line":24,"in_reply_to":"9a68dd71_3dd76c4c","updated":"2016-06-02 11:30:33.000000000","message":"After searching the horizon history I discovered that this line was added to fix a bug:\n\n\ncommit 5ab5d280312fd85f0cf0c9ce539e1b2b294d52bb\nAuthor: Andy Chong \u003candycjw@gmail.com\u003e\nDate:   Thu Mar 15 15:28:55 2012 +0800\n\n   reset table to empty look if row becomes empty during updates\n   \n    * fixes bug 955706\n   \n   Change-Id: Icb4190ce8cf20e3375c237f6729c64cb17f404e112:30\n\n\nhttps://bugs.launchpad.net/horizon/+bug/955706\n\n\nThis line is only reformatted in this code its not actually changed, I think if we are going to change it then it should be in a follow up patch that can be easily reverted if we reintroduce a bug.","commit_id":"574228c1ba2e7649ae1a1180b15bdef7ae5bda5c"}]}
