Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/commands.py @ 742:092937de2ad7
Refactor matchpats and walk
Move core match function code to util
Add some comments and whitespace
Simplify options
Use lambdas instead of always and never
author | mpm@selenic.com |
---|---|
date | Thu, 21 Jul 2005 12:21:33 -0500 |
parents | d2422f10c136 |
children | b0ba1866d6b5 |
comparison
equal
deleted
inserted
replaced
741:156dc2f3be7f | 742:092937de2ad7 |
---|---|
37 if cwd: | 37 if cwd: |
38 return [util.pconvert(os.path.normpath(os.path.join(cwd, x))) | 38 return [util.pconvert(os.path.normpath(os.path.join(cwd, x))) |
39 for x in args] | 39 for x in args] |
40 return args | 40 return args |
41 | 41 |
42 def matchpats(ui, cwd, pats = [], opts = {}, emptyok = True): | 42 def matchpats(cwd, pats = [], opts = {}, head = ''): |
43 if not pats and not emptyok: | 43 return util.matcher(cwd, pats, opts.get('include'), |
44 raise Abort('at least one file name or pattern required') | 44 opts.get('exclude'), head) |
45 head = '' | 45 |
46 if opts.get('rootless'): head = '(?:.*/|)' | 46 def walk(repo, pats, opts, head = ''): |
47 def reify(name, tail): | |
48 if name.startswith('re:'): | |
49 return name[3:] | |
50 elif name.startswith('glob:'): | |
51 return head + util.globre(name[5:], '', tail) | |
52 elif name.startswith('path:'): | |
53 return '^' + re.escape(name[5:]) + '$' | |
54 return head + util.globre(name, '', tail) | |
55 cwdsep = cwd + os.sep | |
56 def under(fn): | |
57 if not cwd or fn.startswith(cwdsep): return True | |
58 def matchfn(pats, tail, ifempty = util.always): | |
59 if not pats: return ifempty | |
60 pat = '(?:%s)' % '|'.join([reify(p, tail) for p in pats]) | |
61 if cwd: pat = re.escape(cwd + os.sep) + pat | |
62 ui.debug('regexp: %s\n' % pat) | |
63 return re.compile(pat).match | |
64 patmatch = matchfn(pats, '$') | |
65 incmatch = matchfn(opts.get('include'), '(?:/|$)', under) | |
66 excmatch = matchfn(opts.get('exclude'), '(?:/|$)', util.never) | |
67 return lambda fn: (incmatch(fn) and not excmatch(fn) and | |
68 (fn.endswith('/') or patmatch(fn))) | |
69 | |
70 def walk(repo, pats, opts, emptyok = True): | |
71 cwd = repo.getcwd() | 47 cwd = repo.getcwd() |
48 c = 0 | |
72 if cwd: c = len(cwd) + 1 | 49 if cwd: c = len(cwd) + 1 |
73 for src, fn in repo.walk(match = matchpats(repo.ui, cwd, pats, opts, emptyok)): | 50 for src, fn in repo.walk(match = matchpats(cwd, pats, opts, head)): |
74 if cwd: yield src, fn, fn[c:] | 51 yield src, fn, fn[c:] |
75 else: yield src, fn, fn | |
76 | 52 |
77 revrangesep = ':' | 53 revrangesep = ':' |
78 | 54 |
79 def revrange(ui, repo, revs, revlog=None): | 55 def revrange(ui, repo, revs, revlog=None): |
80 if revlog is None: | 56 if revlog is None: |
707 raise Abort("no longer supported: use \"hg clone\" instead") | 683 raise Abort("no longer supported: use \"hg clone\" instead") |
708 hg.repository(ui, ".", create=1) | 684 hg.repository(ui, ".", create=1) |
709 | 685 |
710 def locate(ui, repo, *pats, **opts): | 686 def locate(ui, repo, *pats, **opts): |
711 """locate files matching specific patterns""" | 687 """locate files matching specific patterns""" |
688 end = '\n' | |
712 if opts['print0']: end = '\0' | 689 if opts['print0']: end = '\0' |
713 else: end = '\n' | 690 |
714 opts['rootless'] = True | 691 for src, abs, rel in walk(repo, pats, opts, '(?:.*/|)'): |
715 for src, abs, rel in walk(repo, pats, opts): | |
716 if repo.dirstate.state(abs) == '?': continue | 692 if repo.dirstate.state(abs) == '?': continue |
717 if opts['fullpath']: | 693 if opts['fullpath']: |
718 ui.write(os.path.join(repo.root, abs), end) | 694 ui.write(os.path.join(repo.root, abs), end) |
719 else: | 695 else: |
720 ui.write(rel, end) | 696 ui.write(rel, end) |
996 C = changed | 972 C = changed |
997 A = added | 973 A = added |
998 R = removed | 974 R = removed |
999 ? = not tracked''' | 975 ? = not tracked''' |
1000 | 976 |
1001 (c, a, d, u) = repo.changes(match = matchpats(ui, repo.getcwd(), | 977 (c, a, d, u) = repo.changes(match = matchpats(repo.getcwd(), pats, opts)) |
1002 pats, opts)) | |
1003 (c, a, d, u) = map(lambda x: relfilter(repo, x), (c, a, d, u)) | 978 (c, a, d, u) = map(lambda x: relfilter(repo, x), (c, a, d, u)) |
1004 | 979 |
1005 for f in c: | 980 for f in c: |
1006 ui.write("C ", f, "\n") | 981 ui.write("C ", f, "\n") |
1007 for f in a: | 982 for f in a: |