52 pass |
52 pass |
53 |
53 |
54 def hook(self, name, throw=False, **args): |
54 def hook(self, name, throw=False, **args): |
55 def runhook(name, cmd): |
55 def runhook(name, cmd): |
56 self.ui.note(_("running hook %s: %s\n") % (name, cmd)) |
56 self.ui.note(_("running hook %s: %s\n") % (name, cmd)) |
57 old = {} |
57 env = dict([('HG_' + k.upper(), v) for k, v in args.iteritems()]) |
58 for k, v in args.items(): |
58 r = util.esystem(cmd, environ=env, cwd=self.root) |
59 k = k.upper() |
|
60 old['HG_' + k] = os.environ.get(k, None) |
|
61 old[k] = os.environ.get(k, None) |
|
62 os.environ['HG_' + k] = str(v) |
|
63 os.environ[k] = str(v) |
|
64 |
|
65 try: |
|
66 # Hooks run in the repository root |
|
67 olddir = os.getcwd() |
|
68 os.chdir(self.root) |
|
69 r = os.system(cmd) |
|
70 finally: |
|
71 for k, v in old.items(): |
|
72 if v is not None: |
|
73 os.environ[k] = v |
|
74 else: |
|
75 del os.environ[k] |
|
76 |
|
77 os.chdir(olddir) |
|
78 |
|
79 if r: |
59 if r: |
80 desc, r = util.explain_exit(r) |
60 desc, r = util.explain_exit(r) |
81 if throw: |
61 if throw: |
82 raise util.Abort(_('%s hook %s') % (name, desc)) |
62 raise util.Abort(_('%s hook %s') % (name, desc)) |
83 self.ui.warn(_('error: %s hook %s\n') % (name, desc)) |
63 self.ui.warn(_('error: %s hook %s\n') % (name, desc)) |
229 except IOError: |
209 except IOError: |
230 ds = "" |
210 ds = "" |
231 self.opener("journal.dirstate", "w").write(ds) |
211 self.opener("journal.dirstate", "w").write(ds) |
232 |
212 |
233 tr = transaction.transaction(self.ui.warn, self.opener, |
213 tr = transaction.transaction(self.ui.warn, self.opener, |
234 self.join("journal"), |
214 self.join("journal"), |
235 aftertrans(self.path)) |
215 aftertrans(self.path)) |
236 self.transhandle = tr |
216 self.transhandle = tr |
237 return tr |
217 return tr |
238 |
218 |
239 def recover(self): |
219 def recover(self): |