Mercurial > hg-stable
changeset 16171:336e61875335
graphlog: restore FILE glob expansion on Windows
On platforms not supporting shell expansion, scmutil.match() performs glob
expansion on 'pats' arguments. But _matchfiles() revset calls match.match()
directly, bypassing this behaviour. To avoid duplicating scmutil.match(), a
secondary scmutil.matchandpats() is introduced returning both the match object
and the expanded inputs. Note the expanded pats are also needed in the fast
path, and will be used by --follow code path.
author | Patrick Mezard <patrick@mezard.eu> |
---|---|
date | Sat, 25 Feb 2012 22:11:34 +0100 |
parents | ef2373ea3d24 |
children | db75321c7a0e |
files | hgext/graphlog.py mercurial/scmutil.py tests/test-glog.t |
diffstat | 3 files changed, 23 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext/graphlog.py Sat Feb 25 21:51:13 2012 +0100 +++ b/hgext/graphlog.py Sat Feb 25 22:11:34 2012 +0100 @@ -268,7 +268,11 @@ if 'branch' in opts and 'only_branch' in opts: opts['branch'] = opts['branch'] + opts.pop('only_branch') - match = scmutil.match(repo[None], pats, opts) + # pats/include/exclude are passed to match.match() directly in + # _matchfile() revset but walkchangerevs() builds its matcher with + # scmutil.match(). The difference is input pats are globbed on + # platforms without shell expansion (windows). + match, pats = scmutil.matchandpats(repo[None], pats, opts) slowpath = match.anypats() or (match.files() and opts.get('removed')) if not slowpath: for f in match.files():
--- a/mercurial/scmutil.py Sat Feb 25 21:51:13 2012 +0100 +++ b/mercurial/scmutil.py Sat Feb 25 22:11:34 2012 +0100 @@ -579,7 +579,7 @@ ret.append(p) return ret -def match(ctx, pats=[], opts={}, globbed=False, default='relpath'): +def matchandpats(ctx, pats=[], opts={}, globbed=False, default='relpath'): if pats == ("",): pats = [] if not globbed and default == 'relpath': @@ -590,7 +590,10 @@ def badfn(f, msg): ctx._repo.ui.warn("%s: %s\n" % (m.rel(f), msg)) m.bad = badfn - return m + return m, pats + +def match(ctx, pats=[], opts={}, globbed=False, default='relpath'): + return matchandpats(ctx, pats, opts, globbed, default)[0] def matchall(repo): return matchmod.always(repo.root, repo.getcwd())
--- a/tests/test-glog.t Sat Feb 25 21:51:13 2012 +0100 +++ b/tests/test-glog.t Sat Feb 25 22:11:34 2012 +0100 @@ -1510,8 +1510,10 @@ $ hg init follow $ cd follow $ echo a > a + $ echo aa > aa $ hg ci -Am "add a" adding a + adding aa $ hg cp a b $ hg ci -m "copy a b" $ mkdir dir @@ -1549,3 +1551,14 @@ $ testlog --include a --include e --exclude b --exclude e a e ('group', ('group', ('func', ('symbol', '_matchfiles'), ('list', ('list', ('list', ('list', ('list', ('string', 'p:a'), ('string', 'p:e')), ('string', 'i:a')), ('string', 'i:e')), ('string', 'x:b')), ('string', 'x:e'))))) + +Test glob expansion of pats + + $ expandglobs=`python -c "import mercurial.util; \ + > print mercurial.util.expandglobs and 'true' or 'false'"` + $ if [ $expandglobs = "true" ]; then + > testlog 'a*'; + > else + > testlog a*; + > fi; + ('group', ('group', ('func', ('symbol', 'filelog'), ('string', 'aa'))))