mercurial/util.py
changeset 1402 9d2c2e6b32b5
parent 1400 cf9a1233738a
child 1413 1c64c628d15f
equal deleted inserted replaced
1401:fbf2b10011aa 1402:9d2c2e6b32b5
    45         outfd, outname = tempfile.mkstemp(prefix='hgfout')
    45         outfd, outname = tempfile.mkstemp(prefix='hgfout')
    46         os.close(outfd)
    46         os.close(outfd)
    47         cmd = cmd.replace('INFILE', inname)
    47         cmd = cmd.replace('INFILE', inname)
    48         cmd = cmd.replace('OUTFILE', outname)
    48         cmd = cmd.replace('OUTFILE', outname)
    49         code = os.system(cmd)
    49         code = os.system(cmd)
    50         if code: raise Abort("command '%s' failed: %s" %
    50         if code: raise Abort(_("command '%s' failed: %s") %
    51                              (cmd, explain_exit(code)))
    51                              (cmd, explain_exit(code)))
    52         return open(outname, 'rb').read()
    52         return open(outname, 'rb').read()
    53     finally:
    53     finally:
    54         try:
    54         try:
    55             if inname: os.unlink(inname)
    55             if inname: os.unlink(inname)
    81         if line.startswith('patching file '):
    81         if line.startswith('patching file '):
    82             pf = parse_patch_output(line)
    82             pf = parse_patch_output(line)
    83             files.setdefault(pf, 1)
    83             files.setdefault(pf, 1)
    84     code = fp.close()
    84     code = fp.close()
    85     if code:
    85     if code:
    86         raise Abort("patch command failed: %s" % explain_exit(code)[0])
    86         raise Abort(_("patch command failed: %s") % explain_exit(code)[0])
    87     return files.keys()
    87     return files.keys()
    88 
    88 
    89 def binary(s):
    89 def binary(s):
    90     """return true if a string is binary data using diff's heuristic"""
    90     """return true if a string is binary data using diff's heuristic"""
    91     if s and '\0' in s[:4096]:
    91     if s and '\0' in s[:4096]:
   364 
   364 
   365 if hasattr(os, 'link'):
   365 if hasattr(os, 'link'):
   366     os_link = os.link
   366     os_link = os.link
   367 else:
   367 else:
   368     def os_link(src, dst):
   368     def os_link(src, dst):
   369         raise OSError(0, "Hardlinks not supported")
   369         raise OSError(0, _("Hardlinks not supported"))
   370 
   370 
   371 # Platform specific variants
   371 # Platform specific variants
   372 if os.name == 'nt':
   372 if os.name == 'nt':
   373     nulldev = 'NUL:'
   373     nulldev = 'NUL:'
   374     
   374     
   429 
   429 
   430     makelock = _makelock_file
   430     makelock = _makelock_file
   431     readlock = _readlock_file
   431     readlock = _readlock_file
   432 
   432 
   433     def explain_exit(code):
   433     def explain_exit(code):
   434         return "exited with status %d" % code, code
   434         return _("exited with status %d") % code, code
   435 
   435 
   436 else:
   436 else:
   437     nulldev = '/dev/null'
   437     nulldev = '/dev/null'
   438 
   438 
   439     hgrcd = '/etc/mercurial/hgrc.d'
   439     hgrcd = '/etc/mercurial/hgrc.d'
   492 
   492 
   493     def explain_exit(code):
   493     def explain_exit(code):
   494         """return a 2-tuple (desc, code) describing a process's status"""
   494         """return a 2-tuple (desc, code) describing a process's status"""
   495         if os.WIFEXITED(code):
   495         if os.WIFEXITED(code):
   496             val = os.WEXITSTATUS(code)
   496             val = os.WEXITSTATUS(code)
   497             return "exited with status %d" % val, val
   497             return _("exited with status %d") % val, val
   498         elif os.WIFSIGNALED(code):
   498         elif os.WIFSIGNALED(code):
   499             val = os.WTERMSIG(code)
   499             val = os.WTERMSIG(code)
   500             return "killed by signal %d" % val, val
   500             return _("killed by signal %d") % val, val
   501         elif os.WIFSTOPPED(code):
   501         elif os.WIFSTOPPED(code):
   502             val = os.WSTOPSIG(code)
   502             val = os.WSTOPSIG(code)
   503             return "stopped by signal %d" % val, val
   503             return _("stopped by signal %d") % val, val
   504         raise ValueError("invalid exit code")
   504         raise ValueError(_("invalid exit code"))
   505 
   505 
   506 class chunkbuffer(object):
   506 class chunkbuffer(object):
   507     """Allow arbitrary sized chunks of data to be efficiently read from an
   507     """Allow arbitrary sized chunks of data to be efficiently read from an
   508     iterator over chunks of arbitrary size."""
   508     iterator over chunks of arbitrary size."""
   509 
   509 
   512         targetsize is how big a buffer to try to maintain."""
   512         targetsize is how big a buffer to try to maintain."""
   513         self.in_iter = iter(in_iter)
   513         self.in_iter = iter(in_iter)
   514         self.buf = ''
   514         self.buf = ''
   515         self.targetsize = int(targetsize)
   515         self.targetsize = int(targetsize)
   516         if self.targetsize <= 0:
   516         if self.targetsize <= 0:
   517             raise ValueError("targetsize must be greater than 0, was %d" %
   517             raise ValueError(_("targetsize must be greater than 0, was %d") %
   518                              targetsize)
   518                              targetsize)
   519         self.iterempty = False
   519         self.iterempty = False
   520 
   520 
   521     def fillbuf(self):
   521     def fillbuf(self):
   522         """Ignore target size; read every chunk from iterator until empty."""
   522         """Ignore target size; read every chunk from iterator until empty."""