Mercurial > public > mercurial-scm > hg-stable
diff mercurial/hg.py @ 487:2ad41189bee5
Add initial hook support
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Add initial hook support
This adds the basic hook code as well as pre and post-commit hooks.
Argument passing is by environment variable key/value pairs so that
extra data can be passed over time. File lists will generally not be
passed to hooks as these can be extremely long (>1M).
manifest hash: 45cf9bab432782c391bc9c1c048c84cc75d52740
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.0 (GNU/Linux)
iD8DBQFCwOukywK+sNU5EO8RAsVsAJ9QipR2aKRSSvoRNo+3If6JddUDkwCgkZrM
KEmZpUOxhNHqezFVrHDRTjE=
=aedm
-----END PGP SIGNATURE-----
author | mpm@selenic.com |
---|---|
date | Mon, 27 Jun 2005 22:18:12 -0800 |
parents | 934279f3ca53 |
children | e94cebc60d96 |
line wrap: on
line diff
--- a/mercurial/hg.py Mon Jun 27 10:01:46 2005 -0800 +++ b/mercurial/hg.py Mon Jun 27 22:18:12 2005 -0800 @@ -371,6 +371,30 @@ if pat.search(f): return True return False + def hook(self, name, **args): + s = self.ui.config("hooks", name) + if s: + self.ui.note("running hook %s: %s\n" % (name, s)) + old = {} + for k, v in args.items(): + k = k.upper() + old[k] = os.environ.get(k, None) + os.environ[k] = v + + r = os.system(s) + + for k, v in old.items(): + if v != None: + os.environ[k] = v + else: + del os.environ[k] + + if r: + self.ui.warn("abort: %s hook failed with status %d!\n" % + (name, r)) + return False + return True + def tags(self): '''return a mapping of tag to node''' if not self.tagscache: @@ -548,6 +572,9 @@ self.ui.status("nothing changed\n") return + if not self.hook("precommit"): + return 1 + p1, p2 = self.dirstate.parents() c1 = self.changelog.read(p1) c2 = self.changelog.read(p2) @@ -603,6 +630,10 @@ text = edittext n = self.changelog.add(mn, new, text, tr, p1, p2, user, date) + + if not self.hook("commit", node=hex(n)): + return 1 + tr.close() self.dirstate.setparents(n)