equal
deleted
inserted
replaced
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 |