mercurial/utils/procutil.py
changeset 48488 f8540fe4be0f
parent 48487 333a2656e981
child 48875 6000f5b25c9b
child 49068 90e564882f07
equal deleted inserted replaced
48487:333a2656e981 48488:f8540fe4be0f
   740             start_new_session = True
   740             start_new_session = True
   741         else:
   741         else:
   742             start_new_session = False
   742             start_new_session = False
   743             ensurestart = True
   743             ensurestart = True
   744 
   744 
       
   745         stdin = None
       
   746 
   745         try:
   747         try:
   746             if stdin_bytes is None:
   748             if stdin_bytes is None:
   747                 stdin = subprocess.DEVNULL
   749                 stdin = subprocess.DEVNULL
   748             else:
   750             else:
   749                 stdin = pycompat.unnamedtempfile()
   751                 stdin = pycompat.unnamedtempfile()
   768         except Exception:
   770         except Exception:
   769             if record_wait is not None:
   771             if record_wait is not None:
   770                 record_wait(255)
   772                 record_wait(255)
   771             raise
   773             raise
   772         finally:
   774         finally:
   773             if stdin_bytes is not None:
   775             if stdin_bytes is not None and stdin is not None:
   774                 assert not isinstance(stdin, int)
   776                 assert not isinstance(stdin, int)
   775                 stdin.close()
   777                 stdin.close()
   776         if not ensurestart:
   778         if not ensurestart:
   777             # Even though we're not waiting on the child process,
   779             # Even though we're not waiting on the child process,
   778             # we still must call waitpid() on it at some point so
   780             # we still must call waitpid() on it at some point so
   850                         % (cmd, os.strerror(returncode)),
   852                         % (cmd, os.strerror(returncode)),
   851                     )
   853                     )
   852                 return
   854                 return
   853 
   855 
   854         returncode = 255
   856         returncode = 255
       
   857         stdin = None
       
   858 
   855         try:
   859         try:
   856             if record_wait is None:
   860             if record_wait is None:
   857                 # Start a new session
   861                 # Start a new session
   858                 os.setsid()
   862                 os.setsid()
   859             # connect stdin to devnull to make sure the subprocess can't
   863             # connect stdin to devnull to make sure the subprocess can't
   892         except Exception:
   896         except Exception:
   893             returncode = 255
   897             returncode = 255
   894         finally:
   898         finally:
   895             # mission accomplished, this child needs to exit and not
   899             # mission accomplished, this child needs to exit and not
   896             # continue the hg process here.
   900             # continue the hg process here.
   897             stdin.close()
   901             if stdin is not None:
       
   902                 stdin.close()
   898             if record_wait is None:
   903             if record_wait is None:
   899                 os._exit(returncode)
   904                 os._exit(returncode)
   900 
   905 
   901     if pycompat.ispy3:
   906     if pycompat.ispy3:
   902         # This branch is more robust, because it avoids running python
   907         # This branch is more robust, because it avoids running python