Mercurial > hg > mercurial-crew-with-dirclash
comparison hgext/mq.py @ 4948:6fd953d5faea
dirstate: break update into separate functions
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Sat, 21 Jul 2007 16:02:09 -0500 |
parents | bbdcacf7cef8 |
children | fc61495ea9cf |
comparison
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): |