Mercurial > public > mercurial-scm > hg
comparison mercurial/changegroup.py @ 23203:3872d563e01a
changelog: handle writepending in the transaction
The 'delayupdate' method now takes a transaction object and registers its
'_writepending' method for execution in 'transaction.writepending()'. The hook can then
use 'transaction.writepending()' directly.
At some point this will allow the addition of other file creation
during writepending.
author | Pierre-Yves David <pierre-yves.david@fb.com> |
---|---|
date | Fri, 17 Oct 2014 21:55:31 -0700 |
parents | 832b7ef275c8 |
children | 2d54aa5397cd |
comparison
equal
deleted
inserted
replaced
23202:ea5af863fbff | 23203:3872d563e01a |
---|---|
659 return 0 | 659 return 0 |
660 | 660 |
661 changesets = files = revisions = 0 | 661 changesets = files = revisions = 0 |
662 efiles = set() | 662 efiles = set() |
663 | 663 |
664 # write changelog data to temp files so concurrent readers will not see | |
665 # inconsistent view | |
666 cl = repo.changelog | |
667 cl.delayupdate() | |
668 oldheads = cl.heads() | |
669 | |
670 tr = repo.transaction("\n".join([srctype, util.hidepassword(url)])) | 664 tr = repo.transaction("\n".join([srctype, util.hidepassword(url)])) |
671 # The transaction could have been created before and already carries source | 665 # The transaction could have been created before and already carries source |
672 # information. In this case we use the top level data. We overwrite the | 666 # information. In this case we use the top level data. We overwrite the |
673 # argument because we need to use the top level value (if they exist) in | 667 # argument because we need to use the top level value (if they exist) in |
674 # this function. | 668 # this function. |
675 srctype = tr.hookargs.setdefault('source', srctype) | 669 srctype = tr.hookargs.setdefault('source', srctype) |
676 url = tr.hookargs.setdefault('url', url) | 670 url = tr.hookargs.setdefault('url', url) |
671 | |
672 # write changelog data to temp files so concurrent readers will not see | |
673 # inconsistent view | |
674 cl = repo.changelog | |
675 cl.delayupdate(tr) | |
676 oldheads = cl.heads() | |
677 try: | 677 try: |
678 repo.hook('prechangegroup', throw=True, **tr.hookargs) | 678 repo.hook('prechangegroup', throw=True, **tr.hookargs) |
679 | 679 |
680 trp = weakref.proxy(tr) | 680 trp = weakref.proxy(tr) |
681 # pull off the changeset group | 681 # pull off the changeset group |
754 " with %d changes to %d files%s\n") | 754 " with %d changes to %d files%s\n") |
755 % (changesets, revisions, files, htext)) | 755 % (changesets, revisions, files, htext)) |
756 repo.invalidatevolatilesets() | 756 repo.invalidatevolatilesets() |
757 | 757 |
758 if changesets > 0: | 758 if changesets > 0: |
759 p = lambda: cl.writepending() and repo.root or "" | 759 p = lambda: tr.writepending() and repo.root or "" |
760 if 'node' not in tr.hookargs: | 760 if 'node' not in tr.hookargs: |
761 tr.hookargs['node'] = hex(cl.node(clstart)) | 761 tr.hookargs['node'] = hex(cl.node(clstart)) |
762 hookargs = dict(tr.hookargs) | 762 hookargs = dict(tr.hookargs) |
763 else: | 763 else: |
764 hookargs = dict(tr.hookargs) | 764 hookargs = dict(tr.hookargs) |