~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/config.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2011-08-12 04:58:46 UTC
  • mfrom: (6059.1.3 boolean-option)
  • Revision ID: pqm@pqm.ubuntu.com-20110812045846-15hlipqj7f69wn7f
(vila) Implement boolean options. (Vincent Ladeuil)

Show diffs side-by-side

added added

removed removed

Lines of Context:
2275
2275
    value, in which config files it can be stored, etc (TBC).
2276
2276
    """
2277
2277
 
2278
 
    def __init__(self, name, default=None, help=None):
 
2278
    def __init__(self, name, default=None, help=None, from_unicode=None):
2279
2279
        self.name = name
2280
2280
        self.default = default
2281
2281
        self.help = help
 
2282
        self.from_unicode = from_unicode
2282
2283
 
2283
2284
    def get_default(self):
2284
2285
        return self.default
2285
2286
 
 
2287
# Predefined converters to get proper values from store
 
2288
 
 
2289
def bool_from_store(unicode_str):
 
2290
    return ui.bool_from_string(unicode_str)
 
2291
 
2286
2292
 
2287
2293
class OptionRegistry(registry.Registry):
2288
2294
    """Register config options by their name.
2329
2335
# Registered options in lexicographical order
2330
2336
 
2331
2337
option_registry.register(
2332
 
    Option('dirstate.fdatasync', default=True,
 
2338
    Option('dirstate.fdatasync', default=True, from_unicode=bool_from_store,
2333
2339
           help='''
2334
2340
Flush dirstate changes onto physical disk?
2335
2341
 
2351
2357
           help= 'Unicode encoding for output'
2352
2358
           ' (terminal encoding if not specified).'))
2353
2359
option_registry.register(
2354
 
    Option('repository.fdatasync', default=True,
 
2360
    Option('repository.fdatasync', default=True, from_unicode=bool_from_store,
2355
2361
           help='''\
2356
2362
Flush repository changes onto physical disk?
2357
2363
 
2812
2818
                    break
2813
2819
            if value is not None:
2814
2820
                break
 
2821
        # If the option is registered, it may provide additional info about
 
2822
        # value handling
 
2823
        try:
 
2824
            opt = option_registry.get(name)
 
2825
        except KeyError:
 
2826
            # Not registered
 
2827
            opt = None
 
2828
        if (opt is not None and opt.from_unicode is not None
 
2829
            and value is not None):
 
2830
            # If a value exists and the option provides a converter, use it
 
2831
            try:
 
2832
                value = opt.from_unicode(value)
 
2833
            except ValueError:
 
2834
                # Invalid values are ignored
 
2835
                value = None
2815
2836
        if value is None:
2816
2837
            # If the option is registered, it may provide a default value
2817
 
            try:
2818
 
                opt = option_registry.get(name)
2819
 
            except KeyError:
2820
 
                # Not registered
2821
 
                opt = None
2822
2838
            if opt is not None:
2823
2839
                value = opt.get_default()
2824
2840
        for hook in ConfigHooks['get']: