comparison mercurial/cmdutil.py @ 11405:bf5d88c466e0

revrange: attempt to parse old-style queries as a first pass
author Matt Mackall <mpm@selenic.com>
date Sat, 19 Jun 2010 13:00:01 -0500
parents a1aad8333864
children 38d4c9b953fe
comparison
equal deleted inserted replaced
11404:37cbedbeae96 11405:bf5d88c466e0
147 return defval 147 return defval
148 return repo.changelog.rev(repo.lookup(val)) 148 return repo.changelog.rev(repo.lookup(val))
149 149
150 seen, l = set(), [] 150 seen, l = set(), []
151 for spec in revs: 151 for spec in revs:
152 if spec and not ( 152 # attempt to parse old-style ranges first to deal with
153 spec.startswith(revrangesep) or spec.endswith(revrangesep)): 153 # things like old-tag which contain query metacharacters
154 m = revset.match(spec) 154 try:
155 for r in m(repo, range(len(repo))): 155 if revrangesep in spec:
156 if r not in seen: 156 start, end = spec.split(revrangesep, 1)
157 l.append(r) 157 start = revfix(repo, start, 0)
158 seen.update(l) 158 end = revfix(repo, end, len(repo) - 1)
159 elif revrangesep in spec: 159 step = start > end and -1 or 1
160 start, end = spec.split(revrangesep, 1) 160 for rev in xrange(start, end + step, step):
161 start = revfix(repo, start, 0) 161 if rev in seen:
162 end = revfix(repo, end, len(repo) - 1) 162 continue
163 step = start > end and -1 or 1 163 seen.add(rev)
164 for rev in xrange(start, end + step, step): 164 l.append(rev)
165 continue
166 elif spec in repo: # single unquoted rev
167 rev = revfix(repo, spec, None)
165 if rev in seen: 168 if rev in seen:
166 continue 169 continue
167 seen.add(rev) 170 seen.add(rev)
168 l.append(rev) 171 l.append(rev)
169 else: 172 except error.RepoLookupError:
170 rev = revfix(repo, spec, None) 173 pass
171 if rev in seen: 174
172 continue 175 # fall through to new-style queries if old-style fails
173 seen.add(rev) 176 m = revset.match(spec)
174 l.append(rev) 177 for r in m(repo, range(len(repo))):
178 if r not in seen:
179 l.append(r)
180 seen.update(l)
175 181
176 return l 182 return l
177 183
178 def make_filename(repo, pat, node, 184 def make_filename(repo, pat, node,
179 total=None, seqno=None, revwidth=None, pathname=None): 185 total=None, seqno=None, revwidth=None, pathname=None):