)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":866,"name":"Chmouel Boudjnah","email":"chmouel@chmouel.com","username":"chmouel"},"change_message_id":"796588b010971fa7e468cca9c931c9f2517a80c5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"Parent:     9b73547b (Merge \"Install manpage in share/man/man1 instead of man/man1\")"},{"line_number":2,"context_line":"Author:     Christian Schwede \u003cchristian.schwede@enovance.com\u003e"},{"line_number":3,"context_line":"AuthorDate: 2014-01-08 14:03:11 +0000"},{"line_number":4,"context_line":"Commit:     vagrant \u003cchristian.schwede@enovance.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-02-04 13:36:49 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add option to skip downloading/uploading identical files"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"AAAAUX%2F%2Ft4M%3D","line":4,"updated":"2014-02-11 09:07:05.000000000","message":"your new robot name?","commit_id":"f0fab6acfd1f5fa8fae7bb241dec2cbeafa5fe6b"}],"bin/swift":[{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"80b48f69b19cf6194028fda9d5f7d9f1c0590d30","unresolved":false,"context_lines":[{"line_number":356,"context_line":"                    pass"},{"line_number":357,"context_line":"                else:"},{"line_number":358,"context_line":"                    with fp:"},{"line_number":359,"context_line":"                        file_md5 \u003d md5(fp.read()).hexdigest()"},{"line_number":360,"context_line":"                        if file_md5 \u003d\u003d etag:"},{"line_number":361,"context_line":"                            thread_manager.print_msg("},{"line_number":362,"context_line":"                                \u0027Skipped %s: file not changed\u0027, path)"}],"source_content_type":"text/x-swift","patch_set":1,"id":"AAAAUH%2F%2FkDk%3D","line":359,"updated":"2014-01-11 03:17:42.000000000","message":"Do I read this correctly that you read the whole file into memory? Even with modern desktops this may be undesirable. Not to mention may not actually work just because of maximum read size in Python library.","commit_id":"07c794f89906d79c7f263b5d3f2e41091ac32e4a"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"020af34bc8820b795348222731b1482413c759e8","unresolved":false,"context_lines":[{"line_number":356,"context_line":"                    pass"},{"line_number":357,"context_line":"                else:"},{"line_number":358,"context_line":"                    with fp:"},{"line_number":359,"context_line":"                        file_md5 \u003d md5(fp.read()).hexdigest()"},{"line_number":360,"context_line":"                        if file_md5 \u003d\u003d etag:"},{"line_number":361,"context_line":"                            thread_manager.print_msg("},{"line_number":362,"context_line":"                                \u0027Skipped %s: file not changed\u0027, path)"}],"source_content_type":"text/x-swift","patch_set":1,"id":"AAAAUH%2F%2Fi%2F4%3D","line":359,"in_reply_to":"AAAAUH%2F%2FkDk%3D","updated":"2014-01-11 21:06:35.000000000","message":"I should have known better, I fixed this by reading the file in chunks.","commit_id":"07c794f89906d79c7f263b5d3f2e41091ac32e4a"},{"author":{"_account_id":866,"name":"Chmouel Boudjnah","email":"chmouel@chmouel.com","username":"chmouel"},"change_message_id":"387e3da5b2d162de01ca484abf15c1f3f6af4277","unresolved":false,"context_lines":[{"line_number":271,"context_line":"                        Adds a customized request header to the query, like"},{"line_number":272,"context_line":"                        \"Range\" or \"If-Match\". This argument is repeatable."},{"line_number":273,"context_line":"                        Example --header \"content-type:text/plain\""},{"line_number":274,"context_line":"  --changed-md5         Skip downloading files that are identical on both sides"},{"line_number":275,"context_line":"\u0027\u0027\u0027.strip(\"\\n\")"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":""}],"source_content_type":"text/x-swift","patch_set":5,"id":"AAAAUH%2F9%2FmE%3D","line":274,"updated":"2014-01-31 08:29:52.000000000","message":"changed-md5 does not seem too natural for me to explain that feature what  about --skip-changed or --skip-identical ?","commit_id":"7e1470ba3de8e560444e60f80603e9a287ea6685"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"231734631a128c2f841a372b37ac56d1460fe9f7","unresolved":false,"context_lines":[{"line_number":271,"context_line":"                        Adds a customized request header to the query, like"},{"line_number":272,"context_line":"                        \"Range\" or \"If-Match\". This argument is repeatable."},{"line_number":273,"context_line":"                        Example --header \"content-type:text/plain\""},{"line_number":274,"context_line":"  --changed-md5         Skip downloading files that are identical on both sides"},{"line_number":275,"context_line":"\u0027\u0027\u0027.strip(\"\\n\")"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":""}],"source_content_type":"text/x-swift","patch_set":5,"id":"AAAAUH%2F99i0%3D","line":274,"in_reply_to":"AAAAUH%2F9%2FmE%3D","updated":"2014-02-04 13:38:36.000000000","message":"skip-identical sounds good to me, I changed this.","commit_id":"7e1470ba3de8e560444e60f80603e9a287ea6685"},{"author":{"_account_id":866,"name":"Chmouel Boudjnah","email":"chmouel@chmouel.com","username":"chmouel"},"change_message_id":"387e3da5b2d162de01ca484abf15c1f3f6af4277","unresolved":false,"context_lines":[{"line_number":332,"context_line":"        else:"},{"line_number":333,"context_line":"            raise Exception(\"Invalid queue_arg length of %s\" % len(queue_arg))"},{"line_number":334,"context_line":"        path \u003d options.yes_all and join(container, obj) or obj"},{"line_number":335,"context_line":"        if path[:1] in (\u0027/\u0027, \u0027\\\\\u0027):"},{"line_number":336,"context_line":"            path \u003d path[1:]"},{"line_number":337,"context_line":"        if options.changed_md5 and out_file !\u003d \u0027-\u0027:"},{"line_number":338,"context_line":"            filename \u003d out_file if out_file else path"}],"source_content_type":"text/x-swift","patch_set":5,"id":"AAAAUH%2F9%2Fl4%3D","line":335,"updated":"2014-01-31 08:29:52.000000000","message":"what about path[:1] \u003d\u003d os.path.sep ?","commit_id":"7e1470ba3de8e560444e60f80603e9a287ea6685"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"231734631a128c2f841a372b37ac56d1460fe9f7","unresolved":false,"context_lines":[{"line_number":332,"context_line":"        else:"},{"line_number":333,"context_line":"            raise Exception(\"Invalid queue_arg length of %s\" % len(queue_arg))"},{"line_number":334,"context_line":"        path \u003d options.yes_all and join(container, obj) or obj"},{"line_number":335,"context_line":"        if path[:1] in (\u0027/\u0027, \u0027\\\\\u0027):"},{"line_number":336,"context_line":"            path \u003d path[1:]"},{"line_number":337,"context_line":"        if options.changed_md5 and out_file !\u003d \u0027-\u0027:"},{"line_number":338,"context_line":"            filename \u003d out_file if out_file else path"}],"source_content_type":"text/x-swift","patch_set":5,"id":"AAAAUH%2F9vn4%3D","line":335,"in_reply_to":"AAAAUH%2F9%2Fl4%3D","updated":"2014-02-04 13:38:36.000000000","message":"Done","commit_id":"7e1470ba3de8e560444e60f80603e9a287ea6685"},{"author":{"_account_id":866,"name":"Chmouel Boudjnah","email":"chmouel@chmouel.com","username":"chmouel"},"change_message_id":"387e3da5b2d162de01ca484abf15c1f3f6af4277","unresolved":false,"context_lines":[{"line_number":339,"context_line":"            try:"},{"line_number":340,"context_line":"                fp \u003d open(filename, \u0027rb\u0027)"},{"line_number":341,"context_line":"            except IOError:"},{"line_number":342,"context_line":"                pass"},{"line_number":343,"context_line":"            else:"},{"line_number":344,"context_line":"                with fp:"},{"line_number":345,"context_line":"                    md5sum \u003d md5()"}],"source_content_type":"text/x-swift","patch_set":5,"id":"AAAAUH%2F9%2Flw%3D","line":342,"updated":"2014-01-31 08:29:52.000000000","message":"current on IOError swiftclient raise on uploads, maybe we can raises here as well? since we will anyway do that after, right?","commit_id":"7e1470ba3de8e560444e60f80603e9a287ea6685"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"231734631a128c2f841a372b37ac56d1460fe9f7","unresolved":false,"context_lines":[{"line_number":339,"context_line":"            try:"},{"line_number":340,"context_line":"                fp \u003d open(filename, \u0027rb\u0027)"},{"line_number":341,"context_line":"            except IOError:"},{"line_number":342,"context_line":"                pass"},{"line_number":343,"context_line":"            else:"},{"line_number":344,"context_line":"                with fp:"},{"line_number":345,"context_line":"                    md5sum \u003d md5()"}],"source_content_type":"text/x-swift","patch_set":5,"id":"AAAAUH%2F9vnw%3D","line":342,"in_reply_to":"AAAAUH%2F9%2Flw%3D","updated":"2014-02-04 13:38:36.000000000","message":"If IOError is raised here it is most likely because the file does not exist yet, thus we need to catch this and continue the download.","commit_id":"7e1470ba3de8e560444e60f80603e9a287ea6685"}]}
