)]}'
{"functions":[{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"fd2648232f406d42a1f235f7e186c795cff7e747","unresolved":false,"context_lines":[{"line_number":1585,"context_line":"# Remove blank lines (empty or containing only spaces) from end of file."},{"line_number":1586,"context_line":"#"},{"line_number":1587,"context_line":"# remove_whitespace_tail file"},{"line_number":1588,"context_line":"function remove_whitespace_tail() {"},{"line_number":1589,"context_line":"    local file\u003d$1"},{"line_number":1590,"context_line":""},{"line_number":1591,"context_line":"    local last_line\u003d`tail -1 ${file}`"}],"source_content_type":"application/octet-stream","patch_set":6,"id":"AAAARn%2F%2Fuyg%3D","line":1588,"updated":"2013-08-22 15:48:10.000000000","message":"This function is not needed, see below","commit_id":"a8fd4c70aeb8829a715778dba1e42884f81ed9c9"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"e7fed0fb0059ea5214fe7f9a307ecf37f1b76c04","unresolved":false,"context_lines":[{"line_number":1585,"context_line":"# Remove blank lines (empty or containing only spaces) from end of file."},{"line_number":1586,"context_line":"#"},{"line_number":1587,"context_line":"# remove_whitespace_tail file"},{"line_number":1588,"context_line":"function remove_whitespace_tail() {"},{"line_number":1589,"context_line":"    local file\u003d$1"},{"line_number":1590,"context_line":""},{"line_number":1591,"context_line":"    local last_line\u003d`tail -1 ${file}`"}],"source_content_type":"application/octet-stream","patch_set":6,"id":"AAAASX%2F%2F%2Fpk%3D","line":1588,"in_reply_to":"AAAARn%2F%2Fuyg%3D","updated":"2013-08-22 19:47:05.000000000","message":"Done","commit_id":"a8fd4c70aeb8829a715778dba1e42884f81ed9c9"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"fd2648232f406d42a1f235f7e186c795cff7e747","unresolved":false,"context_lines":[{"line_number":1607,"context_line":"    local policy_name\u003d$2"},{"line_number":1608,"context_line":"    local policy_perm\u003d$3"},{"line_number":1609,"context_line":""},{"line_number":1610,"context_line":"    local found\u003d`grep -c ${policy_name} ${policy_file}`"},{"line_number":1611,"context_line":"    if [ $found \u003d\u003d \u00271\u0027 ] ; then"},{"line_number":1612,"context_line":"        echo \"Policy ${policy_name} already exists in ${policy_file}\""},{"line_number":1613,"context_line":"        return"}],"source_content_type":"application/octet-stream","patch_set":6,"id":"AAAARn%2F%2FuyM%3D","line":1610,"updated":"2013-08-22 15:48:10.000000000","message":"combine this into the if:\n\n if grep -c ... ; then","commit_id":"a8fd4c70aeb8829a715778dba1e42884f81ed9c9"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"e7fed0fb0059ea5214fe7f9a307ecf37f1b76c04","unresolved":false,"context_lines":[{"line_number":1607,"context_line":"    local policy_name\u003d$2"},{"line_number":1608,"context_line":"    local policy_perm\u003d$3"},{"line_number":1609,"context_line":""},{"line_number":1610,"context_line":"    local found\u003d`grep -c ${policy_name} ${policy_file}`"},{"line_number":1611,"context_line":"    if [ $found \u003d\u003d \u00271\u0027 ] ; then"},{"line_number":1612,"context_line":"        echo \"Policy ${policy_name} already exists in ${policy_file}\""},{"line_number":1613,"context_line":"        return"}],"source_content_type":"application/octet-stream","patch_set":6,"id":"AAAARn%2F%2FuPY%3D","line":1610,"in_reply_to":"AAAARn%2F%2FuyM%3D","updated":"2013-08-22 19:47:05.000000000","message":"Done","commit_id":"a8fd4c70aeb8829a715778dba1e42884f81ed9c9"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"fd2648232f406d42a1f235f7e186c795cff7e747","unresolved":false,"context_lines":[{"line_number":1614,"context_line":"    fi"},{"line_number":1615,"context_line":""},{"line_number":1616,"context_line":"    # Remove the closing brace from the end of the file"},{"line_number":1617,"context_line":"    remove_whitespace_tail ${policy_file}"},{"line_number":1618,"context_line":"    sed -i \"/^}$/d\" ${policy_file}"},{"line_number":1619,"context_line":""},{"line_number":1620,"context_line":"    # Add a comma to the last entry if necessary"}],"source_content_type":"application/octet-stream","patch_set":6,"id":"AAAARn%2F%2Fuyk%3D","line":1617,"updated":"2013-08-22 15:48:10.000000000","message":"This would be easier done as:\n\n  uniq ${policy_file} | sed \u0027$d\u0027\n\nand could also include the sed below in the pipeline","commit_id":"a8fd4c70aeb8829a715778dba1e42884f81ed9c9"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"e7fed0fb0059ea5214fe7f9a307ecf37f1b76c04","unresolved":false,"context_lines":[{"line_number":1614,"context_line":"    fi"},{"line_number":1615,"context_line":""},{"line_number":1616,"context_line":"    # Remove the closing brace from the end of the file"},{"line_number":1617,"context_line":"    remove_whitespace_tail ${policy_file}"},{"line_number":1618,"context_line":"    sed -i \"/^}$/d\" ${policy_file}"},{"line_number":1619,"context_line":""},{"line_number":1620,"context_line":"    # Add a comma to the last entry if necessary"}],"source_content_type":"application/octet-stream","patch_set":6,"id":"AAAASX%2F%2F%2Fpg%3D","line":1617,"in_reply_to":"AAAARn%2F%2Fuyk%3D","updated":"2013-08-22 19:47:05.000000000","message":"Done","commit_id":"a8fd4c70aeb8829a715778dba1e42884f81ed9c9"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"fd2648232f406d42a1f235f7e186c795cff7e747","unresolved":false,"context_lines":[{"line_number":1619,"context_line":""},{"line_number":1620,"context_line":"    # Add a comma to the last entry if necessary"},{"line_number":1621,"context_line":"    remove_whitespace_tail ${policy_file}"},{"line_number":1622,"context_line":"    sed -i \u0027$ s/]$/],/\u0027 ${policy_file}"},{"line_number":1623,"context_line":""},{"line_number":1624,"context_line":"    # Append the policy and closing brace"},{"line_number":1625,"context_line":"    echo \"    \\\"${policy_name}\\\": ${policy_perm},\" \u003e\u003e ${policy_file}"}],"source_content_type":"application/octet-stream","patch_set":6,"id":"AAAARn%2F%2FuyE%3D","line":1622,"updated":"2013-08-22 15:48:10.000000000","message":"ditto above","commit_id":"a8fd4c70aeb8829a715778dba1e42884f81ed9c9"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"e7fed0fb0059ea5214fe7f9a307ecf37f1b76c04","unresolved":false,"context_lines":[{"line_number":1619,"context_line":""},{"line_number":1620,"context_line":"    # Add a comma to the last entry if necessary"},{"line_number":1621,"context_line":"    remove_whitespace_tail ${policy_file}"},{"line_number":1622,"context_line":"    sed -i \u0027$ s/]$/],/\u0027 ${policy_file}"},{"line_number":1623,"context_line":""},{"line_number":1624,"context_line":"    # Append the policy and closing brace"},{"line_number":1625,"context_line":"    echo \"    \\\"${policy_name}\\\": ${policy_perm},\" \u003e\u003e ${policy_file}"}],"source_content_type":"application/octet-stream","patch_set":6,"id":"AAAASX%2F%2F%2Fpc%3D","line":1622,"in_reply_to":"AAAARn%2F%2FuyE%3D","updated":"2013-08-22 19:47:05.000000000","message":"Done","commit_id":"a8fd4c70aeb8829a715778dba1e42884f81ed9c9"}],"upgrade-cinder":[{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"fd2648232f406d42a1f235f7e186c795cff7e747","unresolved":false,"context_lines":[{"line_number":81,"context_line":"install_cinderclient"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"# configure_cinder"},{"line_number":84,"context_line":"manage_cinder_policy_file() {"},{"line_number":85,"context_line":"    local policy_file\u003d$CINDER_CONF_DIR/policy.json"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    # add rules needed for live volume migration"}],"source_content_type":"application/octet-stream","patch_set":6,"id":"AAAARn%2F%2Fuxw%3D","line":84,"updated":"2013-08-22 15:48:10.000000000","message":"Why make this a function when it is only used here?","commit_id":"a8fd4c70aeb8829a715778dba1e42884f81ed9c9"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"e7fed0fb0059ea5214fe7f9a307ecf37f1b76c04","unresolved":false,"context_lines":[{"line_number":81,"context_line":"install_cinderclient"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"# configure_cinder"},{"line_number":84,"context_line":"manage_cinder_policy_file() {"},{"line_number":85,"context_line":"    local policy_file\u003d$CINDER_CONF_DIR/policy.json"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    # add rules needed for live volume migration"}],"source_content_type":"application/octet-stream","patch_set":6,"id":"AAAASX%2F%2F%2FpU%3D","line":84,"in_reply_to":"AAAARn%2F%2Fuxw%3D","updated":"2013-08-22 19:47:05.000000000","message":"Done","commit_id":"a8fd4c70aeb8829a715778dba1e42884f81ed9c9"}]}
