hgext/mq.py
changeset 4948 6fd953d5faea
parent 4887 bbdcacf7cef8
child 4949 fc61495ea9cf
equal deleted inserted replaced
4947:81078e177266 4948:6fd953d5faea
   499                 for f in files:
   499                 for f in files:
   500                     if os.path.exists(repo.dirstate.wjoin(f)):
   500                     if os.path.exists(repo.dirstate.wjoin(f)):
   501                         merged.append(f)
   501                         merged.append(f)
   502                     else:
   502                     else:
   503                         removed.append(f)
   503                         removed.append(f)
   504                 repo.dirstate.update(repo.dirstate.filterfiles(removed), 'r')
   504                 for f in removed:
   505                 repo.dirstate.update(repo.dirstate.filterfiles(merged), 'm')
   505                     repo.dirstate.remove(f)
       
   506                 for f in merged:
       
   507                     repo.dirstate.merge(f)
   506                 p1, p2 = repo.dirstate.parents()
   508                 p1, p2 = repo.dirstate.parents()
   507                 repo.dirstate.setparents(p1, merge)
   509                 repo.dirstate.setparents(p1, merge)
   508             files = patch.updatedir(self.ui, repo, files, wlock=wlock)
   510             files = patch.updatedir(self.ui, repo, files, wlock=wlock)
   509             n = repo.commit(files, message, user, date, force=1, lock=lock,
   511             n = repo.commit(files, message, user, date, force=1, lock=lock,
   510                             wlock=wlock)
   512                             wlock=wlock)
   866             for f in m:
   868             for f in m:
   867                 getfile(f, mmap[f])
   869                 getfile(f, mmap[f])
   868             for f in r:
   870             for f in r:
   869                 getfile(f, mmap[f])
   871                 getfile(f, mmap[f])
   870                 util.set_exec(repo.wjoin(f), mmap.execf(f))
   872                 util.set_exec(repo.wjoin(f), mmap.execf(f))
   871             repo.dirstate.update(m + r, 'n')
   873             for f in m + r:
       
   874                 repo.dirstate.normal(f)
   872             for f in a:
   875             for f in a:
   873                 try:
   876                 try:
   874                     os.unlink(repo.wjoin(f))
   877                     os.unlink(repo.wjoin(f))
   875                 except OSError, e:
   878                 except OSError, e:
   876                     if e.errno != errno.ENOENT:
   879                     if e.errno != errno.ENOENT:
   877                         raise
   880                         raise
   878                 try: os.removedirs(os.path.dirname(repo.wjoin(f)))
   881                 try: os.removedirs(os.path.dirname(repo.wjoin(f)))
   879                 except: pass
   882                 except: pass
   880             if a:
   883                 repo.dirstate.forget(f)
   881                 repo.dirstate.forget(a)
       
   882             repo.dirstate.setparents(qp, revlog.nullid)
   884             repo.dirstate.setparents(qp, revlog.nullid)
   883         self.strip(repo, rev, update=False, backup='strip', wlock=wlock)
   885         self.strip(repo, rev, update=False, backup='strip', wlock=wlock)
   884         del self.applied[start:end]
   886         del self.applied[start:end]
   885         if len(self.applied):
   887         if len(self.applied):
   886             self.ui.write("Now at: %s\n" % self.applied[-1].name)
   888             self.ui.write("Now at: %s\n" % self.applied[-1].name)
  1008             for dst in a:
  1010             for dst in a:
  1009                 src = repo.dirstate.copied(dst)
  1011                 src = repo.dirstate.copied(dst)
  1010                 if src is None:
  1012                 if src is None:
  1011                     continue
  1013                     continue
  1012                 copies.setdefault(src, []).append(dst)
  1014                 copies.setdefault(src, []).append(dst)
  1013             repo.dirstate.update(a, 'a')
  1015                 repo.dirstate.add(dst)
  1014             # remember the copies between patchparent and tip
  1016             # remember the copies between patchparent and tip
  1015             # this may be slow, so don't do it if we're not tracking copies
  1017             # this may be slow, so don't do it if we're not tracking copies
  1016             if self.diffopts().git:
  1018             if self.diffopts().git:
  1017                 for dst in aaa:
  1019                 for dst in aaa:
  1018                     f = repo.file(dst)
  1020                     f = repo.file(dst)
  1025                     if dst in copies:
  1027                     if dst in copies:
  1026                         del copies[dst]
  1028                         del copies[dst]
  1027             for src, dsts in copies.iteritems():
  1029             for src, dsts in copies.iteritems():
  1028                 for dst in dsts:
  1030                 for dst in dsts:
  1029                     repo.dirstate.copy(src, dst)
  1031                     repo.dirstate.copy(src, dst)
  1030             repo.dirstate.update(r, 'r')
  1032             for f in r:
       
  1033                 repo.dirstate.remove(f)
  1031             # if the patch excludes a modified file, mark that file with mtime=0
  1034             # if the patch excludes a modified file, mark that file with mtime=0
  1032             # so status can see it.
  1035             # so status can see it.
  1033             mm = []
  1036             mm = []
  1034             for i in xrange(len(m)-1, -1, -1):
  1037             for i in xrange(len(m)-1, -1, -1):
  1035                 if not matchfn(m[i]):
  1038                 if not matchfn(m[i]):
  1036                     mm.append(m[i])
  1039                     mm.append(m[i])
  1037                     del m[i]
  1040                     del m[i]
  1038             repo.dirstate.update(m, 'n')
  1041             for f in m:
  1039             repo.dirstate.update(mm, 'n', st_mtime=-1, st_size=-1)
  1042                 repo.dirstate.normal(f)
  1040             repo.dirstate.forget(forget)
  1043             for f in mm:
       
  1044                 repo.dirstate.normaldirty(f)
       
  1045             for f in forget:
       
  1046                 repo.dirstate.forget(f)
  1041 
  1047 
  1042             if not msg:
  1048             if not msg:
  1043                 if not message:
  1049                 if not message:
  1044                     message = "[mq]: %s\n" % patchfn
  1050                     message = "[mq]: %s\n" % patchfn
  1045                 else:
  1051                 else:
  1064                 except OSError, e:
  1070                 except OSError, e:
  1065                     if e.errno != errno.ENOENT:
  1071                     if e.errno != errno.ENOENT:
  1066                         raise
  1072                         raise
  1067                 try: os.removedirs(os.path.dirname(f))
  1073                 try: os.removedirs(os.path.dirname(f))
  1068                 except: pass
  1074                 except: pass
  1069             # forget the file copies in the dirstate
  1075                 # forget the file copies in the dirstate
  1070             # push should readd the files later on
  1076                 # push should readd the files later on
  1071             repo.dirstate.forget(added)
  1077                 repo.dirstate.forget(a)
  1072             self.pop(repo, force=True, wlock=wlock)
  1078             self.pop(repo, force=True, wlock=wlock)
  1073             self.push(repo, force=True, wlock=wlock)
  1079             self.push(repo, force=True, wlock=wlock)
  1074 
  1080 
  1075     def init(self, repo, create=False):
  1081     def init(self, repo, create=False):
  1076         if not create and os.path.isdir(self.path):
  1082         if not create and os.path.isdir(self.path):