)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"9e792709133640af8cd52d076f15accc724c436a","unresolved":false,"context_lines":[{"line_number":10,"context_line":"comments header. This helps when comparing generated configuration files"},{"line_number":11,"context_line":"over time that include several common namespaces."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"e.g. Show # From oslo.log 2.3.0"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I220021c858d98b0cbd18c53271bc8e9e2f167211"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"dae33548_87524133","line":13,"updated":"2016-02-18 15:50:02.000000000","message":"I think it would be nicer to say\n\n # From oslo.log (2.3.0 version)\n\nPeople seeing \"2.3.0\" might not realize at first that it\u0027s a version #.","commit_id":"4c32bba0d94ebc72bcbdddeea4f3002e1fb05d07"}],"oslo_config/generator.py":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"ef582c4b10d0e717a2141578ed27edaad1aef5dc","unresolved":false,"context_lines":[{"line_number":278,"context_line":"        names\u003dnamespaces,"},{"line_number":279,"context_line":"        on_load_failure_callback\u003don_load_failure_callback,"},{"line_number":280,"context_line":"        invoke_on_load\u003dTrue)"},{"line_number":281,"context_line":"    opts \u003d [(ep.name, ep.obj) for ep in mgr]"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"    return _cleanup_opts(opts)"},{"line_number":284,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7a5de9d1_a24ea738","line":281,"updated":"2016-02-01 21:53:43.000000000","message":"The Extension object returned by iterating over the manager has an entry_point attribute that has information about what was actually loaded to get the list_opts function. The entry point has a dist argument that is a pkg_resources.Distribution, which has a version property that is the known version of the thing that was actually loaded.\n\nIf we use that info, we will always have a version for every set of options, and we won\u0027t have to worry about whether the name bound to list_opts matches the dist name. How much would have to change if we returned the version in the tuple with ep.name and ep.obj?","commit_id":"b3c19c0637e2e61aec0b87599be7ac27770eb1a5"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"80532bcbdbc1053388f1483aefffdf50dd2f34af","unresolved":false,"context_lines":[{"line_number":278,"context_line":"        names\u003dnamespaces,"},{"line_number":279,"context_line":"        on_load_failure_callback\u003don_load_failure_callback,"},{"line_number":280,"context_line":"        invoke_on_load\u003dTrue)"},{"line_number":281,"context_line":"    opts \u003d [(ep.name, ep.obj) for ep in mgr]"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"    return _cleanup_opts(opts)"},{"line_number":284,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7a5de9d1_b9a9c726","line":281,"in_reply_to":"7a5de9d1_1da7e00b","updated":"2016-02-02 19:58:02.000000000","message":"This turned out to be more work than expected, so we agreed it can happen in a later patch.","commit_id":"b3c19c0637e2e61aec0b87599be7ac27770eb1a5"},{"author":{"_account_id":16051,"name":"Ronald Bradford","email":"ronald.bradford@gmail.com","username":"ronaldbradford"},"change_message_id":"a0c4f928342bfd589b59260244650f1cbdf5b40d","unresolved":false,"context_lines":[{"line_number":278,"context_line":"        names\u003dnamespaces,"},{"line_number":279,"context_line":"        on_load_failure_callback\u003don_load_failure_callback,"},{"line_number":280,"context_line":"        invoke_on_load\u003dTrue)"},{"line_number":281,"context_line":"    opts \u003d [(ep.name, ep.obj) for ep in mgr]"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"    return _cleanup_opts(opts)"},{"line_number":284,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7a5de9d1_1da7e00b","line":281,"in_reply_to":"7a5de9d1_a24ea738","updated":"2016-02-01 22:16:01.000000000","message":"This is much nicer.","commit_id":"b3c19c0637e2e61aec0b87599be7ac27770eb1a5"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"ef582c4b10d0e717a2141578ed27edaad1aef5dc","unresolved":false,"context_lines":[{"line_number":288,"context_line":""},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"def _get_namespace_description(namespace):"},{"line_number":291,"context_line":"    description \u003d \"%s\" % namespace"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"    try:"},{"line_number":294,"context_line":"        version \u003d pkg_resources.get_distribution(namespace).version"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a5de9d1_226157a9","line":291,"updated":"2016-02-01 21:53:43.000000000","message":"namespace should already be a string, so we don\u0027t need to do this formatting.","commit_id":"b3c19c0637e2e61aec0b87599be7ac27770eb1a5"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"ef582c4b10d0e717a2141578ed27edaad1aef5dc","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        version \u003d pkg_resources.get_distribution(namespace).version"},{"line_number":295,"context_line":"        description \u003d \"%s %s\" % (namespace, version)"},{"line_number":296,"context_line":"    except pkg_resources.DistributionNotFound:"},{"line_number":297,"context_line":"        version \u003d \"\""},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"    return description"},{"line_number":300,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7a5de9d1_c2708374","line":297,"updated":"2016-02-01 21:53:43.000000000","message":"This copy of version is not used.","commit_id":"b3c19c0637e2e61aec0b87599be7ac27770eb1a5"}],"oslo_config/tests/test_generator.py":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"5cd0be97f291faaceefef05f2a18a563877ef4cf","unresolved":false,"context_lines":[{"line_number":900,"context_line":"        ns \u003d \"namespace1\""},{"line_number":901,"context_line":"        version \u003d \"9.9.9\""},{"line_number":902,"context_line":"        e \u003d \"%s %s\" % (ns, version)"},{"line_number":903,"context_line":"        self.assertEqual(e, generator._get_namespace_description(ns))"},{"line_number":904,"context_line":""},{"line_number":905,"context_line":"    def test_output_opts_empty_default(self):"},{"line_number":906,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3a57f1b5_03260815","line":903,"updated":"2016-02-11 17:56:57.000000000","message":"This test is only verifying that the mock you\u0027ve provided returns the thing you expect. I think you want to mock pkg_resources somehow instead of _get_namespace_description().","commit_id":"0e4eb5baceb41d3c3b35a1b344dc1c794d444a6d"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"d7dd1b4e6c8e6cbfdbb96639f3e85ea6af026f44","unresolved":false,"context_lines":[{"line_number":900,"context_line":"        ns \u003d \"namespace1\""},{"line_number":901,"context_line":"        version \u003d \"9.9.9\""},{"line_number":902,"context_line":"        e \u003d \"%s %s\" % (ns, version)"},{"line_number":903,"context_line":"        self.assertEqual(e, generator._get_namespace_description(ns))"},{"line_number":904,"context_line":""},{"line_number":905,"context_line":"    def test_output_opts_empty_default(self):"},{"line_number":906,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"dae33548_70f94b80","line":903,"in_reply_to":"3a57f1b5_03260815","updated":"2016-02-16 12:35:24.000000000","message":"yes, you should mock pkg_resources.get_distribution","commit_id":"0e4eb5baceb41d3c3b35a1b344dc1c794d444a6d"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"d7dd1b4e6c8e6cbfdbb96639f3e85ea6af026f44","unresolved":false,"context_lines":[{"line_number":947,"context_line":"            return namespace + \" 9.9.9\""},{"line_number":948,"context_line":"        return namespace"},{"line_number":949,"context_line":""},{"line_number":950,"context_line":"    @mock.patch(\u0027oslo_config.generator._get_namespace_description\u0027,"},{"line_number":951,"context_line":"                fake_namespace_description)"},{"line_number":952,"context_line":"    def test_output_opts_group_with_version(self):"},{"line_number":953,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"dae33548_d07c97ed","line":950,"range":{"start_line":950,"start_character":65,"end_line":950,"end_character":67},"updated":"2016-02-16 12:35:24.000000000","message":"ditto","commit_id":"0e4eb5baceb41d3c3b35a1b344dc1c794d444a6d"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"30934ded2ccfd75daff8af16bdd4efb8ee73070c","unresolved":false,"context_lines":[{"line_number":937,"context_line":"        fd, tmp_file \u003d tempfile.mkstemp()"},{"line_number":938,"context_line":"        f \u003d open(tmp_file, \u0027w+\u0027)"},{"line_number":939,"context_line":"        formatter \u003d generator._OptFormatter(output_file\u003df)"},{"line_number":940,"context_line":"        expected \u003d textwrap.dedent(\u0027\u0027\u0027[DEFAULT]"},{"line_number":941,"context_line":"        \u0027\u0027\u0027).lstrip()"},{"line_number":942,"context_line":""},{"line_number":943,"context_line":"        generator._output_opts(formatter, \u0027DEFAULT\u0027, groups.pop(\u0027DEFAULT\u0027))"}],"source_content_type":"text/x-python","patch_set":5,"id":"dae33548_f7c24833","line":940,"updated":"2016-02-17 03:16:49.000000000","message":"I like this, but this is an unrelated change.  Should probably have a separate patch to apply this throughout the file.","commit_id":"189d03d57702757d411d1aa9fc6d5455a6126317"},{"author":{"_account_id":16051,"name":"Ronald Bradford","email":"ronald.bradford@gmail.com","username":"ronaldbradford"},"change_message_id":"531700bc3dc9ad314427ceebb703d5feb9fcadbc","unresolved":false,"context_lines":[{"line_number":937,"context_line":"        fd, tmp_file \u003d tempfile.mkstemp()"},{"line_number":938,"context_line":"        f \u003d open(tmp_file, \u0027w+\u0027)"},{"line_number":939,"context_line":"        formatter \u003d generator._OptFormatter(output_file\u003df)"},{"line_number":940,"context_line":"        expected \u003d textwrap.dedent(\u0027\u0027\u0027[DEFAULT]"},{"line_number":941,"context_line":"        \u0027\u0027\u0027).lstrip()"},{"line_number":942,"context_line":""},{"line_number":943,"context_line":"        generator._output_opts(formatter, \u0027DEFAULT\u0027, groups.pop(\u0027DEFAULT\u0027))"}],"source_content_type":"text/x-python","patch_set":5,"id":"dae33548_40d33f04","line":940,"in_reply_to":"dae33548_f7c24833","updated":"2016-02-17 17:34:11.000000000","message":"Yep, I guess when fixing my code I mistook a few spots. I\u0027ll revert these unrelated sections.","commit_id":"189d03d57702757d411d1aa9fc6d5455a6126317"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"30934ded2ccfd75daff8af16bdd4efb8ee73070c","unresolved":false,"context_lines":[{"line_number":954,"context_line":"        fd, tmp_file \u003d tempfile.mkstemp()"},{"line_number":955,"context_line":"        f \u003d open(tmp_file, \u0027w+\u0027)"},{"line_number":956,"context_line":"        formatter \u003d generator._OptFormatter(output_file\u003df)"},{"line_number":957,"context_line":"        expected \u003d textwrap.dedent(\u0027\u0027\u0027"},{"line_number":958,"context_line":"        [alpha]"},{"line_number":959,"context_line":""},{"line_number":960,"context_line":"        #"}],"source_content_type":"text/x-python","patch_set":5,"id":"dae33548_57ea14ad","line":957,"updated":"2016-02-17 03:16:49.000000000","message":"Also unrelated to this patchset.","commit_id":"189d03d57702757d411d1aa9fc6d5455a6126317"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"30934ded2ccfd75daff8af16bdd4efb8ee73070c","unresolved":false,"context_lines":[{"line_number":993,"context_line":"        # foo option (string value)"},{"line_number":994,"context_line":"        #foo \u003d fred"},{"line_number":995,"context_line":"        \u0027\u0027\u0027).lstrip()"},{"line_number":996,"context_line":"        f \u003d open(tmp_file, \u0027w+\u0027)"},{"line_number":997,"context_line":"        formatter \u003d generator._OptFormatter(output_file\u003df)"},{"line_number":998,"context_line":"        generator._output_opts(formatter, \u0027alpha\u0027, groups.pop(\u0027alpha\u0027))"},{"line_number":999,"context_line":"        f.close()"}],"source_content_type":"text/x-python","patch_set":5,"id":"dae33548_b728c0e3","line":996,"range":{"start_line":996,"start_character":8,"end_line":996,"end_character":32},"updated":"2016-02-17 03:16:49.000000000","message":"Can\u0027t a \u0027with\u0027 context be used here to avoid the need for f.close()","commit_id":"189d03d57702757d411d1aa9fc6d5455a6126317"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"30934ded2ccfd75daff8af16bdd4efb8ee73070c","unresolved":false,"context_lines":[{"line_number":997,"context_line":"        formatter \u003d generator._OptFormatter(output_file\u003df)"},{"line_number":998,"context_line":"        generator._output_opts(formatter, \u0027alpha\u0027, groups.pop(\u0027alpha\u0027))"},{"line_number":999,"context_line":"        f.close()"},{"line_number":1000,"context_line":"        actual \u003d open(tmp_file).read()"},{"line_number":1001,"context_line":"        self.assertEqual(expected, actual)"},{"line_number":1002,"context_line":""},{"line_number":1003,"context_line":"        expected \u003d textwrap.dedent(\u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"dae33548_f71ec8b9","line":1000,"range":{"start_line":1000,"start_character":17,"end_line":1000,"end_character":21},"updated":"2016-02-17 03:16:49.000000000","message":"This file is never closed apparently.","commit_id":"189d03d57702757d411d1aa9fc6d5455a6126317"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"57414d38e5930d905f3ae87380c997f0092c0e5d","unresolved":false,"context_lines":[{"line_number":939,"context_line":"        formatter \u003d generator._OptFormatter(output_file\u003df)"},{"line_number":940,"context_line":"        expected \u003d \u0027\u0027\u0027[DEFAULT]"},{"line_number":941,"context_line":"\u0027\u0027\u0027"},{"line_number":942,"context_line":""},{"line_number":943,"context_line":"        generator._output_opts(formatter, \u0027DEFAULT\u0027, groups.pop(\u0027DEFAULT\u0027))"},{"line_number":944,"context_line":"        f.close()"},{"line_number":945,"context_line":"        content \u003d open(tmp_file).read()"}],"source_content_type":"text/x-python","patch_set":6,"id":"dae33548_4eda40e9","line":942,"updated":"2016-02-17 23:25:09.000000000","message":"Please undo","commit_id":"4c32bba0d94ebc72bcbdddeea4f3002e1fb05d07"},{"author":{"_account_id":16051,"name":"Ronald Bradford","email":"ronald.bradford@gmail.com","username":"ronaldbradford"},"change_message_id":"53d8ccc468e6a117c2a10a835e817be30278a009","unresolved":false,"context_lines":[{"line_number":939,"context_line":"        formatter \u003d generator._OptFormatter(output_file\u003df)"},{"line_number":940,"context_line":"        expected \u003d \u0027\u0027\u0027[DEFAULT]"},{"line_number":941,"context_line":"\u0027\u0027\u0027"},{"line_number":942,"context_line":""},{"line_number":943,"context_line":"        generator._output_opts(formatter, \u0027DEFAULT\u0027, groups.pop(\u0027DEFAULT\u0027))"},{"line_number":944,"context_line":"        f.close()"},{"line_number":945,"context_line":"        content \u003d open(tmp_file).read()"}],"source_content_type":"text/x-python","patch_set":6,"id":"dae33548_bfe1532c","line":942,"in_reply_to":"dae33548_4eda40e9","updated":"2016-02-18 14:33:58.000000000","message":"I will remove blank line in subsequent update when I cleanup file handling in other tests.","commit_id":"4c32bba0d94ebc72bcbdddeea4f3002e1fb05d07"}]}
