comparison hgsubversion/util.py @ 1547:910f56f0d09c

revset: make "fromsvn()" lazy "fromsvn()" could be a huge revset. Therefore a lazy version makes more sense. This also resolves a subtle ordering issue. See https://www.mercurial-scm.org/pipermail/mercurial-devel/2017-August/103368.html for the context.
author Jun Wu <quark@fb.com>
date Tue, 19 Dec 2017 14:18:01 -0800
parents 5adfb81c4680
children 7f83be82d03f
comparison
equal deleted inserted replaced
1546:ddfd60760fac 1547:910f56f0d09c
346 '''``fromsvn()`` 346 '''``fromsvn()``
347 Select changesets that originate from Subversion. 347 Select changesets that originate from Subversion.
348 ''' 348 '''
349 args = revset.getargs(x, 0, 0, "fromsvn takes no arguments") 349 args = revset.getargs(x, 0, 0, "fromsvn takes no arguments")
350 350
351 rev = repo.changelog.rev
352 bin = node.bin
353 meta = repo.svnmeta(skiperrorcheck=True) 351 meta = repo.svnmeta(skiperrorcheck=True)
354 if not meta.revmapexists: 352 if not meta.revmapexists:
355 raise hgutil.Abort("svn metadata is missing - " 353 raise hgutil.Abort("svn metadata is missing - "
356 "run 'hg svn rebuildmeta' to reconstruct it") 354 "run 'hg svn rebuildmeta' to reconstruct it")
357 svnrevs = set(rev(h) for h in meta.revmap.hashes().keys()) 355 tonode = repo.changelog.node
358 filteredrevs = filter(svnrevs.__contains__, subset) 356 hashes = meta.revmap.hashes()
359 if smartset is not None: 357 return subset.filter(lambda r: tonode(r) in hashes)
360 filteredrevs = smartset.baseset(filteredrevs)
361 return filteredrevs
362 358
363 def revset_svnrev(repo, subset, x): 359 def revset_svnrev(repo, subset, x):
364 '''``svnrev(number)`` 360 '''``svnrev(number)``
365 Select changesets that originate in the given Subversion revision. 361 Select changesets that originate in the given Subversion revision.
366 ''' 362 '''