)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"f2f647bdcd0aef6b8ee06abde6ee728324f4df08","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Denis M. \u003cdmakogon@mirantis.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-05-19 07:59:35 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix shell view for secgroup-list"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Reasons:"},{"line_number":10,"context_line":" - currect code writes list of dict as they are,"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"5adbc538_ec80d38d","line":7,"updated":"2014-05-24 16:04:04.000000000","message":"This change also updates secgroup-show","commit_id":"0b9875cc724c1d2ec32783da870e785254dcb3bd"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"f2f647bdcd0aef6b8ee06abde6ee728324f4df08","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Fix shell view for secgroup-list"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Reasons:"},{"line_number":10,"context_line":" - currect code writes list of dict as they are,"},{"line_number":11,"context_line":"   without any formatting, actually _print_"},{"line_number":12,"context_line":"   method calls str() on each attribute,"},{"line_number":13,"context_line":"   this issue spoils human-readable form of the shell output."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"5adbc538_ac76cbd6","line":10,"updated":"2014-05-24 16:04:04.000000000","message":"currect or current?","commit_id":"0b9875cc724c1d2ec32783da870e785254dcb3bd"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"352f21bb0eb90d483c88e066e26f4cf524de1ea6","unresolved":false,"context_lines":[{"line_number":16,"context_line":" - updated \"secgroup-list\" (`rules` attributes was ignored);"},{"line_number":17,"context_line":" - updated \"secgroup-show\" (`rules` attribute was ripped off);"},{"line_number":18,"context_line":" - proposed new call \"secgroup-list-rules \u003csecgroup-id\u003e\"."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Change-Id: Ic3f51b93af106c39de7eb3238f8bcffa3ea3cb95"},{"line_number":21,"context_line":"Closes-Bug: #1300164"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"1ae5cdf2_b17a2886","line":19,"updated":"2014-06-11 05:10:44.000000000","message":"This should have a `DocImpact for the cli output and calls.`","commit_id":"eb30b38daa29d5a63a05b33288214a733b0633e7"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"fce464790ac4809691c62882504f73bc8b8aaf24","unresolved":false,"context_lines":[{"line_number":16,"context_line":" - updated \"secgroup-list\" (`rules` attributes was ignored);"},{"line_number":17,"context_line":" - updated \"secgroup-show\" (`rules` attribute was ripped off);"},{"line_number":18,"context_line":" - proposed new call \"secgroup-list-rules \u003csecgroup-id\u003e\"."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Change-Id: Ic3f51b93af106c39de7eb3238f8bcffa3ea3cb95"},{"line_number":21,"context_line":"Closes-Bug: #1300164"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"1ae5cdf2_a9246a0d","line":19,"in_reply_to":"1ae5cdf2_b17a2886","updated":"2014-06-11 16:34:04.000000000","message":"Done","commit_id":"eb30b38daa29d5a63a05b33288214a733b0633e7"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"a380bc34d295c7336728f003fe01e9f006321e3d","unresolved":false,"context_lines":[{"line_number":16,"context_line":" - updated \"secgroup-list\" (`rules` attributes was ignored);"},{"line_number":17,"context_line":" - updated \"secgroup-show\" (`rules` attribute was ripped off);"},{"line_number":18,"context_line":" - proposed new call \"secgroup-list-rules \u003csecgroup-id\u003e\";"},{"line_number":19,"context_line":" - DocImpact for the cli output and calls."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Change-Id: Ic3f51b93af106c39de7eb3238f8bcffa3ea3cb95"},{"line_number":22,"context_line":"Closes-Bug: #1300164"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"1ae5cdf2_5bbec4af","line":19,"updated":"2014-06-23 20:10:16.000000000","message":"DocImpact should be on a line by itself, this will trigger automation etc.,","commit_id":"55002769af1b1e471cd4710cf4f0f2e41ae9a830"}],"troveclient/v1/shell.py":[{"author":{"_account_id":5293,"name":"Nikhil","email":"SlickNik@gmail.com","username":"slicknik"},"change_message_id":"cfca395072ee2ce946904e2abeff8dd4a07ef423","unresolved":false,"context_lines":[{"line_number":557,"context_line":""},{"line_number":558,"context_line":"    rule_format \u003d (\"\\n| id: %(id)s | protocol: %(protocol)s \""},{"line_number":559,"context_line":"                   \"| from_port: %(from_port)s |\""},{"line_number":560,"context_line":"                   \" to_port: %(to_port)s | cidr: %(cidr)s |\\n\")"},{"line_number":561,"context_line":"    for group in sec_grps:"},{"line_number":562,"context_line":"        str_rules \u003d \"\""},{"line_number":563,"context_line":"        for rule in group.rules:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWn%2F%2F%2F6k%3D","line":560,"updated":"2014-04-08 00:56:54.000000000","message":"Please do not use | as a delimiter. This is the delimiter for the attributes in client, and will cause confusion if you use the same delimiter for parts of the security group rule.","commit_id":"5811975b70931ad321399292870b9680f91b0a4a"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"484a5737f0f9036602ed2c0e58c1de9f8aebb26f","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"rule_format \u003d (\"\\nid: %(id)s; protocol: %(protocol)s; \""},{"line_number":86,"context_line":"               \"from_port: %(from_port)s; \""},{"line_number":87,"context_line":"               \"to_port: %(to_port)s; cidr: %(cidr)s;\\n\")"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"def formatted_rules(group):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAW3%2F%2Fwrg%3D","line":87,"updated":"2014-04-10 15:47:34.000000000","message":"Is this meant to be a constant or shared by other functions?\nCan we at least move it to the top of the file and rename it like in caps?\n\nRULE_FORMAT \u003d ...","commit_id":"594a3968771fba9dfc182484423df34074799913"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"484a5737f0f9036602ed2c0e58c1de9f8aebb26f","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    for rule in group.rules:"},{"line_number":93,"context_line":"        str_rule \u003d rule_format % rule"},{"line_number":94,"context_line":"        str_rules +\u003d str_rule"},{"line_number":95,"context_line":"    return str_rules"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"# Flavor related calls"},{"line_number":98,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAW3%2F%2FwXs%3D","line":95,"updated":"2014-04-10 15:47:34.000000000","message":"Would this be a little less cluttered?\n\ndef formatted_rules(group.rules):\n    str_rules \u003d [RULE_FORMAT % rule for rule in group.rules]\n    return \"\".join(str_rules)","commit_id":"594a3968771fba9dfc182484423df34074799913"},{"author":{"_account_id":9683,"name":"Mat Lowery","email":"mlowery@ebaysf.com","username":"mat-lowery"},"change_message_id":"83caa7e86202ac3218286658d7a4f955937cf89c","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"def formatted_rules(group):"},{"line_number":86,"context_line":"    rule_format \u003d ("},{"line_number":87,"context_line":"        \"\\nid: %(id)s; protocol: %(protocol)s; \""},{"line_number":88,"context_line":"        \"from_port: %(from_port)s; \""},{"line_number":89,"context_line":"        \"to_port: %(to_port)s; cidr: %(cidr)s;\\n\")"},{"line_number":90,"context_line":"    str_rules \u003d [rule_format % rule for rule in group.rules]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAXH%2F%2F4es%3D","line":87,"updated":"2014-04-16 17:59:19.000000000","message":"I see an extra \\n here in this output:\n\nhttp://paste.openstack.org/show/75942/\n\nPerhaps you should use \n\n    \"\\n\".join(str_rules)\n\nand keep the \\n out of the strings.","commit_id":"cec98c3c2db039fdc3881f78384eb91e46ca5d34"},{"author":{"_account_id":9683,"name":"Mat Lowery","email":"mlowery@ebaysf.com","username":"mat-lowery"},"change_message_id":"83caa7e86202ac3218286658d7a4f955937cf89c","unresolved":false,"context_lines":[{"line_number":577,"context_line":"def do_secgroup_show(cs, args):"},{"line_number":578,"context_line":"    \"\"\"Shows details about a security group.\"\"\""},{"line_number":579,"context_line":"    sec_grp \u003d cs.security_groups.get(args.security_group)"},{"line_number":580,"context_line":"    sec_grp.rules \u003d formatted_rules(sec_grp)"},{"line_number":581,"context_line":"    _print_instance(sec_grp)"},{"line_number":582,"context_line":""},{"line_number":583,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAXH%2F%2F4ec%3D","line":580,"updated":"2014-04-16 17:59:19.000000000","message":"secgroup-show output doesn\u0027t appear to have changed. See:\n\nhttp://paste.openstack.org/show/75942/","commit_id":"cec98c3c2db039fdc3881f78384eb91e46ca5d34"},{"author":{"_account_id":9683,"name":"Mat Lowery","email":"mlowery@ebaysf.com","username":"mat-lowery"},"change_message_id":"a0c55b5cdddb73d2cb101ad1300d4ae803f99d5e","unresolved":false,"context_lines":[{"line_number":86,"context_line":"    rule_format \u003d ("},{"line_number":87,"context_line":"        \"id: %(id)s; protocol: %(protocol)s; \""},{"line_number":88,"context_line":"        \"from_port: %(from_port)s; \""},{"line_number":89,"context_line":"        \"to_port: %(to_port)s; cidr: %(cidr)s;\")"},{"line_number":90,"context_line":"    str_rules \u003d [rule_format % rule for rule in group.rules]"},{"line_number":91,"context_line":"    return \"\\n\".join(str_rules)"},{"line_number":92,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAXH%2F%2Fozs%3D","line":89,"updated":"2014-04-18 16:07:14.000000000","message":"Are semicolons the best separator (why not commas)? Also, you have a trailing one after the cidr. Admittedly, these are totally subjective points.","commit_id":"249ab28e9696fe4e423569a47b02b04065ce77e1"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"f2f647bdcd0aef6b8ee06abde6ee728324f4df08","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    return utils.find_resource(cs.backups, backup)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"def formatted_rules(group):"},{"line_number":86,"context_line":"    rule_format \u003d ("},{"line_number":87,"context_line":"        \"id: %(id)s; protocol: %(protocol)s; \""},{"line_number":88,"context_line":"        \"from_port: %(from_port)s; \""}],"source_content_type":"text/x-python","patch_set":7,"id":"5adbc538_4c68e7f5","line":85,"updated":"2014-05-24 16:04:04.000000000","message":"It would be good idea to have a docstring","commit_id":"0b9875cc724c1d2ec32783da870e785254dcb3bd"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"f2f647bdcd0aef6b8ee06abde6ee728324f4df08","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"# Flavor related calls"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"@utils.service_type(\u0027database\u0027)"},{"line_number":98,"context_line":"def do_flavor_list(cs, args):"}],"source_content_type":"text/x-python","patch_set":7,"id":"5adbc538_acafab2a","line":95,"updated":"2014-05-24 16:04:04.000000000","message":"Any purpose of this blank line","commit_id":"0b9875cc724c1d2ec32783da870e785254dcb3bd"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"f2f647bdcd0aef6b8ee06abde6ee728324f4df08","unresolved":false,"context_lines":[{"line_number":567,"context_line":""},{"line_number":568,"context_line":"    for group in sec_grps:"},{"line_number":569,"context_line":"        group.rules \u003d formatted_rules(group)"},{"line_number":570,"context_line":""},{"line_number":571,"context_line":"    utils.print_list(sec_grps, [\u0027id\u0027, \u0027name\u0027, \u0027rules\u0027, \u0027instance_id\u0027])"},{"line_number":572,"context_line":""},{"line_number":573,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5adbc538_ccacf738","line":570,"updated":"2014-05-24 16:04:04.000000000","message":"just a thought, we can do without extra line breaks.","commit_id":"0b9875cc724c1d2ec32783da870e785254dcb3bd"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"238f18ecf0ccc2b1b78d9bdaf0bfdd9283717ce1","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    return utils.find_resource(cs.backups, backup)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"def formatted_rules(group):"},{"line_number":86,"context_line":"    \"\"\"Builds human-readable view for security group rules.\"\"\""},{"line_number":87,"context_line":"    rule_format \u003d ("},{"line_number":88,"context_line":"        \"id: %(id)s; protocol: %(protocol)s; \""}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_da52b6dc","line":85,"updated":"2014-05-31 11:18:22.000000000","message":"I would suggest to keep this method as a private method for shell.py\n\nIf we see re-usability for this method in other modules then this is a candidate to have a place in troveclient.utils","commit_id":"14bc07d52ff190fffb39532d0471ef44d1a17b19"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"494300952af7d7fb6c885aa0f38c0c9d9dcf452c","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    return utils.find_resource(cs.backups, backup)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"def formatted_rules(group):"},{"line_number":86,"context_line":"    \"\"\"Builds human-readable view for security group rules.\"\"\""},{"line_number":87,"context_line":"    rule_format \u003d ("},{"line_number":88,"context_line":"        \"id: %(id)s; protocol: %(protocol)s; \""}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_98b812e7","line":85,"in_reply_to":"1ae5cdf2_da52b6dc","updated":"2014-06-02 15:34:06.000000000","message":"What does it changes? It doesn\u0027t look like an imporvement. This is up to developer, i\u0027d like to keep it as is. And it should not go to the utils.","commit_id":"14bc07d52ff190fffb39532d0471ef44d1a17b19"},{"author":{"_account_id":5293,"name":"Nikhil","email":"SlickNik@gmail.com","username":"slicknik"},"change_message_id":"02d32067ce6ed8b34d92e5f7a6c3ff21e4b7bf24","unresolved":false,"context_lines":[{"line_number":622,"context_line":""},{"line_number":623,"context_line":""},{"line_number":624,"context_line":"@utils.arg(\u0027security_group\u0027, metavar\u003d\u0027\u003csecurity_group\u003e\u0027,"},{"line_number":625,"context_line":"           help\u003d\u0027Security group name.\u0027)"},{"line_number":626,"context_line":"@utils.service_type(\u0027database\u0027)"},{"line_number":627,"context_line":"def do_secgroup_list_rules(cs, args):"},{"line_number":628,"context_line":"    \"\"\"Lists all rules for a security group.\"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"1ae5cdf2_7fed5e24","line":625,"updated":"2014-06-20 22:49:24.000000000","message":"This should be Security Group ID, with the current implementation. When I try to use Security Group Name I get:\n\n ubuntu@devstack:~$ trove secgroup-list\n +----+-----------------------------------------------+--------------------------------------+\n | ID | Name                                          | Instance ID                          |\n +----+-----------------------------------------------+--------------------------------------+\n | 2  | SecGroup_0a398b6f-3084-4336-8cd8-cfb0473ebeed | 0a398b6f-3084-4336-8cd8-cfb0473ebeed |\n +----+-----------------------------------------------+--------------------------------------+\n \n ubuntu@devstack:~$ trove secgroup-list-rules SecGroup_0a398b6f-3084-4336-8cd8-cfb0473ebeed\n ERROR: SecurityGroupInstanceAssociation Not Found (HTTP 404)\n\nEither that, or we should change the client to accept a Security Group Name here as well.","commit_id":"ff46c4a79b89b21bafa5052a72e496a89a2b0c51"}]}
