##// END OF EJS Templates
merge: reduce manifest copying
Matt Mackall -
r3248:751840e7 default
parent child Browse files
Show More
@@ -164,12 +164,7 b' def findcopies(repo, m1, m2, limit):'
164
164
165 return copy
165 return copy
166
166
167 def filtermanifest(man, partial):
167 def manifestmerge(ui, m1, m2, ma, overwrite, backwards, partial):
168 if partial:
169 for k in man.keys():
170 if not partial(k): del man[k]
171
172 def manifestmerge(ui, m1, m2, ma, overwrite, backwards):
173 """
168 """
174 Merge manifest m1 with m2 using ancestor ma and generate merge action list
169 Merge manifest m1 with m2 using ancestor ma and generate merge action list
175 """
170 """
@@ -187,6 +182,8 b' def manifestmerge(ui, m1, m2, ma, overwr'
187
182
188 # Compare manifests
183 # Compare manifests
189 for f, n in m1.iteritems():
184 for f, n in m1.iteritems():
185 if partial and not partial(f):
186 continue
190 if f in m2:
187 if f in m2:
191 # are files different?
188 # are files different?
192 if n != m2[f]:
189 if n != m2[f]:
@@ -206,7 +203,6 b' def manifestmerge(ui, m1, m2, ma, overwr'
206 elif m1.execf(f) != m2.execf(f):
203 elif m1.execf(f) != m2.execf(f):
207 if overwrite or fmerge(f) != m1.execf(f):
204 if overwrite or fmerge(f) != m1.execf(f):
208 act("update permissions", f, "e", m2.execf(f))
205 act("update permissions", f, "e", m2.execf(f))
209 del m2[f]
210 elif f in ma:
206 elif f in ma:
211 if n != ma[f] and not overwrite:
207 if n != ma[f] and not overwrite:
212 if ui.prompt(
208 if ui.prompt(
@@ -221,6 +217,10 b' def manifestmerge(ui, m1, m2, ma, overwr'
221 act("remote deleted", f, "r")
217 act("remote deleted", f, "r")
222
218
223 for f, n in m2.iteritems():
219 for f, n in m2.iteritems():
220 if partial and not partial(f):
221 continue
222 if f in m1:
223 continue
224 if f in ma:
224 if f in ma:
225 if overwrite or backwards:
225 if overwrite or backwards:
226 act("recreating", f, "g", m2.execf(f), n)
226 act("recreating", f, "g", m2.execf(f), n)
@@ -337,8 +337,8 b' def update(repo, node, branchmerge=False'
337 if wc.modified() or wc.added() or wc.removed():
337 if wc.modified() or wc.added() or wc.removed():
338 raise util.Abort(_("outstanding uncommitted changes"))
338 raise util.Abort(_("outstanding uncommitted changes"))
339
339
340 m1 = wc.manifest().copy()
340 m1 = wc.manifest()
341 m2 = p2.manifest().copy()
341 m2 = p2.manifest()
342 ma = pa.manifest()
342 ma = pa.manifest()
343
343
344 # resolve the manifest to determine which files
344 # resolve the manifest to determine which files
@@ -351,9 +351,6 b' def update(repo, node, branchmerge=False'
351 action = []
351 action = []
352 copy = {}
352 copy = {}
353
353
354 filtermanifest(m1, partial)
355 filtermanifest(m2, partial)
356
357 if not force:
354 if not force:
358 checkunknown(repo, m2, wc)
355 checkunknown(repo, m2, wc)
359 if not branchmerge:
356 if not branchmerge:
@@ -361,8 +358,7 b' def update(repo, node, branchmerge=False'
361 if not (backwards or overwrite):
358 if not (backwards or overwrite):
362 copy = findcopies(repo, m1, m2, pa.rev())
359 copy = findcopies(repo, m1, m2, pa.rev())
363
360
364 action += manifestmerge(repo.ui, m1, m2, ma, overwrite, backwards)
361 action += manifestmerge(repo.ui, m1, m2, ma, overwrite, backwards, partial)
365 del m1, m2, ma
366
362
367 ### apply phase
363 ### apply phase
368
364
General Comments 0
You need to be logged in to leave comments. Login now