132 def revsetextinct(repo, subset, x): |
132 def revsetextinct(repo, subset, x): |
133 """obsolete changesets without obsolete descendants""" |
133 """obsolete changesets without obsolete descendants""" |
134 args = revset.getargs(x, 0, 0, 'unstable takes no arguments') |
134 args = revset.getargs(x, 0, 0, 'unstable takes no arguments') |
135 return [r for r in subset if r in repo._extinctset] |
135 return [r for r in subset if r in repo._extinctset] |
136 |
136 |
|
137 |
|
138 def _obsparents(repo, narrow, s): |
|
139 cs = set() |
|
140 nm = repo.changelog.nodemap |
|
141 for r in s: |
|
142 for p in repo._obssubrels.get(repo[r].node(), ()): |
|
143 pr = nm.get(p, None) |
|
144 if pr is not None: |
|
145 cs.add(pr) |
|
146 return cs |
|
147 |
|
148 |
|
149 def revsetobsparents(repo, subset, x): |
|
150 """obsolete parents of a changeset""" |
|
151 s = revset.getset(repo, range(len(repo)), x) |
|
152 cs = _obsparents(repo, subset, s) |
|
153 return [r for r in subset if r in cs] |
|
154 |
137 ### Other Extension compat |
155 ### Other Extension compat |
138 ############################ |
156 ############################ |
139 |
157 |
140 def concludenode(orig, repo, rev, *args, **kwargs): |
158 def concludenode(orig, repo, rev, *args, **kwargs): |
141 """wrapper for rebase 's concludenode that set obsolete relation""" |
159 """wrapper for rebase 's concludenode that set obsolete relation""" |
158 |
176 |
159 revset.symbols["obsolete"] = revsetobsolete |
177 revset.symbols["obsolete"] = revsetobsolete |
160 revset.symbols["unstable"] = revsetunstable |
178 revset.symbols["unstable"] = revsetunstable |
161 revset.symbols["suspended"] = revsetsuspended |
179 revset.symbols["suspended"] = revsetsuspended |
162 revset.symbols["extinct"] = revsetextinct |
180 revset.symbols["extinct"] = revsetextinct |
|
181 revset.symbols["obsparents"] = revsetobsparents |
163 |
182 |
164 |
183 |
165 try: |
184 try: |
166 rebase = extensions.find('rebase') |
185 rebase = extensions.find('rebase') |
167 if rebase: |
186 if rebase: |