)]}'
{"openstack_requirements/cmds/edit_constraint.py":[{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"cde213930d784dda2d91e1664b7c74aac7b24e80","unresolved":false,"context_lines":[{"line_number":11,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":12,"context_line":"# limitations under the License."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"import optparse"},{"line_number":15,"context_line":"import os.path"},{"line_number":16,"context_line":"import sys"},{"line_number":17,"context_line":"import textwrap"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_282ea1a5","line":14,"updated":"2015-06-28 13:52:40.000000000","message":"optparse is deprcated.","commit_id":"cd0639548321c8c86f2c76013cf9ceda52d8ab5f"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"7833030f2e4322ca44eb2f794a32fb3045b1eeb1","unresolved":false,"context_lines":[{"line_number":11,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":12,"context_line":"# limitations under the License."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"import optparse"},{"line_number":15,"context_line":"import os.path"},{"line_number":16,"context_line":"import sys"},{"line_number":17,"context_line":"import textwrap"}],"source_content_type":"text/x-python","patch_set":1,"id":"da37b569_a1f21e05","line":14,"in_reply_to":"fa32b979_282ea1a5","updated":"2015-06-28 19:03:19.000000000","message":"Its not being developed further, but its still in all the Python versions, and this is consistent with the other commands in this tree. Happy to move them to argparse but lets not be inconsistent.","commit_id":"cd0639548321c8c86f2c76013cf9ceda52d8ab5f"},{"author":{"_account_id":7069,"name":"Joshua Hesketh","email":"josh@nitrotech.org","username":"jhesketh"},"change_message_id":"2235f36f5703fe86e8b038a10d7f9fe27c42ea42","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"def main(argv\u003dNone, stdout\u003dNone):"},{"line_number":53,"context_line":"    parser \u003d optparse.OptionParser("},{"line_number":54,"context_line":"        usage\u003d\"%prog [options] constraintpath, name, replacement\","},{"line_number":55,"context_line":"        epilog\u003dtextwrap.dedent(\"\"\"\\"},{"line_number":56,"context_line":"            Replaces any entries to name in the constraints file with"},{"line_number":57,"context_line":"            replacement. If name is not present, it is added to the end of the"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_83f5a084","line":54,"updated":"2015-06-29 00:23:05.000000000","message":"I don\u0027t think you want commas between args?","commit_id":"cd0639548321c8c86f2c76013cf9ceda52d8ab5f"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"6679cb4ac9e068df60091ae74709559e92888bf8","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"def main(argv\u003dNone, stdout\u003dNone):"},{"line_number":53,"context_line":"    parser \u003d optparse.OptionParser("},{"line_number":54,"context_line":"        usage\u003d\"%prog [options] constraintpath, name, replacement\","},{"line_number":55,"context_line":"        epilog\u003dtextwrap.dedent(\"\"\"\\"},{"line_number":56,"context_line":"            Replaces any entries to name in the constraints file with"},{"line_number":57,"context_line":"            replacement. If name is not present, it is added to the end of the"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_6302dc40","line":54,"in_reply_to":"ba3cc151_83f5a084","updated":"2015-06-29 00:31:54.000000000","message":"Done","commit_id":"cd0639548321c8c86f2c76013cf9ceda52d8ab5f"},{"author":{"_account_id":7069,"name":"Joshua Hesketh","email":"josh@nitrotech.org","username":"jhesketh"},"change_message_id":"2235f36f5703fe86e8b038a10d7f9fe27c42ea42","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    parser \u003d optparse.OptionParser("},{"line_number":54,"context_line":"        usage\u003d\"%prog [options] constraintpath, name, replacement\","},{"line_number":55,"context_line":"        epilog\u003dtextwrap.dedent(\"\"\"\\"},{"line_number":56,"context_line":"            Replaces any entries to name in the constraints file with"},{"line_number":57,"context_line":"            replacement. If name is not present, it is added to the end of the"},{"line_number":58,"context_line":"            file. If replacement is missing or empty, remove name from the"},{"line_number":59,"context_line":"            file."}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_23f2949b","line":56,"updated":"2015-06-29 00:23:05.000000000","message":"s/to/of\n\nconsider quoting \u0027name\u0027","commit_id":"cd0639548321c8c86f2c76013cf9ceda52d8ab5f"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"6679cb4ac9e068df60091ae74709559e92888bf8","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    parser \u003d optparse.OptionParser("},{"line_number":54,"context_line":"        usage\u003d\"%prog [options] constraintpath, name, replacement\","},{"line_number":55,"context_line":"        epilog\u003dtextwrap.dedent(\"\"\"\\"},{"line_number":56,"context_line":"            Replaces any entries to name in the constraints file with"},{"line_number":57,"context_line":"            replacement. If name is not present, it is added to the end of the"},{"line_number":58,"context_line":"            file. If replacement is missing or empty, remove name from the"},{"line_number":59,"context_line":"            file."}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_c3ec0892","line":56,"in_reply_to":"ba3cc151_23f2949b","updated":"2015-06-29 00:31:54.000000000","message":"Done","commit_id":"cd0639548321c8c86f2c76013cf9ceda52d8ab5f"},{"author":{"_account_id":7069,"name":"Joshua Hesketh","email":"josh@nitrotech.org","username":"jhesketh"},"change_message_id":"2235f36f5703fe86e8b038a10d7f9fe27c42ea42","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    if stdout is None:"},{"line_number":63,"context_line":"        stdout \u003d sys.stdout"},{"line_number":64,"context_line":"    _validate_options(options, args)"},{"line_number":65,"context_line":"    args \u003d args + [\"\"]"},{"line_number":66,"context_line":"    content \u003d open(args[0], \u0027rt\u0027).read()"},{"line_number":67,"context_line":"    reqs \u003d requirement.parse(content)"},{"line_number":68,"context_line":"    out_reqs \u003d edit(reqs, args[1], args[2])"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_e3110cb1","line":65,"updated":"2015-06-29 00:23:05.000000000","message":"(nit) I\u0027m not a huge fan of modifying the args like this. I\u0027d rather pull the name and replacement from the args and check if replacement doesn\u0027t exist then.","commit_id":"cd0639548321c8c86f2c76013cf9ceda52d8ab5f"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"513caab3f46e370a8065a63ffaf6fdc9d746343f","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    if stdout is None:"},{"line_number":63,"context_line":"        stdout \u003d sys.stdout"},{"line_number":64,"context_line":"    _validate_options(options, args)"},{"line_number":65,"context_line":"    args \u003d args + [\"\"]"},{"line_number":66,"context_line":"    content \u003d open(args[0], \u0027rt\u0027).read()"},{"line_number":67,"context_line":"    reqs \u003d requirement.parse(content)"},{"line_number":68,"context_line":"    out_reqs \u003d edit(reqs, args[1], args[2])"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_86cb6e72","line":65,"in_reply_to":"ba3cc151_8374c0cf","updated":"2015-06-29 01:13:55.000000000","message":"So thats 4 lines of dead weight. I have a strong aversion to forcing people to read more code except when it pays for itself.\n\nWe could do\n\nout_reqs \u003d edit(reqs, args[1], args[2] if args[2:] else \u0027\u0027)\n\nbut I think thats less, not more readable. \n\nbinding args[1] and args[2] to temp variables is a bit of a wash, but we could do that. The main thing I\u0027m objecting to is the very verbose expression.\n\nI could add a comment to the current code if that would help too.","commit_id":"cd0639548321c8c86f2c76013cf9ceda52d8ab5f"},{"author":{"_account_id":7069,"name":"Joshua Hesketh","email":"josh@nitrotech.org","username":"jhesketh"},"change_message_id":"df8a6841f1189b28290f4dffaeb16da0c6bd99ce","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    if stdout is None:"},{"line_number":63,"context_line":"        stdout \u003d sys.stdout"},{"line_number":64,"context_line":"    _validate_options(options, args)"},{"line_number":65,"context_line":"    args \u003d args + [\"\"]"},{"line_number":66,"context_line":"    content \u003d open(args[0], \u0027rt\u0027).read()"},{"line_number":67,"context_line":"    reqs \u003d requirement.parse(content)"},{"line_number":68,"context_line":"    out_reqs \u003d edit(reqs, args[1], args[2])"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_69139d5d","line":65,"in_reply_to":"ba3cc151_86cb6e72","updated":"2015-06-29 01:52:28.000000000","message":"Sure, as I said it\u0027s a bit of a nit. I\u0027m just not a fan of modifying things that I have presumptions about. For example, if I see a variable named \u0027args\u0027 I expect it to be the arguments, not something close to the args. It also creates difficulties if we change the params to the program. However when changing the params it should be obvious what else needs changing.\n\nA comment is a good compromise, but I\u0027m not blocking on this. The -1 is for the above notes.","commit_id":"cd0639548321c8c86f2c76013cf9ceda52d8ab5f"},{"author":{"_account_id":7069,"name":"Joshua Hesketh","email":"josh@nitrotech.org","username":"jhesketh"},"change_message_id":"8e254d3f71cfad47d619c7675b968a16bee9f4a4","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    if stdout is None:"},{"line_number":63,"context_line":"        stdout \u003d sys.stdout"},{"line_number":64,"context_line":"    _validate_options(options, args)"},{"line_number":65,"context_line":"    args \u003d args + [\"\"]"},{"line_number":66,"context_line":"    content \u003d open(args[0], \u0027rt\u0027).read()"},{"line_number":67,"context_line":"    reqs \u003d requirement.parse(content)"},{"line_number":68,"context_line":"    out_reqs \u003d edit(reqs, args[1], args[2])"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_8374c0cf","line":65,"in_reply_to":"ba3cc151_a3e784ab","updated":"2015-06-29 00:38:28.000000000","message":"It\u0027s a nit, so I don\u0027t mind if you keep it as is, but I\u0027d prefer not to modify args at all. eg:\n\n  name \u003d args[1]\n  if len(args) \u003c 3:\n      replacement \u003d \u0027\u0027\n  else:\n      replacement \u003d args[2]\n\nThen continue to use name/replacement below","commit_id":"cd0639548321c8c86f2c76013cf9ceda52d8ab5f"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"6679cb4ac9e068df60091ae74709559e92888bf8","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    if stdout is None:"},{"line_number":63,"context_line":"        stdout \u003d sys.stdout"},{"line_number":64,"context_line":"    _validate_options(options, args)"},{"line_number":65,"context_line":"    args \u003d args + [\"\"]"},{"line_number":66,"context_line":"    content \u003d open(args[0], \u0027rt\u0027).read()"},{"line_number":67,"context_line":"    reqs \u003d requirement.parse(content)"},{"line_number":68,"context_line":"    out_reqs \u003d edit(reqs, args[1], args[2])"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_a3e784ab","line":65,"in_reply_to":"ba3cc151_e3110cb1","updated":"2015-06-29 00:31:54.000000000","message":"So you\u0027d rather modify args by using pop? Or testing for truthiness of a slice? Perhaps some pseudo code would help me understand what you have in mind.","commit_id":"cd0639548321c8c86f2c76013cf9ceda52d8ab5f"},{"author":{"_account_id":7069,"name":"Joshua Hesketh","email":"josh@nitrotech.org","username":"jhesketh"},"change_message_id":"ba4dcb65c5bd305d10a7885745fef109a386ec72","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    parser \u003d optparse.OptionParser("},{"line_number":54,"context_line":"        usage\u003d\"%prog [options] constraintpath name replacement\","},{"line_number":55,"context_line":"        epilog\u003dtextwrap.dedent(\"\"\"\\"},{"line_number":56,"context_line":"            Replaces any entries to \"name\" in the constraints file with"},{"line_number":57,"context_line":"            replacement. If name is not present, it is added to the end of the"},{"line_number":58,"context_line":"            file. If replacement is missing or empty, remove name from the"},{"line_number":59,"context_line":"            file."}],"source_content_type":"text/x-python","patch_set":2,"id":"ba3cc151_4fbb390f","line":56,"updated":"2015-06-29 03:43:41.000000000","message":"this reads poorly to me\n\ns/to/for","commit_id":"fdb183ee2e054f17b6fe2336fe0c01bc722b5e10"}],"setup.cfg":[{"author":{"_account_id":7069,"name":"Joshua Hesketh","email":"josh@nitrotech.org","username":"jhesketh"},"change_message_id":"2235f36f5703fe86e8b038a10d7f9fe27c42ea42","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"[entry_points]"},{"line_number":25,"context_line":"console_scripts \u003d"},{"line_number":26,"context_line":"    edit-constraints \u003d openstack_requirements.cmds.edit_constraint:main"},{"line_number":27,"context_line":"    generate-constraints \u003d openstack_requirements.cmds.generate:main"},{"line_number":28,"context_line":"    update-requirements \u003d openstack_requirements.cmds.update:main"}],"source_content_type":"text/x-ttcn-cfg","patch_set":1,"id":"ba3cc151_2377f403","line":26,"updated":"2015-06-29 00:23:05.000000000","message":"(nit) should these entry points be more obvious. eg \u0027requirements-edit-constraints\u0027 or \u0027osreqs-...\u0027 etc?\n\nGranted this is consistent and it\u0027s more difficult to change the existing ones.","commit_id":"cd0639548321c8c86f2c76013cf9ceda52d8ab5f"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"6679cb4ac9e068df60091ae74709559e92888bf8","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"[entry_points]"},{"line_number":25,"context_line":"console_scripts \u003d"},{"line_number":26,"context_line":"    edit-constraints \u003d openstack_requirements.cmds.edit_constraint:main"},{"line_number":27,"context_line":"    generate-constraints \u003d openstack_requirements.cmds.generate:main"},{"line_number":28,"context_line":"    update-requirements \u003d openstack_requirements.cmds.update:main"}],"source_content_type":"text/x-ttcn-cfg","patch_set":1,"id":"ba3cc151_23e5b4a7","line":26,"in_reply_to":"ba3cc151_2377f403","updated":"2015-06-29 00:31:54.000000000","message":"As far as I can tell the entry point name is currently globally unique in the public sphere.","commit_id":"cd0639548321c8c86f2c76013cf9ceda52d8ab5f"},{"author":{"_account_id":7069,"name":"Joshua Hesketh","email":"josh@nitrotech.org","username":"jhesketh"},"change_message_id":"8e254d3f71cfad47d619c7675b968a16bee9f4a4","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"[entry_points]"},{"line_number":25,"context_line":"console_scripts \u003d"},{"line_number":26,"context_line":"    edit-constraints \u003d openstack_requirements.cmds.edit_constraint:main"},{"line_number":27,"context_line":"    generate-constraints \u003d openstack_requirements.cmds.generate:main"},{"line_number":28,"context_line":"    update-requirements \u003d openstack_requirements.cmds.update:main"}],"source_content_type":"text/x-ttcn-cfg","patch_set":1,"id":"ba3cc151_437eb8af","line":26,"in_reply_to":"ba3cc151_23e5b4a7","updated":"2015-06-29 00:38:28.000000000","message":"sure, but that doesn\u0027t make it intuitive. But I don\u0027t think we need to fix this here as it\u0027s consistent.","commit_id":"cd0639548321c8c86f2c76013cf9ceda52d8ab5f"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"513caab3f46e370a8065a63ffaf6fdc9d746343f","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"[entry_points]"},{"line_number":25,"context_line":"console_scripts \u003d"},{"line_number":26,"context_line":"    edit-constraints \u003d openstack_requirements.cmds.edit_constraint:main"},{"line_number":27,"context_line":"    generate-constraints \u003d openstack_requirements.cmds.generate:main"},{"line_number":28,"context_line":"    update-requirements \u003d openstack_requirements.cmds.update:main"}],"source_content_type":"text/x-ttcn-cfg","patch_set":1,"id":"ba3cc151_c3164855","line":26,"in_reply_to":"ba3cc151_437eb8af","updated":"2015-06-29 01:13:55.000000000","message":"I have a pet hate for CLI commands that look like rest namespace traversal. requirements-edit-constraints is in no world obvious or intuitive. Its namespaced, but thats not at all the same thing.","commit_id":"cd0639548321c8c86f2c76013cf9ceda52d8ab5f"},{"author":{"_account_id":5263,"name":"Jeremy Stanley","display_name":"fungi","email":"fungi@yuggoth.org","username":"fungi","status":"missing, presumed fed"},"change_message_id":"6d016de682215482c6af3fd2429967af90447b35","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"[entry_points]"},{"line_number":25,"context_line":"console_scripts \u003d"},{"line_number":26,"context_line":"    edit-constraints \u003d openstack_requirements.cmds.edit_constraint:main"},{"line_number":27,"context_line":"    generate-constraints \u003d openstack_requirements.cmds.generate:main"},{"line_number":28,"context_line":"    update-requirements \u003d openstack_requirements.cmds.update:main"}],"source_content_type":"text/x-ttcn-cfg","patch_set":1,"id":"ba3cc151_a9568504","line":26,"in_reply_to":"ba3cc151_c3164855","updated":"2015-06-29 01:53:59.000000000","message":"I don\u0027t realistically expect this to be used outside of dedicated virtualenvs and controlled/special-purpose systems (e.g., DevStack).","commit_id":"cd0639548321c8c86f2c76013cf9ceda52d8ab5f"},{"author":{"_account_id":7069,"name":"Joshua Hesketh","email":"josh@nitrotech.org","username":"jhesketh"},"change_message_id":"df8a6841f1189b28290f4dffaeb16da0c6bd99ce","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"[entry_points]"},{"line_number":25,"context_line":"console_scripts \u003d"},{"line_number":26,"context_line":"    edit-constraints \u003d openstack_requirements.cmds.edit_constraint:main"},{"line_number":27,"context_line":"    generate-constraints \u003d openstack_requirements.cmds.generate:main"},{"line_number":28,"context_line":"    update-requirements \u003d openstack_requirements.cmds.update:main"}],"source_content_type":"text/x-ttcn-cfg","patch_set":1,"id":"ba3cc151_e9256dae","line":26,"in_reply_to":"ba3cc151_c3164855","updated":"2015-06-29 01:52:28.000000000","message":"sure, so perhaps we need to find something that is intuitive (but again, for another change)","commit_id":"cd0639548321c8c86f2c76013cf9ceda52d8ab5f"}]}
