Mercurial > hg-stable
changeset 29784:f2241c13d5a1
journal: use the dirstate parentchange callbacks
Instead of hacking into dirstate internals let's use the callbacks
to be notified about wd parent change.
author | Mateusz Kwapich <mitrandir@fb.com> |
---|---|
date | Tue, 09 Aug 2016 09:15:46 -0700 |
parents | 2ebd507e5ac3 |
children | a7f8939641aa |
files | hgext/journal.py |
diffstat | 1 files changed, 9 insertions(+), 27 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext/journal.py Thu Aug 11 08:00:41 2016 -0700 +++ b/hgext/journal.py Tue Aug 09 09:15:46 2016 -0700 @@ -24,7 +24,6 @@ bookmarks, cmdutil, commands, - dirstate, dispatch, error, extensions, @@ -63,8 +62,6 @@ extensions.wrapfunction(dispatch, 'runcommand', runcommand) extensions.wrapfunction(bookmarks.bmstore, '_write', recordbookmarks) extensions.wrapfunction( - dirstate.dirstate, '_writedirstate', recorddirstateparents) - extensions.wrapfunction( localrepo.localrepository.dirstate, 'func', wrapdirstate) extensions.wrapfunction(hg, 'postshare', wrappostshare) extensions.wrapfunction(hg, 'copystore', unsharejournal) @@ -84,34 +81,19 @@ dirstate = orig(repo) if util.safehasattr(repo, 'journal'): dirstate.journalstorage = repo.journal + dirstate.addparentchangecallback('journal', recorddirstateparents) return dirstate -def recorddirstateparents(orig, dirstate, dirstatefp): +def recorddirstateparents(dirstate, old, new): """Records all dirstate parent changes in the journal.""" + old = list(old) + new = list(new) if util.safehasattr(dirstate, 'journalstorage'): - old = [node.nullid, node.nullid] - nodesize = len(node.nullid) - try: - # The only source for the old state is in the dirstate file still - # on disk; the in-memory dirstate object only contains the new - # state. dirstate._opendirstatefile() switches beteen .hg/dirstate - # and .hg/dirstate.pending depending on the transaction state. - with dirstate._opendirstatefile() as fp: - state = fp.read(2 * nodesize) - if len(state) == 2 * nodesize: - old = [state[:nodesize], state[nodesize:]] - except IOError: - pass - - new = dirstate.parents() - if old != new: - # only record two hashes if there was a merge - oldhashes = old[:1] if old[1] == node.nullid else old - newhashes = new[:1] if new[1] == node.nullid else new - dirstate.journalstorage.record( - wdirparenttype, '.', oldhashes, newhashes) - - return orig(dirstate, dirstatefp) + # only record two hashes if there was a merge + oldhashes = old[:1] if old[1] == node.nullid else old + newhashes = new[:1] if new[1] == node.nullid else new + dirstate.journalstorage.record( + wdirparenttype, '.', oldhashes, newhashes) # hooks to record bookmark changes (both local and remote) def recordbookmarks(orig, store, fp):