)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"290f8bf55850e42f0c6b49638780d082a8988ffc","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add \u0027mutable\u0027 param to Opt"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"re: https://etherpad.openstack.org/p/"},{"line_number":10,"context_line":"mitaka-cross-project-dynamic-config-services"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"oslo.config already offers a reload_config_files method. This patch adds"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"ba8a016a_a91b5572","line":9,"updated":"2015-11-18 11:05:00.000000000","message":"put them in one line ?","commit_id":"20eb8b19be50cf9405e778d87c9ea229d4882ffa"}],"oslo_config/cfg.py":[{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"290f8bf55850e42f0c6b49638780d082a8988ffc","unresolved":false,"context_lines":[{"line_number":637,"context_line":"    :param sample_default: a default string for sample config files"},{"line_number":638,"context_line":"    :param deprecated_for_removal: indicates whether this opt is planned for"},{"line_number":639,"context_line":"                                   removal in a future release"},{"line_number":640,"context_line":"    :param mutable: True if this option may be reloaded"},{"line_number":641,"context_line":""},{"line_number":642,"context_line":"    An Opt object has no public methods, but has a number of public properties:"},{"line_number":643,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba8a016a_035e0044","line":640,"updated":"2015-11-18 11:05:00.000000000","message":"change to \"True if this option can  be reloaded\" ?","commit_id":"20eb8b19be50cf9405e778d87c9ea229d4882ffa"},{"author":{"_account_id":11650,"name":"Tom Cammann","email":"tom.cammann@hpe.com","username":"cammann"},"change_message_id":"d193c13d9d543784a458a1101f976f5d20d3ecc0","unresolved":false,"context_lines":[{"line_number":690,"context_line":""},{"line_number":691,"context_line":"    .. versionchanged:: 2.7"},{"line_number":692,"context_line":""},{"line_number":693,"context_line":"       An exception is now raised if the default value has the wrong type."},{"line_number":694,"context_line":"    \"\"\""},{"line_number":695,"context_line":"    multi \u003d False"},{"line_number":696,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba8a016a_2c48da86","line":693,"updated":"2015-11-18 09:22:11.000000000","message":"Need to add a version changed doc here","commit_id":"20eb8b19be50cf9405e778d87c9ea229d4882ffa"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"290f8bf55850e42f0c6b49638780d082a8988ffc","unresolved":false,"context_lines":[{"line_number":690,"context_line":""},{"line_number":691,"context_line":"    .. versionchanged:: 2.7"},{"line_number":692,"context_line":""},{"line_number":693,"context_line":"       An exception is now raised if the default value has the wrong type."},{"line_number":694,"context_line":"    \"\"\""},{"line_number":695,"context_line":"    multi \u003d False"},{"line_number":696,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba8a016a_030cc03f","line":693,"in_reply_to":"ba8a016a_2c48da86","updated":"2015-11-18 11:05:00.000000000","message":"yes, we need one :-)","commit_id":"20eb8b19be50cf9405e778d87c9ea229d4882ffa"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"290f8bf55850e42f0c6b49638780d082a8988ffc","unresolved":false,"context_lines":[{"line_number":699,"context_line":"                 secret\u003dFalse, required\u003dFalse,"},{"line_number":700,"context_line":"                 deprecated_name\u003dNone, deprecated_group\u003dNone,"},{"line_number":701,"context_line":"                 deprecated_opts\u003dNone, sample_default\u003dNone,"},{"line_number":702,"context_line":"                 deprecated_for_removal\u003dFalse, mutable\u003dFalse):"},{"line_number":703,"context_line":"        if name.startswith(\u0027_\u0027):"},{"line_number":704,"context_line":"            raise ValueError(\u0027illegal name %s with prefix _\u0027 % (name,))"},{"line_number":705,"context_line":"        self.name \u003d name"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba8a016a_4315e846","line":702,"updated":"2015-11-18 11:05:00.000000000","message":"Can you explain more why  set mutable with False by default here ?","commit_id":"20eb8b19be50cf9405e778d87c9ea229d4882ffa"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"290f8bf55850e42f0c6b49638780d082a8988ffc","unresolved":false,"context_lines":[{"line_number":1869,"context_line":"        self._config_opts \u003d []"},{"line_number":1870,"context_line":"        self._cli_opts \u003d collections.deque()"},{"line_number":1871,"context_line":"        self._validate_default_values \u003d False"},{"line_number":1872,"context_line":"        self.limit_mutation \u003d False"},{"line_number":1873,"context_line":"        self.mutation_hook \u003d None"},{"line_number":1874,"context_line":""},{"line_number":1875,"context_line":"    def _pre_setup(self, project, prog, version, usage, default_config_files):"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba8a016a_09962193","line":1872,"updated":"2015-11-18 11:05:00.000000000","message":"Add comment like \"only mutable opts should be changed\" here ?","commit_id":"20eb8b19be50cf9405e778d87c9ea229d4882ffa"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"87a3c5c46ca3b82086ea55d4c2f2149832168809","unresolved":false,"context_lines":[{"line_number":2660,"context_line":"                         % opt.name)"},{"line_number":2661,"context_line":"        if fresh and self.mutation_hook:"},{"line_number":2662,"context_line":"            # Old options are still available from CONF during this call."},{"line_number":2663,"context_line":"            self.mutation_hook(fresh)"},{"line_number":2664,"context_line":"        for key, item in fresh.items():"},{"line_number":2665,"context_line":"            self._namespace._set_value("},{"line_number":2666,"context_line":"                key[0], key[1], item[\u0027value\u0027], item[\u0027cli\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba8a016a_f7d10b58","line":2663,"updated":"2015-11-19 00:33:08.000000000","message":"Pass in the following,\n\n self.mutation_hook(self, fresh)\n\nSo that the mutation hook can access the config vs having to have it in the same scope and reference it via that way...?","commit_id":"fc7860b17c7521fa64c42f6a014104072a63a26e"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"060722cf99804f9fede95c0ea07e5119ece7ef30","unresolved":false,"context_lines":[{"line_number":2660,"context_line":"                         % opt.name)"},{"line_number":2661,"context_line":"        if fresh and self.mutation_hook:"},{"line_number":2662,"context_line":"            # Old options are still available from CONF during this call."},{"line_number":2663,"context_line":"            self.mutation_hook(fresh)"},{"line_number":2664,"context_line":"        for key, item in fresh.items():"},{"line_number":2665,"context_line":"            self._namespace._set_value("},{"line_number":2666,"context_line":"                key[0], key[1], item[\u0027value\u0027], item[\u0027cli\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba8a016a_c005f113","line":2663,"in_reply_to":"ba8a016a_9f220651","updated":"2015-11-19 18:24:14.000000000","message":"Agreed.","commit_id":"fc7860b17c7521fa64c42f6a014104072a63a26e"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"bda2bf023eae880f7390c8e611e114aa5d406e50","unresolved":false,"context_lines":[{"line_number":2660,"context_line":"                         % opt.name)"},{"line_number":2661,"context_line":"        if fresh and self.mutation_hook:"},{"line_number":2662,"context_line":"            # Old options are still available from CONF during this call."},{"line_number":2663,"context_line":"            self.mutation_hook(fresh)"},{"line_number":2664,"context_line":"        for key, item in fresh.items():"},{"line_number":2665,"context_line":"            self._namespace._set_value("},{"line_number":2666,"context_line":"                key[0], key[1], item[\u0027value\u0027], item[\u0027cli\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba8a016a_9f220651","line":2663,"in_reply_to":"ba8a016a_f7d10b58","updated":"2015-11-19 10:25:53.000000000","message":"Seems fair, done. Thinking about it, I should test that the hook is called + passed correct args though.","commit_id":"fc7860b17c7521fa64c42f6a014104072a63a26e"},{"author":{"_account_id":11650,"name":"Tom Cammann","email":"tom.cammann@hpe.com","username":"cammann"},"change_message_id":"37bb7b9b2adcbee856843d1b6644c6d82c7c5dcf","unresolved":false,"context_lines":[{"line_number":1880,"context_line":"        self._config_opts \u003d []"},{"line_number":1881,"context_line":"        self._cli_opts \u003d collections.deque()"},{"line_number":1882,"context_line":"        self._validate_default_values \u003d False"},{"line_number":1883,"context_line":"        self.limit_mutation \u003d False"},{"line_number":1884,"context_line":"        self.mutation_hook \u003d None"},{"line_number":1885,"context_line":""},{"line_number":1886,"context_line":"    def _pre_setup(self, project, prog, version, usage, default_config_files):"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba8a016a_6d7bb22a","line":1883,"updated":"2015-11-20 13:43:20.000000000","message":"How will this limit_mutation flag be updated, say Nova wanted to enable a \"limited\" mutation, how would this be set?","commit_id":"721ed47b36dd8637b8d9b4ef539f8be32cdbdcf2"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"0ba801dc63c21b07a182a0ac4a225f1685cfb3c9","unresolved":false,"context_lines":[{"line_number":1880,"context_line":"        self._config_opts \u003d []"},{"line_number":1881,"context_line":"        self._cli_opts \u003d collections.deque()"},{"line_number":1882,"context_line":"        self._validate_default_values \u003d False"},{"line_number":1883,"context_line":"        self.limit_mutation \u003d False"},{"line_number":1884,"context_line":"        self.mutation_hook \u003d None"},{"line_number":1885,"context_line":""},{"line_number":1886,"context_line":"    def _pre_setup(self, project, prog, version, usage, default_config_files):"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba8a016a_70c3858b","line":1883,"in_reply_to":"ba8a016a_6d7bb22a","updated":"2015-11-20 13:52:08.000000000","message":"Nova can just do:\n\n  CONF.limit_mutation \u003d True","commit_id":"721ed47b36dd8637b8d9b4ef539f8be32cdbdcf2"},{"author":{"_account_id":11650,"name":"Tom Cammann","email":"tom.cammann@hpe.com","username":"cammann"},"change_message_id":"37bb7b9b2adcbee856843d1b6644c6d82c7c5dcf","unresolved":false,"context_lines":[{"line_number":2657,"context_line":"                fresh[(groupname, opt.name)] \u003d ("},{"line_number":2658,"context_line":"                    {\u0027value\u0027: new, \u0027cli\u0027: info[\u0027cli\u0027]})"},{"line_number":2659,"context_line":"            else:"},{"line_number":2660,"context_line":"                LOG.warn(\"Ignoring change to immutable option: %s\""},{"line_number":2661,"context_line":"                         % opt.name)"},{"line_number":2662,"context_line":"        if fresh and self.mutation_hook:"},{"line_number":2663,"context_line":"            # Old options are still available from CONF during this call."}],"source_content_type":"text/x-python","patch_set":9,"id":"ba8a016a_8dc61648","line":2660,"updated":"2015-11-20 13:43:20.000000000","message":"Might be useful to include, old and new config value in the log","commit_id":"721ed47b36dd8637b8d9b4ef539f8be32cdbdcf2"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"0ba801dc63c21b07a182a0ac4a225f1685cfb3c9","unresolved":false,"context_lines":[{"line_number":2657,"context_line":"                fresh[(groupname, opt.name)] \u003d ("},{"line_number":2658,"context_line":"                    {\u0027value\u0027: new, \u0027cli\u0027: info[\u0027cli\u0027]})"},{"line_number":2659,"context_line":"            else:"},{"line_number":2660,"context_line":"                LOG.warn(\"Ignoring change to immutable option: %s\""},{"line_number":2661,"context_line":"                         % opt.name)"},{"line_number":2662,"context_line":"        if fresh and self.mutation_hook:"},{"line_number":2663,"context_line":"            # Old options are still available from CONF during this call."}],"source_content_type":"text/x-python","patch_set":9,"id":"ba8a016a_b00d6dea","line":2660,"in_reply_to":"ba8a016a_8dc61648","updated":"2015-11-20 13:52:08.000000000","message":"Could do, bit worried about long values making the message hard to scan, but there aren\u0027t that many of those. Let\u0027s get more feedback on this.","commit_id":"721ed47b36dd8637b8d9b4ef539f8be32cdbdcf2"},{"author":{"_account_id":5638,"name":"Davanum Srinivas","email":"davanum@gmail.com","username":"dims-v"},"change_message_id":"d6b45641dac9ba939eeaa98d2bcb0aa5af99668a","unresolved":false,"context_lines":[{"line_number":2657,"context_line":"                fresh[(groupname, opt.name)] \u003d ("},{"line_number":2658,"context_line":"                    {\u0027value\u0027: new, \u0027cli\u0027: info[\u0027cli\u0027]})"},{"line_number":2659,"context_line":"            else:"},{"line_number":2660,"context_line":"                LOG.warn(\"Ignoring change to immutable option: %s\""},{"line_number":2661,"context_line":"                         % opt.name)"},{"line_number":2662,"context_line":"        if fresh and self.mutation_hook:"},{"line_number":2663,"context_line":"            # Old options are still available from CONF during this call."}],"source_content_type":"text/x-python","patch_set":9,"id":"ba8a016a_302e5da6","line":2660,"in_reply_to":"ba8a016a_b00d6dea","updated":"2015-11-20 13:57:43.000000000","message":"i am ok to not log the old/new in the first go, if folks ask for it then we can add it","commit_id":"721ed47b36dd8637b8d9b4ef539f8be32cdbdcf2"},{"author":{"_account_id":11650,"name":"Tom Cammann","email":"tom.cammann@hpe.com","username":"cammann"},"change_message_id":"37bb7b9b2adcbee856843d1b6644c6d82c7c5dcf","unresolved":false,"context_lines":[{"line_number":2661,"context_line":"                         % opt.name)"},{"line_number":2662,"context_line":"        if fresh and self.mutation_hook:"},{"line_number":2663,"context_line":"            # Old options are still available from CONF during this call."},{"line_number":2664,"context_line":"            self.mutation_hook(self, fresh)"},{"line_number":2665,"context_line":"        for key, item in fresh.items():"},{"line_number":2666,"context_line":"            self._namespace._set_value("},{"line_number":2667,"context_line":"                key[0], key[1], item[\u0027value\u0027], item[\u0027cli\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba8a016a_2de4caaa","line":2664,"updated":"2015-11-20 13:43:20.000000000","message":"We should pass a copy of fresh to mutatiojn_hook, otherwise the mutation hook could surreptitiously rewrite the whole conf.","commit_id":"721ed47b36dd8637b8d9b4ef539f8be32cdbdcf2"},{"author":{"_account_id":5638,"name":"Davanum Srinivas","email":"davanum@gmail.com","username":"dims-v"},"change_message_id":"d6b45641dac9ba939eeaa98d2bcb0aa5af99668a","unresolved":false,"context_lines":[{"line_number":2661,"context_line":"                         % opt.name)"},{"line_number":2662,"context_line":"        if fresh and self.mutation_hook:"},{"line_number":2663,"context_line":"            # Old options are still available from CONF during this call."},{"line_number":2664,"context_line":"            self.mutation_hook(self, fresh)"},{"line_number":2665,"context_line":"        for key, item in fresh.items():"},{"line_number":2666,"context_line":"            self._namespace._set_value("},{"line_number":2667,"context_line":"                key[0], key[1], item[\u0027value\u0027], item[\u0027cli\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba8a016a_700b852c","line":2664,"in_reply_to":"ba8a016a_1016b9a7","updated":"2015-11-20 13:57:43.000000000","message":"+1 to make a copy please.","commit_id":"721ed47b36dd8637b8d9b4ef539f8be32cdbdcf2"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"0ba801dc63c21b07a182a0ac4a225f1685cfb3c9","unresolved":false,"context_lines":[{"line_number":2661,"context_line":"                         % opt.name)"},{"line_number":2662,"context_line":"        if fresh and self.mutation_hook:"},{"line_number":2663,"context_line":"            # Old options are still available from CONF during this call."},{"line_number":2664,"context_line":"            self.mutation_hook(self, fresh)"},{"line_number":2665,"context_line":"        for key, item in fresh.items():"},{"line_number":2666,"context_line":"            self._namespace._set_value("},{"line_number":2667,"context_line":"                key[0], key[1], item[\u0027value\u0027], item[\u0027cli\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba8a016a_1016b9a7","line":2664,"in_reply_to":"ba8a016a_2de4caaa","updated":"2015-11-20 13:52:08.000000000","message":"If Nova want to write a hook which messes with their config, that\u0027s their prerogative I\u0027d say. Happy to take extra feedback though.","commit_id":"721ed47b36dd8637b8d9b4ef539f8be32cdbdcf2"}],"oslo_config/tests/test_cfg.py":[{"author":{"_account_id":11650,"name":"Tom Cammann","email":"tom.cammann@hpe.com","username":"cammann"},"change_message_id":"d193c13d9d543784a458a1101f976f5d20d3ecc0","unresolved":false,"context_lines":[{"line_number":1644,"context_line":"        self.assertEqual(self.conf.foo1, \u0027test11\u0027)"},{"line_number":1645,"context_line":""},{"line_number":1646,"context_line":""},{"line_number":1647,"context_line":"class ConfigFilePartialReloadTestCase(BaseTestCase):"},{"line_number":1648,"context_line":""},{"line_number":1649,"context_line":"    def setUp(self):"},{"line_number":1650,"context_line":"        super(ConfigFilePartialReloadTestCase, self).setUp()"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba8a016a_87567fd0","line":1647,"updated":"2015-11-18 09:22:11.000000000","message":"Would like to see a test where limit_mutate \u003d\u003d True to test the _mutate method","commit_id":"20eb8b19be50cf9405e778d87c9ea229d4882ffa"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"290f8bf55850e42f0c6b49638780d082a8988ffc","unresolved":false,"context_lines":[{"line_number":1666,"context_line":"        shutil.copy(paths[1], paths[0])"},{"line_number":1667,"context_line":"        self.conf.reload_config_files()"},{"line_number":1668,"context_line":""},{"line_number":1669,"context_line":"    def test_conf_files_reload_none(self):"},{"line_number":1670,"context_line":"        self.conf.register_cli_opt(cfg.StrOpt(\u0027foo\u0027))"},{"line_number":1671,"context_line":"        self._test_conf_files_reload()"},{"line_number":1672,"context_line":"        self.assertTrue(hasattr(self.conf, \u0027foo\u0027))"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba8a016a_2610f258","line":1669,"updated":"2015-11-18 11:05:00.000000000","message":"need fix unit test failure.","commit_id":"20eb8b19be50cf9405e778d87c9ea229d4882ffa"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"db7fe0b7cc723b757ffcf8816e145cdb84a94bc2","unresolved":false,"context_lines":[{"line_number":1660,"context_line":"                                        \u0027[DEFAULT]\\n\u0027"},{"line_number":1661,"context_line":"                                        \u0027foo \u003d xxx\\n\u0027"},{"line_number":1662,"context_line":"                                        \u0027[group]\\n\u0027"},{"line_number":1663,"context_line":"                                        \u0027boo \u003d xxx\\n\u0027)])"},{"line_number":1664,"context_line":""},{"line_number":1665,"context_line":"        self.conf([\u0027--config-file\u0027, paths[0]])"},{"line_number":1666,"context_line":"        shutil.copy(paths[1], paths[0])"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba8a016a_212a917f","line":1663,"updated":"2015-11-20 14:25:38.000000000","message":"so, this might just be me, but all the aaa, xxx, 1, 2 makes for keeping track of all the tests later a bit hard.\n\nCould it be specified as \"old_value\" \"new_value\" or something a bit more semantic?","commit_id":"2e69e2b5248c9fdea7fb4fcf211f85f07d89d7c3"}]}
