mercurial/commands.py
changeset 1066 ea878688221e
parent 1065 6e94c0365d98
child 1067 fae1204603dc
equal deleted inserted replaced
1065:6e94c0365d98 1066:ea878688221e
   123             yield 'iter', rev, None
   123             yield 'iter', rev, None
   124 
   124 
   125 revrangesep = ':'
   125 revrangesep = ':'
   126 
   126 
   127 def revrange(ui, repo, revs, revlog=None):
   127 def revrange(ui, repo, revs, revlog=None):
       
   128     """Yield revision as strings from a list of revision specifications."""
   128     if revlog is None:
   129     if revlog is None:
   129         revlog = repo.changelog
   130         revlog = repo.changelog
   130     revcount = revlog.count()
   131     revcount = revlog.count()
   131     def fix(val, defval):
   132     def fix(val, defval):
   132         if not val:
   133         if not val:
   151     for spec in revs:
   152     for spec in revs:
   152         if spec.find(revrangesep) >= 0:
   153         if spec.find(revrangesep) >= 0:
   153             start, end = spec.split(revrangesep, 1)
   154             start, end = spec.split(revrangesep, 1)
   154             start = fix(start, 0)
   155             start = fix(start, 0)
   155             end = fix(end, revcount - 1)
   156             end = fix(end, revcount - 1)
   156             if end > start:
   157             step = start > end and -1 or 1
   157                 end += 1
   158             for rev in xrange(start, end+step, step):
   158                 step = 1
       
   159             else:
       
   160                 end -= 1
       
   161                 step = -1
       
   162             for rev in xrange(start, end, step):
       
   163                 yield str(rev)
   159                 yield str(rev)
   164         else:
   160         else:
   165             yield str(fix(spec, None))
   161             yield str(fix(spec, None))
   166 
   162 
   167 def make_filename(repo, r, pat, node=None,
   163 def make_filename(repo, r, pat, node=None,