mercurial/util.py
changeset 9517 4368f582c806
parent 9508 e2fd9b62349b
child 9544 b6b0c42739e9
equal deleted inserted replaced
9516:f8048c334066 9517:4368f582c806
   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: