hgext/evolve.py
branchstable
changeset 1467 5c385b812500
parent 1466 a433948ca8d2
child 1468 bc6cf6cc06fd
equal deleted inserted replaced
1466:a433948ca8d2 1467:5c385b812500
  1413             if succ in revs:
  1413             if succ in revs:
  1414                 dependencies[r].add(succ)
  1414                 dependencies[r].add(succ)
  1415                 rdependencies[succ].add(r)
  1415                 rdependencies[succ].add(r)
  1416     return dependencies, rdependencies
  1416     return dependencies, rdependencies
  1417 
  1417 
       
  1418 def _dedupedivergents(repo, revs):
       
  1419     """Dedupe the divergents revs in revs to get one from each group with the
       
  1420     lowest revision numbers
       
  1421     """
       
  1422     repo = repo.unfiltered()
       
  1423     res = set()
       
  1424     # To not reevaluate divergents of the same group once one is encountered
       
  1425     discarded = set()
       
  1426     for rev in revs:
       
  1427         if rev in discarded:
       
  1428             continue
       
  1429         divergent = repo[rev]
       
  1430         base, others = divergentdata(divergent)
       
  1431         othersrevs = [o.rev() for o in others]
       
  1432         res.add(min([divergent.rev()] + othersrevs))
       
  1433         discarded.update(othersrevs)
       
  1434     return res
       
  1435 
  1418 def _selectrevs(repo, allopt, revopt, anyopt, targetcat):
  1436 def _selectrevs(repo, allopt, revopt, anyopt, targetcat):
  1419     """select troubles in repo matching according to given options"""
  1437     """select troubles in repo matching according to given options"""
  1420     revs = set()
  1438     revs = set()
  1421     if allopt or revopt:
  1439     if allopt or revopt:
  1422         revs = repo.revs(targetcat+'()')
  1440         revs = repo.revs(targetcat+'()')
  1423         if revopt:
  1441         if revopt:
  1424             revs = scmutil.revrange(repo, revopt) & revs
  1442             revs = scmutil.revrange(repo, revopt) & revs
  1425         elif not anyopt and targetcat == 'unstable':
  1443         elif not anyopt and targetcat == 'unstable':
  1426             revs = set(_aspiringdescendant(repo, repo.revs('(.::) - obsolete()::')))
  1444             revs = set(_aspiringdescendant(repo, repo.revs('(.::) - obsolete()::')))
       
  1445         if targetcat == 'divergent':
       
  1446             # Pick one divergent per group of divergents
       
  1447             revs = _dedupedivergents(repo, revs)
  1427     elif anyopt:
  1448     elif anyopt:
  1428         revs = repo.revs('first(%s())' % (targetcat))
  1449         revs = repo.revs('first(%s())' % (targetcat))
  1429     elif targetcat == 'unstable':
  1450     elif targetcat == 'unstable':
  1430         revs = set(_aspiringchildren(repo, repo.revs('(.::) - obsolete()::')))
  1451         revs = set(_aspiringchildren(repo, repo.revs('(.::) - obsolete()::')))
  1431         if 1 < len(revs):
  1452         if 1 < len(revs):