)]}'
{"install_rally.sh":[{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"b1dab75bf5a0cf606674c30fc75d544d064d7a4b","unresolved":false,"context_lines":[{"line_number":431,"context_line":"    #     Wheel installs require setuptools \u003e\u003d 0.8 for dist-info support."},{"line_number":432,"context_line":"    #"},{"line_number":433,"context_line":"    local min_ver\u003d0.8"},{"line_number":434,"context_line":"    local cur_ver\u003d$(pip list | grep setuptools | cut -c 12-20 | tr -d \"( )\")"},{"line_number":435,"context_line":"    if test ! \"${cur_ver}\" || test \"$(printf ${cur_ver}\\\\n${min_ver} | sort -rV | head -1)\" \u003d ${min_ver}"},{"line_number":436,"context_line":"    then"},{"line_number":437,"context_line":"        download ez_setup.py https://bootstrap.pypa.io/ez_setup.py\\"}],"source_content_type":"text/x-sh","patch_set":1,"id":"bab6814e_3e02f50b","line":434,"range":{"start_line":434,"start_character":49,"end_line":434,"end_character":61},"updated":"2016-05-25 12:38:47.000000000","message":"\u0027pip wheel --help\u0027 better then this","commit_id":"f483c170c207a9df036c5a2c762da6e6fe08bf1f"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"7c676b931dbdf57f07882eec0c7d10e201f18ab7","unresolved":false,"context_lines":[{"line_number":431,"context_line":"    #     Wheel installs require setuptools \u003e\u003d 0.8 for dist-info support."},{"line_number":432,"context_line":"    #"},{"line_number":433,"context_line":"    local min_ver\u003d0.8"},{"line_number":434,"context_line":"    local cur_ver\u003d$(pip list | grep setuptools | cut -c 12-20 | tr -d \"( )\")"},{"line_number":435,"context_line":"    if test ! \"${cur_ver}\" || test \"$(printf ${cur_ver}\\\\n${min_ver} | sort -rV | head -1)\" \u003d ${min_ver}"},{"line_number":436,"context_line":"    then"},{"line_number":437,"context_line":"        download ez_setup.py https://bootstrap.pypa.io/ez_setup.py\\"}],"source_content_type":"text/x-sh","patch_set":1,"id":"bab6814e_be44251b","line":434,"updated":"2016-05-25 12:31:47.000000000","message":"This will break if the version is ever 8 characters long, e.g., 18.18.18. Instead, use sed:\n\n    pip list | sed -n \u0027/setuptools/ { s/.*(\\(.*\\))/\\1/; p; }\u0027","commit_id":"f483c170c207a9df036c5a2c762da6e6fe08bf1f"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"8ca9e956a2cee4d53e2cbf709d9295f4058bc747","unresolved":false,"context_lines":[{"line_number":431,"context_line":"    #     Wheel installs require setuptools \u003e\u003d 0.8 for dist-info support."},{"line_number":432,"context_line":"    #"},{"line_number":433,"context_line":"    local min_ver\u003d0.8"},{"line_number":434,"context_line":"    local cur_ver\u003d$(pip list | grep setuptools | cut -c 12-20 | tr -d \"( )\")"},{"line_number":435,"context_line":"    if test ! \"${cur_ver}\" || test \"$(printf ${cur_ver}\\\\n${min_ver} | sort -rV | head -1)\" \u003d ${min_ver}"},{"line_number":436,"context_line":"    then"},{"line_number":437,"context_line":"        download ez_setup.py https://bootstrap.pypa.io/ez_setup.py\\"}],"source_content_type":"text/x-sh","patch_set":1,"id":"9abb7d3a_f98b4766","line":434,"range":{"start_line":434,"start_character":49,"end_line":434,"end_character":61},"in_reply_to":"9abb7d3a_480723ca","updated":"2016-05-31 10:46:25.000000000","message":"We can use \u0027pip wheel\u0027 here since it requires setuptools\u003e\u003d0.8\n\nIf \u0027pip wheel\u0027 exited with non zero then we need to upgrade. That\u0027s how old version was working. Without calling list|grep|sed|awk","commit_id":"f483c170c207a9df036c5a2c762da6e6fe08bf1f"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"d955dc855eb529d367df5003fdce4a273f67525a","unresolved":false,"context_lines":[{"line_number":431,"context_line":"    #     Wheel installs require setuptools \u003e\u003d 0.8 for dist-info support."},{"line_number":432,"context_line":"    #"},{"line_number":433,"context_line":"    local min_ver\u003d0.8"},{"line_number":434,"context_line":"    local cur_ver\u003d$(pip list | grep setuptools | cut -c 12-20 | tr -d \"( )\")"},{"line_number":435,"context_line":"    if test ! \"${cur_ver}\" || test \"$(printf ${cur_ver}\\\\n${min_ver} | sort -rV | head -1)\" \u003d ${min_ver}"},{"line_number":436,"context_line":"    then"},{"line_number":437,"context_line":"        download ez_setup.py https://bootstrap.pypa.io/ez_setup.py\\"}],"source_content_type":"text/x-sh","patch_set":1,"id":"9abb7d3a_1daf04e3","line":434,"range":{"start_line":434,"start_character":49,"end_line":434,"end_character":61},"in_reply_to":"9abb7d3a_f98b4766","updated":"2016-05-31 15:00:24.000000000","message":"@Sergey, unfortunately \u0027pip wheel\u0027 will also return non-zero status if \u0027wheel\u0027 package is not installed yet, no matter whether do we have good setuptools version or not, so the logic is not easy","commit_id":"f483c170c207a9df036c5a2c762da6e6fe08bf1f"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"66c36e3286328699c7432822ac5e0354ebc4e587","unresolved":false,"context_lines":[{"line_number":431,"context_line":"    #     Wheel installs require setuptools \u003e\u003d 0.8 for dist-info support."},{"line_number":432,"context_line":"    #"},{"line_number":433,"context_line":"    local min_ver\u003d0.8"},{"line_number":434,"context_line":"    local cur_ver\u003d$(pip list | grep setuptools | cut -c 12-20 | tr -d \"( )\")"},{"line_number":435,"context_line":"    if test ! \"${cur_ver}\" || test \"$(printf ${cur_ver}\\\\n${min_ver} | sort -rV | head -1)\" \u003d ${min_ver}"},{"line_number":436,"context_line":"    then"},{"line_number":437,"context_line":"        download ez_setup.py https://bootstrap.pypa.io/ez_setup.py\\"}],"source_content_type":"text/x-sh","patch_set":1,"id":"9abb7d3a_b9a25f97","line":434,"range":{"start_line":434,"start_character":49,"end_line":434,"end_character":61},"in_reply_to":"9abb7d3a_f98b4766","updated":"2016-05-31 10:52:19.000000000","message":"Cool approach! I like it","commit_id":"f483c170c207a9df036c5a2c762da6e6fe08bf1f"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"6a371dcd4a6dee22f29b29615d7d7850503b4594","unresolved":false,"context_lines":[{"line_number":431,"context_line":"    #     Wheel installs require setuptools \u003e\u003d 0.8 for dist-info support."},{"line_number":432,"context_line":"    #"},{"line_number":433,"context_line":"    local min_ver\u003d0.8"},{"line_number":434,"context_line":"    local cur_ver\u003d$(pip list | grep setuptools | cut -c 12-20 | tr -d \"( )\")"},{"line_number":435,"context_line":"    if test ! \"${cur_ver}\" || test \"$(printf ${cur_ver}\\\\n${min_ver} | sort -rV | head -1)\" \u003d ${min_ver}"},{"line_number":436,"context_line":"    then"},{"line_number":437,"context_line":"        download ez_setup.py https://bootstrap.pypa.io/ez_setup.py\\"}],"source_content_type":"text/x-sh","patch_set":1,"id":"9abb7d3a_480723ca","line":434,"range":{"start_line":434,"start_character":49,"end_line":434,"end_character":61},"in_reply_to":"bab6814e_3e02f50b","updated":"2016-05-31 10:05:22.000000000","message":"We can not use \u0027pip wheel\u0027 here since it requires setuptools\u003e\u003d0.8","commit_id":"f483c170c207a9df036c5a2c762da6e6fe08bf1f"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"0c163c34810156be962919f0b67c1b8a38106016","unresolved":false,"context_lines":[{"line_number":431,"context_line":"    #     Wheel installs require setuptools \u003e\u003d 0.8 for dist-info support."},{"line_number":432,"context_line":"    #"},{"line_number":433,"context_line":"    local min_ver\u003d0.8"},{"line_number":434,"context_line":"    local cur_ver\u003d$(pip list | grep setuptools | cut -c 12-20 | tr -d \"( )\")"},{"line_number":435,"context_line":"    if test ! \"${cur_ver}\" || test \"$(printf ${cur_ver}\\\\n${min_ver} | sort -rV | head -1)\" \u003d ${min_ver}"},{"line_number":436,"context_line":"    then"},{"line_number":437,"context_line":"        download ez_setup.py https://bootstrap.pypa.io/ez_setup.py\\"}],"source_content_type":"text/x-sh","patch_set":1,"id":"9abb7d3a_33f050fe","line":434,"in_reply_to":"bab6814e_be44251b","updated":"2016-05-31 10:21:01.000000000","message":"Your proposal is a bit harder to read.\nI will use bigger number for \u0027cut\u0027 command instead.","commit_id":"f483c170c207a9df036c5a2c762da6e6fe08bf1f"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"7c676b931dbdf57f07882eec0c7d10e201f18ab7","unresolved":false,"context_lines":[{"line_number":432,"context_line":"    #"},{"line_number":433,"context_line":"    local min_ver\u003d0.8"},{"line_number":434,"context_line":"    local cur_ver\u003d$(pip list | grep setuptools | cut -c 12-20 | tr -d \"( )\")"},{"line_number":435,"context_line":"    if test ! \"${cur_ver}\" || test \"$(printf ${cur_ver}\\\\n${min_ver} | sort -rV | head -1)\" \u003d ${min_ver}"},{"line_number":436,"context_line":"    then"},{"line_number":437,"context_line":"        download ez_setup.py https://bootstrap.pypa.io/ez_setup.py\\"},{"line_number":438,"context_line":"            \u0026\u0026 python ez_setup.py --insecure\\"}],"source_content_type":"text/x-sh","patch_set":1,"id":"bab6814e_3e1cb5c0","line":435,"updated":"2016-05-25 12:31:47.000000000","message":"1. There have been some efforts to make this script support Solaris and OS X; do they both have sort -V? (Do we care?)\n\n2. Instead of calling test, it\u0027s more idiomatic to do:\n\n    if [[ -z $cur_ver || $(printf ${cur_ver}\\\\n${min_ver} | sort -rV | head -1) \u003d\u003d $min_ver ]]; then","commit_id":"f483c170c207a9df036c5a2c762da6e6fe08bf1f"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"0c163c34810156be962919f0b67c1b8a38106016","unresolved":false,"context_lines":[{"line_number":432,"context_line":"    #"},{"line_number":433,"context_line":"    local min_ver\u003d0.8"},{"line_number":434,"context_line":"    local cur_ver\u003d$(pip list | grep setuptools | cut -c 12-20 | tr -d \"( )\")"},{"line_number":435,"context_line":"    if test ! \"${cur_ver}\" || test \"$(printf ${cur_ver}\\\\n${min_ver} | sort -rV | head -1)\" \u003d ${min_ver}"},{"line_number":436,"context_line":"    then"},{"line_number":437,"context_line":"        download ez_setup.py https://bootstrap.pypa.io/ez_setup.py\\"},{"line_number":438,"context_line":"            \u0026\u0026 python ez_setup.py --insecure\\"}],"source_content_type":"text/x-sh","patch_set":1,"id":"9abb7d3a_13026cb4","line":435,"in_reply_to":"bab6814e_3e1cb5c0","updated":"2016-05-31 10:21:01.000000000","message":"Commands \u0027test\u0027 and \u0027[ ... ]\u0027 are fully compatible.\n\nI will investigate whether `sort -V\u0027 is cross-platform. Of course, we care about portability","commit_id":"f483c170c207a9df036c5a2c762da6e6fe08bf1f"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"159b5e6ac5ca0450e7a42eab11d9fcea0e8aec70","unresolved":false,"context_lines":[{"line_number":432,"context_line":"    #"},{"line_number":433,"context_line":"    local min_ver\u003d0.8"},{"line_number":434,"context_line":"    local cur_ver\u003d$(pip list | grep setuptools | cut -c 12-20 | tr -d \"( )\")"},{"line_number":435,"context_line":"    if test ! \"${cur_ver}\" || test \"$(printf ${cur_ver}\\\\n${min_ver} | sort -rV | head -1)\" \u003d ${min_ver}"},{"line_number":436,"context_line":"    then"},{"line_number":437,"context_line":"        download ez_setup.py https://bootstrap.pypa.io/ez_setup.py\\"},{"line_number":438,"context_line":"            \u0026\u0026 python ez_setup.py --insecure\\"}],"source_content_type":"text/x-sh","patch_set":1,"id":"9abb7d3a_1ac42a8f","line":435,"in_reply_to":"bab6814e_3e1cb5c0","updated":"2016-05-31 14:49:58.000000000","message":"Good catch, `-V\u0027 is only GNU-specific option, however there is a cross-platform solution with options \u0027-t\u0027 and \u0027-k\u0027\n\nhttp://ss64.com/osx/sort.html\n\nhttp://www.shrubbery.net/solaris9ab/SUNWaman/hman1/sort.1.html","commit_id":"f483c170c207a9df036c5a2c762da6e6fe08bf1f"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"b1dab75bf5a0cf606674c30fc75d544d064d7a4b","unresolved":false,"context_lines":[{"line_number":434,"context_line":"    local cur_ver\u003d$(pip list | grep setuptools | cut -c 12-20 | tr -d \"( )\")"},{"line_number":435,"context_line":"    if test ! \"${cur_ver}\" || test \"$(printf ${cur_ver}\\\\n${min_ver} | sort -rV | head -1)\" \u003d ${min_ver}"},{"line_number":436,"context_line":"    then"},{"line_number":437,"context_line":"        download ez_setup.py https://bootstrap.pypa.io/ez_setup.py\\"},{"line_number":438,"context_line":"            \u0026\u0026 python ez_setup.py --insecure\\"},{"line_number":439,"context_line":"            || die ${EX_SOFTWARE} \\"},{"line_number":440,"context_line":"                \"Failed to install the latest version of Python \u0027setuptools\u0027\" \u003c\u003c__EOF__"}],"source_content_type":"text/x-sh","patch_set":1,"id":"bab6814e_f96367db","line":437,"updated":"2016-05-25 12:38:47.000000000","message":"Why not just \u003e (Invoke-WebRequest https://bootstrap.pypa.io/ez_setup.py).Content | python -","commit_id":"f483c170c207a9df036c5a2c762da6e6fe08bf1f"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"d43e370971e67a0cd586de7c9eba0902e6129e78","unresolved":false,"context_lines":[{"line_number":434,"context_line":"    local cur_ver\u003d$(pip list | grep setuptools | cut -c 12-20 | tr -d \"( )\")"},{"line_number":435,"context_line":"    if test ! \"${cur_ver}\" || test \"$(printf ${cur_ver}\\\\n${min_ver} | sort -rV | head -1)\" \u003d ${min_ver}"},{"line_number":436,"context_line":"    then"},{"line_number":437,"context_line":"        download ez_setup.py https://bootstrap.pypa.io/ez_setup.py\\"},{"line_number":438,"context_line":"            \u0026\u0026 python ez_setup.py --insecure\\"},{"line_number":439,"context_line":"            || die ${EX_SOFTWARE} \\"},{"line_number":440,"context_line":"                \"Failed to install the latest version of Python \u0027setuptools\u0027\" \u003c\u003c__EOF__"}],"source_content_type":"text/x-sh","patch_set":1,"id":"bab6814e_8b15a24a","line":437,"in_reply_to":"bab6814e_f96367db","updated":"2016-05-25 13:04:00.000000000","message":"because of recommendation at https://pypi.python.org/pypi/setuptools to prevent failures on old systems like Debian 6 and CentOS 5","commit_id":"f483c170c207a9df036c5a2c762da6e6fe08bf1f"}]}
