Mercurial > hg > mercurial-crew-with-dirclash
comparison mercurial/util.py @ 1880:05c7d75be925
fix broken environment save/restore when a hook runs.
move "run commend with different env/cwd" code out to function in util.
new function is called esystem.
author | Vadim Gelfer <vadim.gelfer@gmail.com> |
---|---|
date | Fri, 10 Mar 2006 22:24:19 -0800 |
parents | d314a89fa4f1 |
children | c0320567931f |
comparison
equal
deleted
inserted
replaced
1879:9ef0850b9b68 | 1880:05c7d75be925 |
---|---|
323 explain_exit(rc)[0]) | 323 explain_exit(rc)[0]) |
324 if errprefix: | 324 if errprefix: |
325 errmsg = "%s: %s" % (errprefix, errmsg) | 325 errmsg = "%s: %s" % (errprefix, errmsg) |
326 raise Abort(errmsg) | 326 raise Abort(errmsg) |
327 | 327 |
328 def esystem(cmd, environ={}, cwd=None): | |
329 '''enhanced shell command execution. | |
330 run with environment maybe modified, maybe in different dir.''' | |
331 oldenv = {} | |
332 for k in environ: | |
333 oldenv[k] = os.environ.get(k) | |
334 if cwd is not None: | |
335 oldcwd = os.getcwd() | |
336 try: | |
337 for k, v in environ.iteritems(): | |
338 os.environ[k] = str(v) | |
339 if cwd is not None and oldcwd != cwd: | |
340 os.chdir(cwd) | |
341 return os.system(cmd) | |
342 finally: | |
343 for k, v in oldenv.iteritems(): | |
344 if v is None: | |
345 del os.environ[k] | |
346 else: | |
347 os.environ[k] = v | |
348 if cwd is not None and oldcwd != cwd: | |
349 os.chdir(oldcwd) | |
350 | |
328 def rename(src, dst): | 351 def rename(src, dst): |
329 """forcibly rename a file""" | 352 """forcibly rename a file""" |
330 try: | 353 try: |
331 os.rename(src, dst) | 354 os.rename(src, dst) |
332 except: | 355 except: |