Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/merge.py @ 6270:14f0fe2e2db7
merge: simplify checkcopies
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Sat, 15 Mar 2008 10:02:31 -0500 |
parents | ffdf70e74623 |
children | 01aed23355e9 |
comparison
equal
deleted
inserted
replaced
6269:ffdf70e74623 | 6270:14f0fe2e2db7 |
---|---|
116 | 116 |
117 copy = {} | 117 copy = {} |
118 fullcopy = {} | 118 fullcopy = {} |
119 diverge = {} | 119 diverge = {} |
120 | 120 |
121 def checkcopies(c, man, aman): | 121 def checkcopies(f, m1, m2): |
122 '''check possible copies for filectx c''' | 122 '''check possible copies of f from m1 to m2''' |
123 for of in _findoldnames(c, limit): | 123 c1 = ctx(f, m1[f]) |
124 fullcopy[c.path()] = of # remember for dir rename detection | 124 for of in _findoldnames(c1, limit): |
125 if of not in man: # original file not in other manifest? | 125 fullcopy[f] = of # remember for dir rename detection |
126 if of not in m2: # original file not in other manifest? | |
126 if of in ma: | 127 if of in ma: |
127 diverge.setdefault(of, []).append(c.path()) | 128 diverge.setdefault(of, []).append(f) |
128 continue | 129 continue |
129 # if the original file is unchanged on the other branch, | 130 # if the original file is unchanged on the other branch, |
130 # no merge needed | 131 # no merge needed |
131 if man[of] == aman.get(of): | 132 if m2[of] == ma.get(of): |
132 continue | 133 continue |
133 c2 = ctx(of, man[of]) | 134 c2 = ctx(of, m2[of]) |
134 ca = c.ancestor(c2) | 135 ca = c1.ancestor(c2) |
135 if not ca: # unrelated? | 136 if not ca: # unrelated? |
136 continue | 137 continue |
137 # named changed on only one side? | 138 # named changed on only one side? |
138 if ca.path() == c.path() or ca.path() == c2.path(): | 139 if ca.path() == f or ca.path() == c2.path(): |
139 if c == ca and c2 == ca: # no merge needed, ignore copy | 140 if c1 == ca and c2 == ca: # no merge needed, ignore copy |
140 continue | 141 continue |
141 copy[c.path()] = of | 142 copy[f] = of |
142 | 143 |
143 if not repo.ui.configbool("merge", "followcopies", True): | 144 if not repo.ui.configbool("merge", "followcopies", True): |
144 return {}, {} | 145 return {}, {} |
145 | 146 |
146 # avoid silly behavior for update from empty dir | 147 # avoid silly behavior for update from empty dir |
158 if u2: | 159 if u2: |
159 repo.ui.debug(_(" unmatched files in other:\n %s\n") | 160 repo.ui.debug(_(" unmatched files in other:\n %s\n") |
160 % "\n ".join(u2)) | 161 % "\n ".join(u2)) |
161 | 162 |
162 for f in u1: | 163 for f in u1: |
163 checkcopies(ctx(f, m1[f]), m2, ma) | 164 checkcopies(f, m1, m2) |
164 | 165 |
165 for f in u2: | 166 for f in u2: |
166 checkcopies(ctx(f, m2[f]), m1, ma) | 167 checkcopies(f, m2, m1) |
167 | 168 |
168 diverge2 = {} | 169 diverge2 = {} |
169 for of, fl in diverge.items(): | 170 for of, fl in diverge.items(): |
170 if len(fl) == 1: | 171 if len(fl) == 1: |
171 del diverge[of] # not actually divergent | 172 del diverge[of] # not actually divergent |