)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":866,"name":"Chmouel Boudjnah","email":"chmouel@chmouel.com","username":"chmouel"},"change_message_id":"deb27165511603f8b0c002ac8972f9e2f4279d6b","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add capabilities option"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds a capabilities option on swiftclient."},{"line_number":10,"context_line":"This option uses the new /info endpoint to request the"},{"line_number":11,"context_line":"remote capabilities and nicely display it."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAAUH%2F%2FNag%3D","line":9,"updated":"2014-01-16 10:58:29.000000000","message":"add capabilities","commit_id":"b1285bd6265042cbfb4b96bdbd8fbac53b70bf6b"}],"bin/swift":[{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"dc6aacd3efe503924fe58751e2db7596b76df3a0","unresolved":false,"context_lines":[{"line_number":1136,"context_line":""},{"line_number":1137,"context_line":"def st_capabilities(parser, args, thread_manager):"},{"line_number":1138,"context_line":"    def _print_compo_cap(name, capabilities):"},{"line_number":1139,"context_line":"        for feature, options in capabilities.iteritems():"},{"line_number":1140,"context_line":"            thread_manager.print_msg(\"%s: %s\" % (name, feature))"},{"line_number":1141,"context_line":"            if options:"},{"line_number":1142,"context_line":"                thread_manager.print_msg(\" Options:\")"}],"source_content_type":"text/x-swift","patch_set":1,"id":"AAAAUH%2F%2FTFQ%3D","line":1139,"updated":"2014-01-15 11:04:06.000000000","message":"A sorted list of middlewares would be great!","commit_id":"017239e3358e5121bd95cf21f15494337b2f02b0"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"dc6aacd3efe503924fe58751e2db7596b76df3a0","unresolved":false,"context_lines":[{"line_number":1140,"context_line":"            thread_manager.print_msg(\"%s: %s\" % (name, feature))"},{"line_number":1141,"context_line":"            if options:"},{"line_number":1142,"context_line":"                thread_manager.print_msg(\" Options:\")"},{"line_number":1143,"context_line":"                for key, value in options.iteritems():"},{"line_number":1144,"context_line":"                    thread_manager.print_msg(\"  %s: %s\" % (key, value))"},{"line_number":1145,"context_line":"    (options, args) \u003d parse_args(parser, args)"},{"line_number":1146,"context_line":"    if (args and len(args) \u003e 2):"}],"source_content_type":"text/x-swift","patch_set":1,"id":"AAAAUH%2F%2FTGQ%3D","line":1143,"updated":"2014-01-15 11:04:06.000000000","message":"Same here: sorted list of options would be great. Doing this will group entries with similar names (for example max_meta_*), which could be useful.","commit_id":"017239e3358e5121bd95cf21f15494337b2f02b0"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"dc6aacd3efe503924fe58751e2db7596b76df3a0","unresolved":false,"context_lines":[{"line_number":1156,"context_line":"    _print_compo_cap(\u0027Core\u0027, dict((k, v) for k, v"},{"line_number":1157,"context_line":"                     in capabilities.iteritems() if k \u003d\u003d \u0027swift\u0027))"},{"line_number":1158,"context_line":"    del capabilities[\u0027swift\u0027]"},{"line_number":1159,"context_line":"    _print_compo_cap(\u0027Additional middlewares\u0027, capabilities)"},{"line_number":1160,"context_line":""},{"line_number":1161,"context_line":""},{"line_number":1162,"context_line":"def split_headers(options, prefix\u003d\u0027\u0027, thread_manager\u003dNone):"}],"source_content_type":"text/x-swift","patch_set":1,"id":"AAAAUH%2F%2FTBk%3D","line":1159,"updated":"2014-01-15 11:04:06.000000000","message":"middlewares -\u003e middleware","commit_id":"017239e3358e5121bd95cf21f15494337b2f02b0"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"dc6aacd3efe503924fe58751e2db7596b76df3a0","unresolved":false,"context_lines":[{"line_number":1212,"context_line":"    }"},{"line_number":1213,"context_line":""},{"line_number":1214,"context_line":"    if len(args) \u003e 1 and args[0] \u003d\u003d \"capabilities\":"},{"line_number":1215,"context_line":"        return options, args"},{"line_number":1216,"context_line":""},{"line_number":1217,"context_line":"    if (options.os_options.get(\u0027object_storage_url\u0027) and"},{"line_number":1218,"context_line":"            options.os_options.get(\u0027auth_token\u0027) and"}],"source_content_type":"text/x-swift","patch_set":1,"id":"AAAAUH%2F%2FTDk%3D","line":1215,"updated":"2014-01-15 11:04:06.000000000","message":"Why this? \"return options, args\" is already in line 1232 below?\nDoing this here also skips the test in line 1222/1223.","commit_id":"017239e3358e5121bd95cf21f15494337b2f02b0"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"9a6bb35409aa8c403130a51fda41e672e6704440","unresolved":false,"context_lines":[{"line_number":1156,"context_line":"        url \u003d args[1]"},{"line_number":1157,"context_line":"    capabilities \u003d conn.get_capabilities(url)"},{"line_number":1158,"context_line":"    _print_compo_cap(\u0027Core\u0027, dict((k, v) for k, v"},{"line_number":1159,"context_line":"                     in capabilities.iteritems() if k \u003d\u003d \u0027swift\u0027))"},{"line_number":1160,"context_line":"    del capabilities[\u0027swift\u0027]"},{"line_number":1161,"context_line":"    _print_compo_cap(\u0027Additional middleware\u0027, capabilities)"},{"line_number":1162,"context_line":""}],"source_content_type":"text/x-swift","patch_set":3,"id":"AAAAUH%2F%2FKIg%3D","line":1159,"updated":"2014-01-16 21:36:05.000000000","message":"Iterating over a dictionary to find a particular key? Maybe just\n\n    capabilities.get(\u0027swift\u0027, {})\n\ninstead.","commit_id":"4d48ac526f05af47d47de5a1a00425f243e5109c"},{"author":{"_account_id":7020,"name":"Joe Hakim Rahme","email":"jhakimra@redhat.com","username":"rahmu"},"change_message_id":"5038baf821921bf9df97b993c3ff01ed26457fa4","unresolved":false,"context_lines":[{"line_number":1135,"context_line":""},{"line_number":1136,"context_line":""},{"line_number":1137,"context_line":"def st_capabilities(parser, args, thread_manager):"},{"line_number":1138,"context_line":"    def _print_compo_cap(name, capabilities):"},{"line_number":1139,"context_line":"        for feature, options in sorted(capabilities.items(),"},{"line_number":1140,"context_line":"                                       key\u003dlambda x: x[0]):"},{"line_number":1141,"context_line":"            thread_manager.print_msg(\"%s: %s\" % (name, feature))"}],"source_content_type":"text/x-swift","patch_set":4,"id":"AAAAUH%2F%2B1BE%3D","line":1138,"updated":"2014-01-21 17:00:07.000000000","message":"(very minor nitpick) can we choose a slightly more descriptive name for this function? Something along the lines of _print_component_capabilities(...)?\n\nI believe it makes the code easier to read.","commit_id":"533c9c5ba14581ac06b31f82531f9c749d489868"},{"author":{"_account_id":866,"name":"Chmouel Boudjnah","email":"chmouel@chmouel.com","username":"chmouel"},"change_message_id":"25783733ba8572e18a8c842ca63549deeb4112c0","unresolved":false,"context_lines":[{"line_number":1143,"context_line":"                thread_manager.print_msg(\" Options:\")"},{"line_number":1144,"context_line":"                for key, value in sorted(options.items(),"},{"line_number":1145,"context_line":"                                         key\u003dlambda x: x[0]):"},{"line_number":1146,"context_line":"                    thread_manager.print_msg(\"  %s: %s\" % (key, value))"},{"line_number":1147,"context_line":"    (options, args) \u003d parse_args(parser, args)"},{"line_number":1148,"context_line":"    if (args and len(args) \u003e 2):"},{"line_number":1149,"context_line":"        thread_manager.error(\u0027Usage: %s capabilities %s\\n%s\u0027,"}],"source_content_type":"text/x-swift","patch_set":4,"id":"AAAAUH%2F9%2Fkg%3D","line":1146,"updated":"2014-01-31 08:42:04.000000000","message":"I think that would fail with unicode but i guess options are not supposed to have unicodes","commit_id":"533c9c5ba14581ac06b31f82531f9c749d489868"}],"tests/test_swiftclient.py":[{"author":{"_account_id":866,"name":"Chmouel Boudjnah","email":"chmouel@chmouel.com","username":"chmouel"},"change_message_id":"25783733ba8572e18a8c842ca63549deeb4112c0","unresolved":false,"context_lines":[{"line_number":719,"context_line":""},{"line_number":720,"context_line":"    def test_get_capabilities(self):"},{"line_number":721,"context_line":"        conn \u003d c.Connection()"},{"line_number":722,"context_line":"        with mock.patch(\u0027swiftclient.client.get_capabilities\u0027) as get_cap:"},{"line_number":723,"context_line":"            conn.get_capabilities(\u0027http://storage2.test.com\u0027)"},{"line_number":724,"context_line":"            parsed \u003d get_cap.call_args[0][0][0]"},{"line_number":725,"context_line":"            self.assertEqual(parsed.path, \u0027/info\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F9%2Fjg%3D","line":722,"updated":"2014-01-31 08:42:04.000000000","message":"I prefer mock.patch decorator instead of a large with but that\u0027s probably just me (and every other tests is using the same idiom)","commit_id":"533c9c5ba14581ac06b31f82531f9c749d489868"}]}
