Mercurial > hg > mercurial-crew-with-dirclash
comparison hgext/mq.py @ 3700:4c158de5f245
qrefresh: fix handling of copies in the fast path
author | Alexis S. L. Carvalho <alexis@cecm.usp.br> |
---|---|
date | Mon, 20 Nov 2006 19:32:43 -0200 |
parents | 4bafcf7aeb32 |
children | 67f44b825784 |
comparison
equal
deleted
inserted
replaced
3699:4bafcf7aeb32 | 3700:4c158de5f245 |
---|---|
987 # mm, dd, aa, aa2, uu = repo.status(tip, patchparent)[:5] | 987 # mm, dd, aa, aa2, uu = repo.status(tip, patchparent)[:5] |
988 # but we do it backwards to take advantage of manifest/chlog | 988 # but we do it backwards to take advantage of manifest/chlog |
989 # caching against the next repo.status call | 989 # caching against the next repo.status call |
990 # | 990 # |
991 mm, aa, dd, aa2, uu = repo.status(patchparent, tip)[:5] | 991 mm, aa, dd, aa2, uu = repo.status(patchparent, tip)[:5] |
992 changes = repo.changelog.read(tip) | |
993 man = repo.manifest.read(changes[0]) | |
994 aaa = aa[:] | |
992 if opts.get('short'): | 995 if opts.get('short'): |
993 filelist = mm + aa + dd | 996 filelist = mm + aa + dd |
994 else: | 997 else: |
995 filelist = None | 998 filelist = None |
996 m, a, r, d, u = repo.status(files=filelist)[:5] | 999 m, a, r, d, u = repo.status(files=filelist)[:5] |
1029 patch.diff(repo, patchparent, files=filelist, match=matchfn, | 1032 patch.diff(repo, patchparent, files=filelist, match=matchfn, |
1030 fp=patchf, changes=(m, a, r, [], u), | 1033 fp=patchf, changes=(m, a, r, [], u), |
1031 opts=self.diffopts()) | 1034 opts=self.diffopts()) |
1032 patchf.close() | 1035 patchf.close() |
1033 | 1036 |
1034 changes = repo.changelog.read(tip) | |
1035 repo.dirstate.setparents(*cparents) | 1037 repo.dirstate.setparents(*cparents) |
1036 copies = [(f, repo.dirstate.copied(f)) for f in a] | 1038 copies = {} |
1039 for dst in a: | |
1040 src = repo.dirstate.copied(dst) | |
1041 if src is None: | |
1042 continue | |
1043 copies.setdefault(src, []).append(dst) | |
1037 repo.dirstate.update(a, 'a') | 1044 repo.dirstate.update(a, 'a') |
1038 for dst, src in copies: | 1045 # remember the copies between patchparent and tip |
1039 repo.dirstate.copy(src, dst) | 1046 # this may be slow, so don't do it if we're not tracking copies |
1047 if self.diffopts().git: | |
1048 for dst in aaa: | |
1049 f = repo.file(dst) | |
1050 src = f.renamed(man[dst]) | |
1051 if src: | |
1052 copies[src[0]] = copies.get(dst, []) | |
1053 if dst in a: | |
1054 copies[src[0]].append(dst) | |
1055 # we can't copy a file created by the patch itself | |
1056 if dst in copies: | |
1057 del copies[dst] | |
1058 for src, dsts in copies.iteritems(): | |
1059 for dst in dsts: | |
1060 repo.dirstate.copy(src, dst) | |
1040 repo.dirstate.update(r, 'r') | 1061 repo.dirstate.update(r, 'r') |
1041 # if the patch excludes a modified file, mark that file with mtime=0 | 1062 # if the patch excludes a modified file, mark that file with mtime=0 |
1042 # so status can see it. | 1063 # so status can see it. |
1043 mm = [] | 1064 mm = [] |
1044 for i in xrange(len(m)-1, -1, -1): | 1065 for i in xrange(len(m)-1, -1, -1): |