)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"32c6a673f44aea3b108d49b167cd41d185139dba","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2015-07-10 01:44:33 -0700"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add API for introspecting OVAs"},{"line_number":8,"context_line":"repair commend issue"},{"line_number":9,"context_line":"This change adds ova.py and test_ova.py (corresponding unit tests)"},{"line_number":10,"context_line":"to oslo/vmware and tests/ respectively."},{"line_number":11,"context_line":"ova.py has a class API which has the following method introspecting"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"da20952f_0696c9ef","line":8,"updated":"2015-09-05 07:14:17.000000000","message":"Please see https://wiki.openstack.org/wiki/GitCommitMessages\n\nThere should be blank line after the title.  No tabs and fixed width.","commit_id":"705d3b9fd46e258295e4bdd2151ec9653fac19e4"}],"oslo/vmware/ova.py":[{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"182f28ee39f51f33dc8fcb61a03d685984a7e86e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2014 VMware, Inc."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_26201c49","line":1,"updated":"2015-03-04 19:48:48.000000000","message":"Should be 2015 at this point, although looks like the patch did start in 2014","commit_id":"e4aa0f4b881fd8bbdb8fee4ac86304c23838d88b"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"cdc4c7e3a5561620b6e540f94b2f55fbc6b28032","unresolved":false,"context_lines":[{"line_number":21,"context_line":"TAR_BLOCK_SIZE \u003d tarfile.BLOCKSIZE  # 512 bytes"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class API(object):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def get_ovf_and_root_vmdk(self, ova):"},{"line_number":27,"context_line":"        \"\"\"Return OVF and root VMDK files"}],"source_content_type":"text/x-python","patch_set":3,"id":"7ac7a964_cdecad92","line":24,"updated":"2014-08-15 08:18:02.000000000","message":"Can we have a different name for this class?","commit_id":"e4aa0f4b881fd8bbdb8fee4ac86304c23838d88b"},{"author":{"_account_id":10839,"name":"Masaru Nomura","email":"massa.nomura@gmail.com","username":"massa"},"change_message_id":"d847203c41aac27ca37d5f08411faf86abb1e8b4","unresolved":false,"context_lines":[{"line_number":21,"context_line":"TAR_BLOCK_SIZE \u003d tarfile.BLOCKSIZE  # 512 bytes"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class API(object):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def get_ovf_and_root_vmdk(self, ova):"},{"line_number":27,"context_line":"        \"\"\"Return OVF and root VMDK files"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_3d81f88f","line":24,"in_reply_to":"1abeadc6_c25825fd","updated":"2014-08-18 13:39:05.000000000","message":"+1. I agree!","commit_id":"e4aa0f4b881fd8bbdb8fee4ac86304c23838d88b"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"d36237bc99df9215fe563d67b4aa864ed5607918","unresolved":false,"context_lines":[{"line_number":21,"context_line":"TAR_BLOCK_SIZE \u003d tarfile.BLOCKSIZE  # 512 bytes"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class API(object):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def get_ovf_and_root_vmdk(self, ova):"},{"line_number":27,"context_line":"        \"\"\"Return OVF and root VMDK files"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_c25825fd","line":24,"in_reply_to":"7ac7a964_068cb47e","updated":"2014-08-18 12:57:12.000000000","message":"What about OvaReader?","commit_id":"e4aa0f4b881fd8bbdb8fee4ac86304c23838d88b"},{"author":{"_account_id":10839,"name":"Masaru Nomura","email":"massa.nomura@gmail.com","username":"massa"},"change_message_id":"27d83b59b8d4eb863a139589cbc20a0c37c79be8","unresolved":false,"context_lines":[{"line_number":21,"context_line":"TAR_BLOCK_SIZE \u003d tarfile.BLOCKSIZE  # 512 bytes"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class API(object):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def get_ovf_and_root_vmdk(self, ova):"},{"line_number":27,"context_line":"        \"\"\"Return OVF and root VMDK files"}],"source_content_type":"text/x-python","patch_set":3,"id":"7ac7a964_068cb47e","line":24,"in_reply_to":"7ac7a964_cdecad92","updated":"2014-08-15 16:11:37.000000000","message":"What do you think about \u0027IntrospectionOVA\u0027 or \u0027OVAIntrospection\u0027 ?","commit_id":"e4aa0f4b881fd8bbdb8fee4ac86304c23838d88b"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"ddb60d0996106090acfe11a5df1ee11fbfdaf50b","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                offset \u003d TAR_BLOCK_SIZE - (file_size % TAR_BLOCK_SIZE)"},{"line_number":50,"context_line":"            return offset"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        chunk_size \u003d TAR_BLOCK_SIZE * 2 * 2048  # 2 Mib if block size is 512 B"},{"line_number":53,"context_line":"        ret_data \u003d {\u0027ovf\u0027: None, \u0027vmdk\u0027: None}"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        with contextlib.closing(urllib2.urlopen(ova)) as ova_file:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_abfeaf69","line":52,"updated":"2014-08-18 08:53:54.000000000","message":"Can this also be defined above as a define?","commit_id":"e4aa0f4b881fd8bbdb8fee4ac86304c23838d88b"},{"author":{"_account_id":10839,"name":"Masaru Nomura","email":"massa.nomura@gmail.com","username":"massa"},"change_message_id":"d847203c41aac27ca37d5f08411faf86abb1e8b4","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                offset \u003d TAR_BLOCK_SIZE - (file_size % TAR_BLOCK_SIZE)"},{"line_number":50,"context_line":"            return offset"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        chunk_size \u003d TAR_BLOCK_SIZE * 2 * 2048  # 2 Mib if block size is 512 B"},{"line_number":53,"context_line":"        ret_data \u003d {\u0027ovf\u0027: None, \u0027vmdk\u0027: None}"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        with contextlib.closing(urllib2.urlopen(ova)) as ova_file:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_9d1dac76","line":52,"in_reply_to":"1abeadc6_abfeaf69","updated":"2014-08-18 13:39:05.000000000","message":"Yes, I think it\u0027s a good idea. So, I might define it as CHUNK_SIZE \u003d TAR_BLOCK_SIZE * 2 * 2048 at the top of this python file.","commit_id":"e4aa0f4b881fd8bbdb8fee4ac86304c23838d88b"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"182f28ee39f51f33dc8fcb61a03d685984a7e86e","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"                    if file_format \u003d\u003d \u0027ovf\u0027:"},{"line_number":89,"context_line":"                        found_ovf \u003d True"},{"line_number":90,"context_line":"                    if file_format \u003d\u003d \u0027vmdk\u0027:"},{"line_number":91,"context_line":"                        found_root_vmdk \u003d True"},{"line_number":92,"context_line":"                else:"},{"line_number":93,"context_line":"                    while file_size \u003e chunk_size:"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_26957c40","line":90,"updated":"2015-03-04 19:48:48.000000000","message":"elif file_format \u003d\u003d \u0027vmdk\u0027","commit_id":"e4aa0f4b881fd8bbdb8fee4ac86304c23838d88b"}],"tests/test_ova.py":[{"author":{"_account_id":5638,"name":"Davanum Srinivas","email":"davanum@gmail.com","username":"dims-v"},"change_message_id":"739b25136ded69ab059bc7758c723bbaffc44d7b","unresolved":false,"context_lines":[{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import contextlib"},{"line_number":21,"context_line":"import mock"},{"line_number":22,"context_line":"import tarfile"},{"line_number":23,"context_line":"import tempfile"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_af11eab0","line":21,"updated":"2014-07-24 16:58:19.000000000","message":"Hi,\n\nYou should have 3 groups of imports, first one is the python standard library, the second one is the list of 3rd party libraries and the last is the set of imports from the project itself. Example:\n\n  import contextlib\n  import tarfile\n  import tempfile\n\n  import mock\n\n  from oslo.vmware import ova\n  from tests import base\n\nSee more details here - http://docs.openstack.org/developer/hacking/","commit_id":"3751dc2e6300d8d5e83210b7535f217cd44d84f4"},{"author":{"_account_id":10839,"name":"Masaru Nomura","email":"massa.nomura@gmail.com","username":"massa"},"change_message_id":"11358f6edfc46c108558ab0827589ec610efbe92","unresolved":false,"context_lines":[{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import contextlib"},{"line_number":21,"context_line":"import mock"},{"line_number":22,"context_line":"import tarfile"},{"line_number":23,"context_line":"import tempfile"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_450f4d2e","line":21,"in_reply_to":"baada198_af11eab0","updated":"2014-07-24 17:30:56.000000000","message":"Fixed! Thank you for your detailed explanation!","commit_id":"3751dc2e6300d8d5e83210b7535f217cd44d84f4"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"182f28ee39f51f33dc8fcb61a03d685984a7e86e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2014 VMware, Inc."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_a6888c23","line":1,"updated":"2015-03-04 19:48:48.000000000","message":"2015","commit_id":"e4aa0f4b881fd8bbdb8fee4ac86304c23838d88b"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"182f28ee39f51f33dc8fcb61a03d685984a7e86e","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    def test_get_ovf_and_root_vmdk(self, fake_urllib2):"},{"line_number":35,"context_line":"        fake_url \u003d \u0027https://*/fake.ova\u0027"},{"line_number":36,"context_line":"        test_data \u003d self.get_ova_content()"},{"line_number":37,"context_line":"        ret_data \u003d None"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        with contextlib.nested("},{"line_number":40,"context_line":"                tempfile.NamedTemporaryFile(),"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_69c4a540","line":37,"updated":"2015-03-04 19:48:48.000000000","message":"Doesn\u0027t appear you need this line.  Isn\u0027t it always set below.","commit_id":"e4aa0f4b881fd8bbdb8fee4ac86304c23838d88b"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"182f28ee39f51f33dc8fcb61a03d685984a7e86e","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        for key in ret_data.keys():"},{"line_number":67,"context_line":"            ret_value \u003d ret_data[key]"},{"line_number":68,"context_line":"            exp_value \u003d test_data[key]"},{"line_number":69,"context_line":"            self.assertEqual(ret_value, exp_value)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def get_ova_content(self):"},{"line_number":72,"context_line":"        return {\u0027ovf\u0027: \u0027fake_ovf\u0027, \u0027vmdk\u0027: \u0027fake_vmdk\u0027}"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_29d1cdfb","line":69,"updated":"2015-03-04 19:48:48.000000000","message":"asserts should be (expected, actual)","commit_id":"e4aa0f4b881fd8bbdb8fee4ac86304c23838d88b"}]}
