Mercurial > hg
view tests/test-ancestor.py @ 18969:257afe5489d4
largefiles: improve repo wrapping detection
Before this patch, repo wrapping detection in "reposetup()" of
largefiles can detect only limited repo wrapping: replacing target
functions by another one named as "wrap".
So, it can't detect repo wrapping even in recommended style: replacing
"__class__" of repo by derived class.
This patch can detect repo wrapping in both styles below:
- replacing "__class__" of repo by derived class (recommended style):
class derived(repo.__class__):
def push(self, *args, **kwargs):
return super(derived, self).push(*args, **kwargs)
repo.__class__ = derived
- replacing function of repo by another one (not recommended style):
orgpush = repo.push
def push(*args, **kwargs):
return orgpush(*args, **kwargs)
repo.push = push
author | FUJIWARA Katsunori <foozy@lares.dti.ne.jp> |
---|---|
date | Wed, 10 Apr 2013 02:27:35 +0900 |
parents | f7f8159caad3 |
children | 2fa303619b4d |
line wrap: on
line source
from mercurial import ancestor # graph is a dict of child->parent adjacency lists for this graph: # o 13 # | # | o 12 # | | # | | o 11 # | | |\ # | | | | o 10 # | | | | | # | o---+ | 9 # | | | | | # o | | | | 8 # / / / / # | | o | 7 # | | | | # o---+ | 6 # / / / # | | o 5 # | |/ # | o 4 # | | # o | 3 # | | # | o 2 # |/ # o 1 # | # o 0 graph = {0: [-1], 1: [0], 2: [1], 3: [1], 4: [2], 5: [4], 6: [4], 7: [4], 8: [-1], 9: [6, 7], 10: [5], 11: [3, 7], 12: [9], 13: [8]} pfunc = graph.get class mockchangelog(object): parentrevs = graph.get def runmissingancestors(revs, bases): print "%% ancestors of %s and not of %s" % (revs, bases) print ancestor.missingancestors(revs, bases, pfunc) def test_missingancestors(): # Empty revs runmissingancestors([], [1]) runmissingancestors([], []) # If bases is empty, it's the same as if it were [nullrev] runmissingancestors([12], []) # Trivial case: revs == bases runmissingancestors([0], [0]) runmissingancestors([4, 5, 6], [6, 5, 4]) # With nullrev runmissingancestors([-1], [12]) runmissingancestors([12], [-1]) # 9 is a parent of 12. 7 is a parent of 9, so an ancestor of 12. 6 is an # ancestor of 12 but not of 7. runmissingancestors([12], [9]) runmissingancestors([9], [12]) runmissingancestors([12, 9], [7]) runmissingancestors([7, 6], [12]) # More complex cases runmissingancestors([10], [11, 12]) runmissingancestors([11], [10]) runmissingancestors([11], [10, 12]) runmissingancestors([12], [10]) runmissingancestors([12], [11]) runmissingancestors([10, 11, 12], [13]) runmissingancestors([13], [10, 11, 12]) def genlazyancestors(revs, stoprev=0, inclusive=False): print ("%% lazy ancestor set for %s, stoprev = %s, inclusive = %s" % (revs, stoprev, inclusive)) return ancestor.lazyancestors(mockchangelog, revs, stoprev=stoprev, inclusive=inclusive) def printlazyancestors(s, l): print [n for n in l if n in s] def test_lazyancestors(): # Empty revs s = genlazyancestors([]) printlazyancestors(s, [3, 0, -1]) # Standard example s = genlazyancestors([11, 13]) printlazyancestors(s, [11, 13, 7, 9, 8, 3, 6, 4, 1, -1, 0]) # Including revs s = genlazyancestors([11, 13], inclusive=True) printlazyancestors(s, [11, 13, 7, 9, 8, 3, 6, 4, 1, -1, 0]) # Test with stoprev s = genlazyancestors([11, 13], stoprev=6) printlazyancestors(s, [11, 13, 7, 9, 8, 3, 6, 4, 1, -1, 0]) s = genlazyancestors([11, 13], stoprev=6, inclusive=True) printlazyancestors(s, [11, 13, 7, 9, 8, 3, 6, 4, 1, -1, 0]) if __name__ == '__main__': test_missingancestors() test_lazyancestors()