42 if tags: |
42 if tags: |
43 rev, nodemap = cl.rev, cl.nodemap |
43 rev, nodemap = cl.rev, cl.nodemap |
44 pinned.update(rev(t[0]) for t in tags.values() if t[0] in nodemap) |
44 pinned.update(rev(t[0]) for t in tags.values() if t[0] in nodemap) |
45 return pinned |
45 return pinned |
46 |
46 |
47 def _consistencyblocker(pfunc, hideable, revs): |
|
48 """return non-hideable changeset blocking hideable one |
|
49 |
|
50 For consistency, we cannot actually hide a changeset if one of it children |
|
51 are visible, this function find such children. |
|
52 """ |
|
53 blockers = set() |
|
54 for r in revs: |
|
55 for p in pfunc(r): |
|
56 if p != nullrev and p in hideable: |
|
57 blockers.add(r) |
|
58 break |
|
59 return blockers |
|
60 |
47 |
61 def _revealancestors(pfunc, hidden, revs): |
48 def _revealancestors(pfunc, hidden, revs): |
62 """reveals contiguous chains of hidden ancestors of 'revs' by removing them |
49 """reveals contiguous chains of hidden ancestors of 'revs' by removing them |
63 from 'hidden' |
50 from 'hidden' |
64 |
51 |
87 if hidden: |
74 if hidden: |
88 pfunc = repo.changelog.parentrevs |
75 pfunc = repo.changelog.parentrevs |
89 mutablephases = (phases.draft, phases.secret) |
76 mutablephases = (phases.draft, phases.secret) |
90 mutable = repo._phasecache.getrevset(repo, mutablephases) |
77 mutable = repo._phasecache.getrevset(repo, mutablephases) |
91 |
78 |
92 visible = mutable - hidden |
79 visible = set(mutable - hidden) |
93 blockers = _consistencyblocker(pfunc, hidden, visible) |
80 visible |= (hidden & pinnedrevs(repo)) |
94 |
81 if visible: |
95 # check if we have wd parents, bookmarks or tags pointing to hidden |
|
96 # changesets and remove those. |
|
97 blockers |= (hidden & pinnedrevs(repo)) |
|
98 if blockers: |
|
99 # don't modify possibly cached result of hideablerevs() |
82 # don't modify possibly cached result of hideablerevs() |
100 hidden = hidden.copy() |
83 hidden = hidden.copy() |
101 _revealancestors(pfunc, hidden, blockers) |
84 _revealancestors(pfunc, hidden, visible) |
102 return frozenset(hidden) |
85 return frozenset(hidden) |
103 |
86 |
104 def computeunserved(repo): |
87 def computeunserved(repo): |
105 """compute the set of revision that should be filtered when used a server |
88 """compute the set of revision that should be filtered when used a server |
106 |
89 |