diff --git a/mercurial/merge.py b/mercurial/merge.py --- a/mercurial/merge.py +++ b/mercurial/merge.py @@ -1244,9 +1244,7 @@ def update(repo, node, branchmerge, forc wlock.release() if not partial: - def updatehook(parent1=xp1, parent2=xp2, error=stats[3]): - repo.hook('update', parent1=parent1, parent2=parent2, error=error) - repo._afterlock(updatehook) + repo.hook('update', parent1=xp1, parent2=xp2, error=stats[3]) return stats def graft(repo, ctx, pctx, labels): diff --git a/tests/test-backout.t b/tests/test-backout.t --- a/tests/test-backout.t +++ b/tests/test-backout.t @@ -313,6 +313,41 @@ invocation of the hook to be examined) > preupdate.visibility = > EOF +== test visibility to external update hook + + $ hg update -q -C 2 + $ hg --config extensions.strip= strip 3 + saved backup bundle to * (glob) + + $ cat >> .hg/hgrc < [hooks] + > update.visibility = sh $TESTTMP/checkvisibility.sh update + > EOF + + $ hg backout --merge -d '3 0' 1 --tool=true -m 'fixed comment' + ==== update: + 1:5a50a024c182 + ==== + reverting a + created new head + changeset 3:d92a3f57f067 backs out changeset 1:5a50a024c182 + ==== update: + 2:6ea3f2a197a2 + ==== + merging with changeset 3:d92a3f57f067 + merging a + ==== update: + 2:6ea3f2a197a2 + 3:d92a3f57f067 + ==== + 0 files updated, 1 files merged, 0 files removed, 0 files unresolved + (branch merge, don't forget to commit) + + $ cat >> .hg/hgrc < [hooks] + > update.visibility = + > EOF + $ cd .. backout should not back out subsequent changesets diff --git a/tests/test-blackbox.t b/tests/test-blackbox.t --- a/tests/test-blackbox.t +++ b/tests/test-blackbox.t @@ -119,8 +119,8 @@ extension and python hooks - use the eol $ echo '[hooks]' >> .hg/hgrc $ echo 'update = echo hooked' >> .hg/hgrc $ hg update + hooked 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - hooked $ hg blackbox -l 5 1970/01/01 00:00:00 bob (*)> update (glob) 1970/01/01 00:00:00 bob (*)> writing .hg/cache/tags2-visible with 0 tags (glob) diff --git a/tests/test-hook.t b/tests/test-hook.t --- a/tests/test-hook.t +++ b/tests/test-hook.t @@ -223,8 +223,8 @@ update hook $ echo "update = printenv.py update" >> .hg/hgrc $ hg update preupdate hook: HG_PARENT1=539e4b31b6dc + update hook: HG_ERROR=0 HG_PARENT1=539e4b31b6dc 2 files updated, 0 files merged, 0 files removed, 0 files unresolved - update hook: HG_ERROR=0 HG_PARENT1=539e4b31b6dc pushkey hook @@ -644,8 +644,8 @@ final release (and dirstate flush). $ hg ci -ma 223eafe2750c tip $ hg up 0 --config extensions.largefiles= + cb9a9f314b8b 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - cb9a9f314b8b make sure --verbose (and --quiet/--debug etc.) are propagated to the local ui that is passed to pre/post hooks diff --git a/tests/test-shelve.t b/tests/test-shelve.t --- a/tests/test-shelve.t +++ b/tests/test-shelve.t @@ -1087,6 +1087,52 @@ Test visibility of in-memory changes ins ACTUAL 5:703117a2acfb ==== +== test visibility to external update hook + + $ hg update -q -C 5 + + $ cat >> .hg/hgrc < [hooks] + > update.visibility = sh $TESTTMP/checkvisibility.sh update + > EOF + + $ echo nnnn >> n + + $ sh $TESTTMP/checkvisibility.sh before-unshelving + ==== before-unshelving: + VISIBLE 5:703117a2acfb + ACTUAL 5:703117a2acfb + ==== + + $ hg unshelve --keep default + temporarily committing pending changes (restore with 'hg unshelve --abort') + rebasing shelved changes + rebasing 7:fcbb97608399 "changes to 'create conflict'" (tip) + ==== update: + VISIBLE 6:66b86db80ee4 + VISIBLE 7:fcbb97608399 + ACTUAL 5:703117a2acfb + ==== + ==== update: + VISIBLE 6:66b86db80ee4 + ACTUAL 5:703117a2acfb + ==== + ==== update: + VISIBLE 5:703117a2acfb + ACTUAL 5:703117a2acfb + ==== + + $ cat >> .hg/hgrc < [hooks] + > update.visibility = + > EOF + + $ sh $TESTTMP/checkvisibility.sh after-unshelving + ==== after-unshelving: + VISIBLE 5:703117a2acfb + ACTUAL 5:703117a2acfb + ==== + $ cd .. test Abort unshelve always gets user out of the unshelved state