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): |