Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/merge.py @ 3155:56c59ba7aa76
findcopies: use dirstate rename information
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Mon, 25 Sep 2006 20:31:05 -0500 |
parents | c82ea81d6850 |
children | 1839e6e91c3a |
comparison
equal
deleted
inserted
replaced
3154:b1f10d3223c1 | 3155:56c59ba7aa76 |
---|---|
61 def workingmanifest(repo, man, status): | 61 def workingmanifest(repo, man, status): |
62 """ | 62 """ |
63 Update manifest to correspond to the working directory | 63 Update manifest to correspond to the working directory |
64 """ | 64 """ |
65 | 65 |
66 copied = repo.dirstate.copies() | |
66 modified, added, removed, deleted, unknown = status[:5] | 67 modified, added, removed, deleted, unknown = status[:5] |
67 for i,l in (("a", added), ("m", modified), ("u", unknown)): | 68 for i,l in (("a", added), ("m", modified), ("u", unknown)): |
68 for f in l: | 69 for f in l: |
69 man[f] = man.get(f, nullid) + i | 70 man[f] = man.get(copied.get(f, f), nullid) + i |
70 man.set(f, util.is_exec(repo.wjoin(f), man.execf(f))) | 71 man.set(f, util.is_exec(repo.wjoin(f), man.execf(f))) |
71 | 72 |
72 for f in deleted + removed: | 73 for f in deleted + removed: |
73 del man[f] | 74 del man[f] |
74 | 75 |
130 def findcopies(repo, m1, m2, limit): | 131 def findcopies(repo, m1, m2, limit): |
131 """ | 132 """ |
132 Find moves and copies between m1 and m2 back to limit linkrev | 133 Find moves and copies between m1 and m2 back to limit linkrev |
133 """ | 134 """ |
134 | 135 |
136 dcopies = repo.dirstate.copies() | |
135 copy = {} | 137 copy = {} |
136 match = {} | 138 match = {} |
137 u1 = nonoverlap(m1, m2) | 139 u1 = nonoverlap(m1, m2) |
138 u2 = nonoverlap(m2, m1) | 140 u2 = nonoverlap(m2, m1) |
139 ctx = util.cachefunc(lambda f,n: repo.filectx(f, fileid=n[:20])) | 141 ctx = util.cachefunc(lambda f,n: repo.filectx(f, fileid=n[:20])) |
145 if ca: | 147 if ca: |
146 copy[c.path()] = f2 | 148 copy[c.path()] = f2 |
147 copy[f2] = c.path() | 149 copy[f2] = c.path() |
148 | 150 |
149 for f in u1: | 151 for f in u1: |
150 c = ctx(f, m1[f]) | 152 c = ctx(dcopies.get(f, f), m1[f]) |
151 for of in findold(c, limit): | 153 for of in findold(c, limit): |
152 if of in m2: | 154 if of in m2: |
153 checkpair(c, of, m2) | 155 checkpair(c, of, m2) |
154 else: | 156 else: |
155 match.setdefault(of, []).append(f) | 157 match.setdefault(of, []).append(f) |
352 (overwrite, branchmerge, bool(partial))) | 354 (overwrite, branchmerge, bool(partial))) |
353 repo.ui.debug(_(" ancestor %s local %s remote %s\n") % | 355 repo.ui.debug(_(" ancestor %s local %s remote %s\n") % |
354 (short(p1), short(p2), short(pa))) | 356 (short(p1), short(p2), short(pa))) |
355 | 357 |
356 action = [] | 358 action = [] |
359 | |
360 copy = {} | |
361 if not (backwards or overwrite): | |
362 copy = findcopies(repo, m1, m2, repo.changelog.rev(pa)) | |
363 | |
357 m1 = workingmanifest(repo, m1, status) | 364 m1 = workingmanifest(repo, m1, status) |
358 | 365 |
359 if not force: | 366 if not force: |
360 checkunknown(repo, m2, status) | 367 checkunknown(repo, m2, status) |
361 if not branchmerge: | 368 if not branchmerge: |
362 action += forgetremoved(m2, status) | 369 action += forgetremoved(m2, status) |
363 | |
364 copy = {} | |
365 if not (backwards or overwrite): | |
366 copy = findcopies(repo, m1, m2, repo.changelog.rev(pa)) | |
367 | 370 |
368 action += manifestmerge(repo.ui, m1, m2, ma, overwrite, backwards, partial) | 371 action += manifestmerge(repo.ui, m1, m2, ma, overwrite, backwards, partial) |
369 del m1, m2, ma | 372 del m1, m2, ma |
370 | 373 |
371 ### apply phase | 374 ### apply phase |