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): |