comparison mercurial/merge.py @ 8753:af5f099d932b

merge: refactor manifestmerge init to better report effective ancestor
author Matt Mackall <mpm@selenic.com>
date Mon, 08 Jun 2009 18:14:44 -0500
parents f177bdab261b
children ab668c92a036
comparison
equal deleted inserted replaced
8752:f177bdab261b 8753:af5f099d932b
123 123
124 overwrite = whether we clobber working files 124 overwrite = whether we clobber working files
125 partial = function to filter file lists 125 partial = function to filter file lists
126 """ 126 """
127 127
128 repo.ui.note(_("resolving manifests\n"))
129 repo.ui.debug(_(" overwrite %s partial %s\n") % (overwrite, bool(partial)))
130 repo.ui.debug(_(" ancestor %s local %s remote %s\n") % (pa, p1, p2))
131
132 action = []
133 copy, copied = {}, {}
134 m1 = p1.manifest()
135 m2 = p2.manifest()
136
137 def fmerge(f, f2, fa): 128 def fmerge(f, f2, fa):
138 """merge flags""" 129 """merge flags"""
139 a, m, n = ma.flags(fa), m1.flags(f), m2.flags(f2) 130 a, m, n = ma.flags(fa), m1.flags(f), m2.flags(f2)
140 if m == n: # flags agree 131 if m == n: # flags agree
141 return m # unchanged 132 return m # unchanged
153 144
154 def act(msg, m, f, *args): 145 def act(msg, m, f, *args):
155 repo.ui.debug(" %s: %s -> %s\n" % (f, msg, m)) 146 repo.ui.debug(" %s: %s -> %s\n" % (f, msg, m))
156 action.append((f, m) + args) 147 action.append((f, m) + args)
157 148
149 action, copy = [], {}
150
158 if overwrite: 151 if overwrite:
159 ma = m1 152 pa = p1
160 elif p2 == pa: # backwards 153 elif pa == p2: # backwards
161 ma = p1.p1().manifest() 154 pa = p1.p1()
162 else: 155 elif pa and repo.ui.configbool("merge", "followcopies", True):
163 ma = pa.manifest() 156 dirs = repo.ui.configbool("merge", "followdirs", True)
164 if pa and repo.ui.configbool("merge", "followcopies", True): 157 copy, diverge = copies.copies(repo, p1, p2, pa, dirs)
165 dirs = repo.ui.configbool("merge", "followdirs", True) 158 for of, fl in diverge.iteritems():
166 copy, diverge = copies.copies(repo, p1, p2, pa, dirs) 159 act("divergent renames", "dr", of, fl)
167 for of, fl in diverge.iteritems(): 160
168 act("divergent renames", "dr", of, fl) 161 repo.ui.note(_("resolving manifests\n"))
169 copied = set(copy.values()) 162 repo.ui.debug(_(" overwrite %s partial %s\n") % (overwrite, bool(partial)))
163 repo.ui.debug(_(" ancestor %s local %s remote %s\n") % (pa, p1, p2))
164
165 m1, m2, ma = p1.manifest(), p2.manifest(), pa.manifest()
166 copied = set(copy.values())
170 167
171 # Compare manifests 168 # Compare manifests
172 for f, n in m1.iteritems(): 169 for f, n in m1.iteritems():
173 if partial and not partial(f): 170 if partial and not partial(f):
174 continue 171 continue