)]}'
{"oslo_config/cfg.py":[{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"84cb02f0c463837aab074ee966b9b7534e077fc2","unresolved":false,"context_lines":[{"line_number":691,"context_line":""},{"line_number":692,"context_line":"       An exception is now raised if the default value has the wrong type."},{"line_number":693,"context_line":""},{"line_number":694,"context_line":"    .. versionchanged:: 2.8"},{"line_number":695,"context_line":""},{"line_number":696,"context_line":"       Added *mutable* parameter."},{"line_number":697,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"7a740942_16df000e","line":694,"updated":"2015-12-07 23:34:10.000000000","message":"3.2 now","commit_id":"6aeae625871f9a753728a0796e25d7b76ba2d7e7"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"929e0085c656ae3ae49fe008e590311c65dd3612","unresolved":false,"context_lines":[{"line_number":2771,"context_line":"            else:"},{"line_number":2772,"context_line":"                LOG.warn(\"Ignoring change to immutable option: %s\""},{"line_number":2773,"context_line":"                         % opt.name)"},{"line_number":2774,"context_line":"        for keypair, item in fresh.items():"},{"line_number":2775,"context_line":"            (groupname, optname) \u003d keypair"},{"line_number":2776,"context_line":"            self._namespace._set_value("},{"line_number":2777,"context_line":"                groupname, optname, item, cli[keypair])"}],"source_content_type":"text/x-python","patch_set":16,"id":"1a7b0d38_198a38c0","line":2774,"updated":"2015-12-23 19:37:56.000000000","message":"This approach is only going to reload options that are already defined at the time the method is called. I think we\u0027re going to need to take a different approach, and reload everything then discard anything that is already defined as immutable and that changed. That way mutable options that haven\u0027t been defined will use their new values, and immutable options that haven\u0027t been defined will use the latest value in the file.","commit_id":"35038783644497f2a06ffc4d0ebed622dbf3e919"},{"author":{"_account_id":16051,"name":"Ronald Bradford","email":"ronald.bradford@gmail.com","username":"ronaldbradford"},"change_message_id":"450d1e728fe6807433b73e35ad9f066d5f0983cc","unresolved":false,"context_lines":[{"line_number":2818,"context_line":"                fresh[(groupname, opt.name)] \u003d new"},{"line_number":2819,"context_line":"                cli[(groupname, opt.name)] \u003d info[\u0027cli\u0027]"},{"line_number":2820,"context_line":"            else:"},{"line_number":2821,"context_line":"                LOG.warn(\"Ignoring change to immutable option: %s\""},{"line_number":2822,"context_line":"                         % opt.name)"},{"line_number":2823,"context_line":"        for keypair, item in fresh.items():"},{"line_number":2824,"context_line":"            (groupname, optname) \u003d keypair"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa69d971_45b172e0","line":2821,"updated":"2016-01-04 17:02:45.000000000","message":"nit, LOG.warning","commit_id":"ed9d7de335d73899d41e0049d140ca840e6043c2"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"d3b1120caf50d6d932e57f7b7e65ae4fcc74d0c6","unresolved":false,"context_lines":[{"line_number":2820,"context_line":"            else:"},{"line_number":2821,"context_line":"                LOG.warn(\"Ignoring change to immutable option: %s\""},{"line_number":2822,"context_line":"                         % opt.name)"},{"line_number":2823,"context_line":"        for keypair, item in fresh.items():"},{"line_number":2824,"context_line":"            (groupname, optname) \u003d keypair"},{"line_number":2825,"context_line":"            self._namespace._set_value("},{"line_number":2826,"context_line":"                groupname, optname, item, cli[keypair])"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa69d971_c577a238","line":2823,"updated":"2016-01-04 16:55:13.000000000","message":"dhellmann: re: your comment on PS#16, it\u0027s true this will only work for Opts which are defined (IE in _all_opt_infos). It should work OK for Opts which are defined but have no value, item can be None. It seems hard to reload options which have not been defined yet as we don\u0027t know if they\u0027re mutable or not?\n\nIf a process launches without a value for immutable opt \"foo\", then later mutate_config_files runs and suddenly \"foo\" has a value, I\u0027d call that a mutation? Which we shouldn\u0027t have allowed.","commit_id":"ed9d7de335d73899d41e0049d140ca840e6043c2"},{"author":{"_account_id":16051,"name":"Ronald Bradford","email":"ronald.bradford@gmail.com","username":"ronaldbradford"},"change_message_id":"450d1e728fe6807433b73e35ad9f066d5f0983cc","unresolved":false,"context_lines":[{"line_number":2825,"context_line":"            self._namespace._set_value("},{"line_number":2826,"context_line":"                groupname, optname, item, cli[keypair])"},{"line_number":2827,"context_line":"        return fresh"},{"line_number":2828,"context_line":""},{"line_number":2829,"context_line":"    def list_all_sections(self):"},{"line_number":2830,"context_line":"        \"\"\"List all sections from the configuration."},{"line_number":2831,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"fa69d971_255b1e56","line":2828,"updated":"2016-01-04 17:02:45.000000000","message":"Why would mutate_config_files not need the same try/except as reload_config_files?","commit_id":"ed9d7de335d73899d41e0049d140ca840e6043c2"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"b60c8a171dae4f3c9c4a7743211694fe8cef3363","unresolved":false,"context_lines":[{"line_number":2825,"context_line":"            self._namespace._set_value("},{"line_number":2826,"context_line":"                groupname, optname, item, cli[keypair])"},{"line_number":2827,"context_line":"        return fresh"},{"line_number":2828,"context_line":""},{"line_number":2829,"context_line":"    def list_all_sections(self):"},{"line_number":2830,"context_line":"        \"\"\"List all sections from the configuration."},{"line_number":2831,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"fa69d971_10adfa30","line":2828,"in_reply_to":"fa69d971_255b1e56","updated":"2016-01-04 17:21:57.000000000","message":"I\u0027m not sure how SystemExit could happen but I\u0027m pretty sure we should do what it says instead of just returning False. Happy to be educated here if there\u0027s weirdness.\n\nCatching Error only to return False punts to the caller while denying them the info required to make an informed decision. By allowing the Errors to unwind out of mutate_config_files, the caller can catch, inspect and reraise or discard them themselves.","commit_id":"ed9d7de335d73899d41e0049d140ca840e6043c2"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"c288c30cad2fd0804d4ec3168eae4ad24966d86c","unresolved":false,"context_lines":[{"line_number":2819,"context_line":"        :raises Error if reloading fails"},{"line_number":2820,"context_line":"        \"\"\""},{"line_number":2821,"context_line":""},{"line_number":2822,"context_line":"        self._mutable_ns \u003d self._reload_config_files()"},{"line_number":2823,"context_line":""},{"line_number":2824,"context_line":"    def list_all_sections(self):"},{"line_number":2825,"context_line":"        \"\"\"List all sections from the configuration."}],"source_content_type":"text/x-python","patch_set":21,"id":"da6ed579_dbe3b3d7","line":2822,"updated":"2016-01-14 21:52:24.000000000","message":"Should this method have some of the same exception handlers that reload_config_files() has?","commit_id":"fbc0725355ac264a7e045b456dbba3d9a63aa235"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"63be41bb90738a835ee63c2e1d7bad01ec2b6b45","unresolved":false,"context_lines":[{"line_number":2819,"context_line":"        :raises Error if reloading fails"},{"line_number":2820,"context_line":"        \"\"\""},{"line_number":2821,"context_line":""},{"line_number":2822,"context_line":"        self._mutable_ns \u003d self._reload_config_files()"},{"line_number":2823,"context_line":""},{"line_number":2824,"context_line":"    def list_all_sections(self):"},{"line_number":2825,"context_line":"        \"\"\"List all sections from the configuration."}],"source_content_type":"text/x-python","patch_set":21,"id":"da6ed579_e03d882b","line":2822,"in_reply_to":"da6ed579_dbe3b3d7","updated":"2016-01-15 10:48:10.000000000","message":"I don\u0027t think so, no. reload_config_files catches the exception and returns a sentinel value (False) that you have to check for. What do you do if you see it failed? No idea, you have no information about what went wrong. What if you forget to check for the sentinel value? It\u0027ll just silently not work.\n\nmutate_config_files lets you catch the Error yourself, which will contain all the available info about the failure so maybe you can fix it or at least report it accurately. If you fail to catch it, you should see at least a stack trace somewhere which is a pretty visible reminder to fix your code.","commit_id":"fbc0725355ac264a7e045b456dbba3d9a63aa235"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"1be60babf4e86c42b7f608ca4b0b25ebdf807d1c","unresolved":false,"context_lines":[{"line_number":2830,"context_line":"        if self._mutable_ns:"},{"line_number":2831,"context_line":"            return self._mutable_ns._sections()"},{"line_number":2832,"context_line":"        if self._namespace:"},{"line_number":2833,"context_line":"            return self._namespace._sections()"},{"line_number":2834,"context_line":"        return iter([])"},{"line_number":2835,"context_line":""},{"line_number":2836,"context_line":"    class GroupAttr(collections.Mapping):"}],"source_content_type":"text/x-python","patch_set":21,"id":"9a68dd71_e19a4ac5","line":2833,"updated":"2016-01-20 13:40:19.000000000","message":"not happy with this method","commit_id":"fbc0725355ac264a7e045b456dbba3d9a63aa235"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"062fd58e0f1b435f3d6f50af803b72f0b072114b","unresolved":false,"context_lines":[{"line_number":717,"context_line":"    .. versionchanged:: 3.2"},{"line_number":718,"context_line":"       Added *deprecated_reason* parameter."},{"line_number":719,"context_line":""},{"line_number":720,"context_line":"    .. versionchanged:: 3.3"},{"line_number":721,"context_line":"       Added *mutable* parameter."},{"line_number":722,"context_line":"    \"\"\""},{"line_number":723,"context_line":"    multi \u003d False"}],"source_content_type":"text/x-python","patch_set":25,"id":"7a5de9d1_c0512964","line":720,"updated":"2016-01-27 18:51:22.000000000","message":"We\u0027ve released 3.4 already, so this will need to be updated. We can address that in a follow-up patch before we generate a release to avoid rebasing this entire series.","commit_id":"4905b4f905523966f493e1b01f7fd5d2bbb44822"}]}
