Mercurial > hg
changeset 33383:774beab915fe
journal: execute setup procedures for already instantiated dirstate
If dirstate is instantiated before reposetup() of journal extension,
it doesn't have "journalstorage" property, even if it is instantiated
via wrapdirstate() wrapping repo.dirstate(), because wrapdirstate()
works as same as original one before marking repo as "journal"-ing in
reposetup().
This issue can be reproduced by running test-journal.t or
test-journal-share.t with fsmonitor-run-tests.py.
On the other hand, just discarding already instantiated dirstate in
reposetup() prevents chg from filling dirstate before reposetup() (see
bf3af0eced44 for detail).
Therefore, this patch executes setup procedures for already
instantiated dirstate explicitly in reposetup().
To centralize setup procedures for dirstate, this patch also factors
them out from wrapdirstate().
author | FUJIWARA Katsunori <foozy@lares.dti.ne.jp> |
---|---|
date | Mon, 10 Jul 2017 23:09:51 +0900 |
parents | b107a7660f4e |
children | bc1f373cf3f6 |
files | hgext/journal.py |
diffstat | 1 files changed, 12 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext/journal.py Mon Jul 10 23:09:51 2017 +0900 +++ b/hgext/journal.py Mon Jul 10 23:09:51 2017 +0900 @@ -70,18 +70,28 @@ if repo.local(): repo.journal = journalstorage(repo) + dirstate, cached = localrepo.isfilecached(repo, 'dirstate') + if cached: + # already instantiated dirstate isn't yet marked as + # "journal"-ing, even though repo.dirstate() was already + # wrapped by own wrapdirstate() + _setupdirstate(repo, dirstate) + def runcommand(orig, lui, repo, cmd, fullargs, *args): """Track the command line options for recording in the journal""" journalstorage.recordcommand(*fullargs) return orig(lui, repo, cmd, fullargs, *args) +def _setupdirstate(repo, dirstate): + dirstate.journalstorage = repo.journal + dirstate.addparentchangecallback('journal', recorddirstateparents) + # hooks to record dirstate changes def wrapdirstate(orig, repo): """Make journal storage available to the dirstate object""" dirstate = orig(repo) if util.safehasattr(repo, 'journal'): - dirstate.journalstorage = repo.journal - dirstate.addparentchangecallback('journal', recorddirstateparents) + _setupdirstate(repo, dirstate) return dirstate def recorddirstateparents(dirstate, old, new):