mercurial/utils/procutil.py
changeset 50994 def6f1a4604b
parent 50926 18c8c18993f0
child 51165 a9e00554b3e4
equal deleted inserted replaced
50993:82bc0b26db50 50994:def6f1a4604b
   179 
   179 
   180 if pycompat.iswindows:
   180 if pycompat.iswindows:
   181     # Work around Windows bugs.
   181     # Work around Windows bugs.
   182     stdout = platform.winstdout(stdout)  # pytype: disable=module-attr
   182     stdout = platform.winstdout(stdout)  # pytype: disable=module-attr
   183     stderr = platform.winstdout(stderr)  # pytype: disable=module-attr
   183     stderr = platform.winstdout(stderr)  # pytype: disable=module-attr
   184 if isatty(stdout):
   184 if isatty(stdout) and pycompat.sysplatform != b'OpenVMS':
   185     # The standard library doesn't offer line-buffered binary streams.
   185     # The standard library doesn't offer line-buffered binary streams.
   186     stdout = make_line_buffered(stdout)
   186     stdout = make_line_buffered(stdout)
   187 
   187 
   188 findexe = platform.findexe
   188 findexe = platform.findexe
   189 _gethgcmd = platform.gethgcmd
   189 _gethgcmd = platform.gethgcmd
   206 try:
   206 try:
   207     unblocksignal = osutil.unblocksignal
   207     unblocksignal = osutil.unblocksignal
   208 except AttributeError:
   208 except AttributeError:
   209     pass
   209     pass
   210 
   210 
   211 closefds = pycompat.isposix
   211 closefds = pycompat.isposix and pycompat.sysplatform != b'OpenVMS'
   212 
   212 
   213 
   213 
   214 def explainexit(code):
   214 def explainexit(code):
   215     """return a message describing a subprocess status
   215     """return a message describing a subprocess status
   216     (codes from kill are negative - not os.system/wait encoding)"""
   216     (codes from kill are negative - not os.system/wait encoding)"""
   336         outfd, outname = pycompat.mkstemp(prefix=b'hg-filter-out-')
   336         outfd, outname = pycompat.mkstemp(prefix=b'hg-filter-out-')
   337         os.close(outfd)
   337         os.close(outfd)
   338         cmd = cmd.replace(b'INFILE', inname)
   338         cmd = cmd.replace(b'INFILE', inname)
   339         cmd = cmd.replace(b'OUTFILE', outname)
   339         cmd = cmd.replace(b'OUTFILE', outname)
   340         code = system(cmd)
   340         code = system(cmd)
   341         if pycompat.sysplatform == b'OpenVMS' and code & 1:
       
   342             code = 0
       
   343         if code:
   341         if code:
   344             raise error.Abort(
   342             raise error.Abort(
   345                 _(b"command '%s' failed: %s") % (cmd, explainexit(code))
   343                 _(b"command '%s' failed: %s") % (cmd, explainexit(code))
   346             )
   344             )
   347         with open(outname, b'rb') as fp:
   345         with open(outname, b'rb') as fp:
   381     """return location of the 'hg' executable.
   379     """return location of the 'hg' executable.
   382 
   380 
   383     Defaults to $HG or 'hg' in the search path.
   381     Defaults to $HG or 'hg' in the search path.
   384     """
   382     """
   385     if _hgexecutable is None:
   383     if _hgexecutable is None:
   386         hg = encoding.environ.get(b'HG')
   384         hg = encoding.environ.get(b'HG', '')
   387         mainmod = sys.modules['__main__']
   385         mainmod = sys.modules['__main__']
       
   386         if pycompat.sysplatform == b'OpenVMS' and hg[0:1] == '$':
       
   387             hg = 'mcr ' + hg[1:]
   388         if hg:
   388         if hg:
   389             _sethgexecutable(hg)
   389             _sethgexecutable(hg)
   390         elif resourceutil.mainfrozen():
   390         elif resourceutil.mainfrozen():
   391             if getattr(sys, 'frozen', None) == 'macosx_app':
   391             if getattr(sys, 'frozen', None) == 'macosx_app':
   392                 # Env variable set by py2app
   392                 # Env variable set by py2app
   531         )
   531         )
   532         for line in iter(proc.stdout.readline, b''):
   532         for line in iter(proc.stdout.readline, b''):
   533             out.write(line)
   533             out.write(line)
   534         proc.wait()
   534         proc.wait()
   535         rc = proc.returncode
   535         rc = proc.returncode
   536     if pycompat.sysplatform == b'OpenVMS' and rc & 1:
       
   537         rc = 0
       
   538     return rc
   536     return rc
   539 
   537 
   540 
   538 
   541 _is_gui = None
   539 _is_gui = None
   542 
   540