mercurial/localrepo.py
changeset 1880 05c7d75be925
parent 1853 5ac811b720de
child 1882 c0320567931f
equal deleted inserted replaced
1879:9ef0850b9b68 1880:05c7d75be925
    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):