mercurial/util.py
changeset 4185 769bc4af561d
parent 4184 b1716a1f79c4
child 4187 9814d600011e
equal deleted inserted replaced
4184:b1716a1f79c4 4185:769bc4af561d
   376                 break
   376                 break
   377             name = dirname
   377             name = dirname
   378 
   378 
   379         raise Abort('%s not under root' % myname)
   379         raise Abort('%s not under root' % myname)
   380 
   380 
   381 def matcher(canonroot, cwd='', names=['.'], inc=[], exc=[], head='', src=None):
   381 def matcher(canonroot, cwd='', names=[], inc=[], exc=[], head='', src=None):
   382     return _matcher(canonroot, cwd, names, inc, exc, head, 'glob', src)
   382     return _matcher(canonroot, cwd, names, inc, exc, head, 'glob', src)
   383 
   383 
   384 def cmdmatcher(canonroot, cwd='', names=['.'], inc=[], exc=[], head='',
   384 def cmdmatcher(canonroot, cwd='', names=[], inc=[], exc=[], head='',
   385                src=None, globbed=False):
   385                src=None, globbed=False):
   386     if not globbed:
   386     if not globbed:
   387         names = expand_glob(names)
   387         names = expand_glob(names)
   388     return _matcher(canonroot, cwd, names, inc, exc, head, 'relpath', src)
   388     return _matcher(canonroot, cwd, names, inc, exc, head, 'relpath', src)
   389 
   389 
   426             if c in _globchars: return True
   426             if c in _globchars: return True
   427         return False
   427         return False
   428 
   428 
   429     def regex(kind, name, tail):
   429     def regex(kind, name, tail):
   430         '''convert a pattern into a regular expression'''
   430         '''convert a pattern into a regular expression'''
       
   431         if not name:
       
   432             return ''
   431         if kind == 're':
   433         if kind == 're':
   432             return name
   434             return name
   433         elif kind == 'path':
   435         elif kind == 'path':
   434             return '^' + re.escape(name) + '(?:/|$)'
   436             return '^' + re.escape(name) + '(?:/|$)'
   435         elif kind == 'relglob':
   437         elif kind == 'relglob':
   475     files = []
   477     files = []
   476     roots = []
   478     roots = []
   477     for kind, name in [patkind(p, dflt_pat) for p in names]:
   479     for kind, name in [patkind(p, dflt_pat) for p in names]:
   478         if kind in ('glob', 'relpath'):
   480         if kind in ('glob', 'relpath'):
   479             name = canonpath(canonroot, cwd, name)
   481             name = canonpath(canonroot, cwd, name)
   480             if name == '':
       
   481                 kind, name = 'glob', '**'
       
   482         elif kind in ('relglob', 'path'):
   482         elif kind in ('relglob', 'path'):
   483             name = normpath(name)
   483             name = normpath(name)
   484         if kind in ('glob', 're', 'relglob'):
   484         if kind in ('glob', 're', 'relglob'):
   485             pats.append((kind, name))
   485             pats.append((kind, name))
   486         if kind == 'glob':
   486         if kind == 'glob':
   507             lambda fn: (incmatch(fn) and not excmatch(fn) and
   507             lambda fn: (incmatch(fn) and not excmatch(fn) and
   508                         (fn.endswith('/') or
   508                         (fn.endswith('/') or
   509                          (not pats and not files) or
   509                          (not pats and not files) or
   510                          (pats and patmatch(fn)) or
   510                          (pats and patmatch(fn)) or
   511                          (files and filematch(fn)))),
   511                          (files and filematch(fn)))),
   512             (inc or exc or (pats and pats != [('glob', '**')])) and True)
   512             (inc or exc or pats) and True)
   513 
   513 
   514 def system(cmd, environ={}, cwd=None, onerr=None, errprefix=None):
   514 def system(cmd, environ={}, cwd=None, onerr=None, errprefix=None):
   515     '''enhanced shell command execution.
   515     '''enhanced shell command execution.
   516     run with environment maybe modified, maybe in different dir.
   516     run with environment maybe modified, maybe in different dir.
   517 
   517