Mercurial > public > mercurial-scm > hg-stable
diff mercurial/hook.py @ 26751:520defbc0335
hook: centralize passing HG_PENDING to external hook process
This patch centralizes passing HG_PENDING to external hook process
into '_exthook()'. To make in-memory changes visible to external hook
process, this patch does:
- write (or schedule to write) in-memory dirstate changes, and
- set HG_PENDING environment variable, if:
- a transaction is running, and
- there are in-memory changes to be visible
This patch tests some commands with some hooks, because transaction
activity of a same hook differs from each other ("---": "not tested").
======== ========= ========= ============
command preupdate precommit pretxncommit
======== ========= ========= ============
unshelve o --- ---
backout x --- ---
import --- o o
qrefresh --- x o
======== ========= ========= ============
Each hooks are examined separately to prevent in-memory changes from
being visible to external process accidentally by side effect of hooks
previously invoked.
author | FUJIWARA Katsunori <foozy@lares.dti.ne.jp> |
---|---|
date | Sat, 17 Oct 2015 01:15:34 +0900 |
parents | 8429369eeb85 |
children | 9f272bf3b342 |
line wrap: on
line diff
--- a/mercurial/hook.py Sat Oct 17 01:15:34 2015 +0900 +++ b/mercurial/hook.py Sat Oct 17 01:15:34 2015 +0900 @@ -118,6 +118,13 @@ starttime = time.time() env = {} + + # make in-memory changes visible to external process + tr = repo.currenttransaction() + repo.dirstate.write(tr) + if tr and tr.writepending(): + env['HG_PENDING'] = repo.root + for k, v in args.iteritems(): if callable(v): v = v()