mercurial/util.py
changeset 1081 8b7d63489db3
parent 1075 e254bcbfe636
child 1082 ce96e316278a
equal deleted inserted replaced
1080:253072f39205 1081:8b7d63489db3
    83     while a and b and a[-1] == b[-1]:
    83     while a and b and a[-1] == b[-1]:
    84         a.pop(), b.pop()
    84         a.pop(), b.pop()
    85     b.reverse()
    85     b.reverse()
    86     return os.sep.join((['..'] * len(a)) + b)
    86     return os.sep.join((['..'] * len(a)) + b)
    87 
    87 
    88 def canonpath(repo, cwd, myname):
    88 def canonpath(root, cwd, myname):
    89     rootsep = repo.root + os.sep
    89     rootsep = root + os.sep
    90     name = myname
    90     name = myname
    91     if not name.startswith(os.sep):
    91     if not name.startswith(os.sep):
    92         name = os.path.join(repo.root, cwd, name)
    92         name = os.path.join(root, cwd, name)
    93     name = os.path.normpath(name)
    93     name = os.path.normpath(name)
    94     if name.startswith(rootsep):
    94     if name.startswith(rootsep):
    95         return pconvert(name[len(rootsep):])
    95         return pconvert(name[len(rootsep):])
    96     elif name == repo.root:
    96     elif name == root:
    97         return ''
    97         return ''
    98     else:
    98     else:
    99         raise Abort('%s not under repository root' % myname)
    99         raise Abort('%s not under root' % myname)
   100 
   100 
   101 def matcher(repo, cwd, names, inc, exc, head=''):
   101 def matcher(canonroot, cwd, names, inc, exc, head=''):
   102     def patkind(name):
   102     def patkind(name):
   103         for prefix in 're:', 'glob:', 'path:', 'relpath:':
   103         for prefix in 're:', 'glob:', 'path:', 'relpath:':
   104             if name.startswith(prefix): return name.split(':', 1)
   104             if name.startswith(prefix): return name.split(':', 1)
   105         for c in name:
   105         for c in name:
   106             if c in _globchars: return 'glob', name
   106             if c in _globchars: return 'glob', name
   133     pats = []
   133     pats = []
   134     files = []
   134     files = []
   135     roots = []
   135     roots = []
   136     for kind, name in map(patkind, names):
   136     for kind, name in map(patkind, names):
   137         if kind in ('glob', 'relpath'):
   137         if kind in ('glob', 'relpath'):
   138             name = canonpath(repo, cwd, name)
   138             name = canonpath(canonroot, cwd, name)
   139             if name == '':
   139             if name == '':
   140                 kind, name = 'glob', '**'
   140                 kind, name = 'glob', '**'
   141         if kind in ('glob', 'path', 're'):
   141         if kind in ('glob', 'path', 're'):
   142             pats.append((kind, name))
   142             pats.append((kind, name))
   143         if kind == 'glob':
   143         if kind == 'glob':