252 continue |
252 continue |
253 repo.ui.note(_("getting %s\n") % f) |
253 repo.ui.note(_("getting %s\n") % f) |
254 t = repo.file(f).read(node) |
254 t = repo.file(f).read(node) |
255 repo.wwrite(f, t) |
255 repo.wwrite(f, t) |
256 util.set_exec(repo.wjoin(f), flag) |
256 util.set_exec(repo.wjoin(f), flag) |
257 if not partial: |
|
258 if branchmerge: |
|
259 repo.dirstate.update([f], 'n', st_mtime=-1) |
|
260 else: |
|
261 repo.dirstate.update([f], 'n') |
|
262 |
257 |
263 # merge the tricky bits |
258 # merge the tricky bits |
264 unresolved = [] |
259 unresolved = [] |
265 files = merge.keys() |
260 files = merge.keys() |
266 files.sort() |
261 files.sort() |
269 flag, my, other = merge[f] |
264 flag, my, other = merge[f] |
270 ret = merge3(repo, f, my, other, xp1, xp2) |
265 ret = merge3(repo, f, my, other, xp1, xp2) |
271 if ret: |
266 if ret: |
272 unresolved.append(f) |
267 unresolved.append(f) |
273 util.set_exec(repo.wjoin(f), flag) |
268 util.set_exec(repo.wjoin(f), flag) |
274 if not partial: |
|
275 if branchmerge: |
|
276 # We've done a branch merge, mark this file as merged |
|
277 # so that we properly record the merger later |
|
278 repo.dirstate.update([f], 'm') |
|
279 else: |
|
280 # We've update-merged a locally modified file, so |
|
281 # we set the dirstate to emulate a normal checkout |
|
282 # of that file some time in the past. Thus our |
|
283 # merge will appear as a normal local file |
|
284 # modification. |
|
285 fl = repo.file(f) |
|
286 f_len = fl.size(fl.rev(other)) |
|
287 repo.dirstate.update([f], 'n', st_size=f_len, st_mtime=-1) |
|
288 |
269 |
289 remove.sort() |
270 remove.sort() |
290 for f in remove: |
271 for f in remove: |
291 repo.ui.note(_("removing %s\n") % f) |
272 repo.ui.note(_("removing %s\n") % f) |
292 util.audit_path(f) |
273 util.audit_path(f) |
294 util.unlink(repo.wjoin(f)) |
275 util.unlink(repo.wjoin(f)) |
295 except OSError, inst: |
276 except OSError, inst: |
296 if inst.errno != errno.ENOENT: |
277 if inst.errno != errno.ENOENT: |
297 repo.ui.warn(_("update failed to remove %s: %s!\n") % |
278 repo.ui.warn(_("update failed to remove %s: %s!\n") % |
298 (f, inst.strerror)) |
279 (f, inst.strerror)) |
|
280 |
|
281 # update dirstate |
299 if not partial: |
282 if not partial: |
|
283 repo.dirstate.setparents(p1, p2) |
|
284 repo.dirstate.forget(forget) |
300 if branchmerge: |
285 if branchmerge: |
301 repo.dirstate.update(remove, 'r') |
286 repo.dirstate.update(remove, 'r') |
302 else: |
287 else: |
303 repo.dirstate.forget(remove) |
288 repo.dirstate.forget(remove) |
304 |
289 |
305 if not partial: |
290 files = get.keys() |
306 repo.dirstate.setparents(p1, p2) |
291 files.sort() |
307 repo.dirstate.forget(forget) |
292 for f in files: |
|
293 if branchmerge: |
|
294 repo.dirstate.update([f], 'n', st_mtime=-1) |
|
295 else: |
|
296 repo.dirstate.update([f], 'n') |
|
297 |
|
298 files = merge.keys() |
|
299 files.sort() |
|
300 for f in files: |
|
301 if branchmerge: |
|
302 # We've done a branch merge, mark this file as merged |
|
303 # so that we properly record the merger later |
|
304 repo.dirstate.update([f], 'm') |
|
305 else: |
|
306 # We've update-merged a locally modified file, so |
|
307 # we set the dirstate to emulate a normal checkout |
|
308 # of that file some time in the past. Thus our |
|
309 # merge will appear as a normal local file |
|
310 # modification. |
|
311 fl = repo.file(f) |
|
312 f_len = fl.size(fl.rev(other)) |
|
313 repo.dirstate.update([f], 'n', st_size=f_len, st_mtime=-1) |
308 |
314 |
309 if show_stats: |
315 if show_stats: |
310 stats = ((len(get), _("updated")), |
316 stats = ((len(get), _("updated")), |
311 (len(merge) - len(unresolved), _("merged")), |
317 (len(merge) - len(unresolved), _("merged")), |
312 (len(remove), _("removed")), |
318 (len(remove), _("removed")), |