)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"1453b5fae9d18422d4623d26ddf4122f5082ce4f","unresolved":false,"context_lines":[{"line_number":20,"context_line":"* fixed cache cleanup for memcached backend"},{"line_number":21,"context_line":"* added clean_angular_template_cache management command to clean case"},{"line_number":22,"context_line":"  manually without executing heavy \u0027compress\u0027 command."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Change-Id: If1fd61fa2e4b36e22797b0f54ac067a2a937f369"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1f493fa4_9a22af00","line":23,"updated":"2020-04-23 22:23:18.000000000","message":"Needs a bug report as you mentioned in the team meeting.","commit_id":"2e018c31a56692f1fa3f6a8ba6233ffcfd77e7b6"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"0a572d71c5d3e818aee5405a39484d5ecd2fa70f","unresolved":false,"context_lines":[{"line_number":11,"context_line":"in images, django-compress tries to load old templates from cache."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"In case of memcached there is no way in Django to flush cache"},{"line_number":14,"context_line":"immediately, so this patch temporary disables cache for templates"},{"line_number":15,"context_line":"used by django-compressor."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"This patch introduces following changes:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"bf51134e_0d76c107","line":14,"range":{"start_line":14,"start_character":27,"end_line":14,"end_character":45},"updated":"2020-06-15 05:18:01.000000000","message":"I am not sure what \"temporarily\" here means.\nDo you mean that the corresponding cache entry in memcached is overridden by None?","commit_id":"e27489afd87f509286debdac33b1b262ac622951"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"0a572d71c5d3e818aee5405a39484d5ecd2fa70f","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"* update_angular_template_hash uses the correct Django cache backend now"},{"line_number":20,"context_line":"* fixed cache cleanup for memcached backend"},{"line_number":21,"context_line":"* added clean_angular_template_cache management command to clean case"},{"line_number":22,"context_line":"  manually without executing heavy \u0027compress\u0027 command."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Closes-Bug: #1874657"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"bf51134e_8d98116b","line":21,"range":{"start_line":21,"start_character":8,"end_line":21,"end_character":36},"updated":"2020-06-15 05:18:01.000000000","message":"This does not match the actual command name: clean_ vs cleanup_","commit_id":"e27489afd87f509286debdac33b1b262ac622951"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"0a572d71c5d3e818aee5405a39484d5ecd2fa70f","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"* update_angular_template_hash uses the correct Django cache backend now"},{"line_number":20,"context_line":"* fixed cache cleanup for memcached backend"},{"line_number":21,"context_line":"* added clean_angular_template_cache management command to clean case"},{"line_number":22,"context_line":"  manually without executing heavy \u0027compress\u0027 command."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Closes-Bug: #1874657"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"bf51134e_6d9dbd58","line":21,"range":{"start_line":21,"start_character":65,"end_line":21,"end_character":69},"updated":"2020-06-15 05:18:01.000000000","message":"What does \"case\" here mean?","commit_id":"e27489afd87f509286debdac33b1b262ac622951"}],"horizon/cache.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"1453b5fae9d18422d4623d26ddf4122f5082ce4f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2012 United States Government as represented by the"},{"line_number":2,"context_line":"# Administrator of the National Aeronautics and Space Administration."},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"# Copyright 2012 CRS4"},{"line_number":6,"context_line":"#"},{"line_number":7,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":8,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":2,"id":"1f493fa4_1a097f94","line":5,"range":{"start_line":1,"start_character":0,"end_line":5,"end_character":21},"updated":"2020-04-23 22:23:18.000000000","message":"I wonder what this copyright means. Did you borrow the code from somewhere?","commit_id":"2e018c31a56692f1fa3f6a8ba6233ffcfd77e7b6"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"0a572d71c5d3e818aee5405a39484d5ecd2fa70f","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    # if template preloads have been cached, clear them"},{"line_number":31,"context_line":"    if django_cache.get(key):"},{"line_number":32,"context_line":"        # Set to None because memcached doesn\u0027t remove records immediately"},{"line_number":33,"context_line":"        django_cache.set(key, None)"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_8d34914c","line":33,"range":{"start_line":32,"start_character":8,"end_line":33,"end_character":35},"updated":"2020-06-15 05:18:01.000000000","message":"This workaround makes sense to me.\n\"immediately\" is the most important part :)\n\nI believe this is not specific to horizon. It might be better to add this workaround to Django memcache backend (in future).","commit_id":"e27489afd87f509286debdac33b1b262ac622951"}],"openstack_dashboard/management/commands/cleanup_angular_template_cache.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"1453b5fae9d18422d4623d26ddf4122f5082ce4f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2016 Cisco Systems, Inc."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":2,"id":"1f493fa4_faf3f39c","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":36},"updated":"2020-04-23 22:23:18.000000000","message":"Looks like a wrong copyright notice too.","commit_id":"2e018c31a56692f1fa3f6a8ba6233ffcfd77e7b6"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"0a572d71c5d3e818aee5405a39484d5ecd2fa70f","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from horizon import cache"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"DOMAINS \u003d [\u0027django\u0027, \u0027djangojs\u0027]"},{"line_number":19,"context_line":"MODULES \u003d [\u0027openstack_dashboard\u0027, \u0027horizon\u0027]"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class Command(BaseCommand):"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_4ddc3918","line":19,"range":{"start_line":18,"start_character":0,"end_line":19,"end_character":44},"updated":"2020-06-15 05:18:01.000000000","message":"Looks unnecessary.","commit_id":"e27489afd87f509286debdac33b1b262ac622951"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"afee292781681d96616b17289b5311ee55d1f734","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from horizon import cache"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"DOMAINS \u003d [\u0027django\u0027, \u0027djangojs\u0027]"},{"line_number":19,"context_line":"MODULES \u003d [\u0027openstack_dashboard\u0027, \u0027horizon\u0027]"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class Command(BaseCommand):"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_e4543f57","line":19,"range":{"start_line":18,"start_character":0,"end_line":19,"end_character":44},"in_reply_to":"bf51134e_4ddc3918","updated":"2020-06-15 14:28:08.000000000","message":"Done","commit_id":"e27489afd87f509286debdac33b1b262ac622951"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"0a572d71c5d3e818aee5405a39484d5ecd2fa70f","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class Command(BaseCommand):"},{"line_number":23,"context_line":"    help \u003d \u0027Clears angular_template_cache_preloads.\u0027"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def handle(self, *args, **options):"},{"line_number":26,"context_line":"        for theme in settings.AVAILABLE_THEMES:"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_edc1cd30","line":23,"range":{"start_line":23,"start_character":19,"end_line":23,"end_character":51},"updated":"2020-06-15 05:18:01.000000000","message":"This is a help text. It is better to use more human-friendly description.","commit_id":"e27489afd87f509286debdac33b1b262ac622951"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"afee292781681d96616b17289b5311ee55d1f734","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class Command(BaseCommand):"},{"line_number":23,"context_line":"    help \u003d \u0027Clears angular_template_cache_preloads.\u0027"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def handle(self, *args, **options):"},{"line_number":26,"context_line":"        for theme in settings.AVAILABLE_THEMES:"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_a4d087cb","line":23,"range":{"start_line":23,"start_character":19,"end_line":23,"end_character":51},"in_reply_to":"bf51134e_edc1cd30","updated":"2020-06-15 14:28:08.000000000","message":"Done","commit_id":"e27489afd87f509286debdac33b1b262ac622951"}],"releasenotes/notes/cleanup-cache-command-64a5020755c5e05c.yaml":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"0a572d71c5d3e818aee5405a39484d5ecd2fa70f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Added an cleanup_angular_template_cache management command, that clears"},{"line_number":5,"context_line":"    tamplate cache for angularized views. The command is available"},{"line_number":6,"context_line":"    as ``./manage.py upgrade_check``."},{"line_number":7,"context_line":"fixes:"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"bf51134e_8d5bf185","line":4,"range":{"start_line":4,"start_character":13,"end_line":4,"end_character":43},"updated":"2020-06-15 05:18:01.000000000","message":"Could you wrap it by double backquotes?","commit_id":"e27489afd87f509286debdac33b1b262ac622951"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"afee292781681d96616b17289b5311ee55d1f734","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Added an cleanup_angular_template_cache management command, that clears"},{"line_number":5,"context_line":"    tamplate cache for angularized views. The command is available"},{"line_number":6,"context_line":"    as ``./manage.py upgrade_check``."},{"line_number":7,"context_line":"fixes:"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"bf51134e_04e1739b","line":4,"range":{"start_line":4,"start_character":13,"end_line":4,"end_character":43},"in_reply_to":"bf51134e_8d5bf185","updated":"2020-06-15 14:28:08.000000000","message":"Done","commit_id":"e27489afd87f509286debdac33b1b262ac622951"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"0a572d71c5d3e818aee5405a39484d5ecd2fa70f","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Added an cleanup_angular_template_cache management command, that clears"},{"line_number":5,"context_line":"    tamplate cache for angularized views. The command is available"},{"line_number":6,"context_line":"    as ``./manage.py upgrade_check``."},{"line_number":7,"context_line":"fixes:"},{"line_number":8,"context_line":"  - |"},{"line_number":9,"context_line":"    [`bug/1874657 \u003chttps://bugs.launchpad.net/horizon/1874657\u003e`_] Horizon"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"bf51134e_cd54c957","line":6,"range":{"start_line":5,"start_character":42,"end_line":6,"end_character":37},"updated":"2020-06-15 05:18:01.000000000","message":"It is better to describe the command directly.\n\n ./manage.py cleanup_angular_template_cache","commit_id":"e27489afd87f509286debdac33b1b262ac622951"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"afee292781681d96616b17289b5311ee55d1f734","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Added an cleanup_angular_template_cache management command, that clears"},{"line_number":5,"context_line":"    tamplate cache for angularized views. The command is available"},{"line_number":6,"context_line":"    as ``./manage.py upgrade_check``."},{"line_number":7,"context_line":"fixes:"},{"line_number":8,"context_line":"  - |"},{"line_number":9,"context_line":"    [`bug/1874657 \u003chttps://bugs.launchpad.net/horizon/1874657\u003e`_] Horizon"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"bf51134e_64ef8f87","line":6,"range":{"start_line":5,"start_character":42,"end_line":6,"end_character":37},"in_reply_to":"bf51134e_cd54c957","updated":"2020-06-15 14:28:08.000000000","message":"Done","commit_id":"e27489afd87f509286debdac33b1b262ac622951"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"0a572d71c5d3e818aee5405a39484d5ecd2fa70f","unresolved":false,"context_lines":[{"line_number":7,"context_line":"fixes:"},{"line_number":8,"context_line":"  - |"},{"line_number":9,"context_line":"    [`bug/1874657 \u003chttps://bugs.launchpad.net/horizon/1874657\u003e`_] Horizon"},{"line_number":10,"context_line":"    container upgrade works without additional compress static call."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"bf51134e_ed4b8dad","line":10,"range":{"start_line":10,"start_character":47,"end_line":10,"end_character":55},"updated":"2020-06-15 05:18:01.000000000","message":"It looks better to wrap it by double backquotes.","commit_id":"e27489afd87f509286debdac33b1b262ac622951"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"afee292781681d96616b17289b5311ee55d1f734","unresolved":false,"context_lines":[{"line_number":7,"context_line":"fixes:"},{"line_number":8,"context_line":"  - |"},{"line_number":9,"context_line":"    [`bug/1874657 \u003chttps://bugs.launchpad.net/horizon/1874657\u003e`_] Horizon"},{"line_number":10,"context_line":"    container upgrade works without additional compress static call."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"bf51134e_a4e9a781","line":10,"range":{"start_line":10,"start_character":47,"end_line":10,"end_character":55},"in_reply_to":"bf51134e_ed4b8dad","updated":"2020-06-15 14:28:08.000000000","message":"Done","commit_id":"e27489afd87f509286debdac33b1b262ac622951"}]}
