)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":308,"name":"Thierry Carrez","email":"thierry@openstack.org","username":"ttx"},"change_message_id":"167dc35963a3a52154f5e0a1e3fa55b54f2d250e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"e28abd30_e70d49fa","updated":"2022-07-21 08:34:44.000000000","message":"Nice and simple","commit_id":"aae5632aa19242bdd5e5abc2d919cdcb0b1b9e15"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"426fdd2ebb51c5ec1a55ad8e64b18f4015a3a0fd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"a3a72a8a_46585116","updated":"2022-07-19 13:52:14.000000000","message":"Nice, thanks!","commit_id":"aae5632aa19242bdd5e5abc2d919cdcb0b1b9e15"}],"reno/loader.py":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"cd000a882905c87d424d00bc6225719b19d89d35","unresolved":true,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        self._load_data()"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def _load_data(self):"},{"line_number":65,"context_line":"        if not self._ignore_cache:"},{"line_number":66,"context_line":"            if os.path.exists(self._cache_filename):"},{"line_number":67,"context_line":"                LOG.debug(\u0027loading cache file %s\u0027, self._cache_filename)"}],"source_content_type":"text/x-python","patch_set":1,"id":"175f1a71_0cb3b067","line":64,"updated":"2022-07-18 20:53:31.000000000","message":"I don\u0027t think this change is wrong, but I can\u0027t tell why it\u0027s necessary. Where was the error occurring in the old implementation?","commit_id":"575b698469e597017a8fccfb2c09b99a629669e7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b674ab8e4250e61f37c732836e0fb51aa35afd0f","unresolved":true,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        self._load_data()"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def _load_data(self):"},{"line_number":65,"context_line":"        if not self._ignore_cache:"},{"line_number":66,"context_line":"            if os.path.exists(self._cache_filename):"},{"line_number":67,"context_line":"                LOG.debug(\u0027loading cache file %s\u0027, self._cache_filename)"}],"source_content_type":"text/x-python","patch_set":1,"id":"c2e4d698_892c1d3a","line":64,"in_reply_to":"175f1a71_0cb3b067","updated":"2022-07-19 11:02:54.000000000","message":"It was occurring a little later below.\n\nI\u0027ve no idea how I managed to generate an empty cache file in the first place, but running \u0027rm  releasenotes/notes/reno.cache; touch releasenotes/notes/reno.cache\u0027 and then trying to build release notes with result in this error.\n\nNote that I did try adding tests, but none of code in this particular function is tested and adding tests was longer than I wanted to spend on this issues, so I relied on testing it manually 😞","commit_id":"575b698469e597017a8fccfb2c09b99a629669e7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8eeccff2b6571dd80285f94e202d2f095c809e06","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        self._load_data()"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def _load_data(self):"},{"line_number":65,"context_line":"        if not self._ignore_cache:"},{"line_number":66,"context_line":"            if os.path.exists(self._cache_filename):"},{"line_number":67,"context_line":"                LOG.debug(\u0027loading cache file %s\u0027, self._cache_filename)"}],"source_content_type":"text/x-python","patch_set":1,"id":"27b9c8ab_8081b217","line":64,"in_reply_to":"c2e4d698_892c1d3a","updated":"2022-07-19 12:50:38.000000000","message":"Done","commit_id":"575b698469e597017a8fccfb2c09b99a629669e7"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"46c16fcd745894472dbf31e5742dfbc770627387","unresolved":true,"context_lines":[{"line_number":75,"context_line":"            if os.path.exists(self._cache_filename):"},{"line_number":76,"context_line":"                LOG.debug(\u0027ignoring cache file %s\u0027, self._cache_filename)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        if self._cache:"},{"line_number":79,"context_line":"            # Save the cached scanner output to the same attribute"},{"line_number":80,"context_line":"            # it would be in if we had loaded it \"live\". This"},{"line_number":81,"context_line":"            # simplifies some of the logic in the other methods."}],"source_content_type":"text/x-python","patch_set":1,"id":"5f300fd4_3617bdc7","line":78,"updated":"2022-07-19 12:45:40.000000000","message":"Based on the other comment threads, I think this is the only change we need (lines 77-78).","commit_id":"575b698469e597017a8fccfb2c09b99a629669e7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"dba6241105d71339a618ae97cd723f899232297c","unresolved":true,"context_lines":[{"line_number":75,"context_line":"            if os.path.exists(self._cache_filename):"},{"line_number":76,"context_line":"                LOG.debug(\u0027ignoring cache file %s\u0027, self._cache_filename)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        if self._cache:"},{"line_number":79,"context_line":"            # Save the cached scanner output to the same attribute"},{"line_number":80,"context_line":"            # it would be in if we had loaded it \"live\". This"},{"line_number":81,"context_line":"            # simplifies some of the logic in the other methods."}],"source_content_type":"text/x-python","patch_set":1,"id":"b850070d_3603061e","line":78,"in_reply_to":"5f300fd4_3617bdc7","updated":"2022-07-19 12:48:56.000000000","message":"Actually, yeah 🙈 I\u0027ve overengineered this.","commit_id":"575b698469e597017a8fccfb2c09b99a629669e7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8eeccff2b6571dd80285f94e202d2f095c809e06","unresolved":false,"context_lines":[{"line_number":75,"context_line":"            if os.path.exists(self._cache_filename):"},{"line_number":76,"context_line":"                LOG.debug(\u0027ignoring cache file %s\u0027, self._cache_filename)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        if self._cache:"},{"line_number":79,"context_line":"            # Save the cached scanner output to the same attribute"},{"line_number":80,"context_line":"            # it would be in if we had loaded it \"live\". This"},{"line_number":81,"context_line":"            # simplifies some of the logic in the other methods."}],"source_content_type":"text/x-python","patch_set":1,"id":"1ac166ad_1435c85e","line":78,"in_reply_to":"b850070d_3603061e","updated":"2022-07-19 12:50:38.000000000","message":"Done","commit_id":"575b698469e597017a8fccfb2c09b99a629669e7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b674ab8e4250e61f37c732836e0fb51aa35afd0f","unresolved":true,"context_lines":[{"line_number":80,"context_line":"            # it would be in if we had loaded it \"live\". This"},{"line_number":81,"context_line":"            # simplifies some of the logic in the other methods."},{"line_number":82,"context_line":"            self._scanner_output \u003d collections.OrderedDict("},{"line_number":83,"context_line":"                (n[\u0027version\u0027], n[\u0027files\u0027])"},{"line_number":84,"context_line":"                for n in self._cache[\u0027notes\u0027]"},{"line_number":85,"context_line":"            )"},{"line_number":86,"context_line":"            self._tags_to_dates \u003d collections.OrderedDict("}],"source_content_type":"text/x-python","patch_set":1,"id":"b7d6aef3_5deb8408","line":83,"updated":"2022-07-19 11:02:54.000000000","message":"Here. If it loads an empty file, this will fail with\n\n  TypeError: \u0027NoneType\u0027 object is not subscriptable","commit_id":"575b698469e597017a8fccfb2c09b99a629669e7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8eeccff2b6571dd80285f94e202d2f095c809e06","unresolved":false,"context_lines":[{"line_number":80,"context_line":"            # it would be in if we had loaded it \"live\". This"},{"line_number":81,"context_line":"            # simplifies some of the logic in the other methods."},{"line_number":82,"context_line":"            self._scanner_output \u003d collections.OrderedDict("},{"line_number":83,"context_line":"                (n[\u0027version\u0027], n[\u0027files\u0027])"},{"line_number":84,"context_line":"                for n in self._cache[\u0027notes\u0027]"},{"line_number":85,"context_line":"            )"},{"line_number":86,"context_line":"            self._tags_to_dates \u003d collections.OrderedDict("}],"source_content_type":"text/x-python","patch_set":1,"id":"3e5d1fd5_f0f32d2e","line":83,"in_reply_to":"b7d6aef3_5deb8408","updated":"2022-07-19 12:50:38.000000000","message":"Done","commit_id":"575b698469e597017a8fccfb2c09b99a629669e7"}]}
