)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"82838cd2264cc2cf6c3ed19d31f4ea5731d2746b","unresolved":false,"context_lines":[{"line_number":11,"context_line":"testing, it became clear that our tox.ini was a bit messy. This change"},{"line_number":12,"context_line":"cleans it up to:"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"* Removes all py* jobs and lets tox define those autoatically. Their"},{"line_number":15,"context_line":"  commands come from the base [testenv]."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"* move pep-related tox below both unit and functional"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3f79a3b5_bceda98e","line":14,"range":{"start_line":14,"start_character":49,"end_line":14,"end_character":61},"updated":"2018-10-19 14:17:05.000000000","message":"Is your \u0027m\u0027 acting up now??","commit_id":"9ff8b6997a68bebcb9e42a7e4272ec55573b60db"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"942f62a82750e4cda7924828a89c8f84b902f929","unresolved":false,"context_lines":[{"line_number":11,"context_line":"testing, it became clear that our tox.ini was a bit messy. This change"},{"line_number":12,"context_line":"cleans it up to:"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"* Removes all py* jobs and lets tox define those autoatically. Their"},{"line_number":15,"context_line":"  commands come from the base [testenv]."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"* move pep-related tox below both unit and functional"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3f79a3b5_cb76990c","line":14,"range":{"start_line":14,"start_character":49,"end_line":14,"end_character":61},"in_reply_to":"3f79a3b5_bceda98e","updated":"2018-10-19 17:32:07.000000000","message":"It is, actually, it seems the bottom row of the keyboard is always the culprit. But I don\u0027t think I can blame that for this one.","commit_id":"9ff8b6997a68bebcb9e42a7e4272ec55573b60db"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"9b1a088ab964c6bd333b11900e9ab06d71713b8b","unresolved":false,"context_lines":[{"line_number":32,"context_line":"  it doesn\u0027t seem to have any particular value (for this project)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"This is one of several ways to do this cleanup. This way assumes some"},{"line_number":35,"context_line":"knowledge of the fact that tox defines a lot default jobs with default"},{"line_number":36,"context_line":"python versions. I had tried a more explicit way but it tickled the"},{"line_number":37,"context_line":"bug at https://github.com/tox-dev/tox/issues/1020 . This current format"},{"line_number":38,"context_line":"is more future proof and more python version change proof for unit"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3f79a3b5_7a25b415","line":35,"range":{"start_line":35,"start_character":44,"end_line":35,"end_character":45},"updated":"2018-10-22 13:42:30.000000000","message":"of","commit_id":"16c842cf1e2ae2ceae7de9e54ac5a614d3ad5b80"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"49b559b00deb0f3491491477df5431766161ef8c","unresolved":false,"context_lines":[{"line_number":14,"context_line":"* Removes all py* jobs and lets tox define those automatically. Their"},{"line_number":15,"context_line":"  commands come from the base [testenv]."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"  The global ignore_basepython_conflict setting must be used to avoid"},{"line_number":18,"context_line":"  warnings about conflicts between the basepython in [testenv] and the"},{"line_number":19,"context_line":"  ones defined (and used) by the py* jobs."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"  Non-unit tests need to define their commands specifically."},{"line_number":22,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"3f79a3b5_1f747d03","line":19,"range":{"start_line":17,"start_character":0,"end_line":19,"end_character":42},"updated":"2018-11-06 16:13:25.000000000","message":"This is no longer true","commit_id":"de7543de61c733b871ab1420381a8de54a936d47"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"93174af6d7428b1e95b4ec7f73be250451824175","unresolved":false,"context_lines":[{"line_number":14,"context_line":"* Removes all py* jobs and lets tox define those automatically. Their"},{"line_number":15,"context_line":"  commands come from the base [testenv]."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"  The global ignore_basepython_conflict setting must be used to avoid"},{"line_number":18,"context_line":"  warnings about conflicts between the basepython in [testenv] and the"},{"line_number":19,"context_line":"  ones defined (and used) by the py* jobs."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"  Non-unit tests need to define their commands specifically."},{"line_number":22,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"3f79a3b5_ff366101","line":19,"range":{"start_line":17,"start_character":0,"end_line":19,"end_character":42},"in_reply_to":"3f79a3b5_1f747d03","updated":"2018-11-06 16:19:35.000000000","message":"Done","commit_id":"de7543de61c733b871ab1420381a8de54a936d47"}],"tox.ini":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5e51d45a1b4d8514d6073038a737ae410b45acbd","unresolved":false,"context_lines":[{"line_number":45,"context_line":"  stestr run {posargs}"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"[testenv:py36]"},{"line_number":48,"context_line":"# TODO(efried): Remove this once https://github.com/tox-dev/tox/issues/425 is fixed."},{"line_number":49,"context_line":"basepython \u003d python3.6"},{"line_number":50,"context_line":"commands \u003d"},{"line_number":51,"context_line":"  {[testenv:py35]commands}"}],"source_content_type":"text/x-properties","patch_set":1,"id":"3f79a3b5_f0183220","side":"PARENT","line":48,"range":{"start_line":48,"start_character":0,"end_line":48,"end_character":84},"updated":"2018-10-18 22:09:48.000000000","message":"Why did you get rid of these comments? Does something about the way you\u0027ve set up the environments mean that we\u0027ll no longer automatically get the right python version?","commit_id":"e7fe0ab8629165d57e71bbcda71bf198bb2dada1"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"02e8e8ded2c3dec5b4e17818c457f8fc941ed1f5","unresolved":false,"context_lines":[{"line_number":45,"context_line":"  stestr run {posargs}"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"[testenv:py36]"},{"line_number":48,"context_line":"# TODO(efried): Remove this once https://github.com/tox-dev/tox/issues/425 is fixed."},{"line_number":49,"context_line":"basepython \u003d python3.6"},{"line_number":50,"context_line":"commands \u003d"},{"line_number":51,"context_line":"  {[testenv:py35]commands}"}],"source_content_type":"text/x-properties","patch_set":1,"id":"3f79a3b5_2ad712f7","side":"PARENT","line":48,"range":{"start_line":48,"start_character":0,"end_line":48,"end_character":84},"in_reply_to":"3f79a3b5_f0183220","updated":"2018-10-19 09:07:12.000000000","message":"We\u0027ll get the right python version, but we\u0027ll always get a warning if we don\u0027t set basepython explicitly: https://tox.readthedocs.io/en/latest/config.html?highlight\u003dwarning#conf-ignore_basepython_conflict\n\nWe could not use basepython in the base testenv (above) but then that would cause other issues. So the #425 problem is now somewhat irrelevant because we\u0027ll always want to state basepython.\n\nIn addition, I really struggled to make a connection between \"this\" and whatever it was referring to so chose this as an opportunity to kill the comment.","commit_id":"e7fe0ab8629165d57e71bbcda71bf198bb2dada1"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5e51d45a1b4d8514d6073038a737ae410b45acbd","unresolved":false,"context_lines":[{"line_number":1,"context_line":"[tox]"},{"line_number":2,"context_line":"minversion \u003d 2.1"},{"line_number":3,"context_line":"envlist \u003d py{27,36},functional,functional-py36,pep8"},{"line_number":4,"context_line":"skipsdist \u003d True"},{"line_number":5,"context_line":""},{"line_number":6,"context_line":"[testenv]"}],"source_content_type":"text/x-properties","patch_set":1,"id":"3f79a3b5_0d54bbc5","line":3,"updated":"2018-10-18 22:09:48.000000000","message":"Almost think we should do this switch in its own patch. But it doesn\u0027t really affect anything - in particular, no impact on gate jobs - so meh, it probably doesn\u0027t matter.","commit_id":"f277de6e69756ff14a62e9a2a95bd735b43f4bb3"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5e51d45a1b4d8514d6073038a737ae410b45acbd","unresolved":false,"context_lines":[{"line_number":55,"context_line":"  {[testenv:py]commands}"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"# The functional environment is both the base env for functional tests and"},{"line_number":58,"context_line":"# also the python 2.7 version of functional tests. This is an historical"},{"line_number":59,"context_line":"# artifact."},{"line_number":60,"context_line":"[testenv:functional]"},{"line_number":61,"context_line":"basepython \u003d python2.7"}],"source_content_type":"text/x-properties","patch_set":1,"id":"3f79a3b5_f06032d3","line":58,"range":{"start_line":58,"start_character":59,"end_line":58,"end_character":61},"updated":"2018-10-18 22:09:48.000000000","message":"boo","commit_id":"f277de6e69756ff14a62e9a2a95bd735b43f4bb3"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"02e8e8ded2c3dec5b4e17818c457f8fc941ed1f5","unresolved":false,"context_lines":[{"line_number":55,"context_line":"  {[testenv:py]commands}"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"# The functional environment is both the base env for functional tests and"},{"line_number":58,"context_line":"# also the python 2.7 version of functional tests. This is an historical"},{"line_number":59,"context_line":"# artifact."},{"line_number":60,"context_line":"[testenv:functional]"},{"line_number":61,"context_line":"basepython \u003d python2.7"}],"source_content_type":"text/x-properties","patch_set":1,"id":"3f79a3b5_aaf322a0","line":58,"range":{"start_line":58,"start_character":59,"end_line":58,"end_character":61},"in_reply_to":"3f79a3b5_f06032d3","updated":"2018-10-19 09:07:12.000000000","message":"I went back and forth several times. In this case I decided I was speaking in 18th century english instead of modern english.","commit_id":"f277de6e69756ff14a62e9a2a95bd735b43f4bb3"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"82838cd2264cc2cf6c3ed19d31f4ea5731d2746b","unresolved":false,"context_lines":[{"line_number":4,"context_line":"skipsdist \u003d True"},{"line_number":5,"context_line":""},{"line_number":6,"context_line":"[testenv]"},{"line_number":7,"context_line":"basepython \u003d python3"},{"line_number":8,"context_line":"usedevelop \u003d True"},{"line_number":9,"context_line":"whitelist_externals \u003d"},{"line_number":10,"context_line":"  bash"}],"source_content_type":"text/x-properties","patch_set":2,"id":"3f79a3b5_9f477f53","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":20},"updated":"2018-10-19 14:17:05.000000000","message":"Since testenv is picked up by the auto envs, this results in all of them running py3 (at whatever minor version is linked from python3 on your system).\n\nIt also results in the basepython warning being emitted for all of them.","commit_id":"9ff8b6997a68bebcb9e42a7e4272ec55573b60db"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"942f62a82750e4cda7924828a89c8f84b902f929","unresolved":false,"context_lines":[{"line_number":4,"context_line":"skipsdist \u003d True"},{"line_number":5,"context_line":""},{"line_number":6,"context_line":"[testenv]"},{"line_number":7,"context_line":"basepython \u003d python3"},{"line_number":8,"context_line":"usedevelop \u003d True"},{"line_number":9,"context_line":"whitelist_externals \u003d"},{"line_number":10,"context_line":"  bash"}],"source_content_type":"text/x-properties","patch_set":2,"id":"3f79a3b5_4b628943","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":20},"in_reply_to":"3f79a3b5_9f477f53","updated":"2018-10-19 17:32:07.000000000","message":"I\u0027m undecided how to deal with this one, because we (the we that is openstack) put python3 here on purpose for the \"other jobs\" at some point.\n\nI\u0027d rather not have explicit jobs for the py things, so I think I\u0027ll turn on the flag it suggests.","commit_id":"9ff8b6997a68bebcb9e42a7e4272ec55573b60db"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9a699e0cfca45cc937652ef348e8662c0c75f2c8","unresolved":false,"context_lines":[{"line_number":95,"context_line":"  {[testenv]setenv}"},{"line_number":96,"context_line":"  PYTHON\u003dcoverage run --source placement --parallel-mode"},{"line_number":97,"context_line":"commands \u003d"},{"line_number":98,"context_line":"  {[testenv]commands}"},{"line_number":99,"context_line":"  coverage erase"},{"line_number":100,"context_line":"  stestr --test-path\u003d./placement/tests run {posargs}"},{"line_number":101,"context_line":"  coverage combine"}],"source_content_type":"text/x-properties","patch_set":2,"id":"3f79a3b5_ffd9d3f0","line":98,"range":{"start_line":98,"start_character":0,"end_line":98,"end_character":21},"updated":"2018-10-19 14:47:37.000000000","message":"This looks wrong now. Guess you should run cover erase before this, then this, then the other coverage commands below","commit_id":"9ff8b6997a68bebcb9e42a7e4272ec55573b60db"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"01a9e944a8565ed9c7f3f712b3969ebf06eaa25d","unresolved":false,"context_lines":[{"line_number":95,"context_line":"  {[testenv]setenv}"},{"line_number":96,"context_line":"  PYTHON\u003dcoverage run --source placement --parallel-mode"},{"line_number":97,"context_line":"commands \u003d"},{"line_number":98,"context_line":"  {[testenv]commands}"},{"line_number":99,"context_line":"  coverage erase"},{"line_number":100,"context_line":"  stestr --test-path\u003d./placement/tests run {posargs}"},{"line_number":101,"context_line":"  coverage combine"}],"source_content_type":"text/x-properties","patch_set":2,"id":"3f79a3b5_8bb50180","line":98,"range":{"start_line":98,"start_character":0,"end_line":98,"end_character":21},"in_reply_to":"3f79a3b5_cb5f7972","updated":"2018-10-22 13:49:05.000000000","message":"Done","commit_id":"9ff8b6997a68bebcb9e42a7e4272ec55573b60db"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"942f62a82750e4cda7924828a89c8f84b902f929","unresolved":false,"context_lines":[{"line_number":95,"context_line":"  {[testenv]setenv}"},{"line_number":96,"context_line":"  PYTHON\u003dcoverage run --source placement --parallel-mode"},{"line_number":97,"context_line":"commands \u003d"},{"line_number":98,"context_line":"  {[testenv]commands}"},{"line_number":99,"context_line":"  coverage erase"},{"line_number":100,"context_line":"  stestr --test-path\u003d./placement/tests run {posargs}"},{"line_number":101,"context_line":"  coverage combine"}],"source_content_type":"text/x-properties","patch_set":2,"id":"3f79a3b5_cb5f7972","line":98,"range":{"start_line":98,"start_character":0,"end_line":98,"end_character":21},"in_reply_to":"3f79a3b5_ffd9d3f0","updated":"2018-10-19 17:32:07.000000000","message":"ah yeah, this needs to be replaced by the \u0027find\u0027","commit_id":"9ff8b6997a68bebcb9e42a7e4272ec55573b60db"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9a699e0cfca45cc937652ef348e8662c0c75f2c8","unresolved":false,"context_lines":[{"line_number":106,"context_line":"[testenv:debug]"},{"line_number":107,"context_line":"envdir \u003d {toxworkdir}/shared"},{"line_number":108,"context_line":"commands \u003d"},{"line_number":109,"context_line":"  {[testenv]commands}"},{"line_number":110,"context_line":"  oslo_debug_helper {posargs}"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"[testenv:venv]"}],"source_content_type":"text/x-properties","patch_set":2,"id":"3f79a3b5_5fe487a8","line":109,"range":{"start_line":109,"start_character":0,"end_line":109,"end_character":21},"updated":"2018-10-19 14:47:37.000000000","message":"This too?","commit_id":"9ff8b6997a68bebcb9e42a7e4272ec55573b60db"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"01a9e944a8565ed9c7f3f712b3969ebf06eaa25d","unresolved":false,"context_lines":[{"line_number":106,"context_line":"[testenv:debug]"},{"line_number":107,"context_line":"envdir \u003d {toxworkdir}/shared"},{"line_number":108,"context_line":"commands \u003d"},{"line_number":109,"context_line":"  {[testenv]commands}"},{"line_number":110,"context_line":"  oslo_debug_helper {posargs}"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"[testenv:venv]"}],"source_content_type":"text/x-properties","patch_set":2,"id":"3f79a3b5_2baced34","line":109,"range":{"start_line":109,"start_character":0,"end_line":109,"end_character":21},"in_reply_to":"3f79a3b5_5fe487a8","updated":"2018-10-22 13:49:05.000000000","message":"Done","commit_id":"9ff8b6997a68bebcb9e42a7e4272ec55573b60db"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"942f62a82750e4cda7924828a89c8f84b902f929","unresolved":false,"context_lines":[{"line_number":106,"context_line":"[testenv:debug]"},{"line_number":107,"context_line":"envdir \u003d {toxworkdir}/shared"},{"line_number":108,"context_line":"commands \u003d"},{"line_number":109,"context_line":"  {[testenv]commands}"},{"line_number":110,"context_line":"  oslo_debug_helper {posargs}"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"[testenv:venv]"}],"source_content_type":"text/x-properties","patch_set":2,"id":"3f79a3b5_6b566561","line":109,"range":{"start_line":109,"start_character":0,"end_line":109,"end_character":21},"in_reply_to":"3f79a3b5_5fe487a8","updated":"2018-10-19 17:32:07.000000000","message":"and here too","commit_id":"9ff8b6997a68bebcb9e42a7e4272ec55573b60db"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9a699e0cfca45cc937652ef348e8662c0c75f2c8","unresolved":false,"context_lines":[{"line_number":194,"context_line":"  -r{toxinidir}/requirements.txt"},{"line_number":195,"context_line":"commands \u003d"},{"line_number":196,"context_line":"  {[testenv]commands}"},{"line_number":197,"context_line":"  stestr run {posargs}"}],"source_content_type":"text/x-properties","patch_set":2,"id":"3f79a3b5_1ffe0f39","line":197,"range":{"start_line":197,"start_character":0,"end_line":197,"end_character":22},"updated":"2018-10-19 14:47:37.000000000","message":"And this","commit_id":"9ff8b6997a68bebcb9e42a7e4272ec55573b60db"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"942f62a82750e4cda7924828a89c8f84b902f929","unresolved":false,"context_lines":[{"line_number":194,"context_line":"  -r{toxinidir}/requirements.txt"},{"line_number":195,"context_line":"commands \u003d"},{"line_number":196,"context_line":"  {[testenv]commands}"},{"line_number":197,"context_line":"  stestr run {posargs}"}],"source_content_type":"text/x-properties","patch_set":2,"id":"3f79a3b5_8b59818e","line":197,"range":{"start_line":197,"start_character":0,"end_line":197,"end_character":22},"in_reply_to":"3f79a3b5_1ffe0f39","updated":"2018-10-19 17:32:07.000000000","message":"but here we can remove the entire commands line","commit_id":"9ff8b6997a68bebcb9e42a7e4272ec55573b60db"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"01a9e944a8565ed9c7f3f712b3969ebf06eaa25d","unresolved":false,"context_lines":[{"line_number":194,"context_line":"  -r{toxinidir}/requirements.txt"},{"line_number":195,"context_line":"commands \u003d"},{"line_number":196,"context_line":"  {[testenv]commands}"},{"line_number":197,"context_line":"  stestr run {posargs}"}],"source_content_type":"text/x-properties","patch_set":2,"id":"3f79a3b5_6b674526","line":197,"range":{"start_line":197,"start_character":0,"end_line":197,"end_character":22},"in_reply_to":"3f79a3b5_8b59818e","updated":"2018-10-22 13:49:05.000000000","message":"Done","commit_id":"9ff8b6997a68bebcb9e42a7e4272ec55573b60db"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"9b1a088ab964c6bd333b11900e9ab06d71713b8b","unresolved":false,"context_lines":[{"line_number":29,"context_line":"# For a venv that doesn\u0027t use stestr commands must be overridden."},{"line_number":30,"context_line":"commands \u003d"},{"line_number":31,"context_line":"  find . -type f -name \"*.pyc\" -delete"},{"line_number":32,"context_line":"  stestr run {posargs}"},{"line_number":33,"context_line":"passenv \u003d"},{"line_number":34,"context_line":"  OS_DEBUG GENERATE_HASHES"},{"line_number":35,"context_line":"# there is also secret magic in subunit-trace which lets you run in a fail only"}],"source_content_type":"text/x-properties","patch_set":3,"id":"3f79a3b5_c3c6644b","line":32,"range":{"start_line":32,"start_character":0,"end_line":32,"end_character":22},"updated":"2018-10-22 13:42:30.000000000","message":"This...","commit_id":"16c842cf1e2ae2ceae7de9e54ac5a614d3ad5b80"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"9b1a088ab964c6bd333b11900e9ab06d71713b8b","unresolved":false,"context_lines":[{"line_number":44,"context_line":"basepython \u003d python2.7"},{"line_number":45,"context_line":"envdir \u003d {toxworkdir}/py27"},{"line_number":46,"context_line":"commands \u003d"},{"line_number":47,"context_line":"  {[testenv]commands}"},{"line_number":48,"context_line":"  stestr --test-path\u003d./placement/tests/functional run {posargs}"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"[testenv:functional-py35]"}],"source_content_type":"text/x-properties","patch_set":3,"id":"3f79a3b5_43d81423","line":47,"range":{"start_line":47,"start_character":0,"end_line":47,"end_character":21},"updated":"2018-10-22 13:42:30.000000000","message":"...is being inherited here and in the other functional envs below.","commit_id":"16c842cf1e2ae2ceae7de9e54ac5a614d3ad5b80"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"94eab87e2ce01887b7b79ea4e3d05c5c4bca9f91","unresolved":false,"context_lines":[{"line_number":2,"context_line":"minversion \u003d 2.1"},{"line_number":3,"context_line":"envlist \u003d py{27,36},functional,functional-py36,pep8"},{"line_number":4,"context_line":"skipsdist \u003d True"},{"line_number":5,"context_line":"# basepython is defined in the base testenv, causing conflict warnings with the"},{"line_number":6,"context_line":"# automatically defined py27, 35, 36, etc testenvs. We want to use the version"},{"line_number":7,"context_line":"# implied by those testenv names and not get the warning."},{"line_number":8,"context_line":"ignore_basepython_conflict \u003d True"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"[testenv]"},{"line_number":11,"context_line":"basepython \u003d python3"}],"source_content_type":"text/x-properties","patch_set":4,"id":"3f79a3b5_1ceee489","line":8,"range":{"start_line":5,"start_character":0,"end_line":8,"end_character":33},"updated":"2018-10-23 11:20:50.000000000","message":"You need to bump the minimum version of tox to 3.1.0 if you want to start relying on this. I was hoping we wouldn\u0027t start using it until Ubuntu and Fedora had pulled it in, but it seems F29 is pinned to 3.0 [1] and Ubuntu 18.10 is stuck with the positively ancient 2.5 [2]. As such, I won\u0027t protest this any longer but we _do_ need to bump the minversion to avoid catching people (and possibly CI?) out here\n\n[1] https://dl.fedoraproject.org/pub/fedora/linux/development/29/Everything/source/tree/Packages/p/\n[2] https://launchpad.net/ubuntu/cosmic/+package/tox","commit_id":"b894d170977452fa47f7c9234322f22b30083a1f"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"eed2210bb31631b4ceea59698d5c462052082ec1","unresolved":false,"context_lines":[{"line_number":2,"context_line":"minversion \u003d 2.1"},{"line_number":3,"context_line":"envlist \u003d py{27,36},functional,functional-py36,pep8"},{"line_number":4,"context_line":"skipsdist \u003d True"},{"line_number":5,"context_line":"# basepython is defined in the base testenv, causing conflict warnings with the"},{"line_number":6,"context_line":"# automatically defined py27, 35, 36, etc testenvs. We want to use the version"},{"line_number":7,"context_line":"# implied by those testenv names and not get the warning."},{"line_number":8,"context_line":"ignore_basepython_conflict \u003d True"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"[testenv]"},{"line_number":11,"context_line":"basepython \u003d python3"}],"source_content_type":"text/x-properties","patch_set":4,"id":"3f79a3b5_3202e70d","line":8,"range":{"start_line":5,"start_character":0,"end_line":8,"end_character":33},"in_reply_to":"3f79a3b5_1ceee489","updated":"2018-10-23 12:59:25.000000000","message":"Blargh. This is why we can\u0027t have nice things.\n\nWe don\u0027t manage the version of tox local to ourselves, and as far as I can tell it varies in infra.\n\nSigh. Fine, I will go back to having things be more explicit.","commit_id":"b894d170977452fa47f7c9234322f22b30083a1f"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"94eab87e2ce01887b7b79ea4e3d05c5c4bca9f91","unresolved":false,"context_lines":[{"line_number":99,"context_line":"  {[testenv]setenv}"},{"line_number":100,"context_line":"  PYTHON\u003dcoverage run --source placement --parallel-mode"},{"line_number":101,"context_line":"commands \u003d"},{"line_number":102,"context_line":"  find . -type f -name \"*.pyc\" -delete"},{"line_number":103,"context_line":"  coverage erase"},{"line_number":104,"context_line":"  stestr --test-path\u003d./placement/tests run {posargs}"},{"line_number":105,"context_line":"  coverage combine"}],"source_content_type":"text/x-properties","patch_set":4,"id":"3f79a3b5_3c8de0d3","line":102,"range":{"start_line":102,"start_character":0,"end_line":102,"end_character":38},"updated":"2018-10-23 11:20:50.000000000","message":"Given that it\u0027s likely you\u0027ll be bumping the minimum version here, you don\u0027t need these anymore. Simply export PYTHONDONTWRITEBYTECODE [1]\n\n[1] https://github.com/tox-dev/tox/commit/336f4f6bd8b53223f940fc5cfc43b1bbd78d4699","commit_id":"b894d170977452fa47f7c9234322f22b30083a1f"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a9e64035a264ecb0c8414987fb21eda48f27096c","unresolved":false,"context_lines":[{"line_number":12,"context_line":"# ignore_basepython_conflict \u003d True"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"[testenv]"},{"line_number":15,"context_line":"basepython \u003d python3"},{"line_number":16,"context_line":"usedevelop \u003d True"},{"line_number":17,"context_line":"whitelist_externals \u003d"},{"line_number":18,"context_line":"  bash"}],"source_content_type":"text/x-properties","patch_set":5,"id":"3f79a3b5_e35d8354","line":15,"range":{"start_line":15,"start_character":0,"end_line":15,"end_character":20},"updated":"2018-10-23 14:42:28.000000000","message":"To be honest, I\u0027d much rather we just defined this where we wanted it (everything except the pyNN and functional targets) rather than having to override it for every other target. This is what we do for nova. It\u0027s going to be the same amount of lines but it\u0027d be so much easier to grok.","commit_id":"d85c5565ec6b384eb98ed7d38ae1ceb28104ce5a"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"2bdff3aa795b4d188bcba0ab009292287646d72d","unresolved":false,"context_lines":[{"line_number":12,"context_line":"# ignore_basepython_conflict \u003d True"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"[testenv]"},{"line_number":15,"context_line":"basepython \u003d python3"},{"line_number":16,"context_line":"usedevelop \u003d True"},{"line_number":17,"context_line":"whitelist_externals \u003d"},{"line_number":18,"context_line":"  bash"}],"source_content_type":"text/x-properties","patch_set":5,"id":"3f79a3b5_de705caa","line":15,"range":{"start_line":15,"start_character":0,"end_line":15,"end_character":20},"in_reply_to":"3f79a3b5_e35d8354","updated":"2018-10-23 14:47:31.000000000","message":"Oh, if that\u0027s fine, they yeah, this gets much cleaner.\n\nFor some reason I had understood that using basepython here was some kind of thing we had to do be aligned with the PTI. If that\u0027s not the case, then yeah, cool, great.","commit_id":"d85c5565ec6b384eb98ed7d38ae1ceb28104ce5a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a9e64035a264ecb0c8414987fb21eda48f27096c","unresolved":false,"context_lines":[{"line_number":33,"context_line":"# For a venv that doesn\u0027t use stestr commands must be overridden."},{"line_number":34,"context_line":"commands \u003d"},{"line_number":35,"context_line":"  find . -type f -name \"*.pyc\" -delete"},{"line_number":36,"context_line":"  stestr run {posargs}"},{"line_number":37,"context_line":"passenv \u003d"},{"line_number":38,"context_line":"  OS_DEBUG GENERATE_HASHES"},{"line_number":39,"context_line":"# there is also secret magic in subunit-trace which lets you run in a fail only"}],"source_content_type":"text/x-properties","patch_set":5,"id":"3f79a3b5_23293b9b","line":36,"updated":"2018-10-23 14:42:28.000000000","message":"Did you mean to drop the \u0027stestr slowest\u0027 command?","commit_id":"d85c5565ec6b384eb98ed7d38ae1ceb28104ce5a"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"52aa8d3c826345f66c0787d897071d3437a74e17","unresolved":false,"context_lines":[{"line_number":33,"context_line":"# For a venv that doesn\u0027t use stestr commands must be overridden."},{"line_number":34,"context_line":"commands \u003d"},{"line_number":35,"context_line":"  find . -type f -name \"*.pyc\" -delete"},{"line_number":36,"context_line":"  stestr run {posargs}"},{"line_number":37,"context_line":"passenv \u003d"},{"line_number":38,"context_line":"  OS_DEBUG GENERATE_HASHES"},{"line_number":39,"context_line":"# there is also secret magic in subunit-trace which lets you run in a fail only"}],"source_content_type":"text/x-properties","patch_set":5,"id":"3f79a3b5_4aad6730","line":36,"in_reply_to":"3f79a3b5_23293b9b","updated":"2018-10-23 16:49:37.000000000","message":"Yes, see some earlier comments where are basically said that it is inconsistently applied and has _very_ inconsistent output so why bother?","commit_id":"d85c5565ec6b384eb98ed7d38ae1ceb28104ce5a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a9e64035a264ecb0c8414987fb21eda48f27096c","unresolved":false,"context_lines":[{"line_number":39,"context_line":"# there is also secret magic in subunit-trace which lets you run in a fail only"},{"line_number":40,"context_line":"# mode. To do this define the TRACE_FAILONLY environmental variable."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"# TODO(cdent): Unit tests (py27, py3x) are usually automatically defined by"},{"line_number":43,"context_line":"# tox, but because of the way we want to control basepython combined with our"},{"line_number":44,"context_line":"# need to support older versions of tox, we need to be explicit for unit tests"},{"line_number":45,"context_line":"# in the next block. When we globally have a newer version of tox, we can"},{"line_number":46,"context_line":"# remove this section and support all relevant versions without needing to add"},{"line_number":47,"context_line":"# an entry."},{"line_number":48,"context_line":"[testenv:py27]"},{"line_number":49,"context_line":"basepython \u003d python2.7"},{"line_number":50,"context_line":"[testenv:py35]"},{"line_number":51,"context_line":"basepython \u003d python3.5"},{"line_number":52,"context_line":"[testenv:py36]"},{"line_number":53,"context_line":"basepython \u003d python3.6"},{"line_number":54,"context_line":"[testenv:py37]"},{"line_number":55,"context_line":"basepython \u003d python3.7"},{"line_number":56,"context_line":"[testenv:py38]"},{"line_number":57,"context_line":"basepython \u003d python3.8"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"# The functional environment is both the base env for functional tests and"},{"line_number":60,"context_line":"# also the python 2.7 version of functional tests. This is an historical"}],"source_content_type":"text/x-properties","patch_set":5,"id":"3f79a3b5_a340eb60","line":57,"range":{"start_line":42,"start_character":0,"end_line":57,"end_character":22},"updated":"2018-10-23 14:42:28.000000000","message":"As above, all of these aren\u0027t necessary if you define basepython on the _other_ targets","commit_id":"d85c5565ec6b384eb98ed7d38ae1ceb28104ce5a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a9e64035a264ecb0c8414987fb21eda48f27096c","unresolved":false,"context_lines":[{"line_number":67,"context_line":"  stestr --test-path\u003d./placement/tests/functional run {posargs}"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"[testenv:functional-py35]"},{"line_number":70,"context_line":"basepython \u003d python3.5"},{"line_number":71,"context_line":"envdir \u003d {toxworkdir}/py35"},{"line_number":72,"context_line":"commands \u003d"},{"line_number":73,"context_line":"  {[testenv:functional]commands}"}],"source_content_type":"text/x-properties","patch_set":5,"id":"3f79a3b5_434f978b","line":70,"range":{"start_line":70,"start_character":0,"end_line":70,"end_character":22},"updated":"2018-10-23 14:42:28.000000000","message":"This wouldn\u0027t be necessary either due to the py35 factor [1]\n\n[1] https://tox.readthedocs.io/en/latest/config.html#factors-and-factor-conditional-settings","commit_id":"d85c5565ec6b384eb98ed7d38ae1ceb28104ce5a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a9e64035a264ecb0c8414987fb21eda48f27096c","unresolved":false,"context_lines":[{"line_number":73,"context_line":"  {[testenv:functional]commands}"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"[testenv:functional-py36]"},{"line_number":76,"context_line":"basepython \u003d python3.6"},{"line_number":77,"context_line":"envdir \u003d {toxworkdir}/py36"},{"line_number":78,"context_line":"commands \u003d"},{"line_number":79,"context_line":"  {[testenv:functional]commands}"}],"source_content_type":"text/x-properties","patch_set":5,"id":"3f79a3b5_e32b4398","line":76,"range":{"start_line":76,"start_character":0,"end_line":76,"end_character":22},"updated":"2018-10-23 14:42:28.000000000","message":"Ditto","commit_id":"d85c5565ec6b384eb98ed7d38ae1ceb28104ce5a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"49b559b00deb0f3491491477df5431766161ef8c","unresolved":false,"context_lines":[{"line_number":149,"context_line":"  sphinx-build -W -b html -d releasenotes/build/doctrees releasenotes/source releasenotes/build/html"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"[testenv:bandit]"},{"line_number":152,"context_line":"# NOTE(browne): This is required for the integration test job of the bandit"},{"line_number":153,"context_line":"# project. Please do not remove."},{"line_number":154,"context_line":"basepython \u003d python3"},{"line_number":155,"context_line":"envdir \u003d {toxworkdir}/shared"},{"line_number":156,"context_line":"commands \u003d bandit -r placement -x tests -n 5 -ll"}],"source_content_type":"text/x-properties","patch_set":6,"id":"3f79a3b5_9f508d61","line":153,"range":{"start_line":152,"start_character":0,"end_line":153,"end_character":32},"updated":"2018-11-06 16:13:25.000000000","message":"Not sure if this is actually true as this was taken from nova, but that\u0027s mostly irrelevant to this change","commit_id":"de7543de61c733b871ab1420381a8de54a936d47"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"93174af6d7428b1e95b4ec7f73be250451824175","unresolved":false,"context_lines":[{"line_number":149,"context_line":"  sphinx-build -W -b html -d releasenotes/build/doctrees releasenotes/source releasenotes/build/html"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"[testenv:bandit]"},{"line_number":152,"context_line":"# NOTE(browne): This is required for the integration test job of the bandit"},{"line_number":153,"context_line":"# project. Please do not remove."},{"line_number":154,"context_line":"basepython \u003d python3"},{"line_number":155,"context_line":"envdir \u003d {toxworkdir}/shared"},{"line_number":156,"context_line":"commands \u003d bandit -r placement -x tests -n 5 -ll"}],"source_content_type":"text/x-properties","patch_set":6,"id":"3f79a3b5_3f31390b","line":153,"range":{"start_line":152,"start_character":0,"end_line":153,"end_character":32},"in_reply_to":"3f79a3b5_9f508d61","updated":"2018-11-06 16:19:35.000000000","message":"Yeah, I don\u0027t know either, but I figured may as well not touch it.","commit_id":"de7543de61c733b871ab1420381a8de54a936d47"}]}
