equal
deleted
inserted
replaced
85 yield i |
85 yield i |
86 break |
86 break |
87 |
87 |
88 return generatorset(iterate(), iterasc=True) |
88 return generatorset(iterate(), iterasc=True) |
89 |
89 |
90 def revsbetween(repo, roots, heads): |
90 def reachableroots(repo, roots, heads, includepath=False): |
91 """Return all paths between roots and heads, inclusive of both endpoint |
91 """return (heads(::<roots> and ::<heads>)) |
92 sets.""" |
92 |
|
93 If includepath is True, return (<roots>::<heads>).""" |
93 if not roots: |
94 if not roots: |
94 return baseset() |
95 return baseset() |
95 parentrevs = repo.changelog.parentrevs |
96 parentrevs = repo.changelog.parentrevs |
96 visit = list(heads) |
97 visit = list(heads) |
97 reachable = set() |
98 reachable = set() |
108 # sys.getrecursionlimit() |
109 # sys.getrecursionlimit() |
109 while visit: |
110 while visit: |
110 rev = nextvisit() |
111 rev = nextvisit() |
111 if rev in roots: |
112 if rev in roots: |
112 reached(rev) |
113 reached(rev) |
|
114 if not includepath: |
|
115 continue |
113 parents = parentrevs(rev) |
116 parents = parentrevs(rev) |
114 seen[rev] = parents |
117 seen[rev] = parents |
115 for parent in parents: |
118 for parent in parents: |
116 if parent >= minroot and parent not in seen: |
119 if parent >= minroot and parent not in seen: |
117 dovisit(parent) |
120 dovisit(parent) |
118 if not reachable: |
121 if not reachable: |
119 return baseset() |
122 return baseset() |
|
123 if not includepath: |
|
124 return reachable |
120 for rev in sorted(seen): |
125 for rev in sorted(seen): |
121 for parent in seen[rev]: |
126 for parent in seen[rev]: |
122 if parent in reachable: |
127 if parent in reachable: |
123 reached(rev) |
128 reached(rev) |
124 return baseset(sorted(reachable)) |
129 return baseset(sorted(reachable)) |
404 # would be more efficient. |
409 # would be more efficient. |
405 return r & subset |
410 return r & subset |
406 |
411 |
407 def dagrange(repo, subset, x, y): |
412 def dagrange(repo, subset, x, y): |
408 r = fullreposet(repo) |
413 r = fullreposet(repo) |
409 xs = revsbetween(repo, getset(repo, r, x), getset(repo, r, y)) |
414 xs = reachableroots(repo, getset(repo, r, x), getset(repo, r, y), |
|
415 includepath=True) |
410 # XXX We should combine with subset first: 'subset & baseset(...)'. This is |
416 # XXX We should combine with subset first: 'subset & baseset(...)'. This is |
411 # necessary to ensure we preserve the order in subset. |
417 # necessary to ensure we preserve the order in subset. |
412 return xs & subset |
418 return xs & subset |
413 |
419 |
414 def andset(repo, subset, x, y): |
420 def andset(repo, subset, x, y): |