)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"ec65e34b92a9e0aa28f43b0a67bdbe2a8b8747fb","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Antonio Messina \u003cantonio.s.messina@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-03-11 19:07:01 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Allow installation as unprivileged user"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This is an almost complete rewrite of the installation script, mainly"},{"line_number":10,"context_line":"directed to allow installation of Rally also from unprivileged users,"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"9a80dd14_07f0a08f","line":7,"updated":"2015-03-16 15:06:26.000000000","message":"this suggests a big change to rally installation mode and other stuff.\nIt requires a discussion. please introduce a spec for this.","commit_id":"384790a5f93dcee5d90863f39204b18a24ea4a35"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"b3207e94c1932ef4e01eeb31f287f5511c0bebf3","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Antonio Messina \u003cantonio.s.messina@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-03-11 19:07:01 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Allow installation as unprivileged user"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This is an almost complete rewrite of the installation script, mainly"},{"line_number":10,"context_line":"directed to allow installation of Rally also from unprivileged users,"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"dac4157f_ea20aff9","line":7,"in_reply_to":"7aaa499b_68332fac","updated":"2015-04-20 17:11:28.000000000","message":"Resulting comment: \n\n  1) We won\u0027t introduce spec\n\n  2) Change topic of commit to something more proper: \"Improve installation script\"","commit_id":"384790a5f93dcee5d90863f39204b18a24ea4a35"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"f39dfbbc7a2293b2f53a61d90773e1b3141ff668","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Antonio Messina \u003cantonio.s.messina@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-03-11 19:07:01 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Allow installation as unprivileged user"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This is an almost complete rewrite of the installation script, mainly"},{"line_number":10,"context_line":"directed to allow installation of Rally also from unprivileged users,"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"7aaa499b_68332fac","line":7,"in_reply_to":"9a80dd14_07f0a08f","updated":"2015-04-16 09:10:51.000000000","message":"I agree that this is a big change, but let\u0027s do it without spec(we want to merge it as soon as possible)","commit_id":"384790a5f93dcee5d90863f39204b18a24ea4a35"},{"author":{"_account_id":13555,"name":"Pradeep K Surisetty","username":"pradeepkumars","inactive":true},"change_message_id":"fd2a2c68ecc81fdee8da99a40d6c23bbe231a3c1","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"More in details, the script now:"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"* can run as unprivileged user."},{"line_number":16,"context_line":"* By default uses a virtualenv."},{"line_number":17,"context_line":"* supports different database types"},{"line_number":18,"context_line":"* allow to specify custom python binary"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"3ab451fb_fd11b15e","line":15,"updated":"2015-04-17 10:30:54.000000000","message":"You might want to provide warning message  \" You are running rally as unprivileged user.\"","commit_id":"384790a5f93dcee5d90863f39204b18a24ea4a35"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"b3207e94c1932ef4e01eeb31f287f5511c0bebf3","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"More in details, the script now:"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"* can run as unprivileged user."},{"line_number":16,"context_line":"* By default uses a virtualenv."},{"line_number":17,"context_line":"* supports different database types"},{"line_number":18,"context_line":"* allow to specify custom python binary"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"dac4157f_aa607736","line":15,"in_reply_to":"3ab451fb_fd11b15e","updated":"2015-04-20 17:11:28.000000000","message":"Why? I don\u0027t understand this comment..","commit_id":"384790a5f93dcee5d90863f39204b18a24ea4a35"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"ec65e34b92a9e0aa28f43b0a67bdbe2a8b8747fb","unresolved":false,"context_lines":[{"line_number":13,"context_line":"More in details, the script now:"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"* can run as unprivileged user."},{"line_number":16,"context_line":"* By default uses a virtualenv."},{"line_number":17,"context_line":"* supports different database types"},{"line_number":18,"context_line":"* allow to specify custom python binary"},{"line_number":19,"context_line":"* always asks confirmation before doing potentially dangerous actions"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"9a80dd14_e191bc52","line":16,"updated":"2015-03-16 15:06:26.000000000","message":"virtualenv is dev related. default installation would be in production and shouldn\u0027t set virutalenv.\nIF we agree to change default behavior, then a proper deprecation message should appear and pause for user approval.","commit_id":"384790a5f93dcee5d90863f39204b18a24ea4a35"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"b3207e94c1932ef4e01eeb31f287f5511c0bebf3","unresolved":false,"context_lines":[{"line_number":13,"context_line":"More in details, the script now:"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"* can run as unprivileged user."},{"line_number":16,"context_line":"* By default uses a virtualenv."},{"line_number":17,"context_line":"* supports different database types"},{"line_number":18,"context_line":"* allow to specify custom python binary"},{"line_number":19,"context_line":"* always asks confirmation before doing potentially dangerous actions"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"dac4157f_4ad67bc6","line":16,"in_reply_to":"9a80dd14_e191bc52","updated":"2015-04-20 17:11:28.000000000","message":"Agree with Yair. \n\nLet\u0027s keep by default old behavior (Rally should be installed in system)","commit_id":"384790a5f93dcee5d90863f39204b18a24ea4a35"},{"author":{"_account_id":13555,"name":"Pradeep K Surisetty","username":"pradeepkumars","inactive":true},"change_message_id":"fd2a2c68ecc81fdee8da99a40d6c23bbe231a3c1","unresolved":false,"context_lines":[{"line_number":17,"context_line":"* supports different database types"},{"line_number":18,"context_line":"* allow to specify custom python binary"},{"line_number":19,"context_line":"* always asks confirmation before doing potentially dangerous actions"},{"line_number":20,"context_line":"  (removing directories or installing software)"},{"line_number":21,"context_line":"* automatically install needed software if run as root"},{"line_number":22,"context_line":"* it is self-sufficient: it automatically downloads Rally from the git"},{"line_number":23,"context_line":"  repository and installs all the needed software"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"3ab451fb_a810894f","line":20,"updated":"2015-04-17 10:30:54.000000000","message":"Wondering, Which directories would have to be removed?   \n\nBy the way, when i tried these patches, it  hasnt asked me before installing any new packages.","commit_id":"384790a5f93dcee5d90863f39204b18a24ea4a35"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"b3207e94c1932ef4e01eeb31f287f5511c0bebf3","unresolved":false,"context_lines":[{"line_number":17,"context_line":"* supports different database types"},{"line_number":18,"context_line":"* allow to specify custom python binary"},{"line_number":19,"context_line":"* always asks confirmation before doing potentially dangerous actions"},{"line_number":20,"context_line":"  (removing directories or installing software)"},{"line_number":21,"context_line":"* automatically install needed software if run as root"},{"line_number":22,"context_line":"* it is self-sufficient: it automatically downloads Rally from the git"},{"line_number":23,"context_line":"  repository and installs all the needed software"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"dac4157f_5ebf60d0","line":20,"in_reply_to":"3ab451fb_a810894f","updated":"2015-04-20 17:11:28.000000000","message":"Maybe you run script with sudo? take a look at the next point in this list","commit_id":"384790a5f93dcee5d90863f39204b18a24ea4a35"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"ec65e34b92a9e0aa28f43b0a67bdbe2a8b8747fb","unresolved":false,"context_lines":[{"line_number":19,"context_line":"* always asks confirmation before doing potentially dangerous actions"},{"line_number":20,"context_line":"  (removing directories or installing software)"},{"line_number":21,"context_line":"* automatically install needed software if run as root"},{"line_number":22,"context_line":"* it is self-sufficient: it automatically downloads Rally from the git"},{"line_number":23,"context_line":"  repository and installs all the needed software"},{"line_number":24,"context_line":"* if interrupted, cleans up the virtualenv and/or the downloaded repository"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"9a80dd14_810ac076","line":22,"updated":"2015-03-16 15:06:26.000000000","message":"is this really necessary?\nscript can assume repo is already downloaded.\nat most allow for \"pull latest\" flag (not always what I want)","commit_id":"384790a5f93dcee5d90863f39204b18a24ea4a35"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"b3207e94c1932ef4e01eeb31f287f5511c0bebf3","unresolved":false,"context_lines":[{"line_number":19,"context_line":"* always asks confirmation before doing potentially dangerous actions"},{"line_number":20,"context_line":"  (removing directories or installing software)"},{"line_number":21,"context_line":"* automatically install needed software if run as root"},{"line_number":22,"context_line":"* it is self-sufficient: it automatically downloads Rally from the git"},{"line_number":23,"context_line":"  repository and installs all the needed software"},{"line_number":24,"context_line":"* if interrupted, cleans up the virtualenv and/or the downloaded repository"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"dac4157f_3e826c01","line":22,"in_reply_to":"9a80dd14_810ac076","updated":"2015-04-20 17:11:28.000000000","message":"It\u0027s nice feature. I don\u0027t see anything bad with having it.","commit_id":"384790a5f93dcee5d90863f39204b18a24ea4a35"}],"doc/source/install.rst":[{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"ec65e34b92a9e0aa28f43b0a67bdbe2a8b8747fb","unresolved":false,"context_lines":[{"line_number":27,"context_line":".. code-block:: none"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    wget https://raw.githubusercontent.com/stackforge/rally/master/install_rally.sh"},{"line_number":30,"context_line":"    chmod +x install_rally.sh"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"The installation script will also check if all the software required"},{"line_number":33,"context_line":"by Rally is already installed in your system; if run as **root** user"}],"source_content_type":"text/x-rst","patch_set":11,"id":"9a80dd14_c2d2f6fe","line":30,"updated":"2015-03-16 15:06:26.000000000","message":"if script is going to be pulling rally from source, we should allow user to specify a rally version","commit_id":"384790a5f93dcee5d90863f39204b18a24ea4a35"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"b3207e94c1932ef4e01eeb31f287f5511c0bebf3","unresolved":false,"context_lines":[{"line_number":27,"context_line":".. code-block:: none"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    wget https://raw.githubusercontent.com/stackforge/rally/master/install_rally.sh"},{"line_number":30,"context_line":"    chmod +x install_rally.sh"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"The installation script will also check if all the software required"},{"line_number":33,"context_line":"by Rally is already installed in your system; if run as **root** user"}],"source_content_type":"text/x-rst","patch_set":11,"id":"dac4157f_fe3f5423","line":30,"in_reply_to":"3ab451fb_88c82d76","updated":"2015-04-20 17:11:28.000000000","message":"maybe it\u0027s better to keep cloning. Because in this key you need 3 commands (extra chmod +x) instead of 2 in case of cloning.","commit_id":"384790a5f93dcee5d90863f39204b18a24ea4a35"},{"author":{"_account_id":13555,"name":"Pradeep K Surisetty","username":"pradeepkumars","inactive":true},"change_message_id":"86e6adb288ee47735899f14af6668cfee3e2356c","unresolved":false,"context_lines":[{"line_number":27,"context_line":".. code-block:: none"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    wget https://raw.githubusercontent.com/stackforge/rally/master/install_rally.sh"},{"line_number":30,"context_line":"    chmod +x install_rally.sh"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"The installation script will also check if all the software required"},{"line_number":33,"context_line":"by Rally is already installed in your system; if run as **root** user"}],"source_content_type":"text/x-rst","patch_set":11,"id":"3ab451fb_88c82d76","line":30,"in_reply_to":"7aaa499b_237f8867","updated":"2015-04-17 10:37:30.000000000","message":"Why do we need to provide this feature? \n\nif some one wants to work on local tree or different branch..etc.","commit_id":"384790a5f93dcee5d90863f39204b18a24ea4a35"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"f39dfbbc7a2293b2f53a61d90773e1b3141ff668","unresolved":false,"context_lines":[{"line_number":27,"context_line":".. code-block:: none"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    wget https://raw.githubusercontent.com/stackforge/rally/master/install_rally.sh"},{"line_number":30,"context_line":"    chmod +x install_rally.sh"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"The installation script will also check if all the software required"},{"line_number":33,"context_line":"by Rally is already installed in your system; if run as **root** user"}],"source_content_type":"text/x-rst","patch_set":11,"id":"7aaa499b_237f8867","line":30,"in_reply_to":"9a80dd14_c2d2f6fe","updated":"2015-04-16 09:10:51.000000000","message":"imo, it can be done in separate patch","commit_id":"384790a5f93dcee5d90863f39204b18a24ea4a35"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"ec65e34b92a9e0aa28f43b0a67bdbe2a8b8747fb","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"By default it will install Rally in a virtualenv in ``~/rally`` when"},{"line_number":38,"context_line":"ran as standard user, or ``/opt/rally`` when ran as root. You can"},{"line_number":39,"context_line":"install Rally on a different location by using the option ``--target``:"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":".. code-block:: none"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"9a80dd14_81b48082","line":39,"updated":"2015-03-16 15:06:26.000000000","message":"What if I want to use an existing venv or the venv that\u0027s currently active","commit_id":"384790a5f93dcee5d90863f39204b18a24ea4a35"},{"author":{"_account_id":10459,"name":"Luigi Toscano","email":"ltoscano@redhat.com","username":"ltoscano"},"change_message_id":"71af3ac2b9f8c9dc26d67ff3ec168cd16e91f8c8","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    ./install_rally.sh --target /foo/bar"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"You can also install Rally outsite a virtualenv, by passing optino"},{"line_number":46,"context_line":"``--system``."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Run ``install_rally.sh`` with option ``--help`` to have a list of all"}],"source_content_type":"text/x-rst","patch_set":11,"id":"9a80dd14_6553e139","line":45,"updated":"2015-03-17 14:49:53.000000000","message":"and outsite -\u003e outside","commit_id":"384790a5f93dcee5d90863f39204b18a24ea4a35"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"2dba1fc3fae908309301790c23a5eae8772b100a","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    ./install_rally.sh --target /foo/bar"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"You can also install Rally outsite a virtualenv, by passing optino"},{"line_number":46,"context_line":"``--system``."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Run ``install_rally.sh`` with option ``--help`` to have a list of all"}],"source_content_type":"text/x-rst","patch_set":11,"id":"9a80dd14_30d88aee","line":45,"updated":"2015-03-16 09:15:02.000000000","message":"s/optino/option","commit_id":"384790a5f93dcee5d90863f39204b18a24ea4a35"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"64dbe4f34434aa1d0ef3b0fb330059d54d66fb9b","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    ./install_rally.sh --target /foo/bar"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"You can also install Rally outsite a virtualenv, by passing optino"},{"line_number":46,"context_line":"``--system``."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Run ``install_rally.sh`` with option ``--help`` to have a list of all"}],"source_content_type":"text/x-rst","patch_set":11,"id":"3acd31a7_4b0f3788","line":45,"in_reply_to":"9a80dd14_30d88aee","updated":"2015-05-05 12:44:55.000000000","message":"Done","commit_id":"384790a5f93dcee5d90863f39204b18a24ea4a35"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"64dbe4f34434aa1d0ef3b0fb330059d54d66fb9b","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    ./install_rally.sh --target /foo/bar"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"You can also install Rally outsite a virtualenv, by passing optino"},{"line_number":46,"context_line":"``--system``."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Run ``install_rally.sh`` with option ``--help`` to have a list of all"}],"source_content_type":"text/x-rst","patch_set":11,"id":"3acd31a7_2b299be6","line":45,"in_reply_to":"9a80dd14_6553e139","updated":"2015-05-05 12:44:55.000000000","message":"Done","commit_id":"384790a5f93dcee5d90863f39204b18a24ea4a35"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"b3207e94c1932ef4e01eeb31f287f5511c0bebf3","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    ./install_rally.sh --target /foo/bar"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"You can also install Rally outsite a virtualenv, by passing optino"},{"line_number":46,"context_line":"``--system``."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Run ``install_rally.sh`` with option ``--help`` to have a list of all"}],"source_content_type":"text/x-rst","patch_set":11,"id":"dac4157f_5ec1a0e3","line":45,"in_reply_to":"9a80dd14_6553e139","updated":"2015-04-20 17:11:28.000000000","message":"so this should be vice versa. \n\nWhat about next: \n\n ./install_rally.sh --venv /foo/bar   #installs in venv\n\nand \n\n  ./instally_rally.sh      #installs in system requires root","commit_id":"384790a5f93dcee5d90863f39204b18a24ea4a35"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"64dbe4f34434aa1d0ef3b0fb330059d54d66fb9b","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    ./install_rally.sh --target /foo/bar"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"You can also install Rally outsite a virtualenv, by passing optino"},{"line_number":46,"context_line":"``--system``."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Run ``install_rally.sh`` with option ``--help`` to have a list of all"}],"source_content_type":"text/x-rst","patch_set":11,"id":"3acd31a7_cb1b47c9","line":45,"in_reply_to":"dac4157f_5ec1a0e3","updated":"2015-05-05 12:44:55.000000000","message":"Done","commit_id":"384790a5f93dcee5d90863f39204b18a24ea4a35"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"ec65e34b92a9e0aa28f43b0a67bdbe2a8b8747fb","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"     This script will install rally either in the system (as root) or in a virtual environment."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    Options:"},{"line_number":59,"context_line":"      -h, --help             Print this help text"},{"line_number":60,"context_line":"      -s, --system           Instead of creating a virtualenv, install as"},{"line_number":61,"context_line":"                             system package."}],"source_content_type":"text/x-rst","patch_set":11,"id":"9a80dd14_c7c5a88e","line":58,"updated":"2015-03-16 15:06:26.000000000","message":"-v VENV install rally into existing venv","commit_id":"384790a5f93dcee5d90863f39204b18a24ea4a35"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"64dbe4f34434aa1d0ef3b0fb330059d54d66fb9b","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"     This script will install rally either in the system (as root) or in a virtual environment."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    Options:"},{"line_number":59,"context_line":"      -h, --help             Print this help text"},{"line_number":60,"context_line":"      -s, --system           Instead of creating a virtualenv, install as"},{"line_number":61,"context_line":"                             system package."}],"source_content_type":"text/x-rst","patch_set":11,"id":"3acd31a7_2b575b59","line":58,"in_reply_to":"9a80dd14_c7c5a88e","updated":"2015-05-05 12:44:55.000000000","message":"--target (see below)","commit_id":"384790a5f93dcee5d90863f39204b18a24ea4a35"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"ec65e34b92a9e0aa28f43b0a67bdbe2a8b8747fb","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    Options:"},{"line_number":59,"context_line":"      -h, --help             Print this help text"},{"line_number":60,"context_line":"      -s, --system           Instead of creating a virtualenv, install as"},{"line_number":61,"context_line":"                             system package."},{"line_number":62,"context_line":"      -d, --target DIRECTORY Install Rally virtual environment into DIRECTORY."},{"line_number":63,"context_line":"                             (Default: /home/antonio/rally)."}],"source_content_type":"text/x-rst","patch_set":11,"id":"9a80dd14_c7de886c","line":60,"updated":"2015-03-16 15:06:26.000000000","message":"this should be default","commit_id":"384790a5f93dcee5d90863f39204b18a24ea4a35"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"64dbe4f34434aa1d0ef3b0fb330059d54d66fb9b","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    Options:"},{"line_number":59,"context_line":"      -h, --help             Print this help text"},{"line_number":60,"context_line":"      -s, --system           Instead of creating a virtualenv, install as"},{"line_number":61,"context_line":"                             system package."},{"line_number":62,"context_line":"      -d, --target DIRECTORY Install Rally virtual environment into DIRECTORY."},{"line_number":63,"context_line":"                             (Default: /home/antonio/rally)."}],"source_content_type":"text/x-rst","patch_set":11,"id":"3acd31a7_eb4cc3c9","line":60,"in_reply_to":"9a80dd14_b90d3440","updated":"2015-05-05 12:44:55.000000000","message":"Done","commit_id":"384790a5f93dcee5d90863f39204b18a24ea4a35"},{"author":{"_account_id":10061,"name":"Joe Talerico","email":"jtaleric@redhat.com","username":"rook"},"change_message_id":"ad7de7a411f5940a9c1fbb0bb52534c6780de049","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    Options:"},{"line_number":59,"context_line":"      -h, --help             Print this help text"},{"line_number":60,"context_line":"      -s, --system           Instead of creating a virtualenv, install as"},{"line_number":61,"context_line":"                             system package."},{"line_number":62,"context_line":"      -d, --target DIRECTORY Install Rally virtual environment into DIRECTORY."},{"line_number":63,"context_line":"                             (Default: /home/antonio/rally)."}],"source_content_type":"text/x-rst","patch_set":11,"id":"9a80dd14_b90d3440","line":60,"in_reply_to":"9a80dd14_c7de886c","updated":"2015-03-16 15:55:23.000000000","message":"Agreed with Yair, the venv should be the option, where --system is the default.","commit_id":"384790a5f93dcee5d90863f39204b18a24ea4a35"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"64dbe4f34434aa1d0ef3b0fb330059d54d66fb9b","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    Options:"},{"line_number":59,"context_line":"      -h, --help             Print this help text"},{"line_number":60,"context_line":"      -s, --system           Instead of creating a virtualenv, install as"},{"line_number":61,"context_line":"                             system package."},{"line_number":62,"context_line":"      -d, --target DIRECTORY Install Rally virtual environment into DIRECTORY."},{"line_number":63,"context_line":"                             (Default: /home/antonio/rally)."}],"source_content_type":"text/x-rst","patch_set":11,"id":"3acd31a7_0b549f50","line":60,"in_reply_to":"9a80dd14_c7de886c","updated":"2015-05-05 12:44:55.000000000","message":"Done","commit_id":"384790a5f93dcee5d90863f39204b18a24ea4a35"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"b3207e94c1932ef4e01eeb31f287f5511c0bebf3","unresolved":false,"context_lines":[{"line_number":60,"context_line":"      -s, --system           Instead of creating a virtualenv, install as"},{"line_number":61,"context_line":"                             system package."},{"line_number":62,"context_line":"      -d, --target DIRECTORY Install Rally virtual environment into DIRECTORY."},{"line_number":63,"context_line":"                             (Default: /home/antonio/rally)."},{"line_number":64,"context_line":"      -f, --overwrite        Remove target directory if it already exists."},{"line_number":65,"context_line":"      -y, --yes              Do not ask for confirmation: assume a \u0027yes\u0027 reply"},{"line_number":66,"context_line":"                             to every question."}],"source_content_type":"text/x-rst","patch_set":11,"id":"dac4157f_3e44ac72","line":63,"updated":"2015-04-20 17:11:28.000000000","message":"Why default is not ~/rally/ ?","commit_id":"384790a5f93dcee5d90863f39204b18a24ea4a35"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"64dbe4f34434aa1d0ef3b0fb330059d54d66fb9b","unresolved":false,"context_lines":[{"line_number":60,"context_line":"      -s, --system           Instead of creating a virtualenv, install as"},{"line_number":61,"context_line":"                             system package."},{"line_number":62,"context_line":"      -d, --target DIRECTORY Install Rally virtual environment into DIRECTORY."},{"line_number":63,"context_line":"                             (Default: /home/antonio/rally)."},{"line_number":64,"context_line":"      -f, --overwrite        Remove target directory if it already exists."},{"line_number":65,"context_line":"      -y, --yes              Do not ask for confirmation: assume a \u0027yes\u0027 reply"},{"line_number":66,"context_line":"                             to every question."}],"source_content_type":"text/x-rst","patch_set":11,"id":"3acd31a7_0b893fc9","line":63,"in_reply_to":"dac4157f_3e44ac72","updated":"2015-05-05 12:44:55.000000000","message":"Done","commit_id":"384790a5f93dcee5d90863f39204b18a24ea4a35"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"4578509c149cfa6e0d93a607d74b0c240d7d16a0","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    ./install_rally.sh --target /foo/bar"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"You can also install Rally outside a virtualenv, by passing option"},{"line_number":47,"context_line":"``--system``."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"Run ``install_rally.sh`` with option ``--help`` to have a list of all"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3acd31a7_f12f0d86","line":46,"updated":"2015-05-05 14:30:51.000000000","message":"Previous comments state that this should be default, while venv should be an optional mode, to keep old behavior as well as common sense.\nPlease fix this","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"2a865e042f5feb3774038962cfeaa6252f98fca8","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    ./install_rally.sh --target /foo/bar"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"You can also install Rally outside a virtualenv, by passing option"},{"line_number":47,"context_line":"``--system``."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"Run ``install_rally.sh`` with option ``--help`` to have a list of all"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3acd31a7_5c6011cf","line":46,"in_reply_to":"3acd31a7_f12f0d86","updated":"2015-05-05 18:30:36.000000000","message":"Done","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"843fbfdab1dd59e66a634789dbac72d00eb735c9","unresolved":false,"context_lines":[{"line_number":57,"context_line":"     This script will install rally either in the system (as root) or in a virtual environment."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    Options:"},{"line_number":60,"context_line":"      -h, --help             Print this help text"},{"line_number":61,"context_line":"      -s, --system           Instead of creating a virtualenv, install as"},{"line_number":62,"context_line":"                             system package."},{"line_number":63,"context_line":"      -d, --target DIRECTORY Install Rally virtual environment into DIRECTORY."}],"source_content_type":"text/x-rst","patch_set":15,"id":"1aca2d91_3d403356","line":60,"updated":"2015-05-06 17:05:09.000000000","message":"-v option is missing here.","commit_id":"e7bf370dc6ba1ce986c2c4cd256371496a45630c"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"680e28bb39705a0b9c6aaea0d134905a65112e48","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    ./install_rally.sh --target /foo/bar"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"You can also install Rally outside a virtualenv, by passing option"},{"line_number":47,"context_line":"``--system``."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"Run ``install_rally.sh`` with option ``--help`` to have a list of all"}],"source_content_type":"text/x-rst","patch_set":32,"id":"9a0c5dc1_1897cd91","line":46,"updated":"2015-05-12 18:52:35.000000000","message":"why we need --system key at all? it should be by default no?","commit_id":"ab8e6a28d9ffa4b15eca64e5c53d7981de647021"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"41ae99ae7d3e5cec7a03714a6267bccd197931cc","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    ./install_rally.sh --target /foo/bar"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"You can also install Rally outside a virtualenv, by passing option"},{"line_number":47,"context_line":"``--system``."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"Run ``install_rally.sh`` with option ``--help`` to have a list of all"}],"source_content_type":"text/x-rst","patch_set":32,"id":"9a0c5dc1_2c5a5684","line":46,"in_reply_to":"9a0c5dc1_1897cd91","updated":"2015-05-13 10:46:20.000000000","message":"Done","commit_id":"ab8e6a28d9ffa4b15eca64e5c53d7981de647021"}],"doc/source/tutorial/step_0_installation.rst":[{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"ea6fd9af7fac84943bc5e1bf4084e458fd7b4b9c","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":".. code-block:: none"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    wget https://raw.githubusercontent.com/stackforge/rally/master/install_rally.sh"},{"line_number":29,"context_line":"    chmod +x install_rally.sh"},{"line_number":30,"context_line":"    ./install_rally.sh"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"9a80dd14_5b11835c","line":28,"updated":"2015-03-10 15:24:11.000000000","message":"You can simplify these commands to single one :)\n\n curl https://raw.githubusercontent.../install_rally.sh | bash # but I recommend `sh\u0027 for that","commit_id":"5f45e5bba358636413fcbc85490a5aa0fae59d85"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"3703fd9f564f2488e33bc434ad50850615bc246c","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":".. code-block:: none"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    wget https://raw.githubusercontent.com/stackforge/rally/master/install_rally.sh"},{"line_number":29,"context_line":"    chmod +x install_rally.sh"},{"line_number":30,"context_line":"    ./install_rally.sh"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"9a80dd14_773625e9","line":28,"in_reply_to":"9a80dd14_56af9a7d","updated":"2015-03-11 14:47:24.000000000","message":"The URL is known, so no redirects expected, however if you want to follow redirects, use `curl -L {url}\u0027","commit_id":"5f45e5bba358636413fcbc85490a5aa0fae59d85"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"2e768d49dcc938cdcfe7d1be119af473092d4949","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":".. code-block:: none"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    wget https://raw.githubusercontent.com/stackforge/rally/master/install_rally.sh"},{"line_number":29,"context_line":"    chmod +x install_rally.sh"},{"line_number":30,"context_line":"    ./install_rally.sh"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"9a80dd14_56af9a7d","line":28,"in_reply_to":"9a80dd14_5b11835c","updated":"2015-03-10 15:30:13.000000000","message":"We had some problems with curl in the past. As far as I remember, it was related to redirection.","commit_id":"5f45e5bba358636413fcbc85490a5aa0fae59d85"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"30192cd71ad2078e9d72a0462c599183f0e67518","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":".. code-block:: none"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    wget https://raw.githubusercontent.com/stackforge/rally/master/install_rally.sh"},{"line_number":29,"context_line":"    chmod +x install_rally.sh"},{"line_number":30,"context_line":"    ./install_rally.sh"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"9a80dd14_17dde942","line":28,"in_reply_to":"9a80dd14_773625e9","updated":"2015-03-11 14:52:11.000000000","message":"I know about `-L` key - https://review.openstack.org/#/c/90571/ ;)\n\nIf you look at https://review.openstack.org/#/c/103124/ , you can find information about why we replace `curl` by `wget`","commit_id":"5f45e5bba358636413fcbc85490a5aa0fae59d85"},{"author":{"_account_id":10061,"name":"Joe Talerico","email":"jtaleric@redhat.com","username":"rook"},"change_message_id":"ad7de7a411f5940a9c1fbb0bb52534c6780de049","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    wget -q -O- https://raw.githubusercontent.com/stackforge/rally/master/install_rally.sh | bash"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"If you execute the script as regular user, Rally will create a new"},{"line_number":31,"context_line":"virtual environment in ``~/rally/`` and install in it Rally, and will"},{"line_number":32,"context_line":"use `sqlite` as database backend. For more installation options,"},{"line_number":33,"context_line":"please refer to the :ref:`installation \u003cinstall\u003e` page."},{"line_number":34,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"9a80dd14_cfd77abd","line":31,"updated":"2015-03-16 15:55:23.000000000","message":"If ran from a privileged user, the venv should not be used, unless the user passes a option to use a venv.","commit_id":"384790a5f93dcee5d90863f39204b18a24ea4a35"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"fc6a9b61b4ba330ad290931bacaf2bb100e1746d","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    # or using curl:"},{"line_number":28,"context_line":"    curl https://raw.githubusercontent.com/openstack/rally/master/install_rally.sh | bash"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"If you execute the script as regular user, Rally will create a new"},{"line_number":31,"context_line":"virtual environment in ``~/rally/`` and install in it Rally, and will"},{"line_number":32,"context_line":"use `sqlite` as database backend. For more installation options,"},{"line_number":33,"context_line":"please refer to the :ref:`installation \u003cinstall\u003e` page."}],"source_content_type":"text/x-rst","patch_set":12,"id":"3acd31a7_bd960e3d","line":30,"updated":"2015-05-05 12:57:29.000000000","message":"please, mention here what will happen if script will be executed as a privileged use.","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"2a865e042f5feb3774038962cfeaa6252f98fca8","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    # or using curl:"},{"line_number":28,"context_line":"    curl https://raw.githubusercontent.com/openstack/rally/master/install_rally.sh | bash"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"If you execute the script as regular user, Rally will create a new"},{"line_number":31,"context_line":"virtual environment in ``~/rally/`` and install in it Rally, and will"},{"line_number":32,"context_line":"use `sqlite` as database backend. For more installation options,"},{"line_number":33,"context_line":"please refer to the :ref:`installation \u003cinstall\u003e` page."}],"source_content_type":"text/x-rst","patch_set":12,"id":"3acd31a7_1cebb914","line":30,"in_reply_to":"3acd31a7_bd960e3d","updated":"2015-05-05 18:30:36.000000000","message":"Done","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"680e28bb39705a0b9c6aaea0d134905a65112e48","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":".. code-block:: none"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    wget -q -O- https://raw.githubusercontent.com/openstack/rally/master/install_rally.sh | bash"},{"line_number":27,"context_line":"    # or using curl:"},{"line_number":28,"context_line":"    curl https://raw.githubusercontent.com/openstack/rally/master/install_rally.sh | bash"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-rst","patch_set":32,"id":"9a0c5dc1_f8c19981","line":26,"updated":"2015-05-12 18:52:35.000000000","message":"I believe we should keep only one option (e.g. curl)","commit_id":"ab8e6a28d9ffa4b15eca64e5c53d7981de647021"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"41ae99ae7d3e5cec7a03714a6267bccd197931cc","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":".. code-block:: none"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    wget -q -O- https://raw.githubusercontent.com/openstack/rally/master/install_rally.sh | bash"},{"line_number":27,"context_line":"    # or using curl:"},{"line_number":28,"context_line":"    curl https://raw.githubusercontent.com/openstack/rally/master/install_rally.sh | bash"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-rst","patch_set":32,"id":"9a0c5dc1_6cee0e8d","line":26,"in_reply_to":"9a0c5dc1_f8c19981","updated":"2015-05-13 10:46:20.000000000","message":"Why? There is no wget on cenos by default, and there is no curl in ubuntu by default.\n\nWhen centos user see\n\n wget: command not found\n\nhe will try curl\n\nand vice versa","commit_id":"ab8e6a28d9ffa4b15eca64e5c53d7981de647021"}],"install_rally.sh":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"c4b9d9c84c8f380c89fdbe937c42d89fc1cefa3a","unresolved":false,"context_lines":[{"line_number":278,"context_line":"    $pkg_manager $missing"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"EOF"},{"line_number":281,"context_line":"            fi "},{"line_number":282,"context_line":"        fi # if running_as_root"},{"line_number":283,"context_line":"    fi # if [ -n \"$missing\" ]"},{"line_number":284,"context_line":""}],"source_content_type":"text/x-sh","patch_set":4,"id":"9a80dd14_6e67b9b7","line":281,"updated":"2015-03-08 10:02:12.000000000","message":"redundant whitespace","commit_id":"e45e95e7606a184c3cc29dbd6c6932be8668783b"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"c4b9d9c84c8f380c89fdbe937c42d89fc1cefa3a","unresolved":false,"context_lines":[{"line_number":354,"context_line":"    cp $SRCDIR/etc/rally/rally.conf.sample $ETCDIR/rally.conf"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"    [ -d $DBDIR ] || mkdir -p $DBDIR"},{"line_number":357,"context_line":"    sed -i \u0027s|#connection *\u003d.*|connection \u003d sqlite:///\u0027${DBDIR}\u0027/rally.sqlite|\u0027 $ETCDIR/rally.conf"},{"line_number":358,"context_line":"    rally-manage db recreate"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"    if [ \"$USEVIRTUALENV\" \u003d \u0027yes\u0027 ]; then"}],"source_content_type":"text/x-sh","patch_set":4,"id":"9a80dd14_2e1f8109","line":357,"updated":"2015-03-08 10:02:12.000000000","message":"it would be nice to have input argument for type of database and install required packages for it. For example:\n\n- postgresql requires psycopg2\n- mysql requires PyMySQL (compatible with py2/py3) or MySQL-python","commit_id":"e45e95e7606a184c3cc29dbd6c6932be8668783b"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"c4b9d9c84c8f380c89fdbe937c42d89fc1cefa3a","unresolved":false,"context_lines":[{"line_number":467,"context_line":"            die $EX_CANTCREAT \"Unable to create virtualenv in \u0027$VENVDIR\u0027: directory already exists.\" \u003c\u003cEOF"},{"line_number":468,"context_line":"    The script was unable to create a virtual environment in \"$VENVDIR\""},{"line_number":469,"context_line":"    because the directory already exists."},{"line_number":470,"context_line":"    "},{"line_number":471,"context_line":"    In order to proceed, you must take one of the following action:"},{"line_number":472,"context_line":"    "},{"line_number":473,"context_line":"    * delete the directory, or"}],"source_content_type":"text/x-sh","patch_set":4,"id":"9a80dd14_4e18351e","line":470,"updated":"2015-03-08 10:02:12.000000000","message":"whitespaces","commit_id":"e45e95e7606a184c3cc29dbd6c6932be8668783b"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"ea6fd9af7fac84943bc5e1bf4084e458fd7b4b9c","unresolved":false,"context_lines":[{"line_number":10,"context_line":"# -\u003e Python 2.6 or Python 2.7"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"PROG\u003d\"$(basename $0)\""},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"running_as_root() {"},{"line_number":16,"context_line":"  test $(/usr/bin/id -u) -eq 0"}],"source_content_type":"text/x-sh","patch_set":5,"id":"9a80dd14_0f999278","line":13,"updated":"2015-03-10 15:24:11.000000000","message":"This is true safety from whitespaces in path:\n\n PROG\u003d$(basename \"${0}\")","commit_id":"5f45e5bba358636413fcbc85490a5aa0fae59d85"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"ea6fd9af7fac84943bc5e1bf4084e458fd7b4b9c","unresolved":false,"context_lines":[{"line_number":98,"context_line":"${PROG}: ERROR: ${header}"},{"line_number":99,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"__EOF__"},{"line_number":102,"context_line":"  if [ $# -gt 0 ]; then"},{"line_number":103,"context_line":"      # print remaining arguments one per line"},{"line_number":104,"context_line":"      for line in \"$@\"; do"}],"source_content_type":"text/x-sh","patch_set":5,"id":"9a80dd14_0de8b515","line":101,"updated":"2015-03-10 15:24:11.000000000","message":"I see two heredoc marks within this file: `EOF\u0027 and `__EOF__\u0027 - let\u0027s use only one of them to make code unified","commit_id":"5f45e5bba358636413fcbc85490a5aa0fae59d85"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"ea6fd9af7fac84943bc5e1bf4084e458fd7b4b9c","unresolved":false,"context_lines":[{"line_number":110,"context_line":"  fi"},{"line_number":111,"context_line":"  cat 1\u003e\u00262 \u003c\u003c__EOF__"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"If the above does not help you solve the isue, please contact the"},{"line_number":114,"context_line":"Rally team by sending an email to the OpenStack mailing list"},{"line_number":115,"context_line":"openstack-dev@lists.openstack.org. Include the full output of this"},{"line_number":116,"context_line":"script to help us identifying the problem."}],"source_content_type":"text/x-sh","patch_set":5,"id":"9a80dd14_8070f1a4","line":113,"updated":"2015-03-10 15:24:11.000000000","message":"s/solve the isue/to resolve the issue/","commit_id":"5f45e5bba358636413fcbc85490a5aa0fae59d85"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"ea6fd9af7fac84943bc5e1bf4084e458fd7b4b9c","unresolved":false,"context_lines":[{"line_number":175,"context_line":"}"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"have_command () {"},{"line_number":178,"context_line":"  type \"$1\" \u003e/dev/null 2\u003e/dev/null"},{"line_number":179,"context_line":"}"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"require_python () {"}],"source_content_type":"text/x-sh","patch_set":5,"id":"9a80dd14_5bb34809","line":178,"updated":"2015-03-10 15:24:11.000000000","message":"which ${1} \u003e/dev/null  # checks only binaries","commit_id":"5f45e5bba358636413fcbc85490a5aa0fae59d85"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"ea6fd9af7fac84943bc5e1bf4084e458fd7b4b9c","unresolved":false,"context_lines":[{"line_number":182,"context_line":"    require_command \"$PYTHON\""},{"line_number":183,"context_line":"    # We only support python 2.6+, we do not support python 3.x at the"},{"line_number":184,"context_line":"    # moment."},{"line_number":185,"context_line":"    python_right_version\u003d$($PYTHON \u003c\u003cEOF"},{"line_number":186,"context_line":"import sys"},{"line_number":187,"context_line":"print(sys.version_info[0]\u003d\u003d2 and sys.version_info[1] \u003e\u003d 6)"},{"line_number":188,"context_line":"EOF"}],"source_content_type":"text/x-sh","patch_set":5,"id":"9a80dd14_a746ea1f","line":185,"updated":"2015-03-10 15:24:11.000000000","message":"This does not require extra function, looks more compact and clear:\n\n PYTHON_VERSIONS_SUPPORTED\u003d\"2.6 2.7\"\n PYTHON_VERSION\u003d(${PYTHON} -V 2\u003e\u00261 | cut -f 2 -d \\ | cut -f 1,2 -d .)\n\n echo ${PYTHON_VERSIONS_SUPPORTED}\\\n     | grep ${PYTHON_VERSION} \u003e/dev/null\\\n     || die ${EX_UNAVAILABLE}\\\n         \"Wrong version of python is installed\" \u003c\u003cEOF\n...\nEOF","commit_id":"5f45e5bba358636413fcbc85490a5aa0fae59d85"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"ea6fd9af7fac84943bc5e1bf4084e458fd7b4b9c","unresolved":false,"context_lines":[{"line_number":286,"context_line":"EOF"},{"line_number":287,"context_line":"            ask_yn \"Do you want me to install these packages for you?\""},{"line_number":288,"context_line":"            # ask if we have to install it"},{"line_number":289,"context_line":"            if [ \"$REPLY\" \u003d \u0027yes\u0027 ]; then"},{"line_number":290,"context_line":"                # install"},{"line_number":291,"context_line":"                $pkg_manager $missing"},{"line_number":292,"context_line":"                rc\u003d$?"}],"source_content_type":"text/x-sh","patch_set":5,"id":"9a80dd14_0d627516","line":289,"updated":"2015-03-10 15:24:11.000000000","message":"Here we have usage of implicitly changed variable $REPLY - this is hard to read/debug.\n\nIt seems that ask_yn return status is enough for that:\n\n if ask_yn \"Do you want me to install these packages for you?\"\n then\n     ...\n else\n     ...\n fi","commit_id":"5f45e5bba358636413fcbc85490a5aa0fae59d85"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"ea6fd9af7fac84943bc5e1bf4084e458fd7b4b9c","unresolved":false,"context_lines":[{"line_number":301,"context_line":"                fi"},{"line_number":302,"context_line":"                # installation successful"},{"line_number":303,"context_line":"            else # don\u0027t want to install the packages"},{"line_number":304,"context_line":"                # exit"},{"line_number":305,"context_line":"                die $EX_UNAVAILABLE \"missing software prerequisites\" \u003c\u003cEOF"},{"line_number":306,"context_line":"Please, install the required software before installing Rally"},{"line_number":307,"context_line":""}],"source_content_type":"text/x-sh","patch_set":5,"id":"9a80dd14_cd2dbdaa","line":304,"updated":"2015-03-10 15:24:11.000000000","message":"`# exit\u0027 is a kind of obvious comment, just remove it","commit_id":"5f45e5bba358636413fcbc85490a5aa0fae59d85"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"ea6fd9af7fac84943bc5e1bf4084e458fd7b4b9c","unresolved":false,"context_lines":[{"line_number":340,"context_line":"            pip install pymysql"},{"line_number":341,"context_line":"            ;;"},{"line_number":342,"context_line":"        postgres)"},{"line_number":343,"context_line":"            # We already install all needed packages for postgres"},{"line_number":344,"context_line":"            ;;"},{"line_number":345,"context_line":"    esac"},{"line_number":346,"context_line":"}"}],"source_content_type":"text/x-sh","patch_set":5,"id":"9a80dd14_1081aa4d","line":343,"updated":"2015-03-10 15:24:11.000000000","message":"If you have added this stub option for postgres, make the same for sqlite, otherwise remove this option","commit_id":"5f45e5bba358636413fcbc85490a5aa0fae59d85"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"ea6fd9af7fac84943bc5e1bf4084e458fd7b4b9c","unresolved":false,"context_lines":[{"line_number":347,"context_line":""},{"line_number":348,"context_line":"download_from_pypi () {"},{"line_number":349,"context_line":"    pkg\u003d$1"},{"line_number":350,"context_line":"    url\u003d$(download - $BASE_PIP_URL/$pkg/ | grep \"source/./$pkg.*gz\" |sed \u0027s:.*href\u003d\"\\([^#\"]*\\)[\"#].*:\\1:g\u0027 | sort | tail -1 )"},{"line_number":351,"context_line":"    if [ -n \"$url\" ]; then"},{"line_number":352,"context_line":"        download $(basename $url) $BASE_PIP_URL/$pkg/$url"},{"line_number":353,"context_line":"    else"}],"source_content_type":"text/x-sh","patch_set":5,"id":"9a80dd14_d09d5268","line":350,"updated":"2015-03-10 15:24:11.000000000","message":"Please move `download\u0027 function definition (lines 546-562) above this code","commit_id":"5f45e5bba358636413fcbc85490a5aa0fae59d85"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"ea6fd9af7fac84943bc5e1bf4084e458fd7b4b9c","unresolved":false,"context_lines":[{"line_number":513,"context_line":"if [ \"$USEVIRTUALENV\" \u003d \u0027yes\u0027 ]"},{"line_number":514,"context_line":"then"},{"line_number":515,"context_line":"    RALLY_CONFIGURATION_DIR\u003d~/.rally"},{"line_number":516,"context_line":"    RALLY_DATABASE_DIR\u003d$VENVDIR/database"},{"line_number":517,"context_line":"fi"},{"line_number":518,"context_line":""},{"line_number":519,"context_line":"if [ \"$DBTYPE\" !\u003d \u0027sqlite\u0027 ]"}],"source_content_type":"text/x-sh","patch_set":5,"id":"9a80dd14_fbb4f736","line":516,"updated":"2015-03-10 15:24:11.000000000","message":"In some rare cases, there can be white spaces in paths, so it is a good approach to escape VENVDIR by quotes:\n\n RALLY_DATABASE_DIR\u003d\"${VENVDIR}\"/database","commit_id":"5f45e5bba358636413fcbc85490a5aa0fae59d85"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"ea6fd9af7fac84943bc5e1bf4084e458fd7b4b9c","unresolved":false,"context_lines":[{"line_number":573,"context_line":"            echo"},{"line_number":574,"context_line":"            ask_yn \"Do you want to wipe the installation directory \u0027$VENVDIR\u0027?\""},{"line_number":575,"context_line":""},{"line_number":576,"context_line":"            if [ \"$REPLY\" \u003d \u0027no\u0027 ]; then"},{"line_number":577,"context_line":"                say \"*Not* overwriting destination directory \u0027$VENVDIR\u0027.\""},{"line_number":578,"context_line":"                OVERWRITEDIR\u003dno"},{"line_number":579,"context_line":"            fi"}],"source_content_type":"text/x-sh","patch_set":5,"id":"9a80dd14_3b620fae","line":576,"updated":"2015-03-10 15:24:11.000000000","message":"use return value of ask_yn:\n\n if ask_yn \"...\"\n then\n     ...\n fi","commit_id":"5f45e5bba358636413fcbc85490a5aa0fae59d85"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"ea6fd9af7fac84943bc5e1bf4084e458fd7b4b9c","unresolved":false,"context_lines":[{"line_number":615,"context_line":"fi"},{"line_number":616,"context_line":""},{"line_number":617,"context_line":"# Install rally"},{"line_number":618,"context_line":"orig_wd\u003d$PWD"},{"line_number":619,"context_line":""},{"line_number":620,"context_line":"BASEDIR\u003d$(dirname $(readlink -e $0))"},{"line_number":621,"context_line":""}],"source_content_type":"text/x-sh","patch_set":5,"id":"9a80dd14_9b7a1b24","line":618,"updated":"2015-03-10 15:24:11.000000000","message":"1) Let\u0027s use same style (uppercase) for all global-scope variables\n\n2) I do not recommend to rely on ${PWD} env variable, `pwd\u0027 command is more reliable\n\n ORIG_PWD\u003d$(pwd)","commit_id":"5f45e5bba358636413fcbc85490a5aa0fae59d85"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"ea6fd9af7fac84943bc5e1bf4084e458fd7b4b9c","unresolved":false,"context_lines":[{"line_number":628,"context_line":"    then"},{"line_number":629,"context_line":"        SOURCEDIR\u003d$VENVDIR/src"},{"line_number":630,"context_line":"    else"},{"line_number":631,"context_line":"        SOURCEDIR\u003d$PWD/rally.git"},{"line_number":632,"context_line":"    fi"},{"line_number":633,"context_line":""},{"line_number":634,"context_line":"    # Check if source directory is present"}],"source_content_type":"text/x-sh","patch_set":5,"id":"9a80dd14_bbd6ffc1","line":631,"updated":"2015-03-10 15:24:11.000000000","message":"ditto: `$(pwd)\u0027","commit_id":"5f45e5bba358636413fcbc85490a5aa0fae59d85"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"aa838c572ee7baf0c2948b778e15a34dee4e7ec9","unresolved":false,"context_lines":[{"line_number":339,"context_line":"            pip install pymysql"},{"line_number":340,"context_line":"            ;;"},{"line_number":341,"context_line":"        postgres)"},{"line_number":342,"context_line":"            # We already install all needed packages for postgres"},{"line_number":343,"context_line":"            ;;"},{"line_number":344,"context_line":"    esac"},{"line_number":345,"context_line":"}"}],"source_content_type":"text/x-sh","patch_set":6,"id":"9a80dd14_f0f09193","line":342,"updated":"2015-03-10 16:21:34.000000000","message":"Please remove postgres required library from requirements[*] and install it here.\n\n[*] - https://github.com/stackforge/rally/blob/master/requirements.txt#L21","commit_id":"b88461cefaa361fa942e065c4da07d634908e423"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"4c3998438e15cc2e32c210efa939f0335429e095","unresolved":false,"context_lines":[{"line_number":186,"context_line":""},{"line_number":187,"context_line":"require_python () {"},{"line_number":188,"context_line":"    require_command \"$PYTHON\""},{"line_number":189,"context_line":"    # We only support python 2.6+, we do not support python 3.x at the"},{"line_number":190,"context_line":"    # moment."},{"line_number":191,"context_line":"    python_right_version\u003d$($PYTHON \u003c\u003c__EOF__"},{"line_number":192,"context_line":"import sys"}],"source_content_type":"text/x-sh","patch_set":9,"id":"9a80dd14_4f5d0fe9","line":189,"updated":"2015-03-11 15:29:32.000000000","message":"python3.4 is now supported","commit_id":"d81165a4c262b2163943fd6fad193e2234f57108"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"f853a06f656159422eaac9af47b6f2b9a3c518b0","unresolved":false,"context_lines":[{"line_number":21,"context_line":"if running_as_root; then"},{"line_number":22,"context_line":"    VENVDIR\u003d/opt/rally"},{"line_number":23,"context_line":"else"},{"line_number":24,"context_line":"    VENVDIR\u003d$HOME/rally"},{"line_number":25,"context_line":"fi"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"ASKCONFIRMATION\u003d1"}],"source_content_type":"text/x-sh","patch_set":10,"id":"9a80dd14_e8c074e2","line":24,"updated":"2015-03-11 17:26:39.000000000","message":"This is confusing path - name of venv directory is the same as rally repository, consider about `rally_env\u0027 or something similar","commit_id":"7446ceab61c071ff4a5f100df3fd00718c736817"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"f853a06f656159422eaac9af47b6f2b9a3c518b0","unresolved":false,"context_lines":[{"line_number":63,"context_line":"EX_PROTOCOL\u003d76"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"err() {"},{"line_number":66,"context_line":"  echo \"$PROG: $@\" \u003e\u00262"},{"line_number":67,"context_line":"}"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"say () {"}],"source_content_type":"text/x-sh","patch_set":10,"id":"9a80dd14_633742b1","line":66,"updated":"2015-03-11 17:26:39.000000000","message":"Just a recommendation: what about same style for the whole script: $var -\u003e ${var}\n\n${var} - style is newest one, so I recommend to use it for all variables (even ${1} ${@})","commit_id":"7446ceab61c071ff4a5f100df3fd00718c736817"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"f853a06f656159422eaac9af47b6f2b9a3c518b0","unresolved":false,"context_lines":[{"line_number":125,"context_line":"Usage: $PROG [options]"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"This script will install rally either in the system (as root) or in a virtual environment."},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"Options:"},{"line_number":130,"context_line":"  -h, --help             Print this help text"},{"line_number":131,"context_line":"  -s, --system           Instead of creating a virtualenv, install as"}],"source_content_type":"text/x-sh","patch_set":10,"id":"9a80dd14_afb3e1e7","line":128,"updated":"2015-03-11 17:26:39.000000000","message":"Here should be a notice that virtualenv is used by default (this is not obvious for first sight)","commit_id":"7446ceab61c071ff4a5f100df3fd00718c736817"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"f853a06f656159422eaac9af47b6f2b9a3c518b0","unresolved":false,"context_lines":[{"line_number":467,"context_line":""},{"line_number":468,"context_line":"### Main program ###"},{"line_number":469,"context_line":"short_opts\u003d\u0027d:fsyhD:p:\u0027"},{"line_number":470,"context_line":"long_opts\u003d\u0027target:,force,system,yes,dbtype:,python:db-user:,db-password:,db-host:,db-name:,help\u0027"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"if [ \"x$(getopt -T)\" \u003d \u0027x\u0027 ]; then"},{"line_number":473,"context_line":"    # GNU getopt"}],"source_content_type":"text/x-sh","patch_set":10,"id":"9a80dd14_b57fb065","line":470,"updated":"2015-03-11 17:26:39.000000000","message":"s/,python:db-user:/,python:,db-user:/","commit_id":"7446ceab61c071ff4a5f100df3fd00718c736817"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"f853a06f656159422eaac9af47b6f2b9a3c518b0","unresolved":false,"context_lines":[{"line_number":625,"context_line":"            echo \"Removing directory $VENVDIR as requested.\""},{"line_number":626,"context_line":"            rm $verbose -rf \"$VENVDIR\""},{"line_number":627,"context_line":"        else"},{"line_number":628,"context_line":"            abort 66 \"Internal error: unexpected value \u0027$OVERWRITEDIR\u0027 for OVERWRITEDIR.\""},{"line_number":629,"context_line":"        fi"},{"line_number":630,"context_line":"    fi # if [ -d \"$VENVDIR\" ]"},{"line_number":631,"context_line":""}],"source_content_type":"text/x-sh","patch_set":10,"id":"9a80dd14_0f9f8d60","line":628,"updated":"2015-03-11 17:26:39.000000000","message":"http://paste.openstack.org/show/191638/","commit_id":"7446ceab61c071ff4a5f100df3fd00718c736817"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"f853a06f656159422eaac9af47b6f2b9a3c518b0","unresolved":false,"context_lines":[{"line_number":627,"context_line":"        else"},{"line_number":628,"context_line":"            abort 66 \"Internal error: unexpected value \u0027$OVERWRITEDIR\u0027 for OVERWRITEDIR.\""},{"line_number":629,"context_line":"        fi"},{"line_number":630,"context_line":"    fi # if [ -d \"$VENVDIR\" ]"},{"line_number":631,"context_line":""},{"line_number":632,"context_line":"    echo \"Installing Rally virtualenv in directory \u0027$VENVDIR\u0027 ...\""},{"line_number":633,"context_line":"    install_virtualenv \"$VENVDIR\""}],"source_content_type":"text/x-sh","patch_set":10,"id":"9a80dd14_6f61e9a7","line":630,"updated":"2015-03-11 17:26:39.000000000","message":"Remove \u0027# if [ -d \"$VENVDIR\" ]\u0027","commit_id":"7446ceab61c071ff4a5f100df3fd00718c736817"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"f853a06f656159422eaac9af47b6f2b9a3c518b0","unresolved":false,"context_lines":[{"line_number":738,"context_line":"    setup_rally_configuration $SOURCEDIR"},{"line_number":739,"context_line":""},{"line_number":740,"context_line":"    cat \u003c\u003c__EOF__"},{"line_number":741,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":742,"context_line":"Installation of Rally is done!"},{"line_number":743,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":744,"context_line":""}],"source_content_type":"text/x-sh","patch_set":10,"id":"9a80dd14_2f8e11d1","line":741,"updated":"2015-03-11 17:26:39.000000000","message":"Just a recommendation:\n\nIf we stop script by Ctrl+C, then we will see this message.\nI suggest implementing a small additional feature - graceful aborting (with removing venv dir) using shell `trap\u0027 builtin (catching SIGINT)\n\nhttp://bash.cyberciti.biz/guide/Trap_statement","commit_id":"7446ceab61c071ff4a5f100df3fd00718c736817"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"dd72aa329fe4eb64eb76329a3ed783066bbf107d","unresolved":false,"context_lines":[{"line_number":7,"context_line":"#"},{"line_number":8,"context_line":"# NOTE: The script assumes that you have the following"},{"line_number":9,"context_line":"# programs already installed:"},{"line_number":10,"context_line":"# -\u003e Python 2.6 or Python 2.7"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"PROG\u003d$(basename \"${0}\")"}],"source_content_type":"text/x-sh","patch_set":11,"id":"9a80dd14_d4eec18a","line":10,"updated":"2015-03-12 10:59:55.000000000","message":"please, update this line","commit_id":"384790a5f93dcee5d90863f39204b18a24ea4a35"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"b3207e94c1932ef4e01eeb31f287f5511c0bebf3","unresolved":false,"context_lines":[{"line_number":7,"context_line":"#"},{"line_number":8,"context_line":"# NOTE: The script assumes that you have the following"},{"line_number":9,"context_line":"# programs already installed:"},{"line_number":10,"context_line":"# -\u003e Python 2.6 or Python 2.7"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"PROG\u003d$(basename \"${0}\")"}],"source_content_type":"text/x-sh","patch_set":11,"id":"9a80dd14_53043549","line":10,"in_reply_to":"9a80dd14_d4eec18a","updated":"2015-04-20 17:11:28.000000000","message":"We are supporting python 3.4 as well","commit_id":"384790a5f93dcee5d90863f39204b18a24ea4a35"},{"author":{"_account_id":10459,"name":"Luigi Toscano","email":"ltoscano@redhat.com","username":"ltoscano"},"change_message_id":"71af3ac2b9f8c9dc26d67ff3ec168cd16e91f8c8","unresolved":false,"context_lines":[{"line_number":21,"context_line":"if running_as_root; then"},{"line_number":22,"context_line":"    VENVDIR\u003d/opt/rally"},{"line_number":23,"context_line":"else"},{"line_number":24,"context_line":"    VENVDIR\u003d$HOME/rally"},{"line_number":25,"context_line":"fi"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"ASKCONFIRMATION\u003d1"}],"source_content_type":"text/x-sh","patch_set":11,"id":"9a80dd14_3b25815c","line":24,"updated":"2015-03-17 14:49:53.000000000","message":"It would be nice to have this configurable, something like:\nVENVDIR\u003d${VENVDIR:-$HOME/rally}","commit_id":"384790a5f93dcee5d90863f39204b18a24ea4a35"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"b3207e94c1932ef4e01eeb31f287f5511c0bebf3","unresolved":false,"context_lines":[{"line_number":21,"context_line":"if running_as_root; then"},{"line_number":22,"context_line":"    VENVDIR\u003d/opt/rally"},{"line_number":23,"context_line":"else"},{"line_number":24,"context_line":"    VENVDIR\u003d$HOME/rally"},{"line_number":25,"context_line":"fi"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"ASKCONFIRMATION\u003d1"}],"source_content_type":"text/x-sh","patch_set":11,"id":"dac4157f_215c8d24","line":24,"in_reply_to":"9a80dd14_3b25815c","updated":"2015-04-20 17:11:28.000000000","message":"yep like I said in some other file: \n\n\n  ./install_rally.sh --venv to_somehwere","commit_id":"384790a5f93dcee5d90863f39204b18a24ea4a35"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"64dbe4f34434aa1d0ef3b0fb330059d54d66fb9b","unresolved":false,"context_lines":[{"line_number":21,"context_line":"if running_as_root; then"},{"line_number":22,"context_line":"    VENVDIR\u003d/opt/rally"},{"line_number":23,"context_line":"else"},{"line_number":24,"context_line":"    VENVDIR\u003d$HOME/rally"},{"line_number":25,"context_line":"fi"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"ASKCONFIRMATION\u003d1"}],"source_content_type":"text/x-sh","patch_set":11,"id":"3acd31a7_3c98c777","line":24,"in_reply_to":"dac4157f_215c8d24","updated":"2015-05-05 12:44:55.000000000","message":"Done","commit_id":"384790a5f93dcee5d90863f39204b18a24ea4a35"},{"author":{"_account_id":10459,"name":"Luigi Toscano","email":"ltoscano@redhat.com","username":"ltoscano"},"change_message_id":"71af3ac2b9f8c9dc26d67ff3ec168cd16e91f8c8","unresolved":false,"context_lines":[{"line_number":335,"context_line":"        fi"},{"line_number":336,"context_line":"    elif have_command yum; then"},{"line_number":337,"context_line":"        # RHEL/CentOS"},{"line_number":338,"context_line":"        missing\u003d$(which_missing_packages gcc libffi-devel python-devel openssl-devel gmp-devel libxml2-devel libxslt-devel git)"},{"line_number":339,"context_line":"        if running_as_root \u0026\u0026 ! have_command pip; then"},{"line_number":340,"context_line":"            if [ -z \"$missing\" ]"},{"line_number":341,"context_line":"            then"}],"source_content_type":"text/x-sh","patch_set":11,"id":"9a80dd14_a02f87a6","line":338,"updated":"2015-03-17 14:49:53.000000000","message":"On Fedora 21 and CentOS7 (so 99% on RHEL7, didn\u0027t try yet), the pip installation phase fails because pg_config and postgresql headers are missing (part of postgresql and postgresql-devel packages respectively). Both are needed by psycopg2.","commit_id":"384790a5f93dcee5d90863f39204b18a24ea4a35"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"64dbe4f34434aa1d0ef3b0fb330059d54d66fb9b","unresolved":false,"context_lines":[{"line_number":335,"context_line":"        fi"},{"line_number":336,"context_line":"    elif have_command yum; then"},{"line_number":337,"context_line":"        # RHEL/CentOS"},{"line_number":338,"context_line":"        missing\u003d$(which_missing_packages gcc libffi-devel python-devel openssl-devel gmp-devel libxml2-devel libxslt-devel git)"},{"line_number":339,"context_line":"        if running_as_root \u0026\u0026 ! have_command pip; then"},{"line_number":340,"context_line":"            if [ -z \"$missing\" ]"},{"line_number":341,"context_line":"            then"}],"source_content_type":"text/x-sh","patch_set":11,"id":"3acd31a7_fcab6f73","line":338,"in_reply_to":"9a80dd14_a02f87a6","updated":"2015-05-05 12:44:55.000000000","message":"Done","commit_id":"384790a5f93dcee5d90863f39204b18a24ea4a35"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"b3207e94c1932ef4e01eeb31f287f5511c0bebf3","unresolved":false,"context_lines":[{"line_number":335,"context_line":"        fi"},{"line_number":336,"context_line":"    elif have_command yum; then"},{"line_number":337,"context_line":"        # RHEL/CentOS"},{"line_number":338,"context_line":"        missing\u003d$(which_missing_packages gcc libffi-devel python-devel openssl-devel gmp-devel libxml2-devel libxslt-devel git)"},{"line_number":339,"context_line":"        if running_as_root \u0026\u0026 ! have_command pip; then"},{"line_number":340,"context_line":"            if [ -z \"$missing\" ]"},{"line_number":341,"context_line":"            then"}],"source_content_type":"text/x-sh","patch_set":11,"id":"dac4157f_e1ac55ef","line":338,"in_reply_to":"9a80dd14_a02f87a6","updated":"2015-04-20 17:11:28.000000000","message":"Luigi, \n\nThank you for testing, this should be addressed I think.","commit_id":"384790a5f93dcee5d90863f39204b18a24ea4a35"},{"author":{"_account_id":9601,"name":"Oleh Anufriiev","email":"oanufriev@mirantis.com","username":"oanufriev"},"change_message_id":"31f7357faa9aad211cc2bb09efd9eef7347d3283","unresolved":false,"context_lines":[{"line_number":461,"context_line":"    # Use the latest virtualenv that can use `.tar.gz` files"},{"line_number":462,"context_line":"    VIRTUALENV_URL\u003d$VIRTUALENV_191_URL"},{"line_number":463,"context_line":""},{"line_number":464,"context_line":"    download virtualenv.py $VIRTUALENV_URL"},{"line_number":465,"context_line":"    VIRTUALENV_CMD\u003d\"$PYTHON virtualenv.py\""},{"line_number":466,"context_line":""},{"line_number":467,"context_line":"    # python virtualenv.py --[no,system]-site-packages $DESTDIR"}],"source_content_type":"text/x-sh","patch_set":11,"id":"9a80dd14_902468c7","line":464,"updated":"2015-03-12 00:40:42.000000000","message":"you can use \u0027pip install -U --user virtualenv\u0027 here","commit_id":"384790a5f93dcee5d90863f39204b18a24ea4a35"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"b3207e94c1932ef4e01eeb31f287f5511c0bebf3","unresolved":false,"context_lines":[{"line_number":461,"context_line":"    # Use the latest virtualenv that can use `.tar.gz` files"},{"line_number":462,"context_line":"    VIRTUALENV_URL\u003d$VIRTUALENV_191_URL"},{"line_number":463,"context_line":""},{"line_number":464,"context_line":"    download virtualenv.py $VIRTUALENV_URL"},{"line_number":465,"context_line":"    VIRTUALENV_CMD\u003d\"$PYTHON virtualenv.py\""},{"line_number":466,"context_line":""},{"line_number":467,"context_line":"    # python virtualenv.py --[no,system]-site-packages $DESTDIR"}],"source_content_type":"text/x-sh","patch_set":11,"id":"dac4157f_c1903198","line":464,"in_reply_to":"9a80dd14_28e89eb3","updated":"2015-04-20 17:11:28.000000000","message":"Let\u0027s keep as is","commit_id":"384790a5f93dcee5d90863f39204b18a24ea4a35"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"b53cfe919737ff4683e8bb2ee3e9120b550da1e0","unresolved":false,"context_lines":[{"line_number":461,"context_line":"    # Use the latest virtualenv that can use `.tar.gz` files"},{"line_number":462,"context_line":"    VIRTUALENV_URL\u003d$VIRTUALENV_191_URL"},{"line_number":463,"context_line":""},{"line_number":464,"context_line":"    download virtualenv.py $VIRTUALENV_URL"},{"line_number":465,"context_line":"    VIRTUALENV_CMD\u003d\"$PYTHON virtualenv.py\""},{"line_number":466,"context_line":""},{"line_number":467,"context_line":"    # python virtualenv.py --[no,system]-site-packages $DESTDIR"}],"source_content_type":"text/x-sh","patch_set":11,"id":"9a80dd14_28e89eb3","line":464,"in_reply_to":"9a80dd14_902468c7","updated":"2015-03-12 12:26:50.000000000","message":"I prefer to not do it in such way.\n\nI have found that some users from community have troubles when they have two packages: python-virtualenv installed via apt-get and virtualenv via pip.","commit_id":"384790a5f93dcee5d90863f39204b18a24ea4a35"},{"author":{"_account_id":9601,"name":"Oleh Anufriiev","email":"oanufriev@mirantis.com","username":"oanufriev"},"change_message_id":"31f7357faa9aad211cc2bb09efd9eef7347d3283","unresolved":false,"context_lines":[{"line_number":595,"context_line":"# Fix RALLY_DATABASE_DIR if virtualenv is used"},{"line_number":596,"context_line":"if [ \"$USEVIRTUALENV\" \u003d \u0027yes\u0027 ]"},{"line_number":597,"context_line":"then"},{"line_number":598,"context_line":"    RALLY_CONFIGURATION_DIR\u003d~/.rally"},{"line_number":599,"context_line":"    RALLY_DATABASE_DIR\u003d\"$VENVDIR\"/database"},{"line_number":600,"context_line":"fi"},{"line_number":601,"context_line":""}],"source_content_type":"text/x-sh","patch_set":11,"id":"9a80dd14_db1c416d","line":598,"updated":"2015-03-12 00:40:42.000000000","message":"with \"~/.rally/rally.conf\" you can\u0027t have more than one installation of Rally per user\n\nmay be something like $VIRTUALENV_DIR/etc/rally.conf?","commit_id":"384790a5f93dcee5d90863f39204b18a24ea4a35"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"b3207e94c1932ef4e01eeb31f287f5511c0bebf3","unresolved":false,"context_lines":[{"line_number":595,"context_line":"# Fix RALLY_DATABASE_DIR if virtualenv is used"},{"line_number":596,"context_line":"if [ \"$USEVIRTUALENV\" \u003d \u0027yes\u0027 ]"},{"line_number":597,"context_line":"then"},{"line_number":598,"context_line":"    RALLY_CONFIGURATION_DIR\u003d~/.rally"},{"line_number":599,"context_line":"    RALLY_DATABASE_DIR\u003d\"$VENVDIR\"/database"},{"line_number":600,"context_line":"fi"},{"line_number":601,"context_line":""}],"source_content_type":"text/x-sh","patch_set":11,"id":"dac4157f_c1bef1fe","line":598,"in_reply_to":"9a80dd14_776d1799","updated":"2015-04-20 17:11:28.000000000","message":"Agree with Alex, let\u0027s do this in separated patch.","commit_id":"384790a5f93dcee5d90863f39204b18a24ea4a35"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"9c239ca8d402762b06590939763c9adffa56e998","unresolved":false,"context_lines":[{"line_number":595,"context_line":"# Fix RALLY_DATABASE_DIR if virtualenv is used"},{"line_number":596,"context_line":"if [ \"$USEVIRTUALENV\" \u003d \u0027yes\u0027 ]"},{"line_number":597,"context_line":"then"},{"line_number":598,"context_line":"    RALLY_CONFIGURATION_DIR\u003d~/.rally"},{"line_number":599,"context_line":"    RALLY_DATABASE_DIR\u003d\"$VENVDIR\"/database"},{"line_number":600,"context_line":"fi"},{"line_number":601,"context_line":""}],"source_content_type":"text/x-sh","patch_set":11,"id":"9a80dd14_776d1799","line":598,"in_reply_to":"9a80dd14_db1c416d","updated":"2015-03-12 11:50:04.000000000","message":"This is good idea but it requires significant changes in rally. I think this feature can be skipped for this patch since this patch is already a great improvement","commit_id":"384790a5f93dcee5d90863f39204b18a24ea4a35"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"8f16f03baf170dd9cd0099354760d95fd576235c","unresolved":false,"context_lines":[{"line_number":21,"context_line":"if running_as_root; then"},{"line_number":22,"context_line":"    USEVIRTUALENV\u003dno"},{"line_number":23,"context_line":"fi"},{"line_number":24,"context_line":"VENVDIR\u003d$HOME/rally"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"ASKCONFIRMATION\u003d1"},{"line_number":27,"context_line":"OVERWRITEDIR\u003dask"}],"source_content_type":"text/x-sh","patch_set":12,"id":"3acd31a7_5c1b7173","line":24,"updated":"2015-05-05 18:31:48.000000000","message":"Quote $HOME.","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"0c4de89458241682703a7de29089332612817821","unresolved":false,"context_lines":[{"line_number":21,"context_line":"if running_as_root; then"},{"line_number":22,"context_line":"    USEVIRTUALENV\u003dno"},{"line_number":23,"context_line":"fi"},{"line_number":24,"context_line":"VENVDIR\u003d$HOME/rally"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"ASKCONFIRMATION\u003d1"},{"line_number":27,"context_line":"OVERWRITEDIR\u003dask"}],"source_content_type":"text/x-sh","patch_set":12,"id":"1aca2d91_050c1493","line":24,"in_reply_to":"3acd31a7_5c1b7173","updated":"2015-05-06 12:28:21.000000000","message":"Done","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"8f16f03baf170dd9cd0099354760d95fd576235c","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"PYTHON\u003dpython"},{"line_number":30,"context_line":"BASE_PIP_URL\u003d\"https://pypi.python.org/simple\""},{"line_number":31,"context_line":"VIRTUALENV_LATEST_URL\u003d\"https://raw.github.com/pypa/virtualenv/master/virtualenv.py\""},{"line_number":32,"context_line":"# version 1.9.1 is the safest so far"},{"line_number":33,"context_line":"VIRTUALENV_191_URL\u003d\"https://raw.github.com/pypa/virtualenv/1.9.1/virtualenv.py\""},{"line_number":34,"context_line":"VIRTUALENV_CMD\u003d\"virtualenv\""}],"source_content_type":"text/x-sh","patch_set":12,"id":"3acd31a7_3c6795b8","line":31,"updated":"2015-05-05 18:31:48.000000000","message":"This variable is unused.","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"0c4de89458241682703a7de29089332612817821","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"PYTHON\u003dpython"},{"line_number":30,"context_line":"BASE_PIP_URL\u003d\"https://pypi.python.org/simple\""},{"line_number":31,"context_line":"VIRTUALENV_LATEST_URL\u003d\"https://raw.github.com/pypa/virtualenv/master/virtualenv.py\""},{"line_number":32,"context_line":"# version 1.9.1 is the safest so far"},{"line_number":33,"context_line":"VIRTUALENV_191_URL\u003d\"https://raw.github.com/pypa/virtualenv/1.9.1/virtualenv.py\""},{"line_number":34,"context_line":"VIRTUALENV_CMD\u003d\"virtualenv\""}],"source_content_type":"text/x-sh","patch_set":12,"id":"1aca2d91_e510f8aa","line":31,"in_reply_to":"3acd31a7_3c6795b8","updated":"2015-05-06 12:28:21.000000000","message":"Done","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"8f16f03baf170dd9cd0099354760d95fd576235c","unresolved":false,"context_lines":[{"line_number":227,"context_line":"    # moment."},{"line_number":228,"context_line":"    python_right_version\u003d$($PYTHON \u003c\u003c__EOF__"},{"line_number":229,"context_line":"import sys"},{"line_number":230,"context_line":"print((sys.version_info[0]\u003d\u003d2 and sys.version_info[1] \u003e\u003d 6) or sys.version_info[:2] \u003d\u003d (3,4))"},{"line_number":231,"context_line":"__EOF__"},{"line_number":232,"context_line":")"},{"line_number":233,"context_line":""}],"source_content_type":"text/x-sh","patch_set":12,"id":"3acd31a7_d1e40ae1","line":230,"updated":"2015-05-05 18:31:48.000000000","message":"Nit: Inconsistent Python style in this scriptlet. No spaces around the first \u003d\u003d.","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"0c4de89458241682703a7de29089332612817821","unresolved":false,"context_lines":[{"line_number":227,"context_line":"    # moment."},{"line_number":228,"context_line":"    python_right_version\u003d$($PYTHON \u003c\u003c__EOF__"},{"line_number":229,"context_line":"import sys"},{"line_number":230,"context_line":"print((sys.version_info[0]\u003d\u003d2 and sys.version_info[1] \u003e\u003d 6) or sys.version_info[:2] \u003d\u003d (3,4))"},{"line_number":231,"context_line":"__EOF__"},{"line_number":232,"context_line":")"},{"line_number":233,"context_line":""}],"source_content_type":"text/x-sh","patch_set":12,"id":"1aca2d91_c56dfc33","line":230,"in_reply_to":"3acd31a7_d1e40ae1","updated":"2015-05-06 12:28:21.000000000","message":"Done","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"8f16f03baf170dd9cd0099354760d95fd576235c","unresolved":false,"context_lines":[{"line_number":231,"context_line":"__EOF__"},{"line_number":232,"context_line":")"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    if [ \"$python_right_version\" !\u003d \"True\" ]; then"},{"line_number":235,"context_line":"        die $EX_UNAVAILABLE \"Wrong version of python is installed\" \u003c\u003c__EOF__"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"Rally requires Python version 2.6+. Unfortunately, we do not support"}],"source_content_type":"text/x-sh","patch_set":12,"id":"3acd31a7_31bfbeab","line":234,"updated":"2015-05-05 18:31:48.000000000","message":"I feel like this would be more elegant if it used the return value of the scriptlet rather than the output.","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"0c4de89458241682703a7de29089332612817821","unresolved":false,"context_lines":[{"line_number":231,"context_line":"__EOF__"},{"line_number":232,"context_line":")"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    if [ \"$python_right_version\" !\u003d \"True\" ]; then"},{"line_number":235,"context_line":"        die $EX_UNAVAILABLE \"Wrong version of python is installed\" \u003c\u003c__EOF__"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"Rally requires Python version 2.6+. Unfortunately, we do not support"}],"source_content_type":"text/x-sh","patch_set":12,"id":"1aca2d91_087c2971","line":234,"in_reply_to":"3acd31a7_31bfbeab","updated":"2015-05-06 12:28:21.000000000","message":"Done","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"8f16f03baf170dd9cd0099354760d95fd576235c","unresolved":false,"context_lines":[{"line_number":249,"context_line":"    # instead of guessing which distribution this is, we check for the"},{"line_number":250,"context_line":"    # package manager name as it basically identifies the distro"},{"line_number":251,"context_line":"    if have_command dpkg; then"},{"line_number":252,"context_line":"        (dpkg -l \"$1\" | egrep -q ^i ) \u003e/dev/null 2\u003e/dev/null;"},{"line_number":253,"context_line":"    elif have_command rpm; then"},{"line_number":254,"context_line":"        rpm -q \"$1\" \u003e/dev/null 2\u003e/dev/null;"},{"line_number":255,"context_line":"    fi"}],"source_content_type":"text/x-sh","patch_set":12,"id":"3acd31a7_71d096f6","line":252,"updated":"2015-05-05 18:31:48.000000000","message":"Unnecessary trailing semicolon. You\u0027ve got a few of these.","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"0c4de89458241682703a7de29089332612817821","unresolved":false,"context_lines":[{"line_number":249,"context_line":"    # instead of guessing which distribution this is, we check for the"},{"line_number":250,"context_line":"    # package manager name as it basically identifies the distro"},{"line_number":251,"context_line":"    if have_command dpkg; then"},{"line_number":252,"context_line":"        (dpkg -l \"$1\" | egrep -q ^i ) \u003e/dev/null 2\u003e/dev/null;"},{"line_number":253,"context_line":"    elif have_command rpm; then"},{"line_number":254,"context_line":"        rpm -q \"$1\" \u003e/dev/null 2\u003e/dev/null;"},{"line_number":255,"context_line":"    fi"}],"source_content_type":"text/x-sh","patch_set":12,"id":"1aca2d91_c8dd1172","line":252,"in_reply_to":"3acd31a7_71d096f6","updated":"2015-05-06 12:28:21.000000000","message":"Done","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"8f16f03baf170dd9cd0099354760d95fd576235c","unresolved":false,"context_lines":[{"line_number":256,"context_line":"}"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"which_missing_packages () {"},{"line_number":259,"context_line":"    missing\u003d\u0027\u0027"},{"line_number":260,"context_line":"    for pkgname in \"$@\"; do"},{"line_number":261,"context_line":"        if have_sw_package \"$pkgname\"; then"},{"line_number":262,"context_line":"            continue;"}],"source_content_type":"text/x-sh","patch_set":12,"id":"3acd31a7_11060286","line":259,"updated":"2015-05-05 18:31:48.000000000","message":"local missing\u003d\u0027\u0027\n\nFor safety.","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"0c4de89458241682703a7de29089332612817821","unresolved":false,"context_lines":[{"line_number":256,"context_line":"}"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"which_missing_packages () {"},{"line_number":259,"context_line":"    missing\u003d\u0027\u0027"},{"line_number":260,"context_line":"    for pkgname in \"$@\"; do"},{"line_number":261,"context_line":"        if have_sw_package \"$pkgname\"; then"},{"line_number":262,"context_line":"            continue;"}],"source_content_type":"text/x-sh","patch_set":12,"id":"1aca2d91_68e4bd3a","line":259,"in_reply_to":"3acd31a7_11060286","updated":"2015-05-06 12:28:21.000000000","message":"Done","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"8f16f03baf170dd9cd0099354760d95fd576235c","unresolved":false,"context_lines":[{"line_number":271,"context_line":"    # check if the package is present, and install it using pip otherwise."},{"line_number":272,"context_line":"    # This function assumes you are running in the correct virtual environment"},{"line_number":273,"context_line":"    pkgs\u003d\"$@\""},{"line_number":274,"context_line":"    missing\u003d$(for pkg in $pkgs; do pip list | egrep \"^$pkg \" \u003e\u0026 /dev/null || echo $pkg; done)"},{"line_number":275,"context_line":"    pip install $missing"},{"line_number":276,"context_line":"}"},{"line_number":277,"context_line":""}],"source_content_type":"text/x-sh","patch_set":12,"id":"3acd31a7_b1006e67","line":274,"updated":"2015-05-05 18:31:48.000000000","message":"local missing\u003d...","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"0c4de89458241682703a7de29089332612817821","unresolved":false,"context_lines":[{"line_number":271,"context_line":"    # check if the package is present, and install it using pip otherwise."},{"line_number":272,"context_line":"    # This function assumes you are running in the correct virtual environment"},{"line_number":273,"context_line":"    pkgs\u003d\"$@\""},{"line_number":274,"context_line":"    missing\u003d$(for pkg in $pkgs; do pip list | egrep \"^$pkg \" \u003e\u0026 /dev/null || echo $pkg; done)"},{"line_number":275,"context_line":"    pip install $missing"},{"line_number":276,"context_line":"}"},{"line_number":277,"context_line":""}],"source_content_type":"text/x-sh","patch_set":12,"id":"1aca2d91_28d5a542","line":274,"in_reply_to":"3acd31a7_b1006e67","updated":"2015-05-06 12:28:21.000000000","message":"Done","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"8f16f03baf170dd9cd0099354760d95fd576235c","unresolved":false,"context_lines":[{"line_number":278,"context_line":"# Download command"},{"line_number":279,"context_line":"if have_command wget"},{"line_number":280,"context_line":"then"},{"line_number":281,"context_line":"    download () { wget -nv $verbose --no-check-certificate -O \"$@\"; }"},{"line_number":282,"context_line":"elif have_command curl"},{"line_number":283,"context_line":"then"},{"line_number":284,"context_line":"    download () { curl $verbose --insecure -L -s -o \"$@\"; }"}],"source_content_type":"text/x-sh","patch_set":12,"id":"3acd31a7_710bf62a","line":281,"updated":"2015-05-05 18:31:48.000000000","message":"AFAICT $verbose is never set anywhere, but it\u0027s used four times.","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"8f16f03baf170dd9cd0099354760d95fd576235c","unresolved":false,"context_lines":[{"line_number":294,"context_line":"fi"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"download_from_pypi () {"},{"line_number":297,"context_line":"    pkg\u003d$1"},{"line_number":298,"context_line":"    url\u003d$(download - $BASE_PIP_URL/$pkg/ | grep \"source/./$pkg.*gz\" |sed \u0027s:.*href\u003d\"\\([^#\"]*\\)[\"#].*:\\1:g\u0027 | sort | tail -1 )"},{"line_number":299,"context_line":"    if [ -n \"$url\" ]; then"},{"line_number":300,"context_line":"        download $(basename $url) $BASE_PIP_URL/$pkg/$url"}],"source_content_type":"text/x-sh","patch_set":12,"id":"3acd31a7_112de2fd","line":297,"updated":"2015-05-05 18:31:48.000000000","message":"local pkg\u003d$1","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"0c4de89458241682703a7de29089332612817821","unresolved":false,"context_lines":[{"line_number":294,"context_line":"fi"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"download_from_pypi () {"},{"line_number":297,"context_line":"    pkg\u003d$1"},{"line_number":298,"context_line":"    url\u003d$(download - $BASE_PIP_URL/$pkg/ | grep \"source/./$pkg.*gz\" |sed \u0027s:.*href\u003d\"\\([^#\"]*\\)[\"#].*:\\1:g\u0027 | sort | tail -1 )"},{"line_number":299,"context_line":"    if [ -n \"$url\" ]; then"},{"line_number":300,"context_line":"        download $(basename $url) $BASE_PIP_URL/$pkg/$url"}],"source_content_type":"text/x-sh","patch_set":12,"id":"1aca2d91_a86f7591","line":297,"in_reply_to":"3acd31a7_112de2fd","updated":"2015-05-06 12:28:21.000000000","message":"Done","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"8f16f03baf170dd9cd0099354760d95fd576235c","unresolved":false,"context_lines":[{"line_number":295,"context_line":""},{"line_number":296,"context_line":"download_from_pypi () {"},{"line_number":297,"context_line":"    pkg\u003d$1"},{"line_number":298,"context_line":"    url\u003d$(download - $BASE_PIP_URL/$pkg/ | grep \"source/./$pkg.*gz\" |sed \u0027s:.*href\u003d\"\\([^#\"]*\\)[\"#].*:\\1:g\u0027 | sort | tail -1 )"},{"line_number":299,"context_line":"    if [ -n \"$url\" ]; then"},{"line_number":300,"context_line":"        download $(basename $url) $BASE_PIP_URL/$pkg/$url"},{"line_number":301,"context_line":"    else"}],"source_content_type":"text/x-sh","patch_set":12,"id":"3acd31a7_f131465b","line":298,"updated":"2015-05-05 18:31:48.000000000","message":"It would make me feel a lot better if you quoted $BASE_PIP_URL and $pkg here and below.\n\nYou can also save a fork here by doing:\n\n    url\u003d$(download - \"$BASE_PIP_URL\"/\"$pkg\"/ | sed -n \u0027/source\\/.\\/\u0027\"$pkg\"\u0027.*gz/ { s:.*href\u003d\"\\([^#\"]*\\)[\"#].*:\\1:g; p; }\u0027 | sort | tail -1)\n\nBut that\u0027s kind of bash golf.","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"0c4de89458241682703a7de29089332612817821","unresolved":false,"context_lines":[{"line_number":295,"context_line":""},{"line_number":296,"context_line":"download_from_pypi () {"},{"line_number":297,"context_line":"    pkg\u003d$1"},{"line_number":298,"context_line":"    url\u003d$(download - $BASE_PIP_URL/$pkg/ | grep \"source/./$pkg.*gz\" |sed \u0027s:.*href\u003d\"\\([^#\"]*\\)[\"#].*:\\1:g\u0027 | sort | tail -1 )"},{"line_number":299,"context_line":"    if [ -n \"$url\" ]; then"},{"line_number":300,"context_line":"        download $(basename $url) $BASE_PIP_URL/$pkg/$url"},{"line_number":301,"context_line":"    else"}],"source_content_type":"text/x-sh","patch_set":12,"id":"1aca2d91_c820714c","line":298,"in_reply_to":"3acd31a7_f131465b","updated":"2015-05-06 12:28:21.000000000","message":"Done","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"8f16f03baf170dd9cd0099354760d95fd576235c","unresolved":false,"context_lines":[{"line_number":308,"context_line":"install_required_sw () {"},{"line_number":309,"context_line":"    # instead of guessing which distribution this is, we check for the"},{"line_number":310,"context_line":"    # package manager name as it basically identifies the distro"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"    if have_command apt-get; then"},{"line_number":313,"context_line":"        # Debian/Ubuntu"},{"line_number":314,"context_line":"        missing\u003d$(which_missing_packages build-essential libssl-dev libffi-dev python-dev libxml2-dev libxslt1-dev libpq-dev git)"}],"source_content_type":"text/x-sh","patch_set":12,"id":"3acd31a7_f1f4a65b","line":311,"updated":"2015-05-05 18:31:48.000000000","message":"You need a \u0027local missing pkg_manager\u0027 somewhere up here. (Or declare them local each time you first use them.)","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"0c4de89458241682703a7de29089332612817821","unresolved":false,"context_lines":[{"line_number":308,"context_line":"install_required_sw () {"},{"line_number":309,"context_line":"    # instead of guessing which distribution this is, we check for the"},{"line_number":310,"context_line":"    # package manager name as it basically identifies the distro"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"    if have_command apt-get; then"},{"line_number":313,"context_line":"        # Debian/Ubuntu"},{"line_number":314,"context_line":"        missing\u003d$(which_missing_packages build-essential libssl-dev libffi-dev python-dev libxml2-dev libxslt1-dev libpq-dev git)"}],"source_content_type":"text/x-sh","patch_set":12,"id":"1aca2d91_a8e4150d","line":311,"in_reply_to":"3acd31a7_f1f4a65b","updated":"2015-05-06 12:28:21.000000000","message":"Done","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"f4553f46a6a34787ecaec5c3d24b035913456e23","unresolved":false,"context_lines":[{"line_number":311,"context_line":""},{"line_number":312,"context_line":"    if have_command apt-get; then"},{"line_number":313,"context_line":"        # Debian/Ubuntu"},{"line_number":314,"context_line":"        missing\u003d$(which_missing_packages build-essential libssl-dev libffi-dev python-dev libxml2-dev libxslt1-dev libpq-dev git)"},{"line_number":315,"context_line":"        if running_as_root; then"},{"line_number":316,"context_line":"            if [ -z \"$missing\" ]"},{"line_number":317,"context_line":"            then"}],"source_content_type":"text/x-sh","patch_set":12,"id":"3acd31a7_3df8be7a","line":314,"updated":"2015-05-05 13:00:25.000000000","message":"based on install.rst:\n\u003eif you execute the script as regular user, Rally will create a new\n\u003evirtual environment in ``~/rally/`` and install in it Rally, and will\n\u003euse `sqlite` as database backend. For more installation options,\n\u003eplease refer to the :ref:`installation \u003cinstall\u003e` page.\n\nwhy we need `libpq-dev` requirement here?","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":10459,"name":"Luigi Toscano","email":"ltoscano@redhat.com","username":"ltoscano"},"change_message_id":"e930ee9f12cb4ff026f4627a796dfe71776452ca","unresolved":false,"context_lines":[{"line_number":311,"context_line":""},{"line_number":312,"context_line":"    if have_command apt-get; then"},{"line_number":313,"context_line":"        # Debian/Ubuntu"},{"line_number":314,"context_line":"        missing\u003d$(which_missing_packages build-essential libssl-dev libffi-dev python-dev libxml2-dev libxslt1-dev libpq-dev git)"},{"line_number":315,"context_line":"        if running_as_root; then"},{"line_number":316,"context_line":"            if [ -z \"$missing\" ]"},{"line_number":317,"context_line":"            then"}],"source_content_type":"text/x-sh","patch_set":12,"id":"3acd31a7_e28bbd66","line":314,"in_reply_to":"3acd31a7_3df8be7a","updated":"2015-05-05 15:42:03.000000000","message":"It won\u0027t work without. Quoting myself from the previous review: \"On Fedora 21 and CentOS7 [...] the pip installation phase fails because pg_config and postgresql headers are missing (part of postgresql and postgresql-devel packages respectively). Both are needed by psycopg2.\"","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"0942ea440e251255df74303aacfe6e482f24774f","unresolved":false,"context_lines":[{"line_number":311,"context_line":""},{"line_number":312,"context_line":"    if have_command apt-get; then"},{"line_number":313,"context_line":"        # Debian/Ubuntu"},{"line_number":314,"context_line":"        missing\u003d$(which_missing_packages build-essential libssl-dev libffi-dev python-dev libxml2-dev libxslt1-dev libpq-dev git)"},{"line_number":315,"context_line":"        if running_as_root; then"},{"line_number":316,"context_line":"            if [ -z \"$missing\" ]"},{"line_number":317,"context_line":"            then"}],"source_content_type":"text/x-sh","patch_set":12,"id":"3acd31a7_62a8c620","line":314,"in_reply_to":"3acd31a7_bc43a512","updated":"2015-05-05 19:54:42.000000000","message":"so let\u0027s remove it from requirements, since it should not be there.","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"2a865e042f5feb3774038962cfeaa6252f98fca8","unresolved":false,"context_lines":[{"line_number":311,"context_line":""},{"line_number":312,"context_line":"    if have_command apt-get; then"},{"line_number":313,"context_line":"        # Debian/Ubuntu"},{"line_number":314,"context_line":"        missing\u003d$(which_missing_packages build-essential libssl-dev libffi-dev python-dev libxml2-dev libxslt1-dev libpq-dev git)"},{"line_number":315,"context_line":"        if running_as_root; then"},{"line_number":316,"context_line":"            if [ -z \"$missing\" ]"},{"line_number":317,"context_line":"            then"}],"source_content_type":"text/x-sh","patch_set":12,"id":"3acd31a7_bc43a512","line":314,"in_reply_to":"3acd31a7_c80c63ee","updated":"2015-05-05 18:30:36.000000000","message":"psycopg2 is in requirements.txt, so it wont build at all without it","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"d91cdc81aa41918ee989e2c55cd2b93695d1047b","unresolved":false,"context_lines":[{"line_number":311,"context_line":""},{"line_number":312,"context_line":"    if have_command apt-get; then"},{"line_number":313,"context_line":"        # Debian/Ubuntu"},{"line_number":314,"context_line":"        missing\u003d$(which_missing_packages build-essential libssl-dev libffi-dev python-dev libxml2-dev libxslt1-dev libpq-dev git)"},{"line_number":315,"context_line":"        if running_as_root; then"},{"line_number":316,"context_line":"            if [ -z \"$missing\" ]"},{"line_number":317,"context_line":"            then"}],"source_content_type":"text/x-sh","patch_set":12,"id":"3acd31a7_c80c63ee","line":314,"in_reply_to":"3acd31a7_e28bbd66","updated":"2015-05-05 16:10:39.000000000","message":"I know it, but `psycopg2`is needed only when postgresql backend is used, so this package should not be installed when sqllite/mysql/blablablasql is used. I prefer to remove it from rally requirements(I prefer to do it in this patch) now.\n\nBtw, this script provides options to select typo of db(see L175 fro more details), so we should install db-backend oriented packages in separate section.","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"f4553f46a6a34787ecaec5c3d24b035913456e23","unresolved":false,"context_lines":[{"line_number":329,"context_line":""},{"line_number":330,"context_line":"    elif have_command yum; then"},{"line_number":331,"context_line":"        # RHEL/CentOS"},{"line_number":332,"context_line":"        missing\u003d$(which_missing_packages gcc libffi-devel python-devel openssl-devel gmp-devel libxml2-devel libxslt-devel postgresql-devel git)"},{"line_number":333,"context_line":"        if running_as_root \u0026\u0026 ! have_command pip; then"},{"line_number":334,"context_line":"            if [ -z \"$missing\" ]"},{"line_number":335,"context_line":"            then"}],"source_content_type":"text/x-sh","patch_set":12,"id":"3acd31a7_9d335262","line":332,"updated":"2015-05-05 13:00:25.000000000","message":"same question for \"postgresql-devel\"","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":10459,"name":"Luigi Toscano","email":"ltoscano@redhat.com","username":"ltoscano"},"change_message_id":"e930ee9f12cb4ff026f4627a796dfe71776452ca","unresolved":false,"context_lines":[{"line_number":329,"context_line":""},{"line_number":330,"context_line":"    elif have_command yum; then"},{"line_number":331,"context_line":"        # RHEL/CentOS"},{"line_number":332,"context_line":"        missing\u003d$(which_missing_packages gcc libffi-devel python-devel openssl-devel gmp-devel libxml2-devel libxslt-devel postgresql-devel git)"},{"line_number":333,"context_line":"        if running_as_root \u0026\u0026 ! have_command pip; then"},{"line_number":334,"context_line":"            if [ -z \"$missing\" ]"},{"line_number":335,"context_line":"            then"}],"source_content_type":"text/x-sh","patch_set":12,"id":"3acd31a7_62f68dfa","line":332,"in_reply_to":"3acd31a7_9d335262","updated":"2015-05-05 15:42:03.000000000","message":"See above","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"8f16f03baf170dd9cd0099354760d95fd576235c","unresolved":false,"context_lines":[{"line_number":365,"context_line":"In order to install the required software you would need to run as"},{"line_number":366,"context_line":"\u0027root\u0027 the following command:"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"    $pkg_manager install $missing"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"__EOF__"},{"line_number":371,"context_line":"            # ask if we have to install it"}],"source_content_type":"text/x-sh","patch_set":12,"id":"3acd31a7_119722ed","line":368,"updated":"2015-05-05 18:31:48.000000000","message":"At this point, $pkg_manager is set to something like \"yum install -y\", so this is going to suggest that the user run:\n\n    yum install -y install gcc ...","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"0c4de89458241682703a7de29089332612817821","unresolved":false,"context_lines":[{"line_number":365,"context_line":"In order to install the required software you would need to run as"},{"line_number":366,"context_line":"\u0027root\u0027 the following command:"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"    $pkg_manager install $missing"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"__EOF__"},{"line_number":371,"context_line":"            # ask if we have to install it"}],"source_content_type":"text/x-sh","patch_set":12,"id":"1aca2d91_4888e122","line":368,"in_reply_to":"3acd31a7_119722ed","updated":"2015-05-06 12:28:21.000000000","message":"Done","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"8f16f03baf170dd9cd0099354760d95fd576235c","unresolved":false,"context_lines":[{"line_number":423,"context_line":"            pip_install pymysql"},{"line_number":424,"context_line":"            ;;"},{"line_number":425,"context_line":"        postgres)"},{"line_number":426,"context_line":"            pip_install psycog2"},{"line_number":427,"context_line":"            ;;"},{"line_number":428,"context_line":"    esac"},{"line_number":429,"context_line":"}"}],"source_content_type":"text/x-sh","patch_set":12,"id":"3acd31a7_d1b3ea98","line":426,"updated":"2015-05-05 18:31:48.000000000","message":"Typo: psycopg2","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"0c4de89458241682703a7de29089332612817821","unresolved":false,"context_lines":[{"line_number":423,"context_line":"            pip_install pymysql"},{"line_number":424,"context_line":"            ;;"},{"line_number":425,"context_line":"        postgres)"},{"line_number":426,"context_line":"            pip_install psycog2"},{"line_number":427,"context_line":"            ;;"},{"line_number":428,"context_line":"    esac"},{"line_number":429,"context_line":"}"}],"source_content_type":"text/x-sh","patch_set":12,"id":"1aca2d91_c87cf122","line":426,"in_reply_to":"3acd31a7_d1b3ea98","updated":"2015-05-06 12:28:21.000000000","message":"Done","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"8f16f03baf170dd9cd0099354760d95fd576235c","unresolved":false,"context_lines":[{"line_number":453,"context_line":"    VIRTUALENV_CMD\u003d\"$PYTHON virtualenv.py\""},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"    # python virtualenv.py --[no,system]-site-packages $DESTDIR"},{"line_number":456,"context_line":"    $VIRTUALENV_CMD $verbose  -p $PYTHON $DESTDIR"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"    . \"$VENVDIR\"/bin/activate"},{"line_number":459,"context_line":""}],"source_content_type":"text/x-sh","patch_set":12,"id":"3acd31a7_51a8fa1f","line":456,"updated":"2015-05-05 18:31:48.000000000","message":"$DESTDIR is user provided, so definitely needs to be quoted.","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"0c4de89458241682703a7de29089332612817821","unresolved":false,"context_lines":[{"line_number":453,"context_line":"    VIRTUALENV_CMD\u003d\"$PYTHON virtualenv.py\""},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"    # python virtualenv.py --[no,system]-site-packages $DESTDIR"},{"line_number":456,"context_line":"    $VIRTUALENV_CMD $verbose  -p $PYTHON $DESTDIR"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"    . \"$VENVDIR\"/bin/activate"},{"line_number":459,"context_line":""}],"source_content_type":"text/x-sh","patch_set":12,"id":"1aca2d91_08b0a9dc","line":456,"in_reply_to":"3acd31a7_51a8fa1f","updated":"2015-05-06 12:28:21.000000000","message":"Done","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"8f16f03baf170dd9cd0099354760d95fd576235c","unresolved":false,"context_lines":[{"line_number":455,"context_line":"    # python virtualenv.py --[no,system]-site-packages $DESTDIR"},{"line_number":456,"context_line":"    $VIRTUALENV_CMD $verbose  -p $PYTHON $DESTDIR"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"    . \"$VENVDIR\"/bin/activate"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"    # Recent versions of `pip` insist that setuptools\u003e\u003d0.8 is installed,"},{"line_number":461,"context_line":"    # because they try to use the \"wheel\" format for any kind of package."}],"source_content_type":"text/x-sh","patch_set":12,"id":"3acd31a7_517fdaaa","line":458,"updated":"2015-05-05 18:31:48.000000000","message":"This line is confusing. install_virtualenv() seems to only ever get called with $VENVDIR as its argument, so $VENVDIR \u003d\u003d $DESTDIR, but it\u0027s still confusing that you\u0027re switching back and forth between using $DESTDIR and $VENVDIR.","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"0c4de89458241682703a7de29089332612817821","unresolved":false,"context_lines":[{"line_number":455,"context_line":"    # python virtualenv.py --[no,system]-site-packages $DESTDIR"},{"line_number":456,"context_line":"    $VIRTUALENV_CMD $verbose  -p $PYTHON $DESTDIR"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"    . \"$VENVDIR\"/bin/activate"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"    # Recent versions of `pip` insist that setuptools\u003e\u003d0.8 is installed,"},{"line_number":461,"context_line":"    # because they try to use the \"wheel\" format for any kind of package."}],"source_content_type":"text/x-sh","patch_set":12,"id":"1aca2d91_2865a544","line":458,"in_reply_to":"3acd31a7_517fdaaa","updated":"2015-05-06 12:28:21.000000000","message":"Done","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"8f16f03baf170dd9cd0099354760d95fd576235c","unresolved":false,"context_lines":[{"line_number":483,"context_line":"    DBDIR\u003d$RALLY_DATABASE_DIR"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"    [ -d $ETCDIR ] || mkdir -p $ETCDIR"},{"line_number":486,"context_line":"    cp $SRCDIR/etc/rally/rally.conf.sample $ETCDIR/rally.conf"},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"    [ -d $DBDIR ] || mkdir -p $DBDIR"},{"line_number":489,"context_line":"    sed -i \u0027s|#connection *\u003d.*|connection \u003d \u0027$DBCONNSTRING\u0027|\u0027 $ETCDIR/rally.conf"}],"source_content_type":"text/x-sh","patch_set":12,"id":"3acd31a7_d1388af0","line":486,"updated":"2015-05-05 18:31:48.000000000","message":"Anything derived from $BASEDIR needs to be quoted, so that includes $SRCDIR, and $DBDIR in this function.","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"0c4de89458241682703a7de29089332612817821","unresolved":false,"context_lines":[{"line_number":483,"context_line":"    DBDIR\u003d$RALLY_DATABASE_DIR"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"    [ -d $ETCDIR ] || mkdir -p $ETCDIR"},{"line_number":486,"context_line":"    cp $SRCDIR/etc/rally/rally.conf.sample $ETCDIR/rally.conf"},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"    [ -d $DBDIR ] || mkdir -p $DBDIR"},{"line_number":489,"context_line":"    sed -i \u0027s|#connection *\u003d.*|connection \u003d \u0027$DBCONNSTRING\u0027|\u0027 $ETCDIR/rally.conf"}],"source_content_type":"text/x-sh","patch_set":12,"id":"1aca2d91_88e5d9a9","line":486,"in_reply_to":"3acd31a7_d1388af0","updated":"2015-05-06 12:28:21.000000000","message":"Done","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"8f16f03baf170dd9cd0099354760d95fd576235c","unresolved":false,"context_lines":[{"line_number":486,"context_line":"    cp $SRCDIR/etc/rally/rally.conf.sample $ETCDIR/rally.conf"},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"    [ -d $DBDIR ] || mkdir -p $DBDIR"},{"line_number":489,"context_line":"    sed -i \u0027s|#connection *\u003d.*|connection \u003d \u0027$DBCONNSTRING\u0027|\u0027 $ETCDIR/rally.conf"},{"line_number":490,"context_line":"    rally-manage db recreate"},{"line_number":491,"context_line":"}"},{"line_number":492,"context_line":""}],"source_content_type":"text/x-sh","patch_set":12,"id":"3acd31a7_9127b2c9","line":489,"updated":"2015-05-05 18:31:48.000000000","message":"$DBCONNSTRING contains user-provided data so needs to be quoted too.","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"0c4de89458241682703a7de29089332612817821","unresolved":false,"context_lines":[{"line_number":486,"context_line":"    cp $SRCDIR/etc/rally/rally.conf.sample $ETCDIR/rally.conf"},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"    [ -d $DBDIR ] || mkdir -p $DBDIR"},{"line_number":489,"context_line":"    sed -i \u0027s|#connection *\u003d.*|connection \u003d \u0027$DBCONNSTRING\u0027|\u0027 $ETCDIR/rally.conf"},{"line_number":490,"context_line":"    rally-manage db recreate"},{"line_number":491,"context_line":"}"},{"line_number":492,"context_line":""}],"source_content_type":"text/x-sh","patch_set":12,"id":"1aca2d91_48eea18c","line":489,"in_reply_to":"3acd31a7_9127b2c9","updated":"2015-05-06 12:28:21.000000000","message":"Done","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"8f16f03baf170dd9cd0099354760d95fd576235c","unresolved":false,"context_lines":[{"line_number":648,"context_line":"__EOF__"},{"line_number":649,"context_line":"        elif [ $OVERWRITEDIR \u003d \u0027yes\u0027 ]; then"},{"line_number":650,"context_line":"            echo \"Removing directory $VENVDIR as requested.\""},{"line_number":651,"context_line":"            rm $verbose -rf \"$VENVDIR\""},{"line_number":652,"context_line":"        else"},{"line_number":653,"context_line":"            abort 66 \"Internal error: unexpected value \u0027$OVERWRITEDIR\u0027 for OVERWRITEDIR.\""},{"line_number":654,"context_line":"        fi"}],"source_content_type":"text/x-sh","patch_set":12,"id":"3acd31a7_3c46754f","line":651,"updated":"2015-05-05 18:31:48.000000000","message":"This line is a great example of why we need to set $verbose in this script and not depend on a sane value exported by the user. Imagine:\n\n    export verbose\u003d/\n    ./install_rally.sh","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"0c4de89458241682703a7de29089332612817821","unresolved":false,"context_lines":[{"line_number":648,"context_line":"__EOF__"},{"line_number":649,"context_line":"        elif [ $OVERWRITEDIR \u003d \u0027yes\u0027 ]; then"},{"line_number":650,"context_line":"            echo \"Removing directory $VENVDIR as requested.\""},{"line_number":651,"context_line":"            rm $verbose -rf \"$VENVDIR\""},{"line_number":652,"context_line":"        else"},{"line_number":653,"context_line":"            abort 66 \"Internal error: unexpected value \u0027$OVERWRITEDIR\u0027 for OVERWRITEDIR.\""},{"line_number":654,"context_line":"        fi"}],"source_content_type":"text/x-sh","patch_set":12,"id":"1aca2d91_5990b1ec","line":651,"in_reply_to":"3acd31a7_3c46754f","updated":"2015-05-06 12:28:21.000000000","message":"Done","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"8f16f03baf170dd9cd0099354760d95fd576235c","unresolved":false,"context_lines":[{"line_number":658,"context_line":"    CURRENT_ACTION\u003d\"creating-venv\""},{"line_number":659,"context_line":"    install_virtualenv \"$VENVDIR\""},{"line_number":660,"context_line":"    rc\u003d$?"},{"line_number":661,"context_line":"    if [ $rc -ne 0 ]"},{"line_number":662,"context_line":"    then"},{"line_number":663,"context_line":"        die $EX_PROTOCOL \"Unable to create a new virtualenv in \u0027$VENVDIR\u0027: \u0027virtualenv.py\u0027 script exited with code $rc.\" \u003c\u003c__EOF__"},{"line_number":664,"context_line":"The script was unable to create a valid virtual environment."}],"source_content_type":"text/x-sh","patch_set":12,"id":"3acd31a7_fc7a3d87","line":661,"updated":"2015-05-05 18:31:48.000000000","message":"Better:\n\n    if install_virtualenv \"$VENVDIR\"; then","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"0c4de89458241682703a7de29089332612817821","unresolved":false,"context_lines":[{"line_number":658,"context_line":"    CURRENT_ACTION\u003d\"creating-venv\""},{"line_number":659,"context_line":"    install_virtualenv \"$VENVDIR\""},{"line_number":660,"context_line":"    rc\u003d$?"},{"line_number":661,"context_line":"    if [ $rc -ne 0 ]"},{"line_number":662,"context_line":"    then"},{"line_number":663,"context_line":"        die $EX_PROTOCOL \"Unable to create a new virtualenv in \u0027$VENVDIR\u0027: \u0027virtualenv.py\u0027 script exited with code $rc.\" \u003c\u003c__EOF__"},{"line_number":664,"context_line":"The script was unable to create a valid virtual environment."}],"source_content_type":"text/x-sh","patch_set":12,"id":"1aca2d91_741db465","line":661,"in_reply_to":"3acd31a7_fc7a3d87","updated":"2015-05-06 12:28:21.000000000","message":"Done","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"8f16f03baf170dd9cd0099354760d95fd576235c","unresolved":false,"context_lines":[{"line_number":674,"context_line":"BASEDIR\u003d$(dirname $(readlink -e $0))"},{"line_number":675,"context_line":""},{"line_number":676,"context_line":"# If we are inside the git repo, don\u0027t download it again."},{"line_number":677,"context_line":"if [ -d $BASEDIR/.git ]"},{"line_number":678,"context_line":"then"},{"line_number":679,"context_line":"    SOURCEDIR\u003d$BASEDIR"},{"line_number":680,"context_line":"else"}],"source_content_type":"text/x-sh","patch_set":12,"id":"3acd31a7_9c6a29b2","line":677,"updated":"2015-05-05 18:31:48.000000000","message":"Quote $BASEDIR","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"0c4de89458241682703a7de29089332612817821","unresolved":false,"context_lines":[{"line_number":674,"context_line":"BASEDIR\u003d$(dirname $(readlink -e $0))"},{"line_number":675,"context_line":""},{"line_number":676,"context_line":"# If we are inside the git repo, don\u0027t download it again."},{"line_number":677,"context_line":"if [ -d $BASEDIR/.git ]"},{"line_number":678,"context_line":"then"},{"line_number":679,"context_line":"    SOURCEDIR\u003d$BASEDIR"},{"line_number":680,"context_line":"else"}],"source_content_type":"text/x-sh","patch_set":12,"id":"1aca2d91_f41f8459","line":677,"in_reply_to":"3acd31a7_9c6a29b2","updated":"2015-05-06 12:28:21.000000000","message":"Done","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"8f16f03baf170dd9cd0099354760d95fd576235c","unresolved":false,"context_lines":[{"line_number":682,"context_line":"    then"},{"line_number":683,"context_line":"        SOURCEDIR\u003d\"$VENVDIR\"/src"},{"line_number":684,"context_line":"    else"},{"line_number":685,"context_line":"        SOURCEDIR\u003d$(pwd)/rally.git"},{"line_number":686,"context_line":"    fi"},{"line_number":687,"context_line":""},{"line_number":688,"context_line":"    # Check if source directory is present"}],"source_content_type":"text/x-sh","patch_set":12,"id":"3acd31a7_1c9df9bb","line":685,"updated":"2015-05-05 18:31:48.000000000","message":"Quote $(pwd).\n\nAlso, why isn\u0027t this using $ORIG_WD?","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"0c4de89458241682703a7de29089332612817821","unresolved":false,"context_lines":[{"line_number":682,"context_line":"    then"},{"line_number":683,"context_line":"        SOURCEDIR\u003d\"$VENVDIR\"/src"},{"line_number":684,"context_line":"    else"},{"line_number":685,"context_line":"        SOURCEDIR\u003d$(pwd)/rally.git"},{"line_number":686,"context_line":"    fi"},{"line_number":687,"context_line":""},{"line_number":688,"context_line":"    # Check if source directory is present"}],"source_content_type":"text/x-sh","patch_set":12,"id":"1aca2d91_1479e093","line":685,"in_reply_to":"3acd31a7_1c9df9bb","updated":"2015-05-06 12:28:21.000000000","message":"Done","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"8f16f03baf170dd9cd0099354760d95fd576235c","unresolved":false,"context_lines":[{"line_number":686,"context_line":"    fi"},{"line_number":687,"context_line":""},{"line_number":688,"context_line":"    # Check if source directory is present"},{"line_number":689,"context_line":"    if [ -d $SOURCEDIR ]"},{"line_number":690,"context_line":"    then"},{"line_number":691,"context_line":"        if [ $OVERWRITEDIR !\u003d \u0027yes\u0027 ]"},{"line_number":692,"context_line":"        then"}],"source_content_type":"text/x-sh","patch_set":12,"id":"3acd31a7_dca2e1fb","line":689,"updated":"2015-05-05 18:31:48.000000000","message":"Quote $SOURCEDIR.","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"0c4de89458241682703a7de29089332612817821","unresolved":false,"context_lines":[{"line_number":686,"context_line":"    fi"},{"line_number":687,"context_line":""},{"line_number":688,"context_line":"    # Check if source directory is present"},{"line_number":689,"context_line":"    if [ -d $SOURCEDIR ]"},{"line_number":690,"context_line":"    then"},{"line_number":691,"context_line":"        if [ $OVERWRITEDIR !\u003d \u0027yes\u0027 ]"},{"line_number":692,"context_line":"        then"}],"source_content_type":"text/x-sh","patch_set":12,"id":"1aca2d91_b4410c3c","line":689,"in_reply_to":"3acd31a7_dca2e1fb","updated":"2015-05-06 12:28:21.000000000","message":"Done","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"8f16f03baf170dd9cd0099354760d95fd576235c","unresolved":false,"context_lines":[{"line_number":700,"context_line":"                say \"*Not* overwriting destination directory \u0027$SOURCEDIR\u0027.\""},{"line_number":701,"context_line":"            fi"},{"line_number":702,"context_line":"        fi"},{"line_number":703,"context_line":"        if [ -d $SOURCEDIR/.git ]"},{"line_number":704,"context_line":"        then"},{"line_number":705,"context_line":"            echo \"Assuming $SOURCEDIR already contains the Rally git repository.\""},{"line_number":706,"context_line":"        else"}],"source_content_type":"text/x-sh","patch_set":12,"id":"3acd31a7_3cb43533","line":703,"updated":"2015-05-05 18:31:48.000000000","message":"Ditto.","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"0c4de89458241682703a7de29089332612817821","unresolved":false,"context_lines":[{"line_number":700,"context_line":"                say \"*Not* overwriting destination directory \u0027$SOURCEDIR\u0027.\""},{"line_number":701,"context_line":"            fi"},{"line_number":702,"context_line":"        fi"},{"line_number":703,"context_line":"        if [ -d $SOURCEDIR/.git ]"},{"line_number":704,"context_line":"        then"},{"line_number":705,"context_line":"            echo \"Assuming $SOURCEDIR already contains the Rally git repository.\""},{"line_number":706,"context_line":"        else"}],"source_content_type":"text/x-sh","patch_set":12,"id":"1aca2d91_943e10b7","line":703,"in_reply_to":"3acd31a7_3cb43533","updated":"2015-05-06 12:28:21.000000000","message":"Done","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"8f16f03baf170dd9cd0099354760d95fd576235c","unresolved":false,"context_lines":[{"line_number":715,"context_line":"    then"},{"line_number":716,"context_line":"        echo \"Downloading Rally from subversion repository $RALLY_GIT_URL ...\""},{"line_number":717,"context_line":"        CURRENT_ACTION\u003d\"downloading-src\""},{"line_number":718,"context_line":"        git clone $RALLY_GIT_URL $SOURCEDIR"},{"line_number":719,"context_line":"        CURRENT_ACTION\u003d\"src-downloaded\""},{"line_number":720,"context_line":"    fi"},{"line_number":721,"context_line":"fi"}],"source_content_type":"text/x-sh","patch_set":12,"id":"3acd31a7_bc7e0568","line":718,"updated":"2015-05-05 18:31:48.000000000","message":"Ditto.","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"0c4de89458241682703a7de29089332612817821","unresolved":false,"context_lines":[{"line_number":715,"context_line":"    then"},{"line_number":716,"context_line":"        echo \"Downloading Rally from subversion repository $RALLY_GIT_URL ...\""},{"line_number":717,"context_line":"        CURRENT_ACTION\u003d\"downloading-src\""},{"line_number":718,"context_line":"        git clone $RALLY_GIT_URL $SOURCEDIR"},{"line_number":719,"context_line":"        CURRENT_ACTION\u003d\"src-downloaded\""},{"line_number":720,"context_line":"    fi"},{"line_number":721,"context_line":"fi"}],"source_content_type":"text/x-sh","patch_set":12,"id":"1aca2d91_74b9342e","line":718,"in_reply_to":"3acd31a7_bc7e0568","updated":"2015-05-06 12:28:21.000000000","message":"Done","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"8f16f03baf170dd9cd0099354760d95fd576235c","unresolved":false,"context_lines":[{"line_number":723,"context_line":"install_db_connector"},{"line_number":724,"context_line":""},{"line_number":725,"context_line":"# Install rally"},{"line_number":726,"context_line":"cd $SOURCEDIR"},{"line_number":727,"context_line":"# Install dependencies"},{"line_number":728,"context_line":"pip_install pbr"},{"line_number":729,"context_line":"pip_install \u0027tox\u003c\u003d1.6.1\u0027"}],"source_content_type":"text/x-sh","patch_set":12,"id":"3acd31a7_7c950d85","line":726,"updated":"2015-05-05 18:31:48.000000000","message":"Ditto.","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"0c4de89458241682703a7de29089332612817821","unresolved":false,"context_lines":[{"line_number":723,"context_line":"install_db_connector"},{"line_number":724,"context_line":""},{"line_number":725,"context_line":"# Install rally"},{"line_number":726,"context_line":"cd $SOURCEDIR"},{"line_number":727,"context_line":"# Install dependencies"},{"line_number":728,"context_line":"pip_install pbr"},{"line_number":729,"context_line":"pip_install \u0027tox\u003c\u003d1.6.1\u0027"}],"source_content_type":"text/x-sh","patch_set":12,"id":"1aca2d91_54b6383e","line":726,"in_reply_to":"3acd31a7_7c950d85","updated":"2015-05-06 12:28:21.000000000","message":"Done","commit_id":"beea22c5ce41cde7b25a8ec4eecbba3a5ce31ce4"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"843fbfdab1dd59e66a634789dbac72d00eb735c9","unresolved":false,"context_lines":[{"line_number":255,"context_line":"    # check if the package is present, and install it using pip otherwise."},{"line_number":256,"context_line":"    # This function assumes you are running in the correct virtual environment"},{"line_number":257,"context_line":"    pkgs\u003d\"$@\""},{"line_number":258,"context_line":"    local missing\u003d$(for pkg in $pkgs; do pip list | egrep \"^$pkg \" \u003e\u0026 /dev/null || echo $pkg; done)"},{"line_number":259,"context_line":"    pip install $missing"},{"line_number":260,"context_line":"}"},{"line_number":261,"context_line":""}],"source_content_type":"text/x-sh","patch_set":15,"id":"1aca2d91_40b0a8f4","line":258,"updated":"2015-05-06 17:05:09.000000000","message":"Use \u0027egrep -q \"^$pkg \"\u0027 instead of redirecting stdout/stderr.","commit_id":"e7bf370dc6ba1ce986c2c4cd256371496a45630c"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"843fbfdab1dd59e66a634789dbac72d00eb735c9","unresolved":false,"context_lines":[{"line_number":262,"context_line":"# Download command"},{"line_number":263,"context_line":"if have_command wget"},{"line_number":264,"context_line":"then"},{"line_number":265,"context_line":"    download () { wget -nv $VERBOSE --no-check-certificate -O \"$@\"; }"},{"line_number":266,"context_line":"elif have_command curl"},{"line_number":267,"context_line":"then"},{"line_number":268,"context_line":"    download () { curl $VERBOSE --insecure -L -s -o \"$@\"; }"}],"source_content_type":"text/x-sh","patch_set":15,"id":"1aca2d91_3d49538c","line":265,"updated":"2015-05-06 17:05:09.000000000","message":"This works; \u0027wget -nv -v\u0027 is verbose. But it\u0027s a little confusing, so you might add a comment here explaining that it works. :)","commit_id":"e7bf370dc6ba1ce986c2c4cd256371496a45630c"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"843fbfdab1dd59e66a634789dbac72d00eb735c9","unresolved":false,"context_lines":[{"line_number":281,"context_line":"    local pkg\u003d$1"},{"line_number":282,"context_line":"    local url\u003d$(download - \"$BASE_PIP_URL\"/\"$pkg\"/ | sed -n \u0027/source\\/.\\/\u0027\"$pkg\"\u0027.*gz/ { s:.*href\u003d\"\\([^#\"]*\\)[\"#].*:\\1:g; p; }\u0027 | sort | tail -1)"},{"line_number":283,"context_line":"    if [ -n \"$url\" ]; then"},{"line_number":284,"context_line":"        download $(basename $url) \"$BASE_PIP_URL\"/\"$pkg\"/\"$url\""},{"line_number":285,"context_line":"    else"},{"line_number":286,"context_line":"        die $EX_PROTOCOL \"Package \u0027$pkg\u0027 not found on PyPI!\" \u003c\u003c__EOF__"},{"line_number":287,"context_line":"Unable to download package \u0027$pkg\u0027 from PyPI."}],"source_content_type":"text/x-sh","patch_set":15,"id":"1aca2d91_605a8485","line":284,"updated":"2015-05-06 17:05:09.000000000","message":"If there\u0027s a space or other special character in a PyPI package filename I\u0027ll cut someone, but we should still quote $url and $(basename ...) for safety\u0027s sake.","commit_id":"e7bf370dc6ba1ce986c2c4cd256371496a45630c"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"843fbfdab1dd59e66a634789dbac72d00eb735c9","unresolved":false,"context_lines":[{"line_number":454,"context_line":"    cp \"$SRCDIR\"/etc/rally/rally.conf.sample \"$ETCDIR\"/rally.conf"},{"line_number":455,"context_line":""},{"line_number":456,"context_line":"    [ -d \"$DBDIR\" ] || mkdir -p \"$DBDIR\""},{"line_number":457,"context_line":"    sed -i \u0027s|#connection *\u003d.*|connection \u003d \"$DBCONNSTRING\"|\u0027 \"$ETCDIR\"/rally.conf"},{"line_number":458,"context_line":"    rally-manage db recreate"},{"line_number":459,"context_line":"}"},{"line_number":460,"context_line":""}],"source_content_type":"text/x-sh","patch_set":15,"id":"1aca2d91_003f50b5","line":457,"updated":"2015-05-06 17:05:09.000000000","message":"$DBCONNSTRING is single-quoted here, so won\u0027t get expanded. This should be:\n\n    sed -i \u0027s|#connection *\u003d.*|connection \u003d \"\u0027\"$DBCONNSTRING\"\u0027\"|\u0027 \"$ETCDIR\"/rally.conf\n\nYay bash quoting.","commit_id":"e7bf370dc6ba1ce986c2c4cd256371496a45630c"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"843fbfdab1dd59e66a634789dbac72d00eb735c9","unresolved":false,"context_lines":[{"line_number":493,"context_line":"            exit $EX_OK"},{"line_number":494,"context_line":"            ;;"},{"line_number":495,"context_line":"        -v|--verbose)"},{"line_number":496,"context_line":"            $VERBOSE\u003d\"-v\""},{"line_number":497,"context_line":"            ;;"},{"line_number":498,"context_line":"        -s|--system)"},{"line_number":499,"context_line":"            $VIRTUALENV\u003d\u0027no\u0027"}],"source_content_type":"text/x-sh","patch_set":15,"id":"1aca2d91_e04b3458","line":496,"updated":"2015-05-06 17:05:09.000000000","message":"Drop the dollar sign here.","commit_id":"e7bf370dc6ba1ce986c2c4cd256371496a45630c"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"843fbfdab1dd59e66a634789dbac72d00eb735c9","unresolved":false,"context_lines":[{"line_number":496,"context_line":"            $VERBOSE\u003d\"-v\""},{"line_number":497,"context_line":"            ;;"},{"line_number":498,"context_line":"        -s|--system)"},{"line_number":499,"context_line":"            $VIRTUALENV\u003d\u0027no\u0027"},{"line_number":500,"context_line":"            ;;"},{"line_number":501,"context_line":"        -f|--overwrite)"},{"line_number":502,"context_line":"            OVERWRITEDIR\u003dyes"}],"source_content_type":"text/x-sh","patch_set":15,"id":"1aca2d91_c048385e","line":499,"updated":"2015-05-06 17:05:09.000000000","message":"Drop the dollar sign. I believe this should also be USEVIRTUALENV.","commit_id":"e7bf370dc6ba1ce986c2c4cd256371496a45630c"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"843fbfdab1dd59e66a634789dbac72d00eb735c9","unresolved":false,"context_lines":[{"line_number":551,"context_line":""},{"line_number":552,"context_line":"### Post-processing ###"},{"line_number":553,"context_line":""},{"line_number":554,"context_line":"if [ $USEVIRTUALENV -eq \u0027no\u0027 ] \u0026\u0026 [ -z $VENVDIR ]; then"},{"line_number":555,"context_line":"    die $EX_USAGE \"Ambiguous arguments\" \u003c\u003c__EOF__"},{"line_number":556,"context_line":"Option -t/--target can not be used with --system."},{"line_number":557,"context_line":"__EOF__"}],"source_content_type":"text/x-sh","patch_set":15,"id":"1aca2d91_007ab024","line":554,"updated":"2015-05-06 17:05:09.000000000","message":"-eq is for numeric comparisons; use \u003d.\n\n$VENVDIR at least needs to be quoted.","commit_id":"e7bf370dc6ba1ce986c2c4cd256371496a45630c"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"843fbfdab1dd59e66a634789dbac72d00eb735c9","unresolved":false,"context_lines":[{"line_number":558,"context_line":"fi"},{"line_number":559,"context_line":""},{"line_number":560,"context_line":"if running_as_root; then"},{"line_number":561,"context_line":"    if [ -z $VENVDIR ]; then"},{"line_number":562,"context_line":"        USEVIRTUALENV\u003d\u0027no\u0027"},{"line_number":563,"context_line":"    else"},{"line_number":564,"context_line":"        USEVIRTUALENV\u003d\u0027yes\u0027"}],"source_content_type":"text/x-sh","patch_set":15,"id":"1aca2d91_a08f7c22","line":561,"updated":"2015-05-06 17:05:09.000000000","message":"Quote $VENVDIR","commit_id":"e7bf370dc6ba1ce986c2c4cd256371496a45630c"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"843fbfdab1dd59e66a634789dbac72d00eb735c9","unresolved":false,"context_lines":[{"line_number":564,"context_line":"        USEVIRTUALENV\u003d\u0027yes\u0027"},{"line_number":565,"context_line":"    fi"},{"line_number":566,"context_line":"else"},{"line_number":567,"context_line":"    if [ -z $VENVDIR ]; then"},{"line_number":568,"context_line":"        VENVDIR\u003d\"$HOME\"/rally"},{"line_number":569,"context_line":"    fi"},{"line_number":570,"context_line":"fi"}],"source_content_type":"text/x-sh","patch_set":15,"id":"1aca2d91_20a48ca4","line":567,"updated":"2015-05-06 17:05:09.000000000","message":"Ditto.","commit_id":"e7bf370dc6ba1ce986c2c4cd256371496a45630c"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"843fbfdab1dd59e66a634789dbac72d00eb735c9","unresolved":false,"context_lines":[{"line_number":657,"context_line":"# Install rally"},{"line_number":658,"context_line":"ORIG_WD\u003d$(pwd)"},{"line_number":659,"context_line":""},{"line_number":660,"context_line":"BASEDIR\u003d$(dirname $(readlink -e $0))"},{"line_number":661,"context_line":""},{"line_number":662,"context_line":"# If we are inside the git repo, don\u0027t download it again."},{"line_number":663,"context_line":"if [ -d \"$BASEDIR\"/.git ]"}],"source_content_type":"text/x-sh","patch_set":15,"id":"1aca2d91_80bb60c4","line":660,"updated":"2015-05-06 17:05:09.000000000","message":"$0 and the result of readlink both need to be quoted:\n\n    BASEDIR\u003d$(dirname \"$(readlink -e \"$0\")\")","commit_id":"e7bf370dc6ba1ce986c2c4cd256371496a45630c"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"843fbfdab1dd59e66a634789dbac72d00eb735c9","unresolved":false,"context_lines":[{"line_number":697,"context_line":"        fi"},{"line_number":698,"context_line":"    fi"},{"line_number":699,"context_line":""},{"line_number":700,"context_line":"    if ! [ -d $SOURCEDIR/.git ]"},{"line_number":701,"context_line":"    then"},{"line_number":702,"context_line":"        echo \"Downloading Rally from subversion repository $RALLY_GIT_URL ...\""},{"line_number":703,"context_line":"        CURRENT_ACTION\u003d\"downloading-src\""}],"source_content_type":"text/x-sh","patch_set":15,"id":"1aca2d91_40b548cb","line":700,"updated":"2015-05-06 17:05:09.000000000","message":"Quote $SOURCEDIR","commit_id":"e7bf370dc6ba1ce986c2c4cd256371496a45630c"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"843fbfdab1dd59e66a634789dbac72d00eb735c9","unresolved":false,"context_lines":[{"line_number":712,"context_line":"cd \"$SOURCEDIR\""},{"line_number":713,"context_line":"# Install dependencies"},{"line_number":714,"context_line":"pip_install pbr"},{"line_number":715,"context_line":"pip_install \u0027tox\u003c\u003d1.6.1\u0027"},{"line_number":716,"context_line":"# Install rally"},{"line_number":717,"context_line":"# python setup.py install"},{"line_number":718,"context_line":"pip install ."}],"source_content_type":"text/x-sh","patch_set":15,"id":"1aca2d91_20212c4e","line":715,"updated":"2015-05-06 17:05:09.000000000","message":"pip_install doesn\u0027t properly handle versioned requirements; it can only tell if, e.g., \u0027tox\u0027 is installed, not \u0027tox\u003c\u003d1.6.1\u0027. So it will always think that \u0027tox\u003c\u003d1.6.1\u0027 is not installed, and will always try to install it. That may be mostly harmless, but we should at least be aware of it (and preferably fix it).","commit_id":"e7bf370dc6ba1ce986c2c4cd256371496a45630c"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"843fbfdab1dd59e66a634789dbac72d00eb735c9","unresolved":false,"context_lines":[{"line_number":748,"context_line":"  * Configuration file at: $RALLY_CONFIGURATION_DIR"},{"line_number":749,"context_line":""},{"line_number":750,"context_line":"__EOF__"},{"line_number":751,"context_line":"    setup_rally_configuration $SOURCEDIR"},{"line_number":752,"context_line":"else"},{"line_number":753,"context_line":"    setup_rally_configuration $SOURCEDIR"},{"line_number":754,"context_line":""}],"source_content_type":"text/x-sh","patch_set":15,"id":"1aca2d91_e0c45441","line":751,"updated":"2015-05-06 17:05:09.000000000","message":"Quote $SOURCEDIR","commit_id":"e7bf370dc6ba1ce986c2c4cd256371496a45630c"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"843fbfdab1dd59e66a634789dbac72d00eb735c9","unresolved":false,"context_lines":[{"line_number":750,"context_line":"__EOF__"},{"line_number":751,"context_line":"    setup_rally_configuration $SOURCEDIR"},{"line_number":752,"context_line":"else"},{"line_number":753,"context_line":"    setup_rally_configuration $SOURCEDIR"},{"line_number":754,"context_line":""},{"line_number":755,"context_line":"    cat \u003c\u003c__EOF__"},{"line_number":756,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-sh","patch_set":15,"id":"1aca2d91_80e240d4","line":753,"updated":"2015-05-06 17:05:09.000000000","message":"Ditto.","commit_id":"e7bf370dc6ba1ce986c2c4cd256371496a45630c"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"135d850cb45201c6325515c7eacd7cdc6a13fdb4","unresolved":false,"context_lines":[{"line_number":13,"context_line":"PROG\u003d$(basename \"${0}\")"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"running_as_root() {"},{"line_number":16,"context_line":"  test $\"(/usr/bin/id -u)\" -eq 0"},{"line_number":17,"context_line":"}"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"VERBOSE\u003d\"\""}],"source_content_type":"text/x-sh","patch_set":17,"id":"1aca2d91_a447701c","line":16,"updated":"2015-05-07 11:04:34.000000000","message":"Quotes in $\"(/usr/bin/id -u)\" should be removed - this causes error\n\n # Incorrect\n $ echo $\"(/usr/bin/id -u)\"\n (/usr/bin/id -u)\n\n # Correct\n $ echo $(/usr/bin/id -u)\n 1000","commit_id":"a3c572cc764936a15b768bb53b7e910582644c87"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"8e4615670ea307ed6ce35e37eb1bd96d6fda96b1","unresolved":false,"context_lines":[{"line_number":13,"context_line":"PROG\u003d$(basename \"${0}\")"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"running_as_root() {"},{"line_number":16,"context_line":"  test $\"(/usr/bin/id -u)\" -eq 0"},{"line_number":17,"context_line":"}"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"VERBOSE\u003d\"\""}],"source_content_type":"text/x-sh","patch_set":17,"id":"1aca2d91_ea29af38","line":16,"in_reply_to":"1aca2d91_a447701c","updated":"2015-05-07 12:06:07.000000000","message":"Rather, the dollar sign should be moved inside the quotes:\n\n    % echo \"$(/usr/bin/id -u)\"\n    1001","commit_id":"a3c572cc764936a15b768bb53b7e910582644c87"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"8de429ad04ccfaf920626c752dbd54e260294dd5","unresolved":false,"context_lines":[{"line_number":13,"context_line":"PROG\u003d$(basename \"${0}\")"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"running_as_root() {"},{"line_number":16,"context_line":"  test $\"(/usr/bin/id -u)\" -eq 0"},{"line_number":17,"context_line":"}"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"VERBOSE\u003d\"\""}],"source_content_type":"text/x-sh","patch_set":17,"id":"1aca2d91_e4a443a7","line":16,"in_reply_to":"1aca2d91_ea29af38","updated":"2015-05-07 13:16:00.000000000","message":"Done","commit_id":"a3c572cc764936a15b768bb53b7e910582644c87"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"b2bbba4a3baf75338932b3e074c415a2fc1bb4ce","unresolved":false,"context_lines":[{"line_number":13,"context_line":"PROG\u003d$(basename \"${0}\")"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"running_as_root() {"},{"line_number":16,"context_line":"  test $\"(/usr/bin/id -u)\" -eq 0"},{"line_number":17,"context_line":"}"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"VERBOSE\u003d\"\""}],"source_content_type":"text/x-sh","patch_set":17,"id":"1aca2d91_f5299038","line":16,"in_reply_to":"1aca2d91_ea29af38","updated":"2015-05-07 12:23:06.000000000","message":"No, because `-eq\u0027 expects integer, not string","commit_id":"a3c572cc764936a15b768bb53b7e910582644c87"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"e14aad341aeb816fa9ac234c046244afd676c140","unresolved":false,"context_lines":[{"line_number":13,"context_line":"PROG\u003d$(basename \"${0}\")"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"running_as_root() {"},{"line_number":16,"context_line":"  test $\"(/usr/bin/id -u)\" -eq 0"},{"line_number":17,"context_line":"}"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"VERBOSE\u003d\"\""}],"source_content_type":"text/x-sh","patch_set":17,"id":"1aca2d91_70b58e2f","line":16,"in_reply_to":"1aca2d91_f5299038","updated":"2015-05-07 12:38:42.000000000","message":"Quoting in bash does not make a thing a string or an integer. Bash isn\u0027t strongly typed, or really even very typed at all among scalars; everything is a string, quoted or not, and the difference is only in how -eq and \u003d compare them. For instance:\n\nhttps://gist.github.com/stpierre/ec64422d3713c1a6149a\n\nThe comparison results vary only with the operator used, not with the quoting. Bash quoting protects you from word splitting; it does not implement or influence typing.","commit_id":"a3c572cc764936a15b768bb53b7e910582644c87"},{"author":{"_account_id":10061,"name":"Joe Talerico","email":"jtaleric@redhat.com","username":"rook"},"change_message_id":"915948e3641dbf010e9d3835c76ad542230670cd","unresolved":false,"context_lines":[{"line_number":20,"context_line":"ASKCONFIRMATION\u003d1"},{"line_number":21,"context_line":"OVERWRITEDIR\u003dask"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"PYTHON\u003dpython"},{"line_number":24,"context_line":"BASE_PIP_URL\u003d\"https://pypi.python.org/simple\""},{"line_number":25,"context_line":"VIRTUALENV_191_URL\u003d\"https://raw.github.com/pypa/virtualenv/1.9.1/virtualenv.py\""},{"line_number":26,"context_line":"VIRTUALENV_CMD\u003d\"virtualenv\""}],"source_content_type":"text/x-sh","patch_set":17,"id":"1aca2d91_8fe80d12","line":23,"updated":"2015-05-07 11:33:31.000000000","message":"Should this be a path to python?","commit_id":"a3c572cc764936a15b768bb53b7e910582644c87"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"8de429ad04ccfaf920626c752dbd54e260294dd5","unresolved":false,"context_lines":[{"line_number":20,"context_line":"ASKCONFIRMATION\u003d1"},{"line_number":21,"context_line":"OVERWRITEDIR\u003dask"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"PYTHON\u003dpython"},{"line_number":24,"context_line":"BASE_PIP_URL\u003d\"https://pypi.python.org/simple\""},{"line_number":25,"context_line":"VIRTUALENV_191_URL\u003d\"https://raw.github.com/pypa/virtualenv/1.9.1/virtualenv.py\""},{"line_number":26,"context_line":"VIRTUALENV_CMD\u003d\"virtualenv\""}],"source_content_type":"text/x-sh","patch_set":17,"id":"1aca2d91_c4f4a788","line":23,"in_reply_to":"1aca2d91_8fe80d12","updated":"2015-05-07 13:16:00.000000000","message":"Done","commit_id":"a3c572cc764936a15b768bb53b7e910582644c87"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"8e4615670ea307ed6ce35e37eb1bd96d6fda96b1","unresolved":false,"context_lines":[{"line_number":215,"context_line":""},{"line_number":216,"context_line":"require_python () {"},{"line_number":217,"context_line":"    require_command \"$PYTHON\""},{"line_number":218,"context_line":"    if python -c \u0027import sys; sys.exit(sys.version_info[:2] \u003e\u003d (2, 6))\u0027; then"},{"line_number":219,"context_line":"        die $EX_UNAVAILABLE \"Wrong version of python is installed\" \u003c\u003c__EOF__"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"Rally requires Python version 2.6+. Unfortunately, we do not support"}],"source_content_type":"text/x-sh","patch_set":17,"id":"1aca2d91_eaeacfab","line":218,"updated":"2015-05-07 12:06:07.000000000","message":"Inconsistency: You use $PYTHON elsewhere, python here. (IMO, the latter approach is the correct approach; if the user has their python executable in a strange place, they can set $PATH to help install_rally.sh find it.)","commit_id":"a3c572cc764936a15b768bb53b7e910582644c87"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"8de429ad04ccfaf920626c752dbd54e260294dd5","unresolved":false,"context_lines":[{"line_number":215,"context_line":""},{"line_number":216,"context_line":"require_python () {"},{"line_number":217,"context_line":"    require_command \"$PYTHON\""},{"line_number":218,"context_line":"    if python -c \u0027import sys; sys.exit(sys.version_info[:2] \u003e\u003d (2, 6))\u0027; then"},{"line_number":219,"context_line":"        die $EX_UNAVAILABLE \"Wrong version of python is installed\" \u003c\u003c__EOF__"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"Rally requires Python version 2.6+. Unfortunately, we do not support"}],"source_content_type":"text/x-sh","patch_set":17,"id":"1aca2d91_64615339","line":218,"in_reply_to":"1aca2d91_eaeacfab","updated":"2015-05-07 13:16:00.000000000","message":"Done","commit_id":"a3c572cc764936a15b768bb53b7e910582644c87"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"135d850cb45201c6325515c7eacd7cdc6a13fdb4","unresolved":false,"context_lines":[{"line_number":332,"context_line":"            if ask_yn \"Do you want me to install these packages for you?\""},{"line_number":333,"context_line":"            then"},{"line_number":334,"context_line":"                # install"},{"line_number":335,"context_line":"                $pkg_manager \"$missing\""},{"line_number":336,"context_line":"                rc\u003d$?"},{"line_number":337,"context_line":"                if [ $? -ne 0 ]; then"},{"line_number":338,"context_line":"                    # Error installing packages"}],"source_content_type":"text/x-sh","patch_set":17,"id":"1aca2d91_645158d8","line":335,"updated":"2015-05-07 11:04:34.000000000","message":"Quotes around `$missing\u0027 should be removed, unless install will fail if `$missing\u0027 contains more than one name:\n\n $ sudo apt-get install \"xd jq\"\n Reading package lists... Done\n Building dependency tree       \n Reading state information... Done\n E: Unable to locate package xd jq","commit_id":"a3c572cc764936a15b768bb53b7e910582644c87"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"8de429ad04ccfaf920626c752dbd54e260294dd5","unresolved":false,"context_lines":[{"line_number":332,"context_line":"            if ask_yn \"Do you want me to install these packages for you?\""},{"line_number":333,"context_line":"            then"},{"line_number":334,"context_line":"                # install"},{"line_number":335,"context_line":"                $pkg_manager \"$missing\""},{"line_number":336,"context_line":"                rc\u003d$?"},{"line_number":337,"context_line":"                if [ $? -ne 0 ]; then"},{"line_number":338,"context_line":"                    # Error installing packages"}],"source_content_type":"text/x-sh","patch_set":17,"id":"1aca2d91_24d23bd3","line":335,"in_reply_to":"1aca2d91_645158d8","updated":"2015-05-07 13:16:00.000000000","message":"Done","commit_id":"a3c572cc764936a15b768bb53b7e910582644c87"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"135d850cb45201c6325515c7eacd7cdc6a13fdb4","unresolved":false,"context_lines":[{"line_number":336,"context_line":"                rc\u003d$?"},{"line_number":337,"context_line":"                if [ $? -ne 0 ]; then"},{"line_number":338,"context_line":"                    # Error installing packages"},{"line_number":339,"context_line":"                    die $EX_UNAVAILABLE\"missing software prerequisites\" \u003c\u003c__EOF__"},{"line_number":340,"context_line":"\u0027$pkg_manager\u0027 command returned exit code \u0027$rc\u0027."},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"I am unable to install the required software. Please, try to install"}],"source_content_type":"text/x-sh","patch_set":17,"id":"1aca2d91_240920de","line":339,"updated":"2015-05-07 11:04:34.000000000","message":"It seems that space is required between $EX_UNAVAILABLE and \"missing","commit_id":"a3c572cc764936a15b768bb53b7e910582644c87"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"8de429ad04ccfaf920626c752dbd54e260294dd5","unresolved":false,"context_lines":[{"line_number":336,"context_line":"                rc\u003d$?"},{"line_number":337,"context_line":"                if [ $? -ne 0 ]; then"},{"line_number":338,"context_line":"                    # Error installing packages"},{"line_number":339,"context_line":"                    die $EX_UNAVAILABLE\"missing software prerequisites\" \u003c\u003c__EOF__"},{"line_number":340,"context_line":"\u0027$pkg_manager\u0027 command returned exit code \u0027$rc\u0027."},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"I am unable to install the required software. Please, try to install"}],"source_content_type":"text/x-sh","patch_set":17,"id":"1aca2d91_c4fee737","line":339,"in_reply_to":"1aca2d91_240920de","updated":"2015-05-07 13:16:00.000000000","message":"Done","commit_id":"a3c572cc764936a15b768bb53b7e910582644c87"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"7bc6694b448f33638b9936ce39129690c92cf61f","unresolved":false,"context_lines":[{"line_number":160,"context_line":"  -v, --verbose          Verbose mode"},{"line_number":161,"context_line":"  -s, --system           Install system-wide."},{"line_number":162,"context_line":"  -d, --target DIRECTORY Install Rally virtual environment into DIRECTORY."},{"line_number":163,"context_line":"                         (Default: $HOME/rally if no root)."},{"line_number":164,"context_line":"  -f, --overwrite        Remove target directory if it already exists."},{"line_number":165,"context_line":"  -y, --yes              Do not ask for confirmation: assume a \u0027yes\u0027 reply"},{"line_number":166,"context_line":"                         to every question."}],"source_content_type":"text/x-sh","patch_set":18,"id":"1aca2d91_07b861e4","line":163,"updated":"2015-05-07 13:39:35.000000000","message":"Typo: \"if not root\"\n\n\"if no root\" might kinda work-ish (i.e., \"if [the user running this script has] no root [privileges],\" but it sounds stilted.","commit_id":"102e1800bfeebb0d459e15c2e4e25efa32dc8245"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"1097ecbe44107a77bfec140ca4c7045de30ffb42","unresolved":false,"context_lines":[{"line_number":160,"context_line":"  -v, --verbose          Verbose mode"},{"line_number":161,"context_line":"  -s, --system           Install system-wide."},{"line_number":162,"context_line":"  -d, --target DIRECTORY Install Rally virtual environment into DIRECTORY."},{"line_number":163,"context_line":"                         (Default: $HOME/rally if no root)."},{"line_number":164,"context_line":"  -f, --overwrite        Remove target directory if it already exists."},{"line_number":165,"context_line":"  -y, --yes              Do not ask for confirmation: assume a \u0027yes\u0027 reply"},{"line_number":166,"context_line":"                         to every question."}],"source_content_type":"text/x-sh","patch_set":18,"id":"1aca2d91_7d1682f2","line":163,"in_reply_to":"1aca2d91_07b861e4","updated":"2015-05-07 14:31:04.000000000","message":"Done","commit_id":"102e1800bfeebb0d459e15c2e4e25efa32dc8245"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"7bc6694b448f33638b9936ce39129690c92cf61f","unresolved":false,"context_lines":[{"line_number":425,"context_line":"    #"},{"line_number":426,"context_line":"    if pip wheel --help 1\u003e/dev/null 2\u003e/dev/null; then"},{"line_number":427,"context_line":"        download_from_pypi setuptools"},{"line_number":428,"context_line":"        if ! (tar -xzf setuptools-*.tar.gz \u0026\u0026 cd setuptools-* \u0026\u0026 $PYTHON setup.py install);"},{"line_number":429,"context_line":"        then"},{"line_number":430,"context_line":"            die $EX_SOFTWARE \\"},{"line_number":431,"context_line":"                \"Failed to install the latest version of Python \u0027setuptools\u0027\" \u003c\u003c__EOF__"}],"source_content_type":"text/x-sh","patch_set":18,"id":"1aca2d91_67615539","line":428,"updated":"2015-05-07 13:39:35.000000000","message":"This should not use $PYTHON; $PYTHON is set at the start of the script to the system python, and this needs to use the virtualenv python instead.","commit_id":"102e1800bfeebb0d459e15c2e4e25efa32dc8245"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"1097ecbe44107a77bfec140ca4c7045de30ffb42","unresolved":false,"context_lines":[{"line_number":425,"context_line":"    #"},{"line_number":426,"context_line":"    if pip wheel --help 1\u003e/dev/null 2\u003e/dev/null; then"},{"line_number":427,"context_line":"        download_from_pypi setuptools"},{"line_number":428,"context_line":"        if ! (tar -xzf setuptools-*.tar.gz \u0026\u0026 cd setuptools-* \u0026\u0026 $PYTHON setup.py install);"},{"line_number":429,"context_line":"        then"},{"line_number":430,"context_line":"            die $EX_SOFTWARE \\"},{"line_number":431,"context_line":"                \"Failed to install the latest version of Python \u0027setuptools\u0027\" \u003c\u003c__EOF__"}],"source_content_type":"text/x-sh","patch_set":18,"id":"1aca2d91_3d8c8a34","line":428,"in_reply_to":"1aca2d91_67615539","updated":"2015-05-07 14:31:04.000000000","message":"Done","commit_id":"102e1800bfeebb0d459e15c2e4e25efa32dc8245"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"7bc6694b448f33638b9936ce39129690c92cf61f","unresolved":false,"context_lines":[{"line_number":559,"context_line":"    if [ -z \"$VENVDIR\" ]; then"},{"line_number":560,"context_line":"        VENVDIR\u003d\"$HOME\"/rally"},{"line_number":561,"context_line":"    fi"},{"line_number":562,"context_line":"fi"},{"line_number":563,"context_line":""},{"line_number":564,"context_line":"# Fix RALLY_DATABASE_DIR if virtualenv is used"},{"line_number":565,"context_line":"if [ \"$USEVIRTUALENV\" \u003d \u0027yes\u0027 ]"}],"source_content_type":"text/x-sh","patch_set":18,"id":"1aca2d91_87723148","line":562,"updated":"2015-05-07 13:39:35.000000000","message":"USEVIRTUALENV is never set to a default value for non-root users, so running install_rally.sh as non-root without any options attempts to install it for system-wide use.","commit_id":"102e1800bfeebb0d459e15c2e4e25efa32dc8245"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"1097ecbe44107a77bfec140ca4c7045de30ffb42","unresolved":false,"context_lines":[{"line_number":559,"context_line":"    if [ -z \"$VENVDIR\" ]; then"},{"line_number":560,"context_line":"        VENVDIR\u003d\"$HOME\"/rally"},{"line_number":561,"context_line":"    fi"},{"line_number":562,"context_line":"fi"},{"line_number":563,"context_line":""},{"line_number":564,"context_line":"# Fix RALLY_DATABASE_DIR if virtualenv is used"},{"line_number":565,"context_line":"if [ \"$USEVIRTUALENV\" \u003d \u0027yes\u0027 ]"}],"source_content_type":"text/x-sh","patch_set":18,"id":"1aca2d91_5d2ce601","line":562,"in_reply_to":"1aca2d91_87723148","updated":"2015-05-07 14:31:04.000000000","message":"Done","commit_id":"102e1800bfeebb0d459e15c2e4e25efa32dc8245"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"7bc6694b448f33638b9936ce39129690c92cf61f","unresolved":false,"context_lines":[{"line_number":637,"context_line":""},{"line_number":638,"context_line":"    echo \"Installing Rally virtualenv in directory \u0027$VENVDIR\u0027 ...\""},{"line_number":639,"context_line":"    CURRENT_ACTION\u003d\"creating-venv\""},{"line_number":640,"context_line":"    if install_virtualenv \"$VENVDIR\"; then"},{"line_number":641,"context_line":"        die $EX_PROTOCOL \"Unable to create a new virtualenv in \u0027$VENVDIR\u0027: \u0027virtualenv.py\u0027 script exited with code $rc.\" \u003c\u003c__EOF__"},{"line_number":642,"context_line":"The script was unable to create a valid virtual environment."},{"line_number":643,"context_line":"__EOF__"}],"source_content_type":"text/x-sh","patch_set":18,"id":"1aca2d91_878fd1cb","line":640,"updated":"2015-05-07 13:39:35.000000000","message":"Logic is backwards here:\n\n    if ! install_virtualenv \"$VENVDIR\"; then","commit_id":"102e1800bfeebb0d459e15c2e4e25efa32dc8245"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"1097ecbe44107a77bfec140ca4c7045de30ffb42","unresolved":false,"context_lines":[{"line_number":637,"context_line":""},{"line_number":638,"context_line":"    echo \"Installing Rally virtualenv in directory \u0027$VENVDIR\u0027 ...\""},{"line_number":639,"context_line":"    CURRENT_ACTION\u003d\"creating-venv\""},{"line_number":640,"context_line":"    if install_virtualenv \"$VENVDIR\"; then"},{"line_number":641,"context_line":"        die $EX_PROTOCOL \"Unable to create a new virtualenv in \u0027$VENVDIR\u0027: \u0027virtualenv.py\u0027 script exited with code $rc.\" \u003c\u003c__EOF__"},{"line_number":642,"context_line":"The script was unable to create a valid virtual environment."},{"line_number":643,"context_line":"__EOF__"}],"source_content_type":"text/x-sh","patch_set":18,"id":"1aca2d91_5d7aa6f2","line":640,"in_reply_to":"1aca2d91_878fd1cb","updated":"2015-05-07 14:31:04.000000000","message":"Done","commit_id":"102e1800bfeebb0d459e15c2e4e25efa32dc8245"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"0243ec304639971ac5240241abb1f21322819fd6","unresolved":false,"context_lines":[{"line_number":544,"context_line":"### Post-processing ###"},{"line_number":545,"context_line":""},{"line_number":546,"context_line":"if [ \"$USEVIRTUALENV\" \u003d\u003d \"no\" ] \u0026\u0026 [ -n \"$VENVDIR\" ]; then"},{"line_number":547,"context_line":"    die $EX_USAGE \"Ambiguous arguments\" \u003c\u003c__EOF__"},{"line_number":548,"context_line":"Option -t/--target can not be used with --system."},{"line_number":549,"context_line":"__EOF__"},{"line_number":550,"context_line":"fi"}],"source_content_type":"text/x-sh","patch_set":19,"id":"1aca2d91_939b8f72","line":547,"updated":"2015-05-07 14:45:39.000000000","message":"The option parsing code uses -d as the short option for --target, not -t.","commit_id":"61afc89fd4061220ed930936b37ec3912b32c76b"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"1cef2f246dc36923932346a9ed05204ea684b55a","unresolved":false,"context_lines":[{"line_number":544,"context_line":"### Post-processing ###"},{"line_number":545,"context_line":""},{"line_number":546,"context_line":"if [ \"$USEVIRTUALENV\" \u003d\u003d \"no\" ] \u0026\u0026 [ -n \"$VENVDIR\" ]; then"},{"line_number":547,"context_line":"    die $EX_USAGE \"Ambiguous arguments\" \u003c\u003c__EOF__"},{"line_number":548,"context_line":"Option -t/--target can not be used with --system."},{"line_number":549,"context_line":"__EOF__"},{"line_number":550,"context_line":"fi"}],"source_content_type":"text/x-sh","patch_set":19,"id":"1aca2d91_ce915e54","line":547,"in_reply_to":"1aca2d91_939b8f72","updated":"2015-05-07 15:17:04.000000000","message":"Done","commit_id":"61afc89fd4061220ed930936b37ec3912b32c76b"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"0243ec304639971ac5240241abb1f21322819fd6","unresolved":false,"context_lines":[{"line_number":556,"context_line":"        USEVIRTUALENV\u003d\u0027yes\u0027"},{"line_number":557,"context_line":"    fi"},{"line_number":558,"context_line":"else"},{"line_number":559,"context_line":"    USEVIRTUALENV\u003d\u0027yes\u0027"},{"line_number":560,"context_line":"    if [ -z \"$VENVDIR\" ]; then"},{"line_number":561,"context_line":"        VENVDIR\u003d\"$HOME\"/rally"},{"line_number":562,"context_line":"    fi"}],"source_content_type":"text/x-sh","patch_set":19,"id":"1aca2d91_33b5dbed","line":559,"updated":"2015-05-07 14:45:39.000000000","message":"Setting this here will make it override a --system option. I think the best course of action might be to set it at the very top of the script; that way it can be overridden by option parsing, or by running as root.","commit_id":"61afc89fd4061220ed930936b37ec3912b32c76b"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"1cef2f246dc36923932346a9ed05204ea684b55a","unresolved":false,"context_lines":[{"line_number":556,"context_line":"        USEVIRTUALENV\u003d\u0027yes\u0027"},{"line_number":557,"context_line":"    fi"},{"line_number":558,"context_line":"else"},{"line_number":559,"context_line":"    USEVIRTUALENV\u003d\u0027yes\u0027"},{"line_number":560,"context_line":"    if [ -z \"$VENVDIR\" ]; then"},{"line_number":561,"context_line":"        VENVDIR\u003d\"$HOME\"/rally"},{"line_number":562,"context_line":"    fi"}],"source_content_type":"text/x-sh","patch_set":19,"id":"1aca2d91_8e02460a","line":559,"in_reply_to":"1aca2d91_33b5dbed","updated":"2015-05-07 15:17:04.000000000","message":"It will not override, whole script will be failed if specify both --system and --target.\n\nOption --system is here only for backward compatibility","commit_id":"61afc89fd4061220ed930936b37ec3912b32c76b"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"43b32cfa3bd0bfddf85dc20e09f1e7692130d0bf","unresolved":false,"context_lines":[{"line_number":347,"context_line":"                fi"},{"line_number":348,"context_line":"                $pkg_manager $missing"},{"line_number":349,"context_line":"                rc\u003d$?"},{"line_number":350,"context_line":"                if [ $rc -ne 0 ]; then"},{"line_number":351,"context_line":"                    # Error installing packages"},{"line_number":352,"context_line":"                    die $EX_UNAVAILABLE \"missing software prerequisites\" \u003c\u003c__EOF__"},{"line_number":353,"context_line":"\u0027$pkg_manager\u0027 command returned exit code \u0027$rc\u0027."}],"source_content_type":"text/x-sh","patch_set":22,"id":"1aca2d91_164e486f","line":350,"updated":"2015-05-07 16:43:42.000000000","message":"Not sure how I missed this one before. Better:\n\n    if ! $pkg_manager $missing; then","commit_id":"954249788a4ab3f00a5349b289adaf80f55d7800"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"b8d6887262db93938edcb5de406d23291cccc633","unresolved":false,"context_lines":[{"line_number":257,"context_line":"    if ask_yn \"You need ether wget or curl to be installed. Install wget?\"; then"},{"line_number":258,"context_line":"        apt-get install -yes wget || yum install -y wget"},{"line_number":259,"context_line":"    fi"},{"line_number":260,"context_line":"fi"},{"line_number":261,"context_line":"if have_command wget"},{"line_number":262,"context_line":"then"},{"line_number":263,"context_line":"    download () { wget -nv $VERBOSE --no-check-certificate -O \"$@\"; }"}],"source_content_type":"text/x-sh","patch_set":24,"id":"1aca2d91_c7b01ce0","line":260,"updated":"2015-05-07 18:08:45.000000000","message":"It\u0027d be nice if we could move this into install_required_sw(), where we know what package manager to use. The best way I can see to do that would be to move curl/wget discovery inside the download() function so that it\u0027s evaluated on each call, e.g.:\n\n    download() {\n        if have_command wget; then\n            wget ...\n        elif have_command curl; then\n            curl ...\n        fi\n    }\n\ninstall_required_sw() already fails if a package can\u0027t be installed so we don\u0027t need the else branch.","commit_id":"a44a06df967dc997c188008628aadd458c9497b3"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"b8d6887262db93938edcb5de406d23291cccc633","unresolved":false,"context_lines":[{"line_number":339,"context_line":"            then"},{"line_number":340,"context_line":"                # install"},{"line_number":341,"context_line":"                for package in $missing; do"},{"line_number":342,"context_line":"                    if ! $pkg_manager $package; then"},{"line_number":343,"context_line":"                        if [ $package \u003d\u003d \"python-pip\" ]; then"},{"line_number":344,"context_line":"                            if ask_yn \"Error installing python-pip. Install from external source?\"; then"},{"line_number":345,"context_line":"                                local pdir\u003d$(mktemp -d)"}],"source_content_type":"text/x-sh","patch_set":24,"id":"1aca2d91_0705f478","line":342,"updated":"2015-05-07 18:08:45.000000000","message":"Since python-pip is the only package being handled specially, it might make more sense to first try to install python-pip, then try to install the rest of the missing packages. Or vice-versa -- order doesn\u0027t matter here, I just hate to run yum/apt-get N times for N packages.","commit_id":"a44a06df967dc997c188008628aadd458c9497b3"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"b8d6887262db93938edcb5de406d23291cccc633","unresolved":false,"context_lines":[{"line_number":345,"context_line":"                                local pdir\u003d$(mktemp -d)"},{"line_number":346,"context_line":"                                local getpip\u003d\"$pdir/get-pip.py\""},{"line_number":347,"context_line":"                                download \"$getpip\" https://raw.github.com/pypa/pip/master/contrib/get-pip.py"},{"line_number":348,"context_line":"                                if ! $PYTHON $getpip; then"},{"line_number":349,"context_line":"                                    die $EX_PROTOCOL \"Unable to install pip from external source\""},{"line_number":350,"context_line":"                                fi"},{"line_number":351,"context_line":"                            else"}],"source_content_type":"text/x-sh","patch_set":24,"id":"1aca2d91_07905442","line":348,"updated":"2015-05-07 18:08:45.000000000","message":"Quote $getpip.","commit_id":"a44a06df967dc997c188008628aadd458c9497b3"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"680e28bb39705a0b9c6aaea0d134905a65112e48","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"VERBOSE\u003d\"\""},{"line_number":20,"context_line":"ASKCONFIRMATION\u003d1"},{"line_number":21,"context_line":"OVERWRITEDIR\u003d\u0027ask\u0027"},{"line_number":22,"context_line":"USEVIRTUALENV\u003d\u0027yes\u0027"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"PYTHON\u003d\"$(which python)\""}],"source_content_type":"text/x-sh","patch_set":32,"id":"9a0c5dc1_18d22d01","line":21,"updated":"2015-05-12 18:52:35.000000000","message":"why you are using here \u0027 instead of \" ?","commit_id":"ab8e6a28d9ffa4b15eca64e5c53d7981de647021"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"41ae99ae7d3e5cec7a03714a6267bccd197931cc","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"VERBOSE\u003d\"\""},{"line_number":20,"context_line":"ASKCONFIRMATION\u003d1"},{"line_number":21,"context_line":"OVERWRITEDIR\u003d\u0027ask\u0027"},{"line_number":22,"context_line":"USEVIRTUALENV\u003d\u0027yes\u0027"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"PYTHON\u003d\"$(which python)\""}],"source_content_type":"text/x-sh","patch_set":32,"id":"9a0c5dc1_ac588657","line":21,"in_reply_to":"9a0c5dc1_18d22d01","updated":"2015-05-13 10:46:20.000000000","message":"Done","commit_id":"ab8e6a28d9ffa4b15eca64e5c53d7981de647021"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"680e28bb39705a0b9c6aaea0d134905a65112e48","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"PYTHON\u003d\"$(which python)\""},{"line_number":25,"context_line":"BASE_PIP_URL\u003d\"https://pypi.python.org/simple\""},{"line_number":26,"context_line":"VIRTUALENV_191_URL\u003d\"https://raw.github.com/pypa/virtualenv/1.9.1/virtualenv.py\""},{"line_number":27,"context_line":"VIRTUALENV_CMD\u003d\"virtualenv\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"RALLY_GIT_URL\u003dhttps://github.com/openstack/rally"}],"source_content_type":"text/x-sh","patch_set":32,"id":"9a0c5dc1_f8f51983","line":26,"updated":"2015-05-12 18:52:35.000000000","message":"I think it\u0027s better to put VIRTUALENV_URL without version number..","commit_id":"ab8e6a28d9ffa4b15eca64e5c53d7981de647021"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"41ae99ae7d3e5cec7a03714a6267bccd197931cc","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"PYTHON\u003d\"$(which python)\""},{"line_number":25,"context_line":"BASE_PIP_URL\u003d\"https://pypi.python.org/simple\""},{"line_number":26,"context_line":"VIRTUALENV_191_URL\u003d\"https://raw.github.com/pypa/virtualenv/1.9.1/virtualenv.py\""},{"line_number":27,"context_line":"VIRTUALENV_CMD\u003d\"virtualenv\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"RALLY_GIT_URL\u003dhttps://github.com/openstack/rally"}],"source_content_type":"text/x-sh","patch_set":32,"id":"9a0c5dc1_4f045c14","line":26,"in_reply_to":"9a0c5dc1_f8f51983","updated":"2015-05-13 10:46:20.000000000","message":"Do you men use latest version? Event if it works with centos6 now, I\u0027m not sure it will work in future.","commit_id":"ab8e6a28d9ffa4b15eca64e5c53d7981de647021"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"680e28bb39705a0b9c6aaea0d134905a65112e48","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        REPLY\u003d\u0027yes\u0027"},{"line_number":195,"context_line":"        return 0"},{"line_number":196,"context_line":"    fi"},{"line_number":197,"context_line":"    while true; do"},{"line_number":198,"context_line":"        read -p \"$1 [yN] \" REPLY"},{"line_number":199,"context_line":"        case \"$REPLY\" in"},{"line_number":200,"context_line":"            [Yy]*)    REPLY\u003d\u0027yes\u0027; return 0 ;;"}],"source_content_type":"text/x-sh","patch_set":32,"id":"9a0c5dc1_ec3afecc","line":197,"updated":"2015-05-12 18:52:35.000000000","message":"can we limit this. Like ask 3 times...","commit_id":"ab8e6a28d9ffa4b15eca64e5c53d7981de647021"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"41ae99ae7d3e5cec7a03714a6267bccd197931cc","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        REPLY\u003d\u0027yes\u0027"},{"line_number":195,"context_line":"        return 0"},{"line_number":196,"context_line":"    fi"},{"line_number":197,"context_line":"    while true; do"},{"line_number":198,"context_line":"        read -p \"$1 [yN] \" REPLY"},{"line_number":199,"context_line":"        case \"$REPLY\" in"},{"line_number":200,"context_line":"            [Yy]*)    REPLY\u003d\u0027yes\u0027; return 0 ;;"}],"source_content_type":"text/x-sh","patch_set":32,"id":"9a0c5dc1_af4bd858","line":197,"in_reply_to":"9a0c5dc1_ec3afecc","updated":"2015-05-13 10:46:20.000000000","message":"I think this bash script is already complicated like hell","commit_id":"ab8e6a28d9ffa4b15eca64e5c53d7981de647021"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"1f7800b33552127db83391525a6a1b1d5f135139","unresolved":false,"context_lines":[{"line_number":257,"context_line":"    if ask_yn \"You need ether wget or curl to be installed. Install wget?\"; then"},{"line_number":258,"context_line":"        apt-get install -yes wget || yum install -y wget"},{"line_number":259,"context_line":"    fi"},{"line_number":260,"context_line":"fi"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"if have_command wget"},{"line_number":263,"context_line":"then"}],"source_content_type":"text/x-sh","patch_set":32,"id":"9a0c5dc1_5899c56d","line":260,"updated":"2015-05-12 18:38:48.000000000","message":"Can you add a TODO comment to move this logic into install_required_sw? I\u0027m willing to take that on as a follow-up task, and I don\u0027t want to hold this review up any more than I already have over what\u0027s ultimately minor logic twiddling. Thanks.","commit_id":"ab8e6a28d9ffa4b15eca64e5c53d7981de647021"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"41ae99ae7d3e5cec7a03714a6267bccd197931cc","unresolved":false,"context_lines":[{"line_number":257,"context_line":"    if ask_yn \"You need ether wget or curl to be installed. Install wget?\"; then"},{"line_number":258,"context_line":"        apt-get install -yes wget || yum install -y wget"},{"line_number":259,"context_line":"    fi"},{"line_number":260,"context_line":"fi"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"if have_command wget"},{"line_number":263,"context_line":"then"}],"source_content_type":"text/x-sh","patch_set":32,"id":"9a0c5dc1_cfacccef","line":260,"in_reply_to":"9a0c5dc1_5899c56d","updated":"2015-05-13 10:46:20.000000000","message":"Done","commit_id":"ab8e6a28d9ffa4b15eca64e5c53d7981de647021"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"1f7800b33552127db83391525a6a1b1d5f135139","unresolved":false,"context_lines":[{"line_number":343,"context_line":"            if ask_yn \"Do you want me to install these packages for you?\"; then"},{"line_number":344,"context_line":"                # install"},{"line_number":345,"context_line":"                if [[ \"$missing\" \u003d\u003d *python-pip* ]]; then"},{"line_number":346,"context_line":"                    missing\u003d$(echo \"$missing\" | sed \u0027s/python-pip//\u0027)"},{"line_number":347,"context_line":"                    if ! $pkg_manager python-pip; then"},{"line_number":348,"context_line":"                        if ask_yn \"Error installing python-pip. Install from external source?\"; then"},{"line_number":349,"context_line":"                            local pdir\u003d$(mktemp -d)"}],"source_content_type":"text/x-sh","patch_set":32,"id":"9a0c5dc1_f8e4f90d","line":346,"updated":"2015-05-12 18:38:48.000000000","message":"You add python-pip to $missing only to remove it again. Why not just add another variable ($python_pip_missing, e.g.) that tracks the status of python-pip specifically? That\u0027d simplify these two lines.","commit_id":"ab8e6a28d9ffa4b15eca64e5c53d7981de647021"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"41ae99ae7d3e5cec7a03714a6267bccd197931cc","unresolved":false,"context_lines":[{"line_number":343,"context_line":"            if ask_yn \"Do you want me to install these packages for you?\"; then"},{"line_number":344,"context_line":"                # install"},{"line_number":345,"context_line":"                if [[ \"$missing\" \u003d\u003d *python-pip* ]]; then"},{"line_number":346,"context_line":"                    missing\u003d$(echo \"$missing\" | sed \u0027s/python-pip//\u0027)"},{"line_number":347,"context_line":"                    if ! $pkg_manager python-pip; then"},{"line_number":348,"context_line":"                        if ask_yn \"Error installing python-pip. Install from external source?\"; then"},{"line_number":349,"context_line":"                            local pdir\u003d$(mktemp -d)"}],"source_content_type":"text/x-sh","patch_set":32,"id":"9a0c5dc1_efe79010","line":346,"in_reply_to":"9a0c5dc1_f8e4f90d","updated":"2015-05-13 10:46:20.000000000","message":"I prefer to keep it as is: try to install python-pip in by pkg_manager, and only in case of failure try to handle it in special way.","commit_id":"ab8e6a28d9ffa4b15eca64e5c53d7981de647021"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"1f7800b33552127db83391525a6a1b1d5f135139","unresolved":false,"context_lines":[{"line_number":425,"context_line":""},{"line_number":426,"context_line":"    # Use the latest virtualenv that can use `.tar.gz` files"},{"line_number":427,"context_line":"    VIRTUALENV_URL\u003d$VIRTUALENV_191_URL"},{"line_number":428,"context_line":"    VIRTUALENV_DST\u003d\"/tmp/rally-virtualenv-191.py\""},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"    if [ ! -f $VIRTUALENV_DST ]; then"},{"line_number":431,"context_line":"        download $VIRTUALENV_DST $VIRTUALENV_URL"}],"source_content_type":"text/x-sh","patch_set":32,"id":"9a0c5dc1_78a6c9c2","line":428,"updated":"2015-05-12 18:38:48.000000000","message":"This is vulnerable to a known tempfile attack. Use mktemp to download virtualenv to a safely and randomly named file instead.","commit_id":"ab8e6a28d9ffa4b15eca64e5c53d7981de647021"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"41ae99ae7d3e5cec7a03714a6267bccd197931cc","unresolved":false,"context_lines":[{"line_number":425,"context_line":""},{"line_number":426,"context_line":"    # Use the latest virtualenv that can use `.tar.gz` files"},{"line_number":427,"context_line":"    VIRTUALENV_URL\u003d$VIRTUALENV_191_URL"},{"line_number":428,"context_line":"    VIRTUALENV_DST\u003d\"/tmp/rally-virtualenv-191.py\""},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"    if [ ! -f $VIRTUALENV_DST ]; then"},{"line_number":431,"context_line":"        download $VIRTUALENV_DST $VIRTUALENV_URL"}],"source_content_type":"text/x-sh","patch_set":32,"id":"9a0c5dc1_183b319e","line":428,"in_reply_to":"9a0c5dc1_78a6c9c2","updated":"2015-05-13 10:46:20.000000000","message":"Done","commit_id":"ab8e6a28d9ffa4b15eca64e5c53d7981de647021"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"1f7800b33552127db83391525a6a1b1d5f135139","unresolved":false,"context_lines":[{"line_number":427,"context_line":"    VIRTUALENV_URL\u003d$VIRTUALENV_191_URL"},{"line_number":428,"context_line":"    VIRTUALENV_DST\u003d\"/tmp/rally-virtualenv-191.py\""},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"    if [ ! -f $VIRTUALENV_DST ]; then"},{"line_number":431,"context_line":"        download $VIRTUALENV_DST $VIRTUALENV_URL"},{"line_number":432,"context_line":"    fi"},{"line_number":433,"context_line":"    VIRTUALENV_CMD\u003d\"$PYTHON $VIRTUALENV_DST\""}],"source_content_type":"text/x-sh","patch_set":32,"id":"9a0c5dc1_38b051f4","line":430,"updated":"2015-05-12 18:38:48.000000000","message":"This if block also won\u0027t be necessary once you use mktemp.","commit_id":"ab8e6a28d9ffa4b15eca64e5c53d7981de647021"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"41ae99ae7d3e5cec7a03714a6267bccd197931cc","unresolved":false,"context_lines":[{"line_number":427,"context_line":"    VIRTUALENV_URL\u003d$VIRTUALENV_191_URL"},{"line_number":428,"context_line":"    VIRTUALENV_DST\u003d\"/tmp/rally-virtualenv-191.py\""},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"    if [ ! -f $VIRTUALENV_DST ]; then"},{"line_number":431,"context_line":"        download $VIRTUALENV_DST $VIRTUALENV_URL"},{"line_number":432,"context_line":"    fi"},{"line_number":433,"context_line":"    VIRTUALENV_CMD\u003d\"$PYTHON $VIRTUALENV_DST\""}],"source_content_type":"text/x-sh","patch_set":32,"id":"9a0c5dc1_f8417d0c","line":430,"in_reply_to":"9a0c5dc1_38b051f4","updated":"2015-05-13 10:46:20.000000000","message":"Done","commit_id":"ab8e6a28d9ffa4b15eca64e5c53d7981de647021"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"1f7800b33552127db83391525a6a1b1d5f135139","unresolved":false,"context_lines":[{"line_number":445,"context_line":"    #"},{"line_number":446,"context_line":"    if pip wheel --help 1\u003e/dev/null 2\u003e/dev/null; then"},{"line_number":447,"context_line":"        (cd $DESTDIR \u0026\u0026 download_from_pypi setuptools)"},{"line_number":448,"context_line":"        if ! (cd $DESTDIR \u0026\u0026 tar -xzf setuptools-*.tar.gz \u0026\u0026 cd setuptools-* \u0026\u0026 python setup.py install);"},{"line_number":449,"context_line":"        then"},{"line_number":450,"context_line":"            die $EX_SOFTWARE \\"},{"line_number":451,"context_line":"                \"Failed to install the latest version of Python \u0027setuptools\u0027\" \u003c\u003c__EOF__"}],"source_content_type":"text/x-sh","patch_set":32,"id":"9a0c5dc1_1896ad4c","line":448,"updated":"2015-05-12 18:38:48.000000000","message":"Quote $DESTDIR in these two lines.\n\nAlso, since you cd into $DESTDIR twice in a row, why not just cd into it, run what needs run, and then cd back into the previous cwd?","commit_id":"ab8e6a28d9ffa4b15eca64e5c53d7981de647021"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"41ae99ae7d3e5cec7a03714a6267bccd197931cc","unresolved":false,"context_lines":[{"line_number":445,"context_line":"    #"},{"line_number":446,"context_line":"    if pip wheel --help 1\u003e/dev/null 2\u003e/dev/null; then"},{"line_number":447,"context_line":"        (cd $DESTDIR \u0026\u0026 download_from_pypi setuptools)"},{"line_number":448,"context_line":"        if ! (cd $DESTDIR \u0026\u0026 tar -xzf setuptools-*.tar.gz \u0026\u0026 cd setuptools-* \u0026\u0026 python setup.py install);"},{"line_number":449,"context_line":"        then"},{"line_number":450,"context_line":"            die $EX_SOFTWARE \\"},{"line_number":451,"context_line":"                \"Failed to install the latest version of Python \u0027setuptools\u0027\" \u003c\u003c__EOF__"}],"source_content_type":"text/x-sh","patch_set":32,"id":"9a0c5dc1_d844791c","line":448,"in_reply_to":"9a0c5dc1_1896ad4c","updated":"2015-05-13 10:46:20.000000000","message":"Done","commit_id":"ab8e6a28d9ffa4b15eca64e5c53d7981de647021"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"680e28bb39705a0b9c6aaea0d134905a65112e48","unresolved":false,"context_lines":[{"line_number":779,"context_line":"  * Method: system"},{"line_number":780,"context_line":"  * Database at: $RALLY_DATABASE_DIR"},{"line_number":781,"context_line":"  * Configuration file at: $RALLY_CONFIGURATION_DIR"},{"line_number":782,"context_line":""},{"line_number":783,"context_line":"__EOF__"},{"line_number":784,"context_line":"fi"}],"source_content_type":"text/x-sh","patch_set":32,"id":"9a0c5dc1_18a46da4","line":782,"updated":"2015-05-12 18:52:35.000000000","message":"Can we have common message \n\n\nTo start work type: \n\n  rally deployment create","commit_id":"ab8e6a28d9ffa4b15eca64e5c53d7981de647021"}],"setup.cfg":[{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"ec65e34b92a9e0aa28f43b0a67bdbe2a8b8747fb","unresolved":false,"context_lines":[{"line_number":21,"context_line":"[files]"},{"line_number":22,"context_line":"packages \u003d"},{"line_number":23,"context_line":"    rally"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"[entry_points]"},{"line_number":26,"context_line":"console_scripts \u003d"},{"line_number":27,"context_line":"    rally \u003d rally.cmd.main:main"}],"source_content_type":"text/x-ttcn-cfg","patch_set":11,"id":"9a80dd14_826b9eef","line":24,"updated":"2015-03-16 15:06:26.000000000","message":"why was this removed? please explain in commit message","commit_id":"384790a5f93dcee5d90863f39204b18a24ea4a35"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"b3207e94c1932ef4e01eeb31f287f5511c0bebf3","unresolved":false,"context_lines":[{"line_number":21,"context_line":"[files]"},{"line_number":22,"context_line":"packages \u003d"},{"line_number":23,"context_line":"    rally"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"[entry_points]"},{"line_number":26,"context_line":"console_scripts \u003d"},{"line_number":27,"context_line":"    rally \u003d rally.cmd.main:main"}],"source_content_type":"text/x-ttcn-cfg","patch_set":11,"id":"dac4157f_0121894d","line":24,"in_reply_to":"9a80dd14_826b9eef","updated":"2015-04-20 17:11:28.000000000","message":"So I saw only the code regarding to installation in venv. Would we have bash completion in case of system installation","commit_id":"384790a5f93dcee5d90863f39204b18a24ea4a35"}],"setup.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"c4b9d9c84c8f380c89fdbe937c42d89fc1cefa3a","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# implied."},{"line_number":14,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":15,"context_line":"# limitations under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"# THIS FILE IS MANAGED BY THE GLOBAL REQUIREMENTS REPO - DO NOT EDIT"},{"line_number":18,"context_line":"import setuptools"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_4e6af581","line":16,"updated":"2015-03-08 10:02:12.000000000","message":"Can we remove this line?","commit_id":"e45e95e7606a184c3cc29dbd6c6932be8668783b"}],"tests/ci/test_install.sh":[{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"7bc6694b448f33638b9936ce39129690c92cf61f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"1aca2d91_1aa67410","updated":"2015-05-07 13:39:35.000000000","message":"Can we add an unprivileged virtualenv installation in this script too?","commit_id":"102e1800bfeebb0d459e15c2e4e25efa32dc8245"}]}
