~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/config.py

  • Committer: Vincent Ladeuil
  • Date: 2011-09-02 06:21:32 UTC
  • mto: (6123.1.7 +trunk)
  • mto: This revision was merged to the branch mainline in revision 6123.
  • Revision ID: v.ladeuil+lp@free.fr-20110902062132-dq9y0slcwe28op73
Tweaks suggested by jam during review.

Show diffs side-by-side

added added

removed removed

Lines of Context:
75
75
import os
76
76
import string
77
77
import sys
78
 
import re
79
78
 
80
79
 
81
80
from bzrlib.decorators import needs_write_lock
107
106
from bzrlib import (
108
107
    commands,
109
108
    hooks,
 
109
    lazy_regex,
110
110
    registry,
111
111
    )
112
112
from bzrlib.symbol_versioning import (
2968
2968
class Stack(object):
2969
2969
    """A stack of configurations where an option can be defined"""
2970
2970
 
 
2971
    _option_ref_re = lazy_regex.lazy_compile('({[^{}]+})')
 
2972
    """Describes an exandable option reference.
 
2973
 
 
2974
    We want to match the most embedded reference first.
 
2975
 
 
2976
    I.e. for '{{foo}}' we will get '{foo}',
 
2977
    for '{bar{baz}}' we will get '{baz}'
 
2978
    """
 
2979
 
2971
2980
    def __init__(self, sections_def, store=None, mutable_section_name=None):
2972
2981
        """Creates a stack of sections with an optional store for changes.
2973
2982
 
2985
2994
        self.sections_def = sections_def
2986
2995
        self.store = store
2987
2996
        self.mutable_section_name = mutable_section_name
2988
 
        # Used to describe an expandable option reference (see
2989
 
        # _expand_options_in_string)
2990
 
        self._option_ref_re = None
2991
2997
 
2992
2998
    def get(self, name, expand=None):
2993
2999
        """Return the *first* option value found in the sections.
3039
3045
        if opt is not None and value is not None:
3040
3046
            value = opt.convert_from_unicode(value)
3041
3047
            if value is None:
3042
 
                # The conversion failed fallback to the default value
 
3048
                # The conversion failed, fallback to the default value
3043
3049
                value = opt.get_default()
3044
3050
                if expand:
3045
3051
                    value = self._expand_option_value(value)
3114
3120
        if _refs is None:
3115
3121
            # What references are currently resolved (to detect loops)
3116
3122
            _refs = []
3117
 
        if self._option_ref_re is None:
3118
 
            # We want to match the most embedded reference first (i.e. for
3119
 
            # '{{foo}}' we will get '{foo}',
3120
 
            # for '{bar{baz}}' we will get '{baz}'
3121
 
            self._option_ref_re = re.compile('({[^{}]+})')
3122
3123
        result = string
3123
3124
        # We need to iterate until no more refs appear ({{foo}} will need two
3124
3125
        # iterations for example).
3125
3126
        while True:
3126
 
            raw_chunks = self._option_ref_re.split(result)
 
3127
            raw_chunks = Stack._option_ref_re.split(result)
3127
3128
            if len(raw_chunks) == 1:
3128
3129
                # Shorcut the trivial case: no refs
3129
3130
                return result