)]}'
{"tox.ini":[{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"c7b50e35c861e686ae6fac8bba872185e3f8fc89","unresolved":false,"context_lines":[{"line_number":13,"context_line":"install_command \u003d pip install -U {opts} {packages}"},{"line_number":14,"context_line":"deps \u003d -r{toxinidir}/requirements.txt"},{"line_number":15,"context_line":"       -r{toxinidir}/test-requirements.txt"},{"line_number":16,"context_line":"commands \u003d find . -type f -name \"*.pyc\" -delete"},{"line_number":17,"context_line":"           python setup.py testr --testr-args\u003d\u0027{posargs}\u0027"},{"line_number":18,"context_line":"whitelist_externals \u003d find"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-properties","patch_set":1,"id":"9a8ffd7b_7669938b","line":16,"updated":"2015-12-03 06:07:25.000000000","message":"how about pyo, __pycache__, etc?","commit_id":"715dd3e4bea5093e1f88b65249ceb8207a568d80"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"c1dbab49dbe326566ae610acd40417c89a4cb680","unresolved":false,"context_lines":[{"line_number":13,"context_line":"install_command \u003d pip install -U {opts} {packages}"},{"line_number":14,"context_line":"deps \u003d -r{toxinidir}/requirements.txt"},{"line_number":15,"context_line":"       -r{toxinidir}/test-requirements.txt"},{"line_number":16,"context_line":"commands \u003d find . -type f -name \"*.pyc\" -delete"},{"line_number":17,"context_line":"           python setup.py testr --testr-args\u003d\u0027{posargs}\u0027"},{"line_number":18,"context_line":"whitelist_externals \u003d find"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-properties","patch_set":1,"id":"7a740942_e655621d","line":16,"in_reply_to":"7a740942_06b0ae42","updated":"2015-12-04 03:25:55.000000000","message":"If you use python3, pyo or __pycache__ is automatically created as python2 creates pyc. Takashi suggested the similar cleanup for both py2 and py3.","commit_id":"715dd3e4bea5093e1f88b65249ceb8207a568d80"},{"author":{"_account_id":16352,"name":"Shu Muto","email":"shu.mutow@gmail.com","username":"shu.mutow"},"change_message_id":"fae9180702dec86ff2789bf9886e673640c640ea","unresolved":false,"context_lines":[{"line_number":13,"context_line":"install_command \u003d pip install -U {opts} {packages}"},{"line_number":14,"context_line":"deps \u003d -r{toxinidir}/requirements.txt"},{"line_number":15,"context_line":"       -r{toxinidir}/test-requirements.txt"},{"line_number":16,"context_line":"commands \u003d find . -type f -name \"*.pyc\" -delete"},{"line_number":17,"context_line":"           python setup.py testr --testr-args\u003d\u0027{posargs}\u0027"},{"line_number":18,"context_line":"whitelist_externals \u003d find"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-properties","patch_set":1,"id":"7a740942_01c5f88c","line":16,"in_reply_to":"7a740942_e655621d","updated":"2015-12-04 03:39:24.000000000","message":"Akihiro, thank you for your explanation. I did it.","commit_id":"715dd3e4bea5093e1f88b65249ceb8207a568d80"},{"author":{"_account_id":16352,"name":"Shu Muto","email":"shu.mutow@gmail.com","username":"shu.mutow"},"change_message_id":"03df7b886aa1ecfc2471ea2f903ce281a7cb85f6","unresolved":false,"context_lines":[{"line_number":13,"context_line":"install_command \u003d pip install -U {opts} {packages}"},{"line_number":14,"context_line":"deps \u003d -r{toxinidir}/requirements.txt"},{"line_number":15,"context_line":"       -r{toxinidir}/test-requirements.txt"},{"line_number":16,"context_line":"commands \u003d find . -type f -name \"*.pyc\" -delete"},{"line_number":17,"context_line":"           python setup.py testr --testr-args\u003d\u0027{posargs}\u0027"},{"line_number":18,"context_line":"whitelist_externals \u003d find"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-properties","patch_set":1,"id":"7a740942_06b0ae42","line":16,"in_reply_to":"9a8ffd7b_7669938b","updated":"2015-12-04 02:57:14.000000000","message":"I think we don\u0027t need to create pyo or __pycache__ in testenv.","commit_id":"715dd3e4bea5093e1f88b65249ceb8207a568d80"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"0cd3a389cf7b17e842452db21e8e1f1674c5a47e","unresolved":false,"context_lines":[{"line_number":14,"context_line":"deps \u003d -r{toxinidir}/requirements.txt"},{"line_number":15,"context_line":"       -r{toxinidir}/test-requirements.txt"},{"line_number":16,"context_line":"commands \u003d find . -type f -name \"*.pyc\" -delete"},{"line_number":17,"context_line":"           python setup.py testr --testr-args\u003d\u0027{posargs}\u0027"},{"line_number":18,"context_line":"whitelist_externals \u003d find"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"[testenv:pep8]"}],"source_content_type":"text/x-properties","patch_set":1,"id":"9a8ffd7b_93379cfe","line":17,"updated":"2015-12-02 12:52:27.000000000","message":"For readability, use the same indent level for two commands.","commit_id":"715dd3e4bea5093e1f88b65249ceb8207a568d80"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"c1dbab49dbe326566ae610acd40417c89a4cb680","unresolved":false,"context_lines":[{"line_number":14,"context_line":"deps \u003d -r{toxinidir}/requirements.txt"},{"line_number":15,"context_line":"       -r{toxinidir}/test-requirements.txt"},{"line_number":16,"context_line":"commands \u003d find . -type f -name \"*.pyc\" -delete"},{"line_number":17,"context_line":"           python setup.py testr --testr-args\u003d\u0027{posargs}\u0027"},{"line_number":18,"context_line":"whitelist_externals \u003d find"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"[testenv:pep8]"}],"source_content_type":"text/x-properties","patch_set":1,"id":"7a740942_06266ece","line":17,"in_reply_to":"7a740942_e68d627c","updated":"2015-12-04 03:25:55.000000000","message":"it seems my browser issue.","commit_id":"715dd3e4bea5093e1f88b65249ceb8207a568d80"},{"author":{"_account_id":16352,"name":"Shu Muto","email":"shu.mutow@gmail.com","username":"shu.mutow"},"change_message_id":"03df7b886aa1ecfc2471ea2f903ce281a7cb85f6","unresolved":false,"context_lines":[{"line_number":14,"context_line":"deps \u003d -r{toxinidir}/requirements.txt"},{"line_number":15,"context_line":"       -r{toxinidir}/test-requirements.txt"},{"line_number":16,"context_line":"commands \u003d find . -type f -name \"*.pyc\" -delete"},{"line_number":17,"context_line":"           python setup.py testr --testr-args\u003d\u0027{posargs}\u0027"},{"line_number":18,"context_line":"whitelist_externals \u003d find"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"[testenv:pep8]"}],"source_content_type":"text/x-properties","patch_set":1,"id":"7a740942_e68d627c","line":17,"in_reply_to":"9a8ffd7b_93379cfe","updated":"2015-12-04 02:57:14.000000000","message":"It seems already done, same as setenv and deps.","commit_id":"715dd3e4bea5093e1f88b65249ceb8207a568d80"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"bed0c747c8edf70a5e4df60586aa1145d1c4868d","unresolved":false,"context_lines":[{"line_number":14,"context_line":"deps \u003d -r{toxinidir}/requirements.txt"},{"line_number":15,"context_line":"       -r{toxinidir}/test-requirements.txt"},{"line_number":16,"context_line":"commands \u003d find . -type f -name \"*.py[co]\" -delete"},{"line_number":17,"context_line":"           bash -c \u0027rm -fr $(find . -type d -name \"__pycache__\")\u0027"},{"line_number":18,"context_line":"           python setup.py testr --testr-args\u003d\u0027{posargs}\u0027"},{"line_number":19,"context_line":"whitelist_externals \u003d find"},{"line_number":20,"context_line":"                      bash"}],"source_content_type":"text/x-properties","patch_set":3,"id":"7a740942_a0aad4d2","line":17,"updated":"2015-12-04 10:00:44.000000000","message":"why bash, rather than sh?","commit_id":"c52257218c0ba66d0e1a610e2d294460aeb6757a"},{"author":{"_account_id":16352,"name":"Shu Muto","email":"shu.mutow@gmail.com","username":"shu.mutow"},"change_message_id":"63442597b4e1a6f1f615935c26d98e7d0e664223","unresolved":false,"context_lines":[{"line_number":14,"context_line":"deps \u003d -r{toxinidir}/requirements.txt"},{"line_number":15,"context_line":"       -r{toxinidir}/test-requirements.txt"},{"line_number":16,"context_line":"commands \u003d find . -type f -name \"*.py[co]\" -delete"},{"line_number":17,"context_line":"           bash -c \u0027rm -fr $(find . -type d -name \"__pycache__\")\u0027"},{"line_number":18,"context_line":"           python setup.py testr --testr-args\u003d\u0027{posargs}\u0027"},{"line_number":19,"context_line":"whitelist_externals \u003d find"},{"line_number":20,"context_line":"                      bash"}],"source_content_type":"text/x-properties","patch_set":3,"id":"7a740942_c3792afe","line":17,"in_reply_to":"7a740942_a0aad4d2","updated":"2015-12-04 10:27:59.000000000","message":"because bash is seen also in other project.","commit_id":"c52257218c0ba66d0e1a610e2d294460aeb6757a"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"0295a4fc53f1db629754f76df401eaf631490075","unresolved":false,"context_lines":[{"line_number":14,"context_line":"deps \u003d -r{toxinidir}/requirements.txt"},{"line_number":15,"context_line":"       -r{toxinidir}/test-requirements.txt"},{"line_number":16,"context_line":"commands \u003d find . -type f -name \"*.py[co]\" -delete"},{"line_number":17,"context_line":"           bash -c \u0027rm -fr $(find . -type d -name \"__pycache__\")\u0027"},{"line_number":18,"context_line":"           python setup.py testr --testr-args\u003d\u0027{posargs}\u0027"},{"line_number":19,"context_line":"whitelist_externals \u003d find"},{"line_number":20,"context_line":"                      bash"}],"source_content_type":"text/x-properties","patch_set":3,"id":"7a740942_e4cae16d","line":17,"in_reply_to":"7a740942_c3792afe","updated":"2015-12-07 11:41:18.000000000","message":"If there is no special reason to use bash, \u0027sh\u0027 is recommended.","commit_id":"c52257218c0ba66d0e1a610e2d294460aeb6757a"},{"author":{"_account_id":16352,"name":"Shu Muto","email":"shu.mutow@gmail.com","username":"shu.mutow"},"change_message_id":"2491646a1a847089b6bf963c9cce2af13d271ef5","unresolved":false,"context_lines":[{"line_number":14,"context_line":"deps \u003d -r{toxinidir}/requirements.txt"},{"line_number":15,"context_line":"       -r{toxinidir}/test-requirements.txt"},{"line_number":16,"context_line":"commands \u003d find . -type f -name \"*.py[co]\" -delete"},{"line_number":17,"context_line":"           bash -c \u0027rm -fr $(find . -type d -name \"__pycache__\")\u0027"},{"line_number":18,"context_line":"           python setup.py testr --testr-args\u003d\u0027{posargs}\u0027"},{"line_number":19,"context_line":"whitelist_externals \u003d find"},{"line_number":20,"context_line":"                      bash"}],"source_content_type":"text/x-properties","patch_set":3,"id":"7a740942_acda5849","line":17,"in_reply_to":"7a740942_e4cae16d","updated":"2015-12-08 02:04:49.000000000","message":"Done","commit_id":"c52257218c0ba66d0e1a610e2d294460aeb6757a"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"b67c5ab86ae30e498419aa93656f0cfe549e3222","unresolved":false,"context_lines":[{"line_number":14,"context_line":"deps \u003d -r{toxinidir}/requirements.txt"},{"line_number":15,"context_line":"       -r{toxinidir}/test-requirements.txt"},{"line_number":16,"context_line":"commands \u003d find . -type f -name \"*.py[co]\" -delete"},{"line_number":17,"context_line":"           sh -c \u0027rm -fr $(find . -type d -name \"__pycache__\")\u0027"},{"line_number":18,"context_line":"           python setup.py testr --testr-args\u003d\u0027{posargs}\u0027"},{"line_number":19,"context_line":"whitelist_externals \u003d find"},{"line_number":20,"context_line":"                      sh"}],"source_content_type":"text/x-properties","patch_set":4,"id":"7a740942_06df833a","line":17,"updated":"2015-12-09 04:09:13.000000000","message":"it\u0027s safer to use -print0 and xargs.","commit_id":"6e6dd691a52979037236e1d28858dcaf28d725a7"},{"author":{"_account_id":16352,"name":"Shu Muto","email":"shu.mutow@gmail.com","username":"shu.mutow"},"change_message_id":"0df118dddb2f69d673f4a68ea7903e4e660c5f9d","unresolved":false,"context_lines":[{"line_number":14,"context_line":"deps \u003d -r{toxinidir}/requirements.txt"},{"line_number":15,"context_line":"       -r{toxinidir}/test-requirements.txt"},{"line_number":16,"context_line":"commands \u003d find . -type f -name \"*.py[co]\" -delete"},{"line_number":17,"context_line":"           sh -c \u0027rm -fr $(find . -type d -name \"__pycache__\")\u0027"},{"line_number":18,"context_line":"           python setup.py testr --testr-args\u003d\u0027{posargs}\u0027"},{"line_number":19,"context_line":"whitelist_externals \u003d find"},{"line_number":20,"context_line":"                      sh"}],"source_content_type":"text/x-properties","patch_set":4,"id":"7a740942_25b3c099","line":17,"in_reply_to":"7a740942_06df833a","updated":"2015-12-14 03:11:45.000000000","message":"Done","commit_id":"6e6dd691a52979037236e1d28858dcaf28d725a7"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"c94ee359d62ee066d5945ee92f99454b91303594","unresolved":false,"context_lines":[{"line_number":12,"context_line":"usedevelop \u003d True"},{"line_number":13,"context_line":"install_command \u003d pip install -U {opts} {packages}"},{"line_number":14,"context_line":"deps \u003d -r{toxinidir}/requirements.txt"},{"line_number":15,"context_line":"       -r{toxinidir}/test-requirements.txt"},{"line_number":16,"context_line":"commands \u003d sh -c \u0027find . -not \\( -type d -name .?\\* -prune \\) \\"},{"line_number":17,"context_line":"           \\( -type d -name \"__pycache__\" -or -type f -name \"*.py[co]\" \\) \\"},{"line_number":18,"context_line":"           -print0 | xargs -0 rm -rf\u0027"}],"source_content_type":"text/x-properties","patch_set":6,"id":"7a740942_364e953b","line":15,"updated":"2015-12-14 07:19:22.000000000","message":"Hmm... the logic becomes complicated. Could you add a comment on what you do?","commit_id":"e28442311e760c4fafb874f66b0f75bb88a93463"},{"author":{"_account_id":16352,"name":"Shu Muto","email":"shu.mutow@gmail.com","username":"shu.mutow"},"change_message_id":"5d6b9372b56bbf449d45742ed3946d7c22dc2a98","unresolved":false,"context_lines":[{"line_number":12,"context_line":"usedevelop \u003d True"},{"line_number":13,"context_line":"install_command \u003d pip install -U {opts} {packages}"},{"line_number":14,"context_line":"deps \u003d -r{toxinidir}/requirements.txt"},{"line_number":15,"context_line":"       -r{toxinidir}/test-requirements.txt"},{"line_number":16,"context_line":"commands \u003d sh -c \u0027find . -not \\( -type d -name .?\\* -prune \\) \\"},{"line_number":17,"context_line":"           \\( -type d -name \"__pycache__\" -or -type f -name \"*.py[co]\" \\) \\"},{"line_number":18,"context_line":"           -print0 | xargs -0 rm -rf\u0027"}],"source_content_type":"text/x-properties","patch_set":6,"id":"5a710552_aa740dcf","line":15,"in_reply_to":"7a740942_364e953b","updated":"2015-12-15 02:20:29.000000000","message":"Done in commit message.","commit_id":"e28442311e760c4fafb874f66b0f75bb88a93463"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"c94ee359d62ee066d5945ee92f99454b91303594","unresolved":false,"context_lines":[{"line_number":13,"context_line":"install_command \u003d pip install -U {opts} {packages}"},{"line_number":14,"context_line":"deps \u003d -r{toxinidir}/requirements.txt"},{"line_number":15,"context_line":"       -r{toxinidir}/test-requirements.txt"},{"line_number":16,"context_line":"commands \u003d sh -c \u0027find . -not \\( -type d -name .?\\* -prune \\) \\"},{"line_number":17,"context_line":"           \\( -type d -name \"__pycache__\" -or -type f -name \"*.py[co]\" \\) \\"},{"line_number":18,"context_line":"           -print0 | xargs -0 rm -rf\u0027"},{"line_number":19,"context_line":"           python setup.py testr --testr-args\u003d\u0027{posargs}\u0027"}],"source_content_type":"text/x-properties","patch_set":6,"id":"7a740942_16fd99b0","line":16,"updated":"2015-12-14 07:19:22.000000000","message":"question: it seems you are trying to skipping directories other than neutronclient. Why don\u0027t you use \"find neutronclient\"?\nI think it simplifies the logic much.","commit_id":"e28442311e760c4fafb874f66b0f75bb88a93463"},{"author":{"_account_id":16352,"name":"Shu Muto","email":"shu.mutow@gmail.com","username":"shu.mutow"},"change_message_id":"5d6b9372b56bbf449d45742ed3946d7c22dc2a98","unresolved":false,"context_lines":[{"line_number":13,"context_line":"install_command \u003d pip install -U {opts} {packages}"},{"line_number":14,"context_line":"deps \u003d -r{toxinidir}/requirements.txt"},{"line_number":15,"context_line":"       -r{toxinidir}/test-requirements.txt"},{"line_number":16,"context_line":"commands \u003d sh -c \u0027find . -not \\( -type d -name .?\\* -prune \\) \\"},{"line_number":17,"context_line":"           \\( -type d -name \"__pycache__\" -or -type f -name \"*.py[co]\" \\) \\"},{"line_number":18,"context_line":"           -print0 | xargs -0 rm -rf\u0027"},{"line_number":19,"context_line":"           python setup.py testr --testr-args\u003d\u0027{posargs}\u0027"}],"source_content_type":"text/x-properties","patch_set":6,"id":"5a710552_d556de05","line":16,"in_reply_to":"7a740942_16fd99b0","updated":"2015-12-15 02:20:29.000000000","message":"I tried to be more extensible for other projects.","commit_id":"e28442311e760c4fafb874f66b0f75bb88a93463"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"c94ee359d62ee066d5945ee92f99454b91303594","unresolved":false,"context_lines":[{"line_number":15,"context_line":"       -r{toxinidir}/test-requirements.txt"},{"line_number":16,"context_line":"commands \u003d sh -c \u0027find . -not \\( -type d -name .?\\* -prune \\) \\"},{"line_number":17,"context_line":"           \\( -type d -name \"__pycache__\" -or -type f -name \"*.py[co]\" \\) \\"},{"line_number":18,"context_line":"           -print0 | xargs -0 rm -rf\u0027"},{"line_number":19,"context_line":"           python setup.py testr --testr-args\u003d\u0027{posargs}\u0027"},{"line_number":20,"context_line":"whitelist_externals \u003d sh"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-properties","patch_set":6,"id":"7a740942_d687115f","line":18,"updated":"2015-12-14 07:19:22.000000000","message":"The expression of find can be changed to:\n\n  find . -type d -name \u0027.?*\u0027 -prune -o \n  \\( -type d -name \"__pycache__\" -o -type f -name \u0027*.py[co]\u0027 \\) -print0\n\nThe reasons of the above suggestion are:\n\n- -not and -or are not POSIX compliant. Using ! and -o is recommended.\n- you need to use a single quote instead of a double quote to prevent a shell from expanding them.\n- -prune is an action and -not operator should operate on conditions, so it looks strange to have an action inside the condition.","commit_id":"e28442311e760c4fafb874f66b0f75bb88a93463"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"a25174b7e5c3f7329ac0765a6da5c4f889ec8010","unresolved":false,"context_lines":[{"line_number":15,"context_line":"       -r{toxinidir}/test-requirements.txt"},{"line_number":16,"context_line":"commands \u003d sh -c \u0027find . -not \\( -type d -name .?\\* -prune \\) \\"},{"line_number":17,"context_line":"           \\( -type d -name \"__pycache__\" -or -type f -name \"*.py[co]\" \\) \\"},{"line_number":18,"context_line":"           -print0 | xargs -0 rm -rf\u0027"},{"line_number":19,"context_line":"           python setup.py testr --testr-args\u003d\u0027{posargs}\u0027"},{"line_number":20,"context_line":"whitelist_externals \u003d sh"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-properties","patch_set":6,"id":"5a710552_771284b6","line":18,"in_reply_to":"5a710552_70e4d83a","updated":"2015-12-15 08:10:19.000000000","message":"Hmmm.. regarding the last point, my test works http://paste.openstack.org/show/481912/\n\nWhat is different from your environment?","commit_id":"e28442311e760c4fafb874f66b0f75bb88a93463"},{"author":{"_account_id":16352,"name":"Shu Muto","email":"shu.mutow@gmail.com","username":"shu.mutow"},"change_message_id":"5161cc6ab183127807d055a88cd52ae2e3d29c70","unresolved":false,"context_lines":[{"line_number":15,"context_line":"       -r{toxinidir}/test-requirements.txt"},{"line_number":16,"context_line":"commands \u003d sh -c \u0027find . -not \\( -type d -name .?\\* -prune \\) \\"},{"line_number":17,"context_line":"           \\( -type d -name \"__pycache__\" -or -type f -name \"*.py[co]\" \\) \\"},{"line_number":18,"context_line":"           -print0 | xargs -0 rm -rf\u0027"},{"line_number":19,"context_line":"           python setup.py testr --testr-args\u003d\u0027{posargs}\u0027"},{"line_number":20,"context_line":"whitelist_externals \u003d sh"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-properties","patch_set":6,"id":"5a710552_642ba3ec","line":18,"in_reply_to":"5a710552_771284b6","updated":"2015-12-15 11:41:01.000000000","message":"Sorry, it\u0027s my mistake. I checked only find command without print option.","commit_id":"e28442311e760c4fafb874f66b0f75bb88a93463"},{"author":{"_account_id":16352,"name":"Shu Muto","email":"shu.mutow@gmail.com","username":"shu.mutow"},"change_message_id":"5d6b9372b56bbf449d45742ed3946d7c22dc2a98","unresolved":false,"context_lines":[{"line_number":15,"context_line":"       -r{toxinidir}/test-requirements.txt"},{"line_number":16,"context_line":"commands \u003d sh -c \u0027find . -not \\( -type d -name .?\\* -prune \\) \\"},{"line_number":17,"context_line":"           \\( -type d -name \"__pycache__\" -or -type f -name \"*.py[co]\" \\) \\"},{"line_number":18,"context_line":"           -print0 | xargs -0 rm -rf\u0027"},{"line_number":19,"context_line":"           python setup.py testr --testr-args\u003d\u0027{posargs}\u0027"},{"line_number":20,"context_line":"whitelist_externals \u003d sh"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-properties","patch_set":6,"id":"5a710552_70e4d83a","line":18,"in_reply_to":"7a740942_d687115f","updated":"2015-12-15 02:20:29.000000000","message":"Thanks for your suggestion.\n* Changed \"-not\" and \"-or\" to \"!\" and \"-o\".\n* Substituted double quote and single quote. To use \"\\\" in tox.ini, its usecase seems to be restricted. So, double quote was remaining.\n* \"-not\" is needed not only \"-prune\". Otherwise, \"dot started directories themselves\" were selected and removed.","commit_id":"e28442311e760c4fafb874f66b0f75bb88a93463"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9a6bb5f93a06f48d812e308cf6ab369e48edee68","unresolved":false,"context_lines":[{"line_number":12,"context_line":"usedevelop \u003d True"},{"line_number":13,"context_line":"install_command \u003d pip install -U {opts} {packages}"},{"line_number":14,"context_line":"deps \u003d -r{toxinidir}/requirements.txt"},{"line_number":15,"context_line":"       -r{toxinidir}/test-requirements.txt"},{"line_number":16,"context_line":"commands \u003d sh -c \"find . -type d -name \u0027.?*\u0027 -prune -o \\"},{"line_number":17,"context_line":"           \\( -type d -name \u0027__pycache__\u0027 -o -type f -name \u0027*.py[co]\u0027 \\) \\"},{"line_number":18,"context_line":"           -print0 | xargs -0 rm -rf\""}],"source_content_type":"text/x-properties","patch_set":8,"id":"5a710552_3e527e68","line":15,"updated":"2015-12-15 15:02:12.000000000","message":"Could you add a comment here to describe what L.16-18 does especially about L.16?","commit_id":"79f5fe40b2500b5ad277cb792caf37c131fd23ad"},{"author":{"_account_id":16352,"name":"Shu Muto","email":"shu.mutow@gmail.com","username":"shu.mutow"},"change_message_id":"3bd7172b4ff3cc6ad318856f1e717c8e605bc424","unresolved":false,"context_lines":[{"line_number":12,"context_line":"usedevelop \u003d True"},{"line_number":13,"context_line":"install_command \u003d pip install -U {opts} {packages}"},{"line_number":14,"context_line":"deps \u003d -r{toxinidir}/requirements.txt"},{"line_number":15,"context_line":"       -r{toxinidir}/test-requirements.txt"},{"line_number":16,"context_line":"commands \u003d sh -c \"find . -type d -name \u0027.?*\u0027 -prune -o \\"},{"line_number":17,"context_line":"           \\( -type d -name \u0027__pycache__\u0027 -o -type f -name \u0027*.py[co]\u0027 \\) \\"},{"line_number":18,"context_line":"           -print0 | xargs -0 rm -rf\""}],"source_content_type":"text/x-properties","patch_set":8,"id":"5a710552_3f949ce0","line":15,"in_reply_to":"5a710552_3e527e68","updated":"2015-12-16 02:10:37.000000000","message":"Done","commit_id":"79f5fe40b2500b5ad277cb792caf37c131fd23ad"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"ffe20ec2fa699e0946fd04ecce6ceea6c10c6fe4","unresolved":false,"context_lines":[{"line_number":13,"context_line":"install_command \u003d pip install -U {opts} {packages}"},{"line_number":14,"context_line":"deps \u003d -r{toxinidir}/requirements.txt"},{"line_number":15,"context_line":"       -r{toxinidir}/test-requirements.txt"},{"line_number":16,"context_line":"# Delete bytecodes from normal directories before all tests, "},{"line_number":17,"context_line":"# but not in dot started directories."},{"line_number":18,"context_line":"commands \u003d sh -c \"find . -type d -name \u0027.?*\u0027 -prune -o \\"},{"line_number":19,"context_line":"           \\( -type d -name \u0027__pycache__\u0027 -o -type f -name \u0027*.py[co]\u0027 \\) \\"}],"source_content_type":"text/x-properties","patch_set":9,"id":"5a710552_41198778","line":16,"updated":"2015-12-16 07:19:33.000000000","message":"Unnecessaryr ailing space","commit_id":"d0871d053f4b8d59c61ab1084ccdb0689400bf68"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"9c2b40dcf17ab2d56578571c966c5951baafd6b7","unresolved":false,"context_lines":[{"line_number":13,"context_line":"install_command \u003d pip install -U {opts} {packages}"},{"line_number":14,"context_line":"deps \u003d -r{toxinidir}/requirements.txt"},{"line_number":15,"context_line":"       -r{toxinidir}/test-requirements.txt"},{"line_number":16,"context_line":"# Delete bytecodes from normal directories before all tests, "},{"line_number":17,"context_line":"# but not in dot started directories."},{"line_number":18,"context_line":"commands \u003d sh -c \"find . -type d -name \u0027.?*\u0027 -prune -o \\"},{"line_number":19,"context_line":"           \\( -type d -name \u0027__pycache__\u0027 -o -type f -name \u0027*.py[co]\u0027 \\) \\"}],"source_content_type":"text/x-properties","patch_set":9,"id":"5a710552_f8fdc13a","line":16,"in_reply_to":"5a710552_41198778","updated":"2015-12-16 08:22:56.000000000","message":"+1","commit_id":"d0871d053f4b8d59c61ab1084ccdb0689400bf68"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"ffe20ec2fa699e0946fd04ecce6ceea6c10c6fe4","unresolved":false,"context_lines":[{"line_number":14,"context_line":"deps \u003d -r{toxinidir}/requirements.txt"},{"line_number":15,"context_line":"       -r{toxinidir}/test-requirements.txt"},{"line_number":16,"context_line":"# Delete bytecodes from normal directories before all tests, "},{"line_number":17,"context_line":"# but not in dot started directories."},{"line_number":18,"context_line":"commands \u003d sh -c \"find . -type d -name \u0027.?*\u0027 -prune -o \\"},{"line_number":19,"context_line":"           \\( -type d -name \u0027__pycache__\u0027 -o -type f -name \u0027*.py[co]\u0027 \\) \\"},{"line_number":20,"context_line":"           -print0 | xargs -0 rm -rf\""}],"source_content_type":"text/x-properties","patch_set":9,"id":"5a710552_f235e2d9","line":17,"updated":"2015-12-16 07:19:33.000000000","message":"Consider rephrasing:\n\n  Delete bytecodes from normal directories before runnin tests.\n  Note that bytecodes in dot directories will  not be deleted\n  to keep bytecodes of python modules installed into virtualenvs.","commit_id":"d0871d053f4b8d59c61ab1084ccdb0689400bf68"},{"author":{"_account_id":16352,"name":"Shu Muto","email":"shu.mutow@gmail.com","username":"shu.mutow"},"change_message_id":"4becd6bd855b9e14532d5b6a3c9624e27835cc53","unresolved":false,"context_lines":[{"line_number":14,"context_line":"deps \u003d -r{toxinidir}/requirements.txt"},{"line_number":15,"context_line":"       -r{toxinidir}/test-requirements.txt"},{"line_number":16,"context_line":"# Delete bytecodes from normal directories before all tests, "},{"line_number":17,"context_line":"# but not in dot started directories."},{"line_number":18,"context_line":"commands \u003d sh -c \"find . -type d -name \u0027.?*\u0027 -prune -o \\"},{"line_number":19,"context_line":"           \\( -type d -name \u0027__pycache__\u0027 -o -type f -name \u0027*.py[co]\u0027 \\) \\"},{"line_number":20,"context_line":"           -print0 | xargs -0 rm -rf\""}],"source_content_type":"text/x-properties","patch_set":9,"id":"5a710552_f807011a","line":17,"in_reply_to":"5a710552_f235e2d9","updated":"2015-12-16 08:27:16.000000000","message":"Done","commit_id":"d0871d053f4b8d59c61ab1084ccdb0689400bf68"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"55ea2c5ac24bf876697909c9b0b5c70fd42e0104","unresolved":false,"context_lines":[{"line_number":16,"context_line":"# Delete bytecodes from normal directories before running tests."},{"line_number":17,"context_line":"# Note that bytecodes in dot directories will not be deleted"},{"line_number":18,"context_line":"# to keep bytecodes of python modules installed into virtualenvs."},{"line_number":19,"context_line":"commands \u003d sh -c \"find . -type d -name \u0027.?*\u0027 -prune -o \\"},{"line_number":20,"context_line":"           \\( -type d -name \u0027__pycache__\u0027 -o -type f -name \u0027*.py[co]\u0027 \\) \\"},{"line_number":21,"context_line":"           -print0 | xargs -0 rm -rf\""},{"line_number":22,"context_line":"           python setup.py testr --testr-args\u003d\u0027{posargs}\u0027"}],"source_content_type":"text/x-properties","patch_set":10,"id":"3a7e1126_b4b91dce","line":19,"range":{"start_line":19,"start_character":39,"end_line":19,"end_character":44},"updated":"2015-12-21 12:54:13.000000000","message":"why not \u0027.*\u0027 ?","commit_id":"83d61566cee8b8e786b46103cf3e72fbe8077c1a"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"145de5f9c2b7400ad5cd55f3c066f348e2a9834e","unresolved":false,"context_lines":[{"line_number":16,"context_line":"# Delete bytecodes from normal directories before running tests."},{"line_number":17,"context_line":"# Note that bytecodes in dot directories will not be deleted"},{"line_number":18,"context_line":"# to keep bytecodes of python modules installed into virtualenvs."},{"line_number":19,"context_line":"commands \u003d sh -c \"find . -type d -name \u0027.?*\u0027 -prune -o \\"},{"line_number":20,"context_line":"           \\( -type d -name \u0027__pycache__\u0027 -o -type f -name \u0027*.py[co]\u0027 \\) \\"},{"line_number":21,"context_line":"           -print0 | xargs -0 rm -rf\""},{"line_number":22,"context_line":"           python setup.py testr --testr-args\u003d\u0027{posargs}\u0027"}],"source_content_type":"text/x-properties","patch_set":10,"id":"fa69d971_2a9ea6b8","line":19,"range":{"start_line":19,"start_character":39,"end_line":19,"end_character":44},"in_reply_to":"3a7e1126_0237774d","updated":"2016-01-08 11:25:10.000000000","message":"Yes, we need to use \".?*\"\n\n  $ find . -type d -name \u0027.*\u0027  -prune -o -type f -name \u0027*.py[co]\u0027 -print\n  $ find . -type d -name \u0027.?*\u0027  -prune -o -type f -name \u0027*.py[co]\u0027 -print | head -5\n  ./neutronclient/shell.pyc\n  ./neutronclient/neutron/__init__.pyc\n  ./neutronclient/neutron/client.pyc\n  ./neutronclient/neutron/v2_0/subnetpool.pyc\n  ./neutronclient/neutron/v2_0/vpn/utils.pyc","commit_id":"83d61566cee8b8e786b46103cf3e72fbe8077c1a"},{"author":{"_account_id":16352,"name":"Shu Muto","email":"shu.mutow@gmail.com","username":"shu.mutow"},"change_message_id":"3d435cc4b6e47aacfaca9174efa9560d6d9e96d0","unresolved":false,"context_lines":[{"line_number":16,"context_line":"# Delete bytecodes from normal directories before running tests."},{"line_number":17,"context_line":"# Note that bytecodes in dot directories will not be deleted"},{"line_number":18,"context_line":"# to keep bytecodes of python modules installed into virtualenvs."},{"line_number":19,"context_line":"commands \u003d sh -c \"find . -type d -name \u0027.?*\u0027 -prune -o \\"},{"line_number":20,"context_line":"           \\( -type d -name \u0027__pycache__\u0027 -o -type f -name \u0027*.py[co]\u0027 \\) \\"},{"line_number":21,"context_line":"           -print0 | xargs -0 rm -rf\""},{"line_number":22,"context_line":"           python setup.py testr --testr-args\u003d\u0027{posargs}\u0027"}],"source_content_type":"text/x-properties","patch_set":10,"id":"3a7e1126_0237774d","line":19,"range":{"start_line":19,"start_character":39,"end_line":19,"end_character":44},"in_reply_to":"3a7e1126_b4b91dce","updated":"2015-12-22 01:58:04.000000000","message":"\u0027.*\u0027 include current directory. So, if \u0027.*\u0027, no files are selected.","commit_id":"83d61566cee8b8e786b46103cf3e72fbe8077c1a"}]}
