##// END OF EJS Templates
merge: combine merge and get lists
Matt Mackall -
r2977:87a0332a default
parent child Browse files
Show More
@@ -110,8 +110,7 b' def update(repo, node, branchmerge=False'
110 repo.ui.debug(_(" ancestor %s local %s remote %s\n") %
110 repo.ui.debug(_(" ancestor %s local %s remote %s\n") %
111 (short(man), short(m1n), short(m2n)))
111 (short(man), short(m1n), short(m2n)))
112
112
113 merge = {}
113 action = {}
114 get = {}
115 remove = []
114 remove = []
116 forget = []
115 forget = []
117
116
@@ -150,19 +149,19 b' def update(repo, node, branchmerge=False'
150 # are both different from the ancestor?
149 # are both different from the ancestor?
151 if not overwrite and n != a and m2[f] != a:
150 if not overwrite and n != a and m2[f] != a:
152 repo.ui.debug(_(" %s versions differ, resolve\n") % f)
151 repo.ui.debug(_(" %s versions differ, resolve\n") % f)
153 merge[f] = (fmerge(f, m1, m2, ma), n[:20], m2[f])
152 action[f] = (fmerge(f, m1, m2, ma), n[:20], m2[f])
154 queued = 1
153 queued = 1
155 # are we clobbering?
154 # are we clobbering?
156 # is remote's version newer?
155 # is remote's version newer?
157 # or are we going back in time and clean?
156 # or are we going back in time and clean?
158 elif overwrite or m2[f] != a or (backwards and not n[20:]):
157 elif overwrite or m2[f] != a or (backwards and not n[20:]):
159 repo.ui.debug(_(" remote %s is newer, get\n") % f)
158 repo.ui.debug(_(" remote %s is newer, get\n") % f)
160 get[f] = (m2.execf(f), m2[f])
159 action[f] = (m2.execf(f), m2[f], None)
161 queued = 1
160 queued = 1
162 elif f in umap or f in added:
161 elif f in umap or f in added:
163 # this unknown file is the same as the checkout
162 # this unknown file is the same as the checkout
164 # we need to reset the dirstate if the file was added
163 # we need to reset the dirstate if the file was added
165 get[f] = (m2.execf(f), m2[f])
164 action[f] = (m2.execf(f), m2[f], None)
166
165
167 # do we still need to look at mode bits?
166 # do we still need to look at mode bits?
168 if not queued and m1.execf(f) != m2.execf(f):
167 if not queued and m1.execf(f) != m2.execf(f):
@@ -211,14 +210,14 b' def update(repo, node, branchmerge=False'
211 (_("remote changed %s which local deleted\n") % f) +
210 (_("remote changed %s which local deleted\n") % f) +
212 _("(k)eep or (d)elete?"), _("[kd]"), _("k"))
211 _("(k)eep or (d)elete?"), _("[kd]"), _("k"))
213 if r == _("k"):
212 if r == _("k"):
214 get[f] = (m2.execf(f), n)
213 action[f] = (m2.execf(f), n, None)
215 elif f not in ma:
214 elif f not in ma:
216 repo.ui.debug(_("remote created %s\n") % f)
215 repo.ui.debug(_("remote created %s\n") % f)
217 get[f] = (m2.execf(f), n)
216 action[f] = (m2.execf(f), n, None)
218 else:
217 else:
219 if overwrite or backwards:
218 if overwrite or backwards:
220 repo.ui.debug(_("local deleted %s, recreating\n") % f)
219 repo.ui.debug(_("local deleted %s, recreating\n") % f)
221 get[f] = (m2.execf(f), n)
220 action[f] = (m2.execf(f), n, None)
222 else:
221 else:
223 repo.ui.debug(_("local deleted %s\n") % f)
222 repo.ui.debug(_("local deleted %s\n") % f)
224
223
@@ -237,28 +236,26 b' def update(repo, node, branchmerge=False'
237
236
238 repo.hook('preupdate', throw=True, parent1=xp1, parent2=xxp2)
237 repo.hook('preupdate', throw=True, parent1=xp1, parent2=xxp2)
239
238
240 # get the files we don't need to change
239 # update files
241 files = get.keys()
240 unresolved = []
241 updated = 0
242 merged = 0
243 files = action.keys()
242 files.sort()
244 files.sort()
243 for f in files:
245 for f in files:
244 flag, node = get[f]
246 flag, my, other = action[f]
245 if f[0] == "/":
247 if f[0] == "/":
246 continue
248 continue
249 if other:
250 repo.ui.status(_("merging %s\n") % f)
251 if merge3(repo, f, my, other, xp1, xp2):
252 unresolved.append(f)
253 merged += 1
254 else:
247 repo.ui.note(_("getting %s\n") % f)
255 repo.ui.note(_("getting %s\n") % f)
248 t = repo.file(f).read(node)
256 t = repo.file(f).read(my)
249 repo.wwrite(f, t)
257 repo.wwrite(f, t)
250 util.set_exec(repo.wjoin(f), flag)
258 updated += 1
251
252 # merge the tricky bits
253 unresolved = []
254 files = merge.keys()
255 files.sort()
256 for f in files:
257 repo.ui.status(_("merging %s\n") % f)
258 flag, my, other = merge[f]
259 ret = merge3(repo, f, my, other, xp1, xp2)
260 if ret:
261 unresolved.append(f)
262 util.set_exec(repo.wjoin(f), flag)
259 util.set_exec(repo.wjoin(f), flag)
263
260
264 remove.sort()
261 remove.sort()
@@ -281,17 +278,16 b' def update(repo, node, branchmerge=False'
281 else:
278 else:
282 repo.dirstate.forget(remove)
279 repo.dirstate.forget(remove)
283
280
284 files = get.keys()
281 files = action.keys()
285 files.sort()
282 files.sort()
286 for f in files:
283 for f in files:
284 flag, my, other = action[f]
285 if not other:
287 if branchmerge:
286 if branchmerge:
288 repo.dirstate.update([f], 'n', st_mtime=-1)
287 repo.dirstate.update([f], 'n', st_mtime=-1)
289 else:
288 else:
290 repo.dirstate.update([f], 'n')
289 repo.dirstate.update([f], 'n')
291
290 else:
292 files = merge.keys()
293 files.sort()
294 for f in files:
295 if branchmerge:
291 if branchmerge:
296 # We've done a branch merge, mark this file as merged
292 # We've done a branch merge, mark this file as merged
297 # so that we properly record the merger later
293 # so that we properly record the merger later
@@ -307,8 +303,8 b' def update(repo, node, branchmerge=False'
307 repo.dirstate.update([f], 'n', st_size=f_len, st_mtime=-1)
303 repo.dirstate.update([f], 'n', st_size=f_len, st_mtime=-1)
308
304
309 if show_stats:
305 if show_stats:
310 stats = ((len(get), _("updated")),
306 stats = ((updated, _("updated")),
311 (len(merge) - len(unresolved), _("merged")),
307 (merged - len(unresolved), _("merged")),
312 (len(remove), _("removed")),
308 (len(remove), _("removed")),
313 (len(unresolved), _("unresolved")))
309 (len(unresolved), _("unresolved")))
314 note = ", ".join([_("%d files %s") % s for s in stats])
310 note = ", ".join([_("%d files %s") % s for s in stats])
@@ -19,10 +19,10 b' resolving manifests'
19 ancestor a0c8bcbbb45c local a0c8bcbbb45c remote 1165e8bd193e
19 ancestor a0c8bcbbb45c local a0c8bcbbb45c remote 1165e8bd193e
20 a versions differ, resolve
20 a versions differ, resolve
21 remote created b
21 remote created b
22 getting b
23 merging a
22 merging a
24 resolving a
23 resolving a
25 file a: my b789fdd96dc2 other d730145abbf9 ancestor b789fdd96dc2
24 file a: my b789fdd96dc2 other d730145abbf9 ancestor b789fdd96dc2
25 getting b
26 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
26 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
27 changeset: 1:802f095af299
27 changeset: 1:802f095af299
28 tag: tip
28 tag: tip
@@ -53,10 +53,10 b' resolving manifests'
53 ancestor a0c8bcbbb45c local a0c8bcbbb45c remote 1165e8bd193e
53 ancestor a0c8bcbbb45c local a0c8bcbbb45c remote 1165e8bd193e
54 a versions differ, resolve
54 a versions differ, resolve
55 remote created b
55 remote created b
56 getting b
57 merging a
56 merging a
58 resolving a
57 resolving a
59 file a: my b789fdd96dc2 other d730145abbf9 ancestor b789fdd96dc2
58 file a: my b789fdd96dc2 other d730145abbf9 ancestor b789fdd96dc2
59 getting b
60 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
60 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
61 changeset: 1:802f095af299
61 changeset: 1:802f095af299
62 tag: tip
62 tag: tip
General Comments 0
You need to be logged in to leave comments. Login now