)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"676caff75e077d51bfe3c008d25a857916af0a1c","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     NITIN GUPTA \u003cnitin291989@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-11-04 21:19:47 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Added a new nova CLI command \"nova delete-all\" for deleting all VMs in one go, excluding those mentioned using \"--exclude\" option"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Related Bug: 1587748"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"9a629dbe_de115fb1","line":7,"updated":"2016-11-07 16:43:27.000000000","message":"Please review [1] for how we like commit messages formatted.\n\n[1] https://wiki.openstack.org/wiki/GitCommitMessages","commit_id":"edd42da8fee6ffc37ad9f5ada6f4e853135be465"},{"author":{"_account_id":23886,"name":"NITIN GUPTA","email":"nitin291989@gmail.com","username":"nitin-29-gupta"},"change_message_id":"ef86f229273ac27fcca7b79defd053f0ce14d2a3","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     NITIN GUPTA \u003cnitin291989@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-11-04 21:19:47 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Added a new nova CLI command \"nova delete-all\" for deleting all VMs in one go, excluding those mentioned using \"--exclude\" option"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Related Bug: 1587748"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"9a629dbe_8b1154af","line":7,"in_reply_to":"9a629dbe_de115fb1","updated":"2016-11-08 05:22:54.000000000","message":"Done","commit_id":"edd42da8fee6ffc37ad9f5ada6f4e853135be465"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"01c6c76a99982cd95fa5ae811310ca4f11fe394e","unresolved":false,"context_lines":[{"line_number":28,"context_line":"                                name or ID of the server(s) to be excluded"},{"line_number":29,"context_line":"                                from deletion."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"Closes Bug: #1587748"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"Change-Id: I228dc7eeb92f13c2d8be11dfaff9e9589f0b41b7"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"9a629dbe_3203390f","line":31,"range":{"start_line":31,"start_character":0,"end_line":31,"end_character":10},"updated":"2016-11-08 16:45:29.000000000","message":"The name of the footer is \"Closes-Bug\".","commit_id":"981fcce218e3bd71d1016c868919f6f965644833"},{"author":{"_account_id":23886,"name":"NITIN GUPTA","email":"nitin291989@gmail.com","username":"nitin-29-gupta"},"change_message_id":"7381bb13fb794627ad4f2f9b49ee7cac90ee7f14","unresolved":false,"context_lines":[{"line_number":28,"context_line":"                                name or ID of the server(s) to be excluded"},{"line_number":29,"context_line":"                                from deletion."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"Closes Bug: #1587748"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"Change-Id: I228dc7eeb92f13c2d8be11dfaff9e9589f0b41b7"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"9a629dbe_53e4133a","line":31,"range":{"start_line":31,"start_character":0,"end_line":31,"end_character":10},"in_reply_to":"9a629dbe_3203390f","updated":"2016-11-09 09:32:36.000000000","message":"Done","commit_id":"981fcce218e3bd71d1016c868919f6f965644833"}],"novaclient/v2/shell.py":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"676caff75e077d51bfe3c008d25a857916af0a1c","unresolved":false,"context_lines":[{"line_number":2294,"context_line":"    dest\u003d\u0027host\u0027,"},{"line_number":2295,"context_line":"    metavar\u003d\u0027\u003chostname\u003e\u0027,"},{"line_number":2296,"context_line":"    default\u003dNone,"},{"line_number":2297,"context_line":"    help\u003d_(\u0027Delete all servers hosted by the specified hostname(Admin only).\u0027))"},{"line_number":2298,"context_line":"@utils.arg("},{"line_number":2299,"context_line":"    \u0027--all-tenants\u0027,"},{"line_number":2300,"context_line":"    action\u003d\u0027store_const\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a629dbe_1e83d7cd","line":2297,"range":{"start_line":2297,"start_character":62,"end_line":2297,"end_character":64},"updated":"2016-11-07 16:43:27.000000000","message":"femtonit: Please add a space between \"hostname\" and the open parenthesis.","commit_id":"edd42da8fee6ffc37ad9f5ada6f4e853135be465"},{"author":{"_account_id":23886,"name":"NITIN GUPTA","email":"nitin291989@gmail.com","username":"nitin-29-gupta"},"change_message_id":"bf662539ae87446dee237b08a2e1b0c735fb287d","unresolved":false,"context_lines":[{"line_number":2294,"context_line":"    dest\u003d\u0027host\u0027,"},{"line_number":2295,"context_line":"    metavar\u003d\u0027\u003chostname\u003e\u0027,"},{"line_number":2296,"context_line":"    default\u003dNone,"},{"line_number":2297,"context_line":"    help\u003d_(\u0027Delete all servers hosted by the specified hostname(Admin only).\u0027))"},{"line_number":2298,"context_line":"@utils.arg("},{"line_number":2299,"context_line":"    \u0027--all-tenants\u0027,"},{"line_number":2300,"context_line":"    action\u003d\u0027store_const\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a629dbe_5079a992","line":2297,"range":{"start_line":2297,"start_character":62,"end_line":2297,"end_character":64},"in_reply_to":"9a629dbe_1e83d7cd","updated":"2016-11-08 05:21:30.000000000","message":"Done","commit_id":"edd42da8fee6ffc37ad9f5ada6f4e853135be465"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"676caff75e077d51bfe3c008d25a857916af0a1c","unresolved":false,"context_lines":[{"line_number":2300,"context_line":"    action\u003d\u0027store_const\u0027,"},{"line_number":2301,"context_line":"    const\u003d1,"},{"line_number":2302,"context_line":"    default\u003d0,"},{"line_number":2303,"context_line":"    help\u003d_(\u0027Delete server(s) in another tenant by name (Admin only).\u0027))"},{"line_number":2304,"context_line":"@utils.arg("},{"line_number":2305,"context_line":"    \u0027--exclude\u0027,"},{"line_number":2306,"context_line":"    dest\u003d\u0027exclude\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a629dbe_3eedfb8b","line":2303,"updated":"2016-11-07 16:43:27.000000000","message":"Is there a reason this is specified to store integer values instead of using booleans?\n\n    @utils.arg(\n        \u0027--all-tenants\u0027,\n        action\u003d\u0027store_true\u0027,\n        default\u003dFalse,\n        help\u003d_(…))","commit_id":"edd42da8fee6ffc37ad9f5ada6f4e853135be465"},{"author":{"_account_id":23886,"name":"NITIN GUPTA","email":"nitin291989@gmail.com","username":"nitin-29-gupta"},"change_message_id":"bf662539ae87446dee237b08a2e1b0c735fb287d","unresolved":false,"context_lines":[{"line_number":2300,"context_line":"    action\u003d\u0027store_const\u0027,"},{"line_number":2301,"context_line":"    const\u003d1,"},{"line_number":2302,"context_line":"    default\u003d0,"},{"line_number":2303,"context_line":"    help\u003d_(\u0027Delete server(s) in another tenant by name (Admin only).\u0027))"},{"line_number":2304,"context_line":"@utils.arg("},{"line_number":2305,"context_line":"    \u0027--exclude\u0027,"},{"line_number":2306,"context_line":"    dest\u003d\u0027exclude\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a629dbe_b072057b","line":2303,"in_reply_to":"9a629dbe_3eedfb8b","updated":"2016-11-08 05:21:30.000000000","message":"No, there is no other reason, except that \u00271\u0027 corresponds to True, whereas, \u00270\u0027 corresponds to \u0027False\u0027.\nWe can use boolean values (True/False) as well, but, in the entire file, integer values (0/1) are being used, thats why here also integer values were used.","commit_id":"edd42da8fee6ffc37ad9f5ada6f4e853135be465"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"676caff75e077d51bfe3c008d25a857916af0a1c","unresolved":false,"context_lines":[{"line_number":2306,"context_line":"    dest\u003d\u0027exclude\u0027,"},{"line_number":2307,"context_line":"    metavar\u003d\u0027\u003cserver_name\u003e\u0027,"},{"line_number":2308,"context_line":"    default\u003dNone,"},{"line_number":2309,"context_line":"    nargs\u003d\u0027+\u0027,"},{"line_number":2310,"context_line":"    help\u003d_(\u0027name or ID of the server(s) to be excluded from deletion.\u0027))"},{"line_number":2311,"context_line":"def do_delete_all(cs, args):"},{"line_number":2312,"context_line":"    \"\"\"Immediately shut down and delete all server(s)."}],"source_content_type":"text/x-python","patch_set":4,"id":"9a629dbe_32528f14","line":2309,"range":{"start_line":2309,"start_character":4,"end_line":2309,"end_character":14},"updated":"2016-11-07 16:43:27.000000000","message":"No other option in novaclient does this.  I\u0027d much rather you use action\u003d\u0027append\u0027 and leave nargs alone.","commit_id":"edd42da8fee6ffc37ad9f5ada6f4e853135be465"},{"author":{"_account_id":23886,"name":"NITIN GUPTA","email":"nitin291989@gmail.com","username":"nitin-29-gupta"},"change_message_id":"bf662539ae87446dee237b08a2e1b0c735fb287d","unresolved":false,"context_lines":[{"line_number":2306,"context_line":"    dest\u003d\u0027exclude\u0027,"},{"line_number":2307,"context_line":"    metavar\u003d\u0027\u003cserver_name\u003e\u0027,"},{"line_number":2308,"context_line":"    default\u003dNone,"},{"line_number":2309,"context_line":"    nargs\u003d\u0027+\u0027,"},{"line_number":2310,"context_line":"    help\u003d_(\u0027name or ID of the server(s) to be excluded from deletion.\u0027))"},{"line_number":2311,"context_line":"def do_delete_all(cs, args):"},{"line_number":2312,"context_line":"    \"\"\"Immediately shut down and delete all server(s)."}],"source_content_type":"text/x-python","patch_set":4,"id":"9a629dbe_107571f8","line":2309,"range":{"start_line":2309,"start_character":4,"end_line":2309,"end_character":14},"in_reply_to":"9a629dbe_32528f14","updated":"2016-11-08 05:21:30.000000000","message":"IMO, using \"nagrs\u003d\u0027+\u0027\" will be the better option, as we don\u0027t want the user to enter \"comma\" (,) separated list of VMs with \"--exclude\" option, instead of space separated list of VMs. \n\nThis is similar to the behavior in existing \"nova delete\" command which calls \"do_delete\" function which uses  \"nagrs\u003d\u0027+\u0027\" for mentioning VMs/Servers to be deleted, in \"python-novaclient/v2/shell.py\" file.","commit_id":"edd42da8fee6ffc37ad9f5ada6f4e853135be465"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"676caff75e077d51bfe3c008d25a857916af0a1c","unresolved":false,"context_lines":[{"line_number":2307,"context_line":"    metavar\u003d\u0027\u003cserver_name\u003e\u0027,"},{"line_number":2308,"context_line":"    default\u003dNone,"},{"line_number":2309,"context_line":"    nargs\u003d\u0027+\u0027,"},{"line_number":2310,"context_line":"    help\u003d_(\u0027name or ID of the server(s) to be excluded from deletion.\u0027))"},{"line_number":2311,"context_line":"def do_delete_all(cs, args):"},{"line_number":2312,"context_line":"    \"\"\"Immediately shut down and delete all server(s)."},{"line_number":2313,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a629dbe_3279af94","line":2310,"range":{"start_line":2310,"start_character":12,"end_line":2310,"end_character":16},"updated":"2016-11-07 16:43:27.000000000","message":"femtonit: For consistency, \"name\" should be capitalized.","commit_id":"edd42da8fee6ffc37ad9f5ada6f4e853135be465"},{"author":{"_account_id":23886,"name":"NITIN GUPTA","email":"nitin291989@gmail.com","username":"nitin-29-gupta"},"change_message_id":"bf662539ae87446dee237b08a2e1b0c735fb287d","unresolved":false,"context_lines":[{"line_number":2307,"context_line":"    metavar\u003d\u0027\u003cserver_name\u003e\u0027,"},{"line_number":2308,"context_line":"    default\u003dNone,"},{"line_number":2309,"context_line":"    nargs\u003d\u0027+\u0027,"},{"line_number":2310,"context_line":"    help\u003d_(\u0027name or ID of the server(s) to be excluded from deletion.\u0027))"},{"line_number":2311,"context_line":"def do_delete_all(cs, args):"},{"line_number":2312,"context_line":"    \"\"\"Immediately shut down and delete all server(s)."},{"line_number":2313,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a629dbe_f04e3dc0","line":2310,"range":{"start_line":2310,"start_character":12,"end_line":2310,"end_character":16},"in_reply_to":"9a629dbe_3279af94","updated":"2016-11-08 05:21:30.000000000","message":"Done","commit_id":"edd42da8fee6ffc37ad9f5ada6f4e853135be465"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"676caff75e077d51bfe3c008d25a857916af0a1c","unresolved":false,"context_lines":[{"line_number":2312,"context_line":"    \"\"\"Immediately shut down and delete all server(s)."},{"line_number":2313,"context_line":""},{"line_number":2314,"context_line":"    Excluded server(s) are not deleted."},{"line_number":2315,"context_line":""},{"line_number":2316,"context_line":"    \"\"\""},{"line_number":2317,"context_line":"    search_opts \u003d {"},{"line_number":2318,"context_line":"        \u0027all_tenants\u0027: args.all_tenants,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a629dbe_32a0cff4","line":2315,"updated":"2016-11-07 16:43:27.000000000","message":"femtonit: The blank line at the end of the docstring is not needed.","commit_id":"edd42da8fee6ffc37ad9f5ada6f4e853135be465"},{"author":{"_account_id":23886,"name":"NITIN GUPTA","email":"nitin291989@gmail.com","username":"nitin-29-gupta"},"change_message_id":"bf662539ae87446dee237b08a2e1b0c735fb287d","unresolved":false,"context_lines":[{"line_number":2312,"context_line":"    \"\"\"Immediately shut down and delete all server(s)."},{"line_number":2313,"context_line":""},{"line_number":2314,"context_line":"    Excluded server(s) are not deleted."},{"line_number":2315,"context_line":""},{"line_number":2316,"context_line":"    \"\"\""},{"line_number":2317,"context_line":"    search_opts \u003d {"},{"line_number":2318,"context_line":"        \u0027all_tenants\u0027: args.all_tenants,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a629dbe_f0939df8","line":2315,"in_reply_to":"9a629dbe_32a0cff4","updated":"2016-11-08 05:21:30.000000000","message":"Done","commit_id":"edd42da8fee6ffc37ad9f5ada6f4e853135be465"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"676caff75e077d51bfe3c008d25a857916af0a1c","unresolved":false,"context_lines":[{"line_number":2322,"context_line":"    servers_deleting \u003d []"},{"line_number":2323,"context_line":"    for server in servers:"},{"line_number":2324,"context_line":"        active_servers.update({getattr(server, \u0027id\u0027, \u0027\u0027):"},{"line_number":2325,"context_line":"                              getattr(server, \u0027name\u0027, \u0027\u0027)})"},{"line_number":2326,"context_line":""},{"line_number":2327,"context_line":"    remaining_servers \u003d active_servers"},{"line_number":2328,"context_line":"    id_given \u003d False"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a629dbe_d2907398","line":2325,"updated":"2016-11-07 16:43:27.000000000","message":"Indentation appears to be slightly off here.","commit_id":"edd42da8fee6ffc37ad9f5ada6f4e853135be465"},{"author":{"_account_id":23886,"name":"NITIN GUPTA","email":"nitin291989@gmail.com","username":"nitin-29-gupta"},"change_message_id":"bf662539ae87446dee237b08a2e1b0c735fb287d","unresolved":false,"context_lines":[{"line_number":2322,"context_line":"    servers_deleting \u003d []"},{"line_number":2323,"context_line":"    for server in servers:"},{"line_number":2324,"context_line":"        active_servers.update({getattr(server, \u0027id\u0027, \u0027\u0027):"},{"line_number":2325,"context_line":"                              getattr(server, \u0027name\u0027, \u0027\u0027)})"},{"line_number":2326,"context_line":""},{"line_number":2327,"context_line":"    remaining_servers \u003d active_servers"},{"line_number":2328,"context_line":"    id_given \u003d False"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a629dbe_107f31ab","line":2325,"in_reply_to":"9a629dbe_d2907398","updated":"2016-11-08 05:21:30.000000000","message":"It need to indented like this only, otherwise giving error indentation error in pee8 check.","commit_id":"edd42da8fee6ffc37ad9f5ada6f4e853135be465"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"676caff75e077d51bfe3c008d25a857916af0a1c","unresolved":false,"context_lines":[{"line_number":2334,"context_line":"            if exclude_server in remaining_servers:"},{"line_number":2335,"context_line":"                id_given \u003d True"},{"line_number":2336,"context_line":"            elif exclude_server in remaining_servers.values():"},{"line_number":2337,"context_line":"                name_given \u003d True"},{"line_number":2338,"context_line":""},{"line_number":2339,"context_line":"        if id_given and name_given:"},{"line_number":2340,"context_line":"            id_name_given \u003d True"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a629dbe_b2c13f83","line":2337,"updated":"2016-11-07 16:43:27.000000000","message":"Why not fold this logic into the main \"for server in servers\" loop at line 2323?  You can compose a set from the contents of args.exclude and use an \u0027in\u0027 test, as far as I can see.","commit_id":"edd42da8fee6ffc37ad9f5ada6f4e853135be465"},{"author":{"_account_id":23886,"name":"NITIN GUPTA","email":"nitin291989@gmail.com","username":"nitin-29-gupta"},"change_message_id":"bf662539ae87446dee237b08a2e1b0c735fb287d","unresolved":false,"context_lines":[{"line_number":2334,"context_line":"            if exclude_server in remaining_servers:"},{"line_number":2335,"context_line":"                id_given \u003d True"},{"line_number":2336,"context_line":"            elif exclude_server in remaining_servers.values():"},{"line_number":2337,"context_line":"                name_given \u003d True"},{"line_number":2338,"context_line":""},{"line_number":2339,"context_line":"        if id_given and name_given:"},{"line_number":2340,"context_line":"            id_name_given \u003d True"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a629dbe_4b79fc92","line":2337,"in_reply_to":"9a629dbe_b2c13f83","updated":"2016-11-08 05:21:30.000000000","message":"\"for server in servers\" loop at line 2323, is used for getting the details (Name and ID) of servers from the list of existing servers.\n\nWhile this \"for\" loop on \"args.exclude\" is trying to detect whether user has entered VM\u0027s Name or ID, which need to guarded from deletion.\n\nSo, can\u0027t fold this logic into \"for\" loop on \"servers\",as both \"for\" loops are on different lists of VMs.","commit_id":"edd42da8fee6ffc37ad9f5ada6f4e853135be465"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"01c6c76a99982cd95fa5ae811310ca4f11fe394e","unresolved":false,"context_lines":[{"line_number":2307,"context_line":"    dest\u003d\u0027exclude\u0027,"},{"line_number":2308,"context_line":"    metavar\u003d\u0027\u003cserver_name\u003e\u0027,"},{"line_number":2309,"context_line":"    default\u003dNone,"},{"line_number":2310,"context_line":"    nargs\u003d\u0027+\u0027,"},{"line_number":2311,"context_line":"    help\u003d_(\u0027Name or ID of the server(s) to be excluded from deletion.\u0027))"},{"line_number":2312,"context_line":"def do_delete_all(cs, args):"},{"line_number":2313,"context_line":"    \"\"\"Immediately shut down and delete all server(s)."}],"source_content_type":"text/x-python","patch_set":6,"id":"9a629dbe_129c75bf","line":2310,"range":{"start_line":2310,"start_character":4,"end_line":2310,"end_character":14},"updated":"2016-11-08 16:45:29.000000000","message":"No other option uses nargs\u003d\u0027+\u0027; it\u0027s only used for positional arguments.  Again, I want to see this option use action\u003d\u0027append\u0027.  Note that I am not looking for comma-separated values; I\u0027m expecting the user would specify \"--exclude\u003dname1 --exclude\u003dname2 […]\", which is more consistent with the rest of novaclient.","commit_id":"981fcce218e3bd71d1016c868919f6f965644833"},{"author":{"_account_id":23886,"name":"NITIN GUPTA","email":"nitin291989@gmail.com","username":"nitin-29-gupta"},"change_message_id":"7381bb13fb794627ad4f2f9b49ee7cac90ee7f14","unresolved":false,"context_lines":[{"line_number":2307,"context_line":"    dest\u003d\u0027exclude\u0027,"},{"line_number":2308,"context_line":"    metavar\u003d\u0027\u003cserver_name\u003e\u0027,"},{"line_number":2309,"context_line":"    default\u003dNone,"},{"line_number":2310,"context_line":"    nargs\u003d\u0027+\u0027,"},{"line_number":2311,"context_line":"    help\u003d_(\u0027Name or ID of the server(s) to be excluded from deletion.\u0027))"},{"line_number":2312,"context_line":"def do_delete_all(cs, args):"},{"line_number":2313,"context_line":"    \"\"\"Immediately shut down and delete all server(s)."}],"source_content_type":"text/x-python","patch_set":6,"id":"9a629dbe_27f4c184","line":2310,"range":{"start_line":2310,"start_character":4,"end_line":2310,"end_character":14},"in_reply_to":"9a629dbe_129c75bf","updated":"2016-11-09 09:32:36.000000000","message":"I got your point, being consistent with the existing novaclient.\nBut the usage suggested  \"--exclude\u003dname1 --exclude\u003dname2 […]\", seems to be less user-friendly.\nInstead usage like \"  \"--exclude name1 name2 [...]\", seems more user friendly.\nEven though \"--exclude\" not being the positional argument, its appears more similar to existing \"nova delete\" command, hence more user-friendly.\n\nStill, if you insist on using \"action\u003d\u0027append\u0027\" instead of \"nargs\u003d\u0027+\u0027\", i will change this.","commit_id":"981fcce218e3bd71d1016c868919f6f965644833"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"53239c525b0bb16ee5c035a21dc6776d85862f62","unresolved":false,"context_lines":[{"line_number":2307,"context_line":"    dest\u003d\u0027exclude\u0027,"},{"line_number":2308,"context_line":"    metavar\u003d\u0027\u003cserver_name\u003e\u0027,"},{"line_number":2309,"context_line":"    default\u003dNone,"},{"line_number":2310,"context_line":"    nargs\u003d\u0027+\u0027,"},{"line_number":2311,"context_line":"    help\u003d_(\u0027Name or ID of the server(s) to be excluded from deletion.\u0027))"},{"line_number":2312,"context_line":"def do_delete_all(cs, args):"},{"line_number":2313,"context_line":"    \"\"\"Immediately shut down and delete all server(s)."}],"source_content_type":"text/x-python","patch_set":6,"id":"9a629dbe_fb46c74d","line":2310,"range":{"start_line":2310,"start_character":4,"end_line":2310,"end_character":14},"in_reply_to":"9a629dbe_27f4c184","updated":"2016-11-09 16:40:06.000000000","message":"Yes, it is a little less user-friendly; but \"nargs\u003d\u0027+\u0027\" introduces an ambiguity in the command line.  Consider if the user were to do:\n\n    nova delete-all --exclude n1 n2 --all-tenants\n\nIs \"--all-tenants\" a name or an option?  How does argparse interpret that case?  I don\u0027t know off the top of my head, and that\u0027s reason enough to avoid it, even if it turns out argparse does the right thing.","commit_id":"981fcce218e3bd71d1016c868919f6f965644833"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"01c6c76a99982cd95fa5ae811310ca4f11fe394e","unresolved":false,"context_lines":[{"line_number":2315,"context_line":"    \"\"\""},{"line_number":2316,"context_line":"    search_opts \u003d {"},{"line_number":2317,"context_line":"        \u0027all_tenants\u0027: args.all_tenants,"},{"line_number":2318,"context_line":"        \u0027host\u0027: args.host}"},{"line_number":2319,"context_line":"    servers \u003d cs.servers.list(detailed\u003dFalse, search_opts\u003dsearch_opts)"},{"line_number":2320,"context_line":"    active_servers \u003d {}"},{"line_number":2321,"context_line":"    servers_deleting \u003d []"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a629dbe_92dec56b","line":2318,"updated":"2016-11-08 16:45:29.000000000","message":"I\u0027m going to suggest changing this formatting like so:\n\n    search_opts \u003d {\n        \u0027all_tenants\u0027: args.all_tenants,\n        \u0027host\u0027: args.host,\n    }\n\nThe particular changes I\u0027m suggesting are a trailing comma and moving the closing brace to the next line.\n\n(femtonit)","commit_id":"981fcce218e3bd71d1016c868919f6f965644833"},{"author":{"_account_id":23886,"name":"NITIN GUPTA","email":"nitin291989@gmail.com","username":"nitin-29-gupta"},"change_message_id":"7381bb13fb794627ad4f2f9b49ee7cac90ee7f14","unresolved":false,"context_lines":[{"line_number":2315,"context_line":"    \"\"\""},{"line_number":2316,"context_line":"    search_opts \u003d {"},{"line_number":2317,"context_line":"        \u0027all_tenants\u0027: args.all_tenants,"},{"line_number":2318,"context_line":"        \u0027host\u0027: args.host}"},{"line_number":2319,"context_line":"    servers \u003d cs.servers.list(detailed\u003dFalse, search_opts\u003dsearch_opts)"},{"line_number":2320,"context_line":"    active_servers \u003d {}"},{"line_number":2321,"context_line":"    servers_deleting \u003d []"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a629dbe_e75f293f","line":2318,"in_reply_to":"9a629dbe_92dec56b","updated":"2016-11-09 09:32:36.000000000","message":"Done","commit_id":"981fcce218e3bd71d1016c868919f6f965644833"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"01c6c76a99982cd95fa5ae811310ca4f11fe394e","unresolved":false,"context_lines":[{"line_number":2321,"context_line":"    servers_deleting \u003d []"},{"line_number":2322,"context_line":"    for server in servers:"},{"line_number":2323,"context_line":"        active_servers.update({getattr(server, \u0027id\u0027, \u0027\u0027):"},{"line_number":2324,"context_line":"                              getattr(server, \u0027name\u0027, \u0027\u0027)})"},{"line_number":2325,"context_line":""},{"line_number":2326,"context_line":"    remaining_servers \u003d active_servers"},{"line_number":2327,"context_line":"    id_given \u003d False"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a629dbe_722a112e","line":2324,"updated":"2016-11-08 16:45:29.000000000","message":"I still don\u0027t like this indentation.  I suggest a change similar to what I suggested above:\n\n    active_servers.update({\n        getattr(server, \u0027id\u0027, \u0027\u0027): getattr(server, \u0027name\u0027, \u0027\u0027),\n    })\n\nEven if you have to break the line after the \u0027:\u0027 due to length constraints, that would look better to my eye.\n\nSince this suggestion is stylistic, I\u0027ll call it a femtonit, but it\u0027s something I\u0027d really like to see.","commit_id":"981fcce218e3bd71d1016c868919f6f965644833"},{"author":{"_account_id":23886,"name":"NITIN GUPTA","email":"nitin291989@gmail.com","username":"nitin-29-gupta"},"change_message_id":"7381bb13fb794627ad4f2f9b49ee7cac90ee7f14","unresolved":false,"context_lines":[{"line_number":2321,"context_line":"    servers_deleting \u003d []"},{"line_number":2322,"context_line":"    for server in servers:"},{"line_number":2323,"context_line":"        active_servers.update({getattr(server, \u0027id\u0027, \u0027\u0027):"},{"line_number":2324,"context_line":"                              getattr(server, \u0027name\u0027, \u0027\u0027)})"},{"line_number":2325,"context_line":""},{"line_number":2326,"context_line":"    remaining_servers \u003d active_servers"},{"line_number":2327,"context_line":"    id_given \u003d False"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a629dbe_5a27c8b5","line":2324,"in_reply_to":"9a629dbe_722a112e","updated":"2016-11-09 09:32:36.000000000","message":"Done","commit_id":"981fcce218e3bd71d1016c868919f6f965644833"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"01c6c76a99982cd95fa5ae811310ca4f11fe394e","unresolved":false,"context_lines":[{"line_number":2336,"context_line":"                name_given \u003d True"},{"line_number":2337,"context_line":""},{"line_number":2338,"context_line":"        if id_given and name_given:"},{"line_number":2339,"context_line":"            id_name_given \u003d True"},{"line_number":2340,"context_line":"            print(\"Please use either only ID or only name with --exclude\")"},{"line_number":2341,"context_line":"            print(\"exiting\")"},{"line_number":2342,"context_line":"            sys.exit(0)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a629dbe_52ac2da0","line":2339,"updated":"2016-11-08 16:45:29.000000000","message":"What is the purpose of id_name_given?  You set it, then immediately exit the interpreter.  In particular, on line 2344, there\u0027s no way for that if to take any other branch.  You should eliminate the whole variable.","commit_id":"981fcce218e3bd71d1016c868919f6f965644833"},{"author":{"_account_id":23886,"name":"NITIN GUPTA","email":"nitin291989@gmail.com","username":"nitin-29-gupta"},"change_message_id":"7381bb13fb794627ad4f2f9b49ee7cac90ee7f14","unresolved":false,"context_lines":[{"line_number":2336,"context_line":"                name_given \u003d True"},{"line_number":2337,"context_line":""},{"line_number":2338,"context_line":"        if id_given and name_given:"},{"line_number":2339,"context_line":"            id_name_given \u003d True"},{"line_number":2340,"context_line":"            print(\"Please use either only ID or only name with --exclude\")"},{"line_number":2341,"context_line":"            print(\"exiting\")"},{"line_number":2342,"context_line":"            sys.exit(0)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a629dbe_5adee811","line":2339,"in_reply_to":"9a629dbe_52ac2da0","updated":"2016-11-09 09:32:36.000000000","message":"Done","commit_id":"981fcce218e3bd71d1016c868919f6f965644833"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"01c6c76a99982cd95fa5ae811310ca4f11fe394e","unresolved":false,"context_lines":[{"line_number":2339,"context_line":"            id_name_given \u003d True"},{"line_number":2340,"context_line":"            print(\"Please use either only ID or only name with --exclude\")"},{"line_number":2341,"context_line":"            print(\"exiting\")"},{"line_number":2342,"context_line":"            sys.exit(0)"},{"line_number":2343,"context_line":""},{"line_number":2344,"context_line":"        if not id_name_given:"},{"line_number":2345,"context_line":"            id_given \u003d False"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a629dbe_f2a9c17c","line":2342,"updated":"2016-11-08 16:45:29.000000000","message":"No other command in this file uses sys.exit(); you should raise exceptions.CommandError() with an appropriate (and translated) error message.","commit_id":"981fcce218e3bd71d1016c868919f6f965644833"},{"author":{"_account_id":23886,"name":"NITIN GUPTA","email":"nitin291989@gmail.com","username":"nitin-29-gupta"},"change_message_id":"7381bb13fb794627ad4f2f9b49ee7cac90ee7f14","unresolved":false,"context_lines":[{"line_number":2339,"context_line":"            id_name_given \u003d True"},{"line_number":2340,"context_line":"            print(\"Please use either only ID or only name with --exclude\")"},{"line_number":2341,"context_line":"            print(\"exiting\")"},{"line_number":2342,"context_line":"            sys.exit(0)"},{"line_number":2343,"context_line":""},{"line_number":2344,"context_line":"        if not id_name_given:"},{"line_number":2345,"context_line":"            id_given \u003d False"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a629dbe_3a69348c","line":2342,"in_reply_to":"9a629dbe_f2a9c17c","updated":"2016-11-09 09:32:36.000000000","message":"Done","commit_id":"981fcce218e3bd71d1016c868919f6f965644833"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"253eb9bd424f1d5360701858dec41a334a53a81d","unresolved":false,"context_lines":[{"line_number":2307,"context_line":"    dest\u003d\u0027exclude\u0027,"},{"line_number":2308,"context_line":"    metavar\u003d\u0027\u003cserver_name\u003e\u0027,"},{"line_number":2309,"context_line":"    default\u003dNone,"},{"line_number":2310,"context_line":"    nargs\u003d\u0027+\u0027,"},{"line_number":2311,"context_line":"    help\u003d_(\u0027Name or ID of the server(s) to be excluded from deletion.\u0027))"},{"line_number":2312,"context_line":"def do_delete_all(cs, args):"},{"line_number":2313,"context_line":"    \"\"\"Immediately shut down and delete all server(s)."}],"source_content_type":"text/x-python","patch_set":7,"id":"9a629dbe_fb5de715","line":2310,"range":{"start_line":2310,"start_character":4,"end_line":2310,"end_character":14},"updated":"2016-11-09 16:39:58.000000000","message":"Ibid :)","commit_id":"81ad849ad138deeb9547529288f4360b99b14721"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"042d25c873160b39430120e93e16279be1842d42","unresolved":false,"context_lines":[{"line_number":2309,"context_line":"    default\u003dNone,"},{"line_number":2310,"context_line":"    action\u003d\u0027store\u0027,"},{"line_number":2311,"context_line":"    type\u003dstr,"},{"line_number":2312,"context_line":"    help\u003d_(\u0027Name or ID of the server(s) to be excluded from deletion.\u0027))"},{"line_number":2313,"context_line":"def do_delete_all(cs, args):"},{"line_number":2314,"context_line":"    \"\"\"Immediately shut down and delete all server(s)."},{"line_number":2315,"context_line":"    Excluded server(s) are not deleted."}],"source_content_type":"text/x-python","patch_set":8,"id":"7a77a97e_6e109ea9","line":2312,"updated":"2016-11-21 16:23:41.000000000","message":"The help should probably indicate that --exclude is expecting a comma-separated list of names and IDs.","commit_id":"deb43a70ad3844d93438ad7ea5c6a68fd69b2836"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"042d25c873160b39430120e93e16279be1842d42","unresolved":false,"context_lines":[{"line_number":2320,"context_line":"    }"},{"line_number":2321,"context_line":"    servers \u003d cs.servers.list(detailed\u003dFalse, search_opts\u003dsearch_opts)"},{"line_number":2322,"context_line":"    active_servers \u003d {}"},{"line_number":2323,"context_line":"    servers_deleting \u003d []"},{"line_number":2324,"context_line":"    for server in servers:"},{"line_number":2325,"context_line":"        active_servers.update({"},{"line_number":2326,"context_line":"            getattr(server, \u0027id\u0027, \u0027\u0027): getattr(server, \u0027name\u0027, \u0027\u0027),"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a77a97e_6e397e41","line":2323,"updated":"2016-11-21 16:23:41.000000000","message":"This initialization is unnecessary.  At line 2352, all branches set servers_deleting, and the list is not referenced before that line.","commit_id":"deb43a70ad3844d93438ad7ea5c6a68fd69b2836"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"042d25c873160b39430120e93e16279be1842d42","unresolved":false,"context_lines":[{"line_number":2326,"context_line":"            getattr(server, \u0027id\u0027, \u0027\u0027): getattr(server, \u0027name\u0027, \u0027\u0027),"},{"line_number":2327,"context_line":"        })"},{"line_number":2328,"context_line":""},{"line_number":2329,"context_line":"    remaining_servers \u003d active_servers"},{"line_number":2330,"context_line":"    id_given \u003d False"},{"line_number":2331,"context_line":"    name_given \u003d False"},{"line_number":2332,"context_line":"    server_count_with_same_name \u003d 0"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a77a97e_0edc8a17","line":2329,"updated":"2016-11-21 16:23:41.000000000","message":"Why rename active_servers like this?","commit_id":"deb43a70ad3844d93438ad7ea5c6a68fd69b2836"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"042d25c873160b39430120e93e16279be1842d42","unresolved":false,"context_lines":[{"line_number":2340,"context_line":"            elif exclude_server in remaining_servers.values():"},{"line_number":2341,"context_line":"                name_given \u003d True"},{"line_number":2342,"context_line":"                for server_id in remaining_servers.keys():"},{"line_number":2343,"context_line":"                    if remaining_servers[server_id] \u003d\u003d exclude_server:"},{"line_number":2344,"context_line":"                        server_count_with_same_name +\u003d 1"},{"line_number":2345,"context_line":"                        if server_count_with_same_name \u003e 1:"},{"line_number":2346,"context_line":"                            break"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a77a97e_4e9e8208","line":2343,"updated":"2016-11-21 16:23:41.000000000","message":"I see two issues with this loop.  The first is that remaining_servers is modified within the body of the loop.  The second is that you\u0027re dereferencing the value instead of using .items().  Consider a construction such as:\n\n    for server_id, server_name in list(remaining_servers.items()):\n        if server_name \u003d\u003d exclude_server:\n            …\n            del remaining_servers[server_id]","commit_id":"deb43a70ad3844d93438ad7ea5c6a68fd69b2836"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"042d25c873160b39430120e93e16279be1842d42","unresolved":false,"context_lines":[{"line_number":2343,"context_line":"                    if remaining_servers[server_id] \u003d\u003d exclude_server:"},{"line_number":2344,"context_line":"                        server_count_with_same_name +\u003d 1"},{"line_number":2345,"context_line":"                        if server_count_with_same_name \u003e 1:"},{"line_number":2346,"context_line":"                            break"},{"line_number":2347,"context_line":"                        del remaining_servers[server_id]"},{"line_number":2348,"context_line":"                server_count_with_same_name \u003d 0"},{"line_number":2349,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a77a97e_6eb41ed1","line":2346,"updated":"2016-11-21 16:23:41.000000000","message":"I would expect an --exclude giving a name to exclude all the servers having that name; this would stop after the second server having that name.","commit_id":"deb43a70ad3844d93438ad7ea5c6a68fd69b2836"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"042d25c873160b39430120e93e16279be1842d42","unresolved":false,"context_lines":[{"line_number":2347,"context_line":"                        del remaining_servers[server_id]"},{"line_number":2348,"context_line":"                server_count_with_same_name \u003d 0"},{"line_number":2349,"context_line":"            else:"},{"line_number":2350,"context_line":"                print(_(\"Server %s doesn\u0027t exist\") % exclude_server)"},{"line_number":2351,"context_line":""},{"line_number":2352,"context_line":"    if id_given:"},{"line_number":2353,"context_line":"        servers_deleting \u003d remaining_servers.keys()"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a77a97e_6e489e88","line":2350,"updated":"2016-11-21 16:23:41.000000000","message":"I\u0027m not sure this is that important.  Maybe only as a warning to be emitted when verbose output has been requested?  Something to think about, anyway.","commit_id":"deb43a70ad3844d93438ad7ea5c6a68fd69b2836"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"042d25c873160b39430120e93e16279be1842d42","unresolved":false,"context_lines":[{"line_number":2352,"context_line":"    if id_given:"},{"line_number":2353,"context_line":"        servers_deleting \u003d remaining_servers.keys()"},{"line_number":2354,"context_line":"    elif name_given:"},{"line_number":2355,"context_line":"        servers_deleting \u003d remaining_servers.values()"},{"line_number":2356,"context_line":"    else:"},{"line_number":2357,"context_line":"        servers_deleting \u003d remaining_servers.keys()"},{"line_number":2358,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"7a77a97e_411f335b","line":2355,"updated":"2016-11-21 16:23:41.000000000","message":"I\u0027m not certain why this logic exists at all; why wouldn\u0027t we just use the IDs?  Anyway, this entire \u0027if\u0027 tree could be simplified, if it were to be preserved:\n\n    if name_given:\n        servers_deleting \u003d remaining_servers.values()\n    else:\n        servers_deleting \u003d remaining_servers.keys()","commit_id":"deb43a70ad3844d93438ad7ea5c6a68fd69b2836"}]}
