mercurial/scmutil.py
changeset 26020 cc3a30ff9490
parent 25928 4ee4f7415095
child 26098 ce26928cbe41
equal deleted inserted replaced
26019:85f5352c7ca7 26020:cc3a30ff9490
   688     l = revrange(repo, [revspec])
   688     l = revrange(repo, [revspec])
   689     if not l:
   689     if not l:
   690         raise util.Abort(_('empty revision set'))
   690         raise util.Abort(_('empty revision set'))
   691     return repo[l.last()]
   691     return repo[l.last()]
   692 
   692 
       
   693 def _pairspec(revspec):
       
   694     tree = revset.parse(revspec)
       
   695     tree = revset.optimize(tree, True)[1]  # fix up "x^:y" -> "(x^):y"
       
   696     return tree and tree[0] in ('range', 'rangepre', 'rangepost', 'rangeall')
       
   697 
   693 def revpair(repo, revs):
   698 def revpair(repo, revs):
   694     if not revs:
   699     if not revs:
   695         return repo.dirstate.p1(), None
   700         return repo.dirstate.p1(), None
   696 
   701 
   697     l = revrange(repo, revs)
   702     l = revrange(repo, revs)
   709         second = l.last()
   714         second = l.last()
   710 
   715 
   711     if first is None:
   716     if first is None:
   712         raise util.Abort(_('empty revision range'))
   717         raise util.Abort(_('empty revision range'))
   713 
   718 
   714     if first == second and len(revs) == 1 and _revrangesep not in revs[0]:
   719     # if top-level is range expression, the result must always be a pair
       
   720     if first == second and len(revs) == 1 and not _pairspec(revs[0]):
   715         return repo.lookup(first), None
   721         return repo.lookup(first), None
   716 
   722 
   717     return repo.lookup(first), repo.lookup(second)
   723     return repo.lookup(first), repo.lookup(second)
   718 
       
   719 _revrangesep = ':'
       
   720 
   724 
   721 def revrange(repo, revs):
   725 def revrange(repo, revs):
   722     """Yield revision as strings from a list of revision specifications."""
   726     """Yield revision as strings from a list of revision specifications."""
   723     allspecs = []
   727     allspecs = []
   724     for spec in revs:
   728     for spec in revs: