hgext/mq.py
changeset 2934 2f190e998eb3
parent 2922 773c5b82d052
child 2936 21bf8929efc8
equal deleted inserted replaced
2933:439fd013360d 2934:2f190e998eb3
   250         subject = None
   250         subject = None
   251         diffstart = 0
   251         diffstart = 0
   252 
   252 
   253         for line in file(pf):
   253         for line in file(pf):
   254             line = line.rstrip()
   254             line = line.rstrip()
       
   255             if line.startswith('diff --git'):
       
   256                 diffstart = 2
       
   257                 break
   255             if diffstart:
   258             if diffstart:
   256                 if line.startswith('+++ '):
   259                 if line.startswith('+++ '):
   257                     diffstart = 2
   260                     diffstart = 2
   258                 break
   261                 break
   259             if line.startswith("--- "):
   262             if line.startswith("--- "):
   406             self.ui.note(str(inst) + '\n')
   409             self.ui.note(str(inst) + '\n')
   407             if not self.ui.verbose:
   410             if not self.ui.verbose:
   408                 self.ui.warn("patch failed, unable to continue (try -v)\n")
   411                 self.ui.warn("patch failed, unable to continue (try -v)\n")
   409             return (False, [], False)
   412             return (False, [], False)
   410 
   413 
   411         return (True, files.keys(), fuzz)
   414         return (True, files, fuzz)
   412 
   415 
   413     def apply(self, repo, series, list=False, update_status=True,
   416     def apply(self, repo, series, list=False, update_status=True,
   414               strict=False, patchdir=None, merge=None, wlock=None):
   417               strict=False, patchdir=None, merge=None, wlock=None):
   415         # TODO unify with commands.py
   418         # TODO unify with commands.py
   416         if not patchdir:
   419         if not patchdir:
   419         if not wlock:
   422         if not wlock:
   420             wlock = repo.wlock()
   423             wlock = repo.wlock()
   421         lock = repo.lock()
   424         lock = repo.lock()
   422         tr = repo.transaction()
   425         tr = repo.transaction()
   423         n = None
   426         n = None
   424         for patch in series:
   427         for patchname in series:
   425             pushable, reason = self.pushable(patch)
   428             pushable, reason = self.pushable(patchname)
   426             if not pushable:
   429             if not pushable:
   427                 self.explain_pushable(patch, all_patches=True)
   430                 self.explain_pushable(patchname, all_patches=True)
   428                 continue
   431                 continue
   429             self.ui.warn("applying %s\n" % patch)
   432             self.ui.warn("applying %s\n" % patchname)
   430             pf = os.path.join(patchdir, patch)
   433             pf = os.path.join(patchdir, patchname)
   431 
   434 
   432             try:
   435             try:
   433                 message, comments, user, date, patchfound = self.readheaders(patch)
   436                 message, comments, user, date, patchfound = self.readheaders(patchname)
   434             except:
   437             except:
   435                 self.ui.warn("Unable to read %s\n" % pf)
   438                 self.ui.warn("Unable to read %s\n" % patchname)
   436                 err = 1
   439                 err = 1
   437                 break
   440                 break
   438 
   441 
   439             if not message:
   442             if not message:
   440                 message = "imported patch %s\n" % patch
   443                 message = "imported patch %s\n" % patchname
   441             else:
   444             else:
   442                 if list:
   445                 if list:
   443                     message.append("\nimported patch %s" % patch)
   446                     message.append("\nimported patch %s" % patchname)
   444                 message = '\n'.join(message)
   447                 message = '\n'.join(message)
   445 
   448 
   446             (patcherr, files, fuzz) = self.patch(repo, pf)
   449             (patcherr, files, fuzz) = self.patch(repo, pf)
   447             patcherr = not patcherr
   450             patcherr = not patcherr
   448 
   451 
   449             if merge and len(files) > 0:
   452             if merge and files:
   450                 # Mark as merged and update dirstate parent info
   453                 # Mark as merged and update dirstate parent info
   451                 repo.dirstate.update(repo.dirstate.filterfiles(files), 'm')
   454                 repo.dirstate.update(repo.dirstate.filterfiles(files.keys()), 'm')
   452                 p1, p2 = repo.dirstate.parents()
   455                 p1, p2 = repo.dirstate.parents()
   453                 repo.dirstate.setparents(p1, merge)
   456                 repo.dirstate.setparents(p1, merge)
   454             if len(files) > 0:
   457             files = patch.updatedir(self.ui, repo, files, wlock=wlock)
   455                 cwd = repo.getcwd()
       
   456                 cfiles = files
       
   457                 if cwd:
       
   458                     cfiles = [util.pathto(cwd, f) for f in files]
       
   459                 cmdutil.addremove(repo, cfiles, wlock=wlock)
       
   460             n = repo.commit(files, message, user, date, force=1, lock=lock,
   458             n = repo.commit(files, message, user, date, force=1, lock=lock,
   461                             wlock=wlock)
   459                             wlock=wlock)
   462 
   460 
   463             if n == None:
   461             if n == None:
   464                 raise util.Abort(_("repo commit failed"))
   462                 raise util.Abort(_("repo commit failed"))
   465 
   463 
   466             if update_status:
   464             if update_status:
   467                 self.applied.append(statusentry(revlog.hex(n), patch))
   465                 self.applied.append(statusentry(revlog.hex(n), patchname))
   468 
   466 
   469             if patcherr:
   467             if patcherr:
   470                 if not patchfound:
   468                 if not patchfound:
   471                     self.ui.warn("patch %s is empty\n" % patch)
   469                     self.ui.warn("patch %s is empty\n" % patchname)
   472                     err = 0
   470                     err = 0
   473                 else:
   471                 else:
   474                     self.ui.warn("patch failed, rejects left in working dir\n")
   472                     self.ui.warn("patch failed, rejects left in working dir\n")
   475                     err = 1
   473                     err = 1
   476                 break
   474                 break
   997                            changes=(m, a, r, [], u), fp=patchf)
   995                            changes=(m, a, r, [], u), fp=patchf)
   998             patchf.close()
   996             patchf.close()
   999 
   997 
  1000             changes = repo.changelog.read(tip)
   998             changes = repo.changelog.read(tip)
  1001             repo.dirstate.setparents(*cparents)
   999             repo.dirstate.setparents(*cparents)
       
  1000             copies = [(f, repo.dirstate.copied(f)) for f in a]
  1002             repo.dirstate.update(a, 'a')
  1001             repo.dirstate.update(a, 'a')
       
  1002             for dst, src in copies:
       
  1003                 repo.dirstate.copy(src, dst)
  1003             repo.dirstate.update(r, 'r')
  1004             repo.dirstate.update(r, 'r')
  1004             repo.dirstate.update(m, 'n')
  1005             repo.dirstate.update(m, 'n')
  1005             repo.dirstate.forget(forget)
  1006             repo.dirstate.forget(forget)
  1006 
  1007 
  1007             if not msg:
  1008             if not msg: