comparison mercurial/revset.py @ 38489:626d29c6e987

revset: leverage orset() to flatten ancestor() arguments This also makes orset() accept an empty argument because nullary ancestor() call is valid. That's not the case for orset(), but should be okay.
author Yuya Nishihara <yuya@tcha.org>
date Sat, 16 Jun 2018 23:21:47 +0900
parents b23ef2f06d98
children 5d88fd1bc2af
comparison
equal deleted inserted replaced
38488:b23ef2f06d98 38489:626d29c6e987
201 b = _orsetlist(repo, subset, xs[p:], order) 201 b = _orsetlist(repo, subset, xs[p:], order)
202 return a + b 202 return a + b
203 203
204 def orset(repo, subset, x, order): 204 def orset(repo, subset, x, order):
205 xs = getlist(x) 205 xs = getlist(x)
206 if not xs:
207 return baseset()
206 if order == followorder: 208 if order == followorder:
207 # slow path to take the subset order 209 # slow path to take the subset order
208 return subset & _orsetlist(repo, fullreposet(repo), xs, anyorder) 210 return subset & _orsetlist(repo, fullreposet(repo), xs, anyorder)
209 else: 211 else:
210 return _orsetlist(repo, subset, xs, order) 212 return _orsetlist(repo, subset, xs, order)
307 309
308 Accepts 0 or more changesets. 310 Accepts 0 or more changesets.
309 Will return empty list when passed no args. 311 Will return empty list when passed no args.
310 Greatest common ancestor of a single changeset is that changeset. 312 Greatest common ancestor of a single changeset is that changeset.
311 """ 313 """
312 l = getlist(x)
313 rl = fullreposet(repo)
314 anc = None 314 anc = None
315 315 for r in orset(repo, fullreposet(repo), x, order=anyorder):
316 # (getset(repo, rl, i) for i in l) generates a list of lists 316 if anc is None:
317 for revs in (getset(repo, rl, i) for i in l): 317 anc = repo[r]
318 for r in revs: 318 else:
319 if anc is None: 319 anc = anc.ancestor(repo[r])
320 anc = repo[r]
321 else:
322 anc = anc.ancestor(repo[r])
323 320
324 if anc is not None and anc.rev() in subset: 321 if anc is not None and anc.rev() in subset:
325 return baseset([anc.rev()]) 322 return baseset([anc.rev()])
326 return baseset() 323 return baseset()
327 324