mercurial/patch.py
changeset 5403 477136fa6571
parent 5265 15a108ad7adb
child 5418 9b469bdb1ce1
equal deleted inserted replaced
5402:ad0b580cad35 5403:477136fa6571
   149         def __init__(self, path):
   149         def __init__(self, path):
   150             self.path = path
   150             self.path = path
   151             self.oldpath = None
   151             self.oldpath = None
   152             self.mode = None
   152             self.mode = None
   153             self.op = 'MODIFY'
   153             self.op = 'MODIFY'
   154             self.copymod = False
       
   155             self.lineno = 0
   154             self.lineno = 0
   156             self.binary = False
   155             self.binary = False
   157 
   156 
   158     def reader(fp, firstline):
   157     def reader(fp, firstline):
   159         if firstline is not None:
   158         if firstline is not None:
   180                 gp = gitpatch(dst)
   179                 gp = gitpatch(dst)
   181                 gp.lineno = lineno
   180                 gp.lineno = lineno
   182         elif gp:
   181         elif gp:
   183             if line.startswith('--- '):
   182             if line.startswith('--- '):
   184                 if gp.op in ('COPY', 'RENAME'):
   183                 if gp.op in ('COPY', 'RENAME'):
   185                     gp.copymod = True
       
   186                     dopatch |= GP_FILTER
   184                     dopatch |= GP_FILTER
   187                 gitpatches.append(gp)
   185                 gitpatches.append(gp)
   188                 gp = None
   186                 gp = None
   189                 dopatch |= GP_PATCH
   187                 dopatch |= GP_PATCH
   190                 continue
   188                 continue
   856         except IOError:
   854         except IOError:
   857             fp = cStringIO.StringIO(fp.read())
   855             fp = cStringIO.StringIO(fp.read())
   858 
   856 
   859         (dopatch, gitpatches) = readgitpatch(fp, firstline)
   857         (dopatch, gitpatches) = readgitpatch(fp, firstline)
   860         for gp in gitpatches:
   858         for gp in gitpatches:
   861             if gp.copymod:
   859             if gp.op in ('COPY', 'RENAME'):
   862                 copyfile(gp.oldpath, gp.path, basedir=cwd)
   860                 copyfile(gp.oldpath, gp.path, basedir=cwd)
   863 
   861 
   864         fp.seek(pos)
   862         fp.seek(pos)
   865 
   863 
   866         return fp, dopatch, gitpatches
   864         return fp, dopatch, gitpatches
  1028     if cwd:
  1026     if cwd:
  1029         cfiles = [util.pathto(repo.root, cwd, f) for f in patches.keys()]
  1027         cfiles = [util.pathto(repo.root, cwd, f) for f in patches.keys()]
  1030     for f in patches:
  1028     for f in patches:
  1031         ctype, gp = patches[f]
  1029         ctype, gp = patches[f]
  1032         if ctype == 'RENAME':
  1030         if ctype == 'RENAME':
  1033             copies.append((gp.oldpath, gp.path, gp.copymod))
  1031             copies.append((gp.oldpath, gp.path))
  1034             removes[gp.oldpath] = 1
  1032             removes[gp.oldpath] = 1
  1035         elif ctype == 'COPY':
  1033         elif ctype == 'COPY':
  1036             copies.append((gp.oldpath, gp.path, gp.copymod))
  1034             copies.append((gp.oldpath, gp.path))
  1037         elif ctype == 'DELETE':
  1035         elif ctype == 'DELETE':
  1038             removes[gp.path] = 1
  1036             removes[gp.path] = 1
  1039     for src, dst, after in copies:
  1037     for src, dst in copies:
  1040         if not after:
       
  1041             copyfile(src, dst, repo.root)
       
  1042         repo.copy(src, dst)
  1038         repo.copy(src, dst)
  1043     removes = removes.keys()
  1039     removes = removes.keys()
  1044     if removes:
  1040     if removes:
  1045         removes.sort()
  1041         removes.sort()
  1046         repo.remove(removes, True)
  1042         repo.remove(removes, True)