355 if val is None or val is False: |
355 if val is None or val is False: |
356 return '0' |
356 return '0' |
357 if val is True: |
357 if val is True: |
358 return '1' |
358 return '1' |
359 return str(val) |
359 return str(val) |
360 oldenv = {} |
|
361 for k in environ: |
|
362 oldenv[k] = os.environ.get(k) |
|
363 if cwd is not None: |
|
364 oldcwd = os.getcwd() |
|
365 origcmd = cmd |
360 origcmd = cmd |
366 if os.name == 'nt': |
361 if os.name == 'nt': |
367 cmd = '"%s"' % cmd |
362 cmd = '"%s"' % cmd |
368 try: |
363 env = dict(os.environ) |
369 for k, v in environ.iteritems(): |
364 env.update((k, py2shell(v)) for k, v in environ.iteritems()) |
370 os.environ[k] = py2shell(v) |
365 env['HG'] = hgexecutable() |
371 os.environ['HG'] = hgexecutable() |
366 rc = subprocess.call(cmd, shell=True, close_fds=closefds, |
372 if cwd is not None and oldcwd != cwd: |
367 env=env, cwd=cwd) |
373 os.chdir(cwd) |
368 if sys.platform == 'OpenVMS' and rc & 1: |
374 rc = os.system(cmd) |
369 rc = 0 |
375 if sys.platform == 'OpenVMS' and rc & 1: |
370 if rc and onerr: |
376 rc = 0 |
371 errmsg = '%s %s' % (os.path.basename(origcmd.split(None, 1)[0]), |
377 if rc and onerr: |
372 explain_exit(rc)[0]) |
378 errmsg = '%s %s' % (os.path.basename(origcmd.split(None, 1)[0]), |
373 if errprefix: |
379 explain_exit(rc)[0]) |
374 errmsg = '%s: %s' % (errprefix, errmsg) |
380 if errprefix: |
375 try: |
381 errmsg = '%s: %s' % (errprefix, errmsg) |
376 onerr.warn(errmsg + '\n') |
382 try: |
377 except AttributeError: |
383 onerr.warn(errmsg + '\n') |
378 raise onerr(errmsg) |
384 except AttributeError: |
379 return rc |
385 raise onerr(errmsg) |
|
386 return rc |
|
387 finally: |
|
388 for k, v in oldenv.iteritems(): |
|
389 if v is None: |
|
390 del os.environ[k] |
|
391 else: |
|
392 os.environ[k] = v |
|
393 if cwd is not None and oldcwd != cwd: |
|
394 os.chdir(oldcwd) |
|
395 |
380 |
396 def checksignature(func): |
381 def checksignature(func): |
397 '''wrap a function with code to check for calling errors''' |
382 '''wrap a function with code to check for calling errors''' |
398 def check(*args, **kwargs): |
383 def check(*args, **kwargs): |
399 try: |
384 try: |