~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/config.py

  • Committer: Jonathan Riddell
  • Date: 2011-06-21 11:34:52 UTC
  • mfrom: (5989 +trunk)
  • mto: This revision was merged to the branch mainline in revision 6003.
  • Revision ID: jriddell@canonical.com-20110621113452-ktj67zy52th919c8
mergeĀ inĀ trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
692
692
            self._parser = ConfigObj(co_input, encoding='utf-8')
693
693
        except configobj.ConfigObjError, e:
694
694
            raise errors.ParseConfigError(e.errors, e.config.filename)
 
695
        except UnicodeDecodeError:
 
696
            raise errors.ConfigContentError(self.file_name)
695
697
        # Make sure self.reload() will use the right file name
696
698
        self._parser.filename = self.file_name
697
699
        for hook in OldConfigHooks['load']:
1697
1699
            self._config = ConfigObj(self._input, encoding='utf-8')
1698
1700
        except configobj.ConfigObjError, e:
1699
1701
            raise errors.ParseConfigError(e.errors, e.config.filename)
 
1702
        except UnicodeError:
 
1703
            raise errors.ConfigContentError(self._filename)
1700
1704
        return self._config
1701
1705
 
1702
1706
    def _save(self):
2178
2182
        except errors.NoSuchFile:
2179
2183
            return StringIO()
2180
2184
 
 
2185
    def _external_url(self):
 
2186
        return urlutils.join(self._transport.external_url(), self._filename)
 
2187
 
2181
2188
    def _get_configobj(self):
2182
2189
        f = self._get_config_file()
2183
2190
        try:
2184
 
            return ConfigObj(f, encoding='utf-8')
 
2191
            try:
 
2192
                conf = ConfigObj(f, encoding='utf-8')
 
2193
            except configobj.ConfigObjError, e:
 
2194
                raise errors.ParseConfigError(e.errors, self._external_url())
 
2195
            except UnicodeDecodeError:
 
2196
                raise errors.ConfigContentError(self._external_url())
2185
2197
        finally:
2186
2198
            f.close()
 
2199
        return conf
2187
2200
 
2188
2201
    def _set_configobj(self, configobj):
2189
2202
        out_file = StringIO()
2285
2298
        """Loads the Store from persistent storage."""
2286
2299
        raise NotImplementedError(self.load)
2287
2300
 
2288
 
    def _load_from_string(self, str_or_unicode):
 
2301
    def _load_from_string(self, bytes):
2289
2302
        """Create a store from a string in configobj syntax.
2290
2303
 
2291
 
        :param str_or_unicode: A string representing the file content. This will
2292
 
            be encoded to suit store needs internally.
2293
 
 
2294
 
        This is for tests and should not be used in production unless a
2295
 
        convincing use case can be demonstrated :)
 
2304
        :param bytes: A string representing the file content.
2296
2305
        """
2297
2306
        raise NotImplementedError(self._load_from_string)
2298
2307
 
2370
2379
        for hook in ConfigHooks['load']:
2371
2380
            hook(self)
2372
2381
 
2373
 
    def _load_from_string(self, str_or_unicode):
 
2382
    def _load_from_string(self, bytes):
2374
2383
        """Create a config store from a string.
2375
2384
 
2376
 
        :param str_or_unicode: A string representing the file content. This will
2377
 
            be utf-8 encoded internally.
2378
 
 
2379
 
        This is for tests and should not be used in production unless a
2380
 
        convincing use case can be demonstrated :)
 
2385
        :param bytes: A string representing the file content.
2381
2386
        """
2382
2387
        if self.is_loaded():
2383
2388
            raise AssertionError('Already loaded: %r' % (self._config_obj,))
2384
 
        co_input = StringIO(str_or_unicode.encode('utf-8'))
 
2389
        co_input = StringIO(bytes)
2385
2390
        try:
2386
2391
            # The config files are always stored utf8-encoded
2387
2392
            self._config_obj = ConfigObj(co_input, encoding='utf-8')
2388
2393
        except configobj.ConfigObjError, e:
2389
2394
            self._config_obj = None
2390
2395
            raise errors.ParseConfigError(e.errors, self.external_url())
 
2396
        except UnicodeDecodeError:
 
2397
            raise errors.ConfigContentError(self.external_url())
2391
2398
 
2392
2399
    def save(self):
2393
2400
        if not self.is_loaded():