mercurial/config.py
changeset 8183 2858ab754995
parent 8180 6fc30fe7f3e7
child 8184 9189afe1eba3
equal deleted inserted replaced
8182:b97abc7c1135 8183:2858ab754995
     1 from i18n import _
     1 from i18n import _
     2 import re, error
     2 import re, error, os
     3 
     3 
     4 class sortdict(dict):
     4 class sortdict(dict):
     5     'a simple append-only sorted dictionary'
     5     'a simple append-only sorted dictionary'
     6     def __init__(self, data=None):
     6     def __init__(self, data=None):
     7         self._list = []
     7         self._list = []
    60     def read(self, path, fp=None):
    60     def read(self, path, fp=None):
    61         sectionre = re.compile(r'\[([^\[]+)\]')
    61         sectionre = re.compile(r'\[([^\[]+)\]')
    62         itemre = re.compile(r'([^=\s]+)\s*=\s*(.*)')
    62         itemre = re.compile(r'([^=\s]+)\s*=\s*(.*)')
    63         contre = re.compile(r'\s+(\S.*)')
    63         contre = re.compile(r'\s+(\S.*)')
    64         emptyre = re.compile(r'(;|#|\s*$)')
    64         emptyre = re.compile(r'(;|#|\s*$)')
       
    65         includere = re.compile(r'%include\s+(\S.*)')
    65         section = ""
    66         section = ""
    66         item = None
    67         item = None
    67         line = 0
    68         line = 0
    68         cont = 0
    69         cont = 0
    69 
    70 
    77                 if m:
    78                 if m:
    78                     v = self.get(section, item) + "\n" + m.group(1)
    79                     v = self.get(section, item) + "\n" + m.group(1)
    79                     self.set(section, item, v, "%s:%d" % (path, line))
    80                     self.set(section, item, v, "%s:%d" % (path, line))
    80                     continue
    81                     continue
    81                 item = None
    82                 item = None
       
    83             m = includere.match(l)
       
    84             if m:
       
    85                 inc = m.group(1)
       
    86                 base = os.path.dirname(path)
       
    87                 inc = os.path.normpath(os.path.join(base, inc))
       
    88                 incfp = open(inc)
       
    89                 self.read(inc, incfp)
       
    90                 continue
    82             if emptyre.match(l):
    91             if emptyre.match(l):
    83                 continue
    92                 continue
    84             m = sectionre.match(l)
    93             m = sectionre.match(l)
    85             if m:
    94             if m:
    86                 section = m.group(1)
    95                 section = m.group(1)