mercurial/cmdutil.py
changeset 6750 fb42030d79d6
parent 6747 f6c00b17387c
child 6760 4faaa0535ea7
equal deleted inserted replaced
6749:51b0e799352f 6750:fb42030d79d6
   124     end = None
   124     end = None
   125     if len(revs) == 1:
   125     if len(revs) == 1:
   126         if revrangesep in revs[0]:
   126         if revrangesep in revs[0]:
   127             start, end = revs[0].split(revrangesep, 1)
   127             start, end = revs[0].split(revrangesep, 1)
   128             start = revfix(repo, start, 0)
   128             start = revfix(repo, start, 0)
   129             end = revfix(repo, end, repo.changelog.count() - 1)
   129             end = revfix(repo, end, len(repo) - 1)
   130         else:
   130         else:
   131             start = revfix(repo, revs[0], None)
   131             start = revfix(repo, revs[0], None)
   132     elif len(revs) == 2:
   132     elif len(revs) == 2:
   133         if revrangesep in revs[0] or revrangesep in revs[1]:
   133         if revrangesep in revs[0] or revrangesep in revs[1]:
   134             raise util.Abort(_('too many revisions specified'))
   134             raise util.Abort(_('too many revisions specified'))
   149     seen, l = {}, []
   149     seen, l = {}, []
   150     for spec in revs:
   150     for spec in revs:
   151         if revrangesep in spec:
   151         if revrangesep in spec:
   152             start, end = spec.split(revrangesep, 1)
   152             start, end = spec.split(revrangesep, 1)
   153             start = revfix(repo, start, 0)
   153             start = revfix(repo, start, 0)
   154             end = revfix(repo, end, repo.changelog.count() - 1)
   154             end = revfix(repo, end, len(repo) - 1)
   155             step = start > end and -1 or 1
   155             step = start > end and -1 or 1
   156             for rev in xrange(start, end+step, step):
   156             for rev in xrange(start, end+step, step):
   157                 if rev in seen:
   157                 if rev in seen:
   158                     continue
   158                     continue
   159                 seen[rev] = 1
   159                 seen[rev] = 1
   986                     windowsize *= 2
   986                     windowsize *= 2
   987 
   987 
   988     m = match(repo, pats, opts)
   988     m = match(repo, pats, opts)
   989     follow = opts.get('follow') or opts.get('follow_first')
   989     follow = opts.get('follow') or opts.get('follow_first')
   990 
   990 
   991     if repo.changelog.count() == 0:
   991     if not len(repo):
   992         return [], m
   992         return [], m
   993 
   993 
   994     if follow:
   994     if follow:
   995         defrange = '%s:0' % repo['.'].rev()
   995         defrange = '%s:0' % repo['.'].rev()
   996     else:
   996     else:
  1005         wanted = dict.fromkeys(revs)
  1005         wanted = dict.fromkeys(revs)
  1006     copies = []
  1006     copies = []
  1007     if not slowpath:
  1007     if not slowpath:
  1008         # Only files, no patterns.  Check the history of each file.
  1008         # Only files, no patterns.  Check the history of each file.
  1009         def filerevgen(filelog, node):
  1009         def filerevgen(filelog, node):
  1010             cl_count = repo.changelog.count()
  1010             cl_count = len(repo)
  1011             if node is None:
  1011             if node is None:
  1012                 last = filelog.count() - 1
  1012                 last = len(filelog) - 1
  1013             else:
  1013             else:
  1014                 last = filelog.rev(node)
  1014                 last = filelog.rev(node)
  1015             for i, window in increasing_windows(last, nullrev):
  1015             for i, window in increasing_windows(last, nullrev):
  1016                 revs = []
  1016                 revs = []
  1017                 for j in xrange(i - window, i + 1):
  1017                 for j in xrange(i - window, i + 1):
  1030             for filename_node in copies:
  1030             for filename_node in copies:
  1031                 yield filename_node
  1031                 yield filename_node
  1032         minrev, maxrev = min(revs), max(revs)
  1032         minrev, maxrev = min(revs), max(revs)
  1033         for file_, node in iterfiles():
  1033         for file_, node in iterfiles():
  1034             filelog = repo.file(file_)
  1034             filelog = repo.file(file_)
  1035             if filelog.count() == 0:
  1035             if not len(filelog):
  1036                 if node is None:
  1036                 if node is None:
  1037                     # A zero count may be a directory or deleted file, so
  1037                     # A zero count may be a directory or deleted file, so
  1038                     # try to find matching entries on the slow path.
  1038                     # try to find matching entries on the slow path.
  1039                     slowpath = True
  1039                     slowpath = True
  1040                     break
  1040                     break
  1056             raise util.Abort(_('can only follow copies/renames for explicit '
  1056             raise util.Abort(_('can only follow copies/renames for explicit '
  1057                                'file names'))
  1057                                'file names'))
  1058 
  1058 
  1059         # The slow path checks files modified in every changeset.
  1059         # The slow path checks files modified in every changeset.
  1060         def changerevgen():
  1060         def changerevgen():
  1061             for i, window in increasing_windows(repo.changelog.count()-1,
  1061             for i, window in increasing_windows(len(repo) - 1, nullrev):
  1062                                                 nullrev):
       
  1063                 for j in xrange(i - window, i + 1):
  1062                 for j in xrange(i - window, i + 1):
  1064                     yield j, change(j)[3]
  1063                     yield j, change(j)[3]
  1065 
  1064 
  1066         for rev, changefiles in changerevgen():
  1065         for rev, changefiles in changerevgen():
  1067             matches = filter(m, changefiles)
  1066             matches = filter(m, changefiles)