)]}'
{"tools/api_report.sh":[{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"8e5ecf5aeb70a66e1da6791a5ef6d575d5f6738a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"1aa78d24_f375e863","updated":"2016-07-06 21:57:10.000000000","message":"This code is not ready for review; please see commit message.","commit_id":"e5beed1fbe0b536f540907dd9339037e52c8c510"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"6a4946a7057d1f5e79f1d9c01995a6d794358550","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"1aa78d24_1834addc","updated":"2016-07-08 12:56:41.000000000","message":"Not ready for review; please see commit message.","commit_id":"5a8ef67899b43ac5c5a62173ffece8524d169df5"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"93e541e1c0d54a1250714ed244f7937c06bcb1f3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/bin/sh"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"set -eu"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"TMPDIR\u003d`mktemp -d /tmp/${0##*/}.XXXXXX` || exit 1"}],"source_content_type":"text/x-sh","patch_set":3,"id":"bacf61ea_28a22b9b","line":2,"updated":"2016-08-02 12:52:13.000000000","message":"Please add Apache License 2.0 description.","commit_id":"b6dadeafd5187018f00804dc329eca1113b0422b"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"5acfc66f559045e92830f61399510d971b731466","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/bin/sh"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"set -eu"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"TMPDIR\u003d`mktemp -d /tmp/${0##*/}.XXXXXX` || exit 1"}],"source_content_type":"text/x-sh","patch_set":3,"id":"bacf61ea_b4078580","line":2,"in_reply_to":"bacf61ea_28a22b9b","updated":"2016-08-02 16:14:55.000000000","message":"Done","commit_id":"b6dadeafd5187018f00804dc329eca1113b0422b"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"0c3bcc4de1fafe5d339e69ddb7563457c0403784","unresolved":false,"context_lines":[{"line_number":10,"context_line":"PACKAGE\u003d\"neutron_lib\""},{"line_number":11,"context_line":"PYIR_PATH\u003d\"tools/pyir.py\""},{"line_number":12,"context_line":"START_DIR\u003d`pwd`"},{"line_number":13,"context_line":"TAG_RELEASE\u003d\"0.2.0\""},{"line_number":14,"context_line":""},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"usage() {"}],"source_content_type":"text/x-sh","patch_set":3,"id":"bacf61ea_a652f864","line":13,"updated":"2016-08-01 16:48:12.000000000","message":"0.3.0 now?\n\nDo we need to change this manually for every release? Would it be possible to look up the latest release in PyPI or upper-constraints?","commit_id":"b6dadeafd5187018f00804dc329eca1113b0422b"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"5acfc66f559045e92830f61399510d971b731466","unresolved":false,"context_lines":[{"line_number":10,"context_line":"PACKAGE\u003d\"neutron_lib\""},{"line_number":11,"context_line":"PYIR_PATH\u003d\"tools/pyir.py\""},{"line_number":12,"context_line":"START_DIR\u003d`pwd`"},{"line_number":13,"context_line":"TAG_RELEASE\u003d\"0.2.0\""},{"line_number":14,"context_line":""},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"usage() {"}],"source_content_type":"text/x-sh","patch_set":3,"id":"bacf61ea_3a089f28","line":13,"in_reply_to":"bacf61ea_a652f864","updated":"2016-08-02 16:14:55.000000000","message":"I have a change that will get the latest git tag; sound sufficient?","commit_id":"b6dadeafd5187018f00804dc329eca1113b0422b"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"93e541e1c0d54a1250714ed244f7937c06bcb1f3","unresolved":false,"context_lines":[{"line_number":24,"context_line":"}"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"install_project() {"},{"line_number":27,"context_line":"    cd ${TMPDIR}"},{"line_number":28,"context_line":"    git clone https://github.com/openstack/${PROJECT}.git"},{"line_number":29,"context_line":"    cd ${PROJECT}"},{"line_number":30,"context_line":"    git checkout tags/${TAG_RELEASE}"},{"line_number":31,"context_line":"    cd ${START_DIR}"},{"line_number":32,"context_line":"}"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""}],"source_content_type":"text/x-sh","patch_set":3,"id":"bacf61ea_4ef8474a","line":31,"range":{"start_line":27,"start_character":0,"end_line":31,"end_character":19},"updated":"2016-08-02 12:52:13.000000000","message":"It\u0027s better to omit extra process. How about the following?\n\n git clone --depth 1 -b ${TAG_RELEASE} https://github.com/openstack/${PROJECT}.git ${TMPDIR}/${PROJECT}","commit_id":"b6dadeafd5187018f00804dc329eca1113b0422b"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"5acfc66f559045e92830f61399510d971b731466","unresolved":false,"context_lines":[{"line_number":24,"context_line":"}"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"install_project() {"},{"line_number":27,"context_line":"    cd ${TMPDIR}"},{"line_number":28,"context_line":"    git clone https://github.com/openstack/${PROJECT}.git"},{"line_number":29,"context_line":"    cd ${PROJECT}"},{"line_number":30,"context_line":"    git checkout tags/${TAG_RELEASE}"},{"line_number":31,"context_line":"    cd ${START_DIR}"},{"line_number":32,"context_line":"}"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""}],"source_content_type":"text/x-sh","patch_set":3,"id":"bacf61ea_1a45db16","line":31,"range":{"start_line":27,"start_character":0,"end_line":31,"end_character":19},"in_reply_to":"bacf61ea_4ef8474a","updated":"2016-08-02 16:14:55.000000000","message":"Done","commit_id":"b6dadeafd5187018f00804dc329eca1113b0422b"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"93e541e1c0d54a1250714ed244f7937c06bcb1f3","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"clean_up() {"},{"line_number":36,"context_line":"    rm -rf ${TMPDIR}"},{"line_number":37,"context_line":"}"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""}],"source_content_type":"text/x-sh","patch_set":3,"id":"bacf61ea_eb1e4d5e","line":36,"range":{"start_line":36,"start_character":4,"end_line":36,"end_character":20},"updated":"2016-08-02 12:52:13.000000000","message":"The dir is in /tmp so we don\u0027t need to remove it on purpose. I\u0027m also worry about risk like \"rm -rf /\".","commit_id":"b6dadeafd5187018f00804dc329eca1113b0422b"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"5acfc66f559045e92830f61399510d971b731466","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"clean_up() {"},{"line_number":36,"context_line":"    rm -rf ${TMPDIR}"},{"line_number":37,"context_line":"}"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""}],"source_content_type":"text/x-sh","patch_set":3,"id":"bacf61ea_5acab36f","line":36,"range":{"start_line":36,"start_character":4,"end_line":36,"end_character":20},"in_reply_to":"bacf61ea_eb1e4d5e","updated":"2016-08-02 16:14:55.000000000","message":"You\u0027re right; its not needed. We already trap and delete the tmp dir atop this file. However I\u0027m not sure about leaving the temp dir around and not deleting it as it\u0027ll only be cleaned up on OS restart correct?","commit_id":"b6dadeafd5187018f00804dc329eca1113b0422b"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"0c3bcc4de1fafe5d339e69ddb7563457c0403784","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    PARAM\u003d`echo $1 | awk -F\u003d \u0027{print $1}\u0027`"},{"line_number":42,"context_line":"    VALUE\u003d`echo $1 | awk -F\u003d \u0027{print $2}\u0027`"},{"line_number":43,"context_line":"    echo \"PARM: ${PARAM}  VALUE: ${VALUE}\""},{"line_number":44,"context_line":"    case $PARAM in"},{"line_number":45,"context_line":"        -h | --help)"},{"line_number":46,"context_line":"            usage"},{"line_number":47,"context_line":"            exit"}],"source_content_type":"text/x-sh","patch_set":3,"id":"bacf61ea_e67b50bc","line":44,"updated":"2016-08-01 16:48:12.000000000","message":"Nit: ${PARAM}","commit_id":"b6dadeafd5187018f00804dc329eca1113b0422b"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"5acfc66f559045e92830f61399510d971b731466","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    PARAM\u003d`echo $1 | awk -F\u003d \u0027{print $1}\u0027`"},{"line_number":42,"context_line":"    VALUE\u003d`echo $1 | awk -F\u003d \u0027{print $2}\u0027`"},{"line_number":43,"context_line":"    echo \"PARM: ${PARAM}  VALUE: ${VALUE}\""},{"line_number":44,"context_line":"    case $PARAM in"},{"line_number":45,"context_line":"        -h | --help)"},{"line_number":46,"context_line":"            usage"},{"line_number":47,"context_line":"            exit"}],"source_content_type":"text/x-sh","patch_set":3,"id":"bacf61ea_3aaa5f86","line":44,"in_reply_to":"bacf61ea_e67b50bc","updated":"2016-08-02 16:14:55.000000000","message":"Done","commit_id":"b6dadeafd5187018f00804dc329eca1113b0422b"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"0c3bcc4de1fafe5d339e69ddb7563457c0403784","unresolved":false,"context_lines":[{"line_number":47,"context_line":"            exit"},{"line_number":48,"context_line":"            ;;"},{"line_number":49,"context_line":"        --tag)"},{"line_number":50,"context_line":"            TAG_RELEASE\u003d$VALUE"},{"line_number":51,"context_line":"            break"},{"line_number":52,"context_line":"            ;;"},{"line_number":53,"context_line":"        *)"}],"source_content_type":"text/x-sh","patch_set":3,"id":"bacf61ea_a65cb84b","line":50,"updated":"2016-08-01 16:48:12.000000000","message":"Nit: ${VALUE}","commit_id":"b6dadeafd5187018f00804dc329eca1113b0422b"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"5acfc66f559045e92830f61399510d971b731466","unresolved":false,"context_lines":[{"line_number":47,"context_line":"            exit"},{"line_number":48,"context_line":"            ;;"},{"line_number":49,"context_line":"        --tag)"},{"line_number":50,"context_line":"            TAG_RELEASE\u003d$VALUE"},{"line_number":51,"context_line":"            break"},{"line_number":52,"context_line":"            ;;"},{"line_number":53,"context_line":"        *)"}],"source_content_type":"text/x-sh","patch_set":3,"id":"bacf61ea_da8b431d","line":50,"in_reply_to":"bacf61ea_a65cb84b","updated":"2016-08-02 16:14:55.000000000","message":"Done","commit_id":"b6dadeafd5187018f00804dc329eca1113b0422b"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"0c3bcc4de1fafe5d339e69ddb7563457c0403784","unresolved":false,"context_lines":[{"line_number":51,"context_line":"            break"},{"line_number":52,"context_line":"            ;;"},{"line_number":53,"context_line":"        *)"},{"line_number":54,"context_line":"            echo \"ERROR: unknown parameter \\\"$PARAM\\\"\""},{"line_number":55,"context_line":"            usage"},{"line_number":56,"context_line":"            exit 1"},{"line_number":57,"context_line":"            ;;"}],"source_content_type":"text/x-sh","patch_set":3,"id":"bacf61ea_26372800","line":54,"updated":"2016-08-01 16:48:12.000000000","message":"Nit: ${PARAM}","commit_id":"b6dadeafd5187018f00804dc329eca1113b0422b"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"5acfc66f559045e92830f61399510d971b731466","unresolved":false,"context_lines":[{"line_number":51,"context_line":"            break"},{"line_number":52,"context_line":"            ;;"},{"line_number":53,"context_line":"        *)"},{"line_number":54,"context_line":"            echo \"ERROR: unknown parameter \\\"$PARAM\\\"\""},{"line_number":55,"context_line":"            usage"},{"line_number":56,"context_line":"            exit 1"},{"line_number":57,"context_line":"            ;;"}],"source_content_type":"text/x-sh","patch_set":3,"id":"bacf61ea_3a81bffc","line":54,"in_reply_to":"bacf61ea_26372800","updated":"2016-08-02 16:14:55.000000000","message":"Done","commit_id":"b6dadeafd5187018f00804dc329eca1113b0422b"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"449c9512e72f2f0b07f4db1a5a8229792fc0d0b0","unresolved":false,"context_lines":[{"line_number":14,"context_line":"set -eu"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"TMPDIR\u003d`mktemp -d /tmp/${0##*/}.XXXXXX` || exit 1"},{"line_number":17,"context_line":"export TMPDIR"},{"line_number":18,"context_line":"trap \"rm -rf $TMPDIR\" EXIT"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"PROJECT\u003d\"neutron-lib\""}],"source_content_type":"text/x-sh","patch_set":4,"id":"bacf61ea_40543220","line":17,"range":{"start_line":17,"start_character":0,"end_line":17,"end_character":13},"updated":"2016-08-04 01:49:48.000000000","message":"What for?","commit_id":"32ef1efb8ae2af7df18dd9ae3c3c5f5eaf3d6d46"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"ec151b033f3b1e955e1c78d213753fd04e98c680","unresolved":false,"context_lines":[{"line_number":14,"context_line":"set -eu"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"TMPDIR\u003d`mktemp -d /tmp/${0##*/}.XXXXXX` || exit 1"},{"line_number":17,"context_line":"export TMPDIR"},{"line_number":18,"context_line":"trap \"rm -rf $TMPDIR\" EXIT"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"PROJECT\u003d\"neutron-lib\""}],"source_content_type":"text/x-sh","patch_set":4,"id":"bacf61ea_b5cf0755","line":17,"range":{"start_line":17,"start_character":0,"end_line":17,"end_character":13},"in_reply_to":"bacf61ea_40543220","updated":"2016-08-04 15:34:48.000000000","message":"Done","commit_id":"32ef1efb8ae2af7df18dd9ae3c3c5f5eaf3d6d46"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"449c9512e72f2f0b07f4db1a5a8229792fc0d0b0","unresolved":false,"context_lines":[{"line_number":27,"context_line":"  echo \"Usage: $0 [OPTION]...\""},{"line_number":28,"context_line":"  echo \"Generate a python API report between current and the said release tag.\""},{"line_number":29,"context_line":"  echo \"\""},{"line_number":30,"context_line":"  echo \"  -t, --tag\u003d[\u003ctag\u003e] Release tag to generate API report difference with.\""},{"line_number":31,"context_line":"  echo \"                    Defaults to the latest git tag.\""},{"line_number":32,"context_line":"  echo \"  -h, --help        Print this usage message\""},{"line_number":33,"context_line":"  echo"}],"source_content_type":"text/x-sh","patch_set":4,"id":"bacf61ea_8092aa49","line":30,"range":{"start_line":30,"start_character":10,"end_line":30,"end_character":27},"updated":"2016-08-04 01:49:48.000000000","message":"Do you expect a option like \"--tag\u003d0.2.0\" or \"-t\u003d0.2.0\"? I prefer \"--tag 0.2.0\" or \"-t 0.2.0\"","commit_id":"32ef1efb8ae2af7df18dd9ae3c3c5f5eaf3d6d46"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"ec151b033f3b1e955e1c78d213753fd04e98c680","unresolved":false,"context_lines":[{"line_number":27,"context_line":"  echo \"Usage: $0 [OPTION]...\""},{"line_number":28,"context_line":"  echo \"Generate a python API report between current and the said release tag.\""},{"line_number":29,"context_line":"  echo \"\""},{"line_number":30,"context_line":"  echo \"  -t, --tag\u003d[\u003ctag\u003e] Release tag to generate API report difference with.\""},{"line_number":31,"context_line":"  echo \"                    Defaults to the latest git tag.\""},{"line_number":32,"context_line":"  echo \"  -h, --help        Print this usage message\""},{"line_number":33,"context_line":"  echo"}],"source_content_type":"text/x-sh","patch_set":4,"id":"bacf61ea_75eaaf75","line":30,"range":{"start_line":30,"start_character":10,"end_line":30,"end_character":27},"in_reply_to":"bacf61ea_8092aa49","updated":"2016-08-04 15:34:48.000000000","message":"Currently\n\n\n--tag\u003d\u003cthe_tag\u003e\n-tag\u003d\u003cthe_tag\u003e","commit_id":"32ef1efb8ae2af7df18dd9ae3c3c5f5eaf3d6d46"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"449c9512e72f2f0b07f4db1a5a8229792fc0d0b0","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                usage"},{"line_number":50,"context_line":"                exit"},{"line_number":51,"context_line":"                ;;"},{"line_number":52,"context_line":"            --tag)"},{"line_number":53,"context_line":"                TAG_RELEASE\u003d${VALUE}"},{"line_number":54,"context_line":"                break"},{"line_number":55,"context_line":"                ;;"}],"source_content_type":"text/x-sh","patch_set":4,"id":"bacf61ea_8050ea0b","line":52,"range":{"start_line":52,"start_character":12,"end_line":52,"end_character":17},"updated":"2016-08-04 01:49:48.000000000","message":"You misses \"-t\" option.","commit_id":"32ef1efb8ae2af7df18dd9ae3c3c5f5eaf3d6d46"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"ec151b033f3b1e955e1c78d213753fd04e98c680","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                usage"},{"line_number":50,"context_line":"                exit"},{"line_number":51,"context_line":"                ;;"},{"line_number":52,"context_line":"            --tag)"},{"line_number":53,"context_line":"                TAG_RELEASE\u003d${VALUE}"},{"line_number":54,"context_line":"                break"},{"line_number":55,"context_line":"                ;;"}],"source_content_type":"text/x-sh","patch_set":4,"id":"bacf61ea_d5039b40","line":52,"range":{"start_line":52,"start_character":12,"end_line":52,"end_character":17},"in_reply_to":"bacf61ea_8050ea0b","updated":"2016-08-04 15:34:48.000000000","message":"Done","commit_id":"32ef1efb8ae2af7df18dd9ae3c3c5f5eaf3d6d46"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"449c9512e72f2f0b07f4db1a5a8229792fc0d0b0","unresolved":false,"context_lines":[{"line_number":40,"context_line":"}"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"parse_args() {"},{"line_number":44,"context_line":"    while [ \"$1\" !\u003d \"\" ]; do"},{"line_number":45,"context_line":"        PARAM\u003d`echo $1 | awk -F\u003d \u0027{print $1}\u0027`"},{"line_number":46,"context_line":"        VALUE\u003d`echo $1 | awk -F\u003d \u0027{print $2}\u0027`"},{"line_number":47,"context_line":"        case ${PARAM} in"},{"line_number":48,"context_line":"            -h | --help)"},{"line_number":49,"context_line":"                usage"},{"line_number":50,"context_line":"                exit"},{"line_number":51,"context_line":"                ;;"},{"line_number":52,"context_line":"            --tag)"},{"line_number":53,"context_line":"                TAG_RELEASE\u003d${VALUE}"},{"line_number":54,"context_line":"                break"},{"line_number":55,"context_line":"                ;;"},{"line_number":56,"context_line":"            *)"},{"line_number":57,"context_line":"                echo \"ERROR: unknown parameter \\\"${PARAM}\\\"\""},{"line_number":58,"context_line":"                usage"},{"line_number":59,"context_line":"                exit 1"},{"line_number":60,"context_line":"                ;;"},{"line_number":61,"context_line":"        esac"},{"line_number":62,"context_line":"        shift"},{"line_number":63,"context_line":"    done"},{"line_number":64,"context_line":"}"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"if [ $# -ne 0 ]; then"},{"line_number":68,"context_line":"    parse_args $@"},{"line_number":69,"context_line":"fi"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"if [[ ${TAG_RELEASE} \u003d\u003d \u0027\u0027 ]]; then"}],"source_content_type":"text/x-sh","patch_set":4,"id":"bacf61ea_200dbe3e","line":69,"range":{"start_line":43,"start_character":0,"end_line":69,"end_character":2},"updated":"2016-08-04 01:49:48.000000000","message":"You might want to use getopts.","commit_id":"32ef1efb8ae2af7df18dd9ae3c3c5f5eaf3d6d46"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"6d745fd926a11a4e34c931482e449ccdb38a09ee","unresolved":false,"context_lines":[{"line_number":16,"context_line":"TMPDIR\u003d`mktemp -d /tmp/${0##*/}.XXXXXX` || exit 1"},{"line_number":17,"context_line":"trap \"rm -rf $TMPDIR\" EXIT"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"PROJECT\u003d\"neutron-lib\""},{"line_number":20,"context_line":"PACKAGE\u003d\"neutron_lib\""},{"line_number":21,"context_line":"PYIR_PATH\u003d\"tools/pyir.py\""},{"line_number":22,"context_line":"TAG_RELEASE\u003d\u0027\u0027"}],"source_content_type":"text/x-sh","patch_set":7,"id":"3ac371cc_08fd8b3a","line":19,"updated":"2016-08-15 12:47:43.000000000","message":"Is the intention to use this tool for other projects in the future? If so, is it worth it to take some effort now to generalize the script for easier reuse later?","commit_id":"14352ef121b2db5b34c94b09b7c5768e019837eb"}],"tools/pyir.py":[{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"8e5ecf5aeb70a66e1da6791a5ef6d575d5f6738a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"1aa78d24_b357e0c8","updated":"2016-07-06 21:57:10.000000000","message":"This code is not ready for review; please see commit message.","commit_id":"e5beed1fbe0b536f540907dd9339037e52c8c510"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"6a4946a7057d1f5e79f1d9c01995a6d794358550","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"1aa78d24_9856dd04","updated":"2016-07-08 12:56:41.000000000","message":"Not ready for review; please see commit message.","commit_id":"5a8ef67899b43ac5c5a62173ffece8524d169df5"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"0c3bcc4de1fafe5d339e69ddb7563457c0403784","unresolved":false,"context_lines":[{"line_number":29,"context_line":"# TODO(boden): this code needs A LOT of love as its just a toy with known"},{"line_number":30,"context_line":"# bugs in its current form and needs serious refactoring/reduction"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"def printable_value(val):"},{"line_number":33,"context_line":"    if isinstance(val, dict):"},{"line_number":34,"context_line":"        return {printable_value(k): printable_value(v)"},{"line_number":35,"context_line":"                for (k, v) in val.items()}"}],"source_content_type":"text/x-python","patch_set":3,"id":"bacf61ea_6122aaa4","line":32,"updated":"2016-08-01 16:48:12.000000000","message":"I thought pep8 would complain about requiring two blank lines before this function. Meh.","commit_id":"b6dadeafd5187018f00804dc329eca1113b0422b"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"5acfc66f559045e92830f61399510d971b731466","unresolved":false,"context_lines":[{"line_number":29,"context_line":"# TODO(boden): this code needs A LOT of love as its just a toy with known"},{"line_number":30,"context_line":"# bugs in its current form and needs serious refactoring/reduction"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"def printable_value(val):"},{"line_number":33,"context_line":"    if isinstance(val, dict):"},{"line_number":34,"context_line":"        return {printable_value(k): printable_value(v)"},{"line_number":35,"context_line":"                for (k, v) in val.items()}"}],"source_content_type":"text/x-python","patch_set":3,"id":"bacf61ea_7a3e972a","line":32,"in_reply_to":"bacf61ea_6122aaa4","updated":"2016-08-02 16:14:55.000000000","message":"We are obviously not pep8 on tools/ otherwise I\u0027d have to translate strings, etc.\n\nI\u0027ll do some clean-up in here so you can sleep better at night ;)","commit_id":"b6dadeafd5187018f00804dc329eca1113b0422b"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"0c3bcc4de1fafe5d339e69ddb7563457c0403784","unresolved":false,"context_lines":[{"line_number":556,"context_line":"            arg_str \u003d \"*%s%s\" % (arg_spec[\u0027varargs\u0027],"},{"line_number":557,"context_line":"                                 \u0027\u0027 if not arg_str else \u0027, \u0027 + arg_str)"},{"line_number":558,"context_line":"        if arg_spec[\u0027keywords\u0027] is not None:"},{"line_number":559,"context_line":"            arg_str +\u003d \"%s**%s\" % (\u0027, \u0027 if arg_str else \u0027\u0027, arg_spec[\u0027keywords\u0027])"},{"line_number":560,"context_line":"        return \"%s(%s)\" % (spec[\u0027qualified_name\u0027], arg_str)"},{"line_number":561,"context_line":""},{"line_number":562,"context_line":"    def _build_variable_signature(self, spec):"}],"source_content_type":"text/x-python","patch_set":3,"id":"bacf61ea_413a069a","line":559,"updated":"2016-08-01 16:48:12.000000000","message":"This line exceeds 80 columns. Does pep8 skip this file?","commit_id":"b6dadeafd5187018f00804dc329eca1113b0422b"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"5acfc66f559045e92830f61399510d971b731466","unresolved":false,"context_lines":[{"line_number":556,"context_line":"            arg_str \u003d \"*%s%s\" % (arg_spec[\u0027varargs\u0027],"},{"line_number":557,"context_line":"                                 \u0027\u0027 if not arg_str else \u0027, \u0027 + arg_str)"},{"line_number":558,"context_line":"        if arg_spec[\u0027keywords\u0027] is not None:"},{"line_number":559,"context_line":"            arg_str +\u003d \"%s**%s\" % (\u0027, \u0027 if arg_str else \u0027\u0027, arg_spec[\u0027keywords\u0027])"},{"line_number":560,"context_line":"        return \"%s(%s)\" % (spec[\u0027qualified_name\u0027], arg_str)"},{"line_number":561,"context_line":""},{"line_number":562,"context_line":"    def _build_variable_signature(self, spec):"}],"source_content_type":"text/x-python","patch_set":3,"id":"bacf61ea_1a103ba8","line":559,"in_reply_to":"bacf61ea_413a069a","updated":"2016-08-02 16:14:55.000000000","message":"yeah, no pep8 in tools/. I\u0027ll do some cleanup.","commit_id":"b6dadeafd5187018f00804dc329eca1113b0422b"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"0c3bcc4de1fafe5d339e69ddb7563457c0403784","unresolved":false,"context_lines":[{"line_number":576,"context_line":"        print(title)"},{"line_number":577,"context_line":"        print(\"-----------------------------------------------------\")"},{"line_number":578,"context_line":"        for sig in sorted([self._build_signature(s) for s in specs]):"},{"line_number":579,"context_line":"            print sig"},{"line_number":580,"context_line":"        print(\"-----------------------------------------------------\\n\")"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":"    def _report_api_changes(self, targets):"}],"source_content_type":"text/x-python","patch_set":3,"id":"bacf61ea_416166a8","line":579,"updated":"2016-08-01 16:48:12.000000000","message":"Please make this Python 3 compatible.","commit_id":"b6dadeafd5187018f00804dc329eca1113b0422b"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"5acfc66f559045e92830f61399510d971b731466","unresolved":false,"context_lines":[{"line_number":576,"context_line":"        print(title)"},{"line_number":577,"context_line":"        print(\"-----------------------------------------------------\")"},{"line_number":578,"context_line":"        for sig in sorted([self._build_signature(s) for s in specs]):"},{"line_number":579,"context_line":"            print sig"},{"line_number":580,"context_line":"        print(\"-----------------------------------------------------\\n\")"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":"    def _report_api_changes(self, targets):"}],"source_content_type":"text/x-python","patch_set":3,"id":"bacf61ea_fd160157","line":579,"in_reply_to":"bacf61ea_416166a8","updated":"2016-08-02 16:14:55.000000000","message":"Done","commit_id":"b6dadeafd5187018f00804dc329eca1113b0422b"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"0c3bcc4de1fafe5d339e69ddb7563457c0403784","unresolved":false,"context_lines":[{"line_number":622,"context_line":"                finally:"},{"line_number":623,"context_line":"                    if tmp_root:"},{"line_number":624,"context_line":"                        shutil.rmtree(tmp_root)"},{"line_number":625,"context_line":"            print self.api.to_json()"},{"line_number":626,"context_line":"        else:"},{"line_number":627,"context_line":"            self._report_api_changes(self.args.targets)"},{"line_number":628,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bacf61ea_c1fc36ba","line":625,"updated":"2016-08-01 16:48:12.000000000","message":"Please make this Python 3 compatible.","commit_id":"b6dadeafd5187018f00804dc329eca1113b0422b"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"5acfc66f559045e92830f61399510d971b731466","unresolved":false,"context_lines":[{"line_number":622,"context_line":"                finally:"},{"line_number":623,"context_line":"                    if tmp_root:"},{"line_number":624,"context_line":"                        shutil.rmtree(tmp_root)"},{"line_number":625,"context_line":"            print self.api.to_json()"},{"line_number":626,"context_line":"        else:"},{"line_number":627,"context_line":"            self._report_api_changes(self.args.targets)"},{"line_number":628,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bacf61ea_80395cdb","line":625,"in_reply_to":"bacf61ea_c1fc36ba","updated":"2016-08-02 16:14:55.000000000","message":"Done","commit_id":"b6dadeafd5187018f00804dc329eca1113b0422b"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"449c9512e72f2f0b07f4db1a5a8229792fc0d0b0","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    return os.path.abspath(os.path.join(filepath, \u0027..\u0027))"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"# taken from http://goo.gl/ME0UTl"},{"line_number":57,"context_line":"def ordered(obj):"},{"line_number":58,"context_line":"    if isinstance(obj, dict):"},{"line_number":59,"context_line":"        return sorted((k, ordered(v)) for k, v in obj.items())"}],"source_content_type":"text/x-python","patch_set":4,"id":"bacf61ea_1273b081","line":56,"range":{"start_line":56,"start_character":0,"end_line":56,"end_character":33},"updated":"2016-08-04 01:49:48.000000000","message":"I think that this comment is not needed.","commit_id":"32ef1efb8ae2af7df18dd9ae3c3c5f5eaf3d6d46"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"ec151b033f3b1e955e1c78d213753fd04e98c680","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    return os.path.abspath(os.path.join(filepath, \u0027..\u0027))"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"# taken from http://goo.gl/ME0UTl"},{"line_number":57,"context_line":"def ordered(obj):"},{"line_number":58,"context_line":"    if isinstance(obj, dict):"},{"line_number":59,"context_line":"        return sorted((k, ordered(v)) for k, v in obj.items())"}],"source_content_type":"text/x-python","patch_set":4,"id":"bacf61ea_d58a7bbe","line":56,"range":{"start_line":56,"start_character":0,"end_line":56,"end_character":33},"in_reply_to":"bacf61ea_1273b081","updated":"2016-08-04 15:34:48.000000000","message":"Done","commit_id":"32ef1efb8ae2af7df18dd9ae3c3c5f5eaf3d6d46"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"449c9512e72f2f0b07f4db1a5a8229792fc0d0b0","unresolved":false,"context_lines":[{"line_number":89,"context_line":"    return False"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"# TODO(boden): a few known cases are still not properly mocked out such as"},{"line_number":93,"context_line":"# when the source uses function calls in its super class() definition"},{"line_number":94,"context_line":"_MOCK_SRC \u003d \u0027\u0027\u0027"},{"line_number":95,"context_line":"class _PyIREmptyMock_(object):"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def __getattribute__(self, name):"},{"line_number":98,"context_line":"        return _PyIREmptyMock_()"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def __call__(self, *args, **kwargs):"},{"line_number":101,"context_line":"        return _PyIREmptyMock_()"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def __add__(self, other):"},{"line_number":104,"context_line":"        return str(other)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def __div__(self, other):"},{"line_number":107,"context_line":"        return 1"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def __iter__(self):"},{"line_number":110,"context_line":"        return [].__iter__()"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def __getitem__(self, item):"},{"line_number":113,"context_line":"        return _PyIREmptyMock_()"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def __setitem__(self, key, value):"},{"line_number":116,"context_line":"        pass"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def __delitem__(self, key):"},{"line_number":119,"context_line":"        pass"},{"line_number":120,"context_line":"\u0027\u0027\u0027"},{"line_number":121,"context_line":"_MOCK_CLASS_NAME \u003d \u0027_PyIREmptyMock_\u0027"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"class MockedImports(object):"}],"source_content_type":"text/x-python","patch_set":4,"id":"bacf61ea_f2c53c3d","line":121,"range":{"start_line":92,"start_character":0,"end_line":121,"end_character":36},"updated":"2016-08-04 01:49:48.000000000","message":"nit: It\u0027s better to define constants in top of file (below import).","commit_id":"32ef1efb8ae2af7df18dd9ae3c3c5f5eaf3d6d46"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"ec151b033f3b1e955e1c78d213753fd04e98c680","unresolved":false,"context_lines":[{"line_number":89,"context_line":"    return False"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"# TODO(boden): a few known cases are still not properly mocked out such as"},{"line_number":93,"context_line":"# when the source uses function calls in its super class() definition"},{"line_number":94,"context_line":"_MOCK_SRC \u003d \u0027\u0027\u0027"},{"line_number":95,"context_line":"class _PyIREmptyMock_(object):"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def __getattribute__(self, name):"},{"line_number":98,"context_line":"        return _PyIREmptyMock_()"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def __call__(self, *args, **kwargs):"},{"line_number":101,"context_line":"        return _PyIREmptyMock_()"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def __add__(self, other):"},{"line_number":104,"context_line":"        return str(other)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def __div__(self, other):"},{"line_number":107,"context_line":"        return 1"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def __iter__(self):"},{"line_number":110,"context_line":"        return [].__iter__()"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def __getitem__(self, item):"},{"line_number":113,"context_line":"        return _PyIREmptyMock_()"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def __setitem__(self, key, value):"},{"line_number":116,"context_line":"        pass"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def __delitem__(self, key):"},{"line_number":119,"context_line":"        pass"},{"line_number":120,"context_line":"\u0027\u0027\u0027"},{"line_number":121,"context_line":"_MOCK_CLASS_NAME \u003d \u0027_PyIREmptyMock_\u0027"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"class MockedImports(object):"}],"source_content_type":"text/x-python","patch_set":4,"id":"bacf61ea_5564cb20","line":121,"range":{"start_line":92,"start_character":0,"end_line":121,"end_character":36},"in_reply_to":"bacf61ea_f2c53c3d","updated":"2016-08-04 15:34:48.000000000","message":"Done","commit_id":"32ef1efb8ae2af7df18dd9ae3c3c5f5eaf3d6d46"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"8a56ff531916015c2865954ee3ad9cbdf3a9a7ec","unresolved":false,"context_lines":[{"line_number":167,"context_line":"    index \u003d 0"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    def _compare_tokens(idx):"},{"line_number":170,"context_line":"        hits \u003d[]"},{"line_number":171,"context_line":"        for token in tokens:"},{"line_number":172,"context_line":"            if the_str[idx:].startswith(token):"},{"line_number":173,"context_line":"                hits.append(token)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9ad45d7e_6871ad77","line":170,"updated":"2016-08-12 14:33:25.000000000","message":"Nit: space around \u003d","commit_id":"14352ef121b2db5b34c94b09b7c5768e019837eb"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"8a56ff531916015c2865954ee3ad9cbdf3a9a7ec","unresolved":false,"context_lines":[{"line_number":345,"context_line":"    def has_files(self):"},{"line_number":346,"context_line":"        return len(self._files) \u003e 0"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"    def _path_to_tmp_tree(self, tree_dir, src_path):"},{"line_number":349,"context_line":"        tree_dest \u003d path.join(tree_dir, path.basename(src_path))"},{"line_number":350,"context_line":"        parent_dirs \u003d list(parent_package_names(src_path) or [])"},{"line_number":351,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9ad45d7e_e8b8fdea","line":348,"updated":"2016-08-12 14:33:25.000000000","message":"Nit: this method doesn\u0027t use self and can be marked @static (there are several static methods throughout).","commit_id":"14352ef121b2db5b34c94b09b7c5768e019837eb"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"8a56ff531916015c2865954ee3ad9cbdf3a9a7ec","unresolved":false,"context_lines":[{"line_number":875,"context_line":"    def filter(self, py_line, py_file):"},{"line_number":876,"context_line":"        super(MergeMultiLineImports, self).filter(py_line, py_file)"},{"line_number":877,"context_line":"        py_line.logical \u003d remove_brackets(py_line.logical)"},{"line_number":878,"context_line":""},{"line_number":879,"context_line":"class MergeMultiLineClass(AbstractMultiLineCollector):"},{"line_number":880,"context_line":""},{"line_number":881,"context_line":"    def mark(self, py_line):"}],"source_content_type":"text/x-python","patch_set":7,"id":"9ad45d7e_e89f5d63","line":878,"updated":"2016-08-12 14:33:25.000000000","message":"Super nit: extra blank line here for consistency.","commit_id":"14352ef121b2db5b34c94b09b7c5768e019837eb"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"8a56ff531916015c2865954ee3ad9cbdf3a9a7ec","unresolved":false,"context_lines":[{"line_number":1186,"context_line":"        uuid \u003d str(event.qualified_name)"},{"line_number":1187,"context_line":"        if uuid in self._api:"},{"line_number":1188,"context_line":"            sys.stderr.write(\"Duplicate API signature: %s\" % uuid)"},{"line_number":1189,"context_line":"            #raise KeyError(\"Duplicate API signature: %s\" %"},{"line_number":1190,"context_line":"            #               uuid)"},{"line_number":1191,"context_line":"            return"},{"line_number":1192,"context_line":"        self._api[uuid] \u003d event.to_dict()"},{"line_number":1193,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9ad45d7e_88a9817e","line":1190,"range":{"start_line":1189,"start_character":0,"end_line":1190,"end_character":33},"updated":"2016-08-12 14:33:25.000000000","message":"Remove?","commit_id":"14352ef121b2db5b34c94b09b7c5768e019837eb"}],"tox.ini":[{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"0c3bcc4de1fafe5d339e69ddb7563457c0403784","unresolved":false,"context_lines":[{"line_number":18,"context_line":"[testenv:pep8]"},{"line_number":19,"context_line":"commands \u003d"},{"line_number":20,"context_line":"  flake8"},{"line_number":21,"context_line":"  {toxinidir}/tools/api_report.sh --tag\u003d0.2.0"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"[testenv:venv]"},{"line_number":24,"context_line":"commands \u003d {posargs}"}],"source_content_type":"text/x-properties","patch_set":3,"id":"bacf61ea_a1e5c209","line":21,"updated":"2016-08-01 16:48:12.000000000","message":"I don\u0027t like that we have the tag hard-coded here.","commit_id":"b6dadeafd5187018f00804dc329eca1113b0422b"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"5acfc66f559045e92830f61399510d971b731466","unresolved":false,"context_lines":[{"line_number":18,"context_line":"[testenv:pep8]"},{"line_number":19,"context_line":"commands \u003d"},{"line_number":20,"context_line":"  flake8"},{"line_number":21,"context_line":"  {toxinidir}/tools/api_report.sh --tag\u003d0.2.0"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"[testenv:venv]"},{"line_number":24,"context_line":"commands \u003d {posargs}"}],"source_content_type":"text/x-properties","patch_set":3,"id":"bacf61ea_205b5030","line":21,"in_reply_to":"bacf61ea_a1e5c209","updated":"2016-08-02 16:14:55.000000000","message":"next patch will auto-detect the tag","commit_id":"b6dadeafd5187018f00804dc329eca1113b0422b"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"0c3bcc4de1fafe5d339e69ddb7563457c0403784","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"[testenv:api-report]"},{"line_number":50,"context_line":"commands \u003d"},{"line_number":51,"context_line":"   {toxinidir}/tools/api_report.sh --tag\u003d0.2.0"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"[flake8]"},{"line_number":54,"context_line":"show-source \u003d True"}],"source_content_type":"text/x-properties","patch_set":3,"id":"bacf61ea_41bde6d6","line":51,"updated":"2016-08-01 16:48:12.000000000","message":"Ditto.","commit_id":"b6dadeafd5187018f00804dc329eca1113b0422b"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"5acfc66f559045e92830f61399510d971b731466","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"[testenv:api-report]"},{"line_number":50,"context_line":"commands \u003d"},{"line_number":51,"context_line":"   {toxinidir}/tools/api_report.sh --tag\u003d0.2.0"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"[flake8]"},{"line_number":54,"context_line":"show-source \u003d True"}],"source_content_type":"text/x-properties","patch_set":3,"id":"bacf61ea_c04a3455","line":51,"in_reply_to":"bacf61ea_41bde6d6","updated":"2016-08-02 16:14:55.000000000","message":"pls see above","commit_id":"b6dadeafd5187018f00804dc329eca1113b0422b"}]}
