Mercurial > public > mercurial-scm > hg-stable
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): |