mercurial/patch.py
changeset 5035 a675f6d5d069
parent 5033 1b07668b8cc3
child 5071 35d47b06d4e3
equal deleted inserted replaced
5034:c0417a319e39 5035:a675f6d5d069
   140 
   140 
   141 GP_PATCH  = 1 << 0  # we have to run patch
   141 GP_PATCH  = 1 << 0  # we have to run patch
   142 GP_FILTER = 1 << 1  # there's some copy/rename operation
   142 GP_FILTER = 1 << 1  # there's some copy/rename operation
   143 GP_BINARY = 1 << 2  # there's a binary patch
   143 GP_BINARY = 1 << 2  # there's a binary patch
   144 
   144 
   145 def readgitpatch(fp, firstline):
   145 def readgitpatch(fp, firstline=None):
   146     """extract git-style metadata about patches from <patchname>"""
   146     """extract git-style metadata about patches from <patchname>"""
   147     class gitpatch:
   147     class gitpatch:
   148         "op is one of ADD, DELETE, RENAME, MODIFY or COPY"
   148         "op is one of ADD, DELETE, RENAME, MODIFY or COPY"
   149         def __init__(self, path):
   149         def __init__(self, path):
   150             self.path = path
   150             self.path = path
   154             self.copymod = False
   154             self.copymod = False
   155             self.lineno = 0
   155             self.lineno = 0
   156             self.binary = False
   156             self.binary = False
   157 
   157 
   158     def reader(fp, firstline):
   158     def reader(fp, firstline):
   159         yield firstline
   159         if firstline is not None:
       
   160             yield firstline
   160         for line in fp:
   161         for line in fp:
   161             yield line
   162             yield line
   162 
   163 
   163     # Filter patch for git information
   164     # Filter patch for git information
   164     gitre = re.compile('diff --git a/(.*) b/(.*)')
   165     gitre = re.compile('diff --git a/(.*) b/(.*)')
   276     if code:
   277     if code:
   277         raise PatchError(_("patch command failed: %s") %
   278         raise PatchError(_("patch command failed: %s") %
   278                          util.explain_exit(code)[0])
   279                          util.explain_exit(code)[0])
   279     return fuzz
   280     return fuzz
   280 
   281 
   281 def internalpatch(patchname, ui, strip, cwd, files):
   282 def internalpatch(patchobj, ui, strip, cwd, files={}):
   282     """use builtin patch to apply <patchname> to the working directory.
   283     """use builtin patch to apply <patchobj> to the working directory.
   283     returns whether patch was applied with fuzz factor."""
   284     returns whether patch was applied with fuzz factor."""
   284     fp = file(patchname, 'rb')
   285     try:
       
   286         fp = file(patchobj, 'rb')
       
   287     except TypeError:
       
   288         fp = patchobj
   285     if cwd:
   289     if cwd:
   286         curdir = os.getcwd()
   290         curdir = os.getcwd()
   287         os.chdir(cwd)
   291         os.chdir(cwd)
   288     try:
   292     try:
   289         ret = applydiff(ui, fp, files, strip=strip)
   293         ret = applydiff(ui, fp, files, strip=strip)