equal
deleted
inserted
replaced
412 if self[dfile] in 'rd': |
412 if self[dfile] in 'rd': |
413 return True, 0, None |
413 return True, 0, None |
414 stateentry = self._state[dfile] |
414 stateentry = self._state[dfile] |
415 state, hash, lfile, afile, anode, ofile, onode, flags = stateentry |
415 state, hash, lfile, afile, anode, ofile, onode, flags = stateentry |
416 octx = self._repo[self._other] |
416 octx = self._repo[self._other] |
417 fcd = wctx[dfile] |
417 fcd = self._filectxorabsent(hash, wctx, dfile) |
418 fco = octx[ofile] |
418 fco = self._filectxorabsent(onode, octx, ofile) |
|
419 # TODO: move this to filectxorabsent |
419 fca = self._repo.filectx(afile, fileid=anode) |
420 fca = self._repo.filectx(afile, fileid=anode) |
420 # "premerge" x flags |
421 # "premerge" x flags |
421 flo = fco.flags() |
422 flo = fco.flags() |
422 fla = fca.flags() |
423 fla = fca.flags() |
423 if 'x' in flags + flo + fla and 'l' not in flags + flo + fla: |
424 if 'x' in flags + flo + fla and 'l' not in flags + flo + fla: |
427 _('warning: cannot merge flags for %s\n') % afile) |
428 _('warning: cannot merge flags for %s\n') % afile) |
428 elif flags == fla: |
429 elif flags == fla: |
429 flags = flo |
430 flags = flo |
430 if preresolve: |
431 if preresolve: |
431 # restore local |
432 # restore local |
432 f = self._repo.vfs('merge/' + hash) |
433 if hash != nullhex: |
433 self._repo.wwrite(dfile, f.read(), flags) |
434 f = self._repo.vfs('merge/' + hash) |
434 f.close() |
435 self._repo.wwrite(dfile, f.read(), flags) |
|
436 f.close() |
|
437 else: |
|
438 self._repo.wvfs.unlinkpath(dfile, ignoremissing=True) |
435 complete, r, deleted = filemerge.premerge(self._repo, self._local, |
439 complete, r, deleted = filemerge.premerge(self._repo, self._local, |
436 lfile, fcd, fco, fca, |
440 lfile, fcd, fco, fca, |
437 labels=labels) |
441 labels=labels) |
438 else: |
442 else: |
439 complete, r, deleted = filemerge.filemerge(self._repo, self._local, |
443 complete, r, deleted = filemerge.filemerge(self._repo, self._local, |
459 elif fco.isabsent(): # cd: local picked |
463 elif fco.isabsent(): # cd: local picked |
460 action = 'a' |
464 action = 'a' |
461 # else: regular merges (no action necessary) |
465 # else: regular merges (no action necessary) |
462 |
466 |
463 return complete, r, action |
467 return complete, r, action |
|
468 |
|
469 def _filectxorabsent(self, hexnode, ctx, f): |
|
470 if hexnode == nullhex: |
|
471 return filemerge.absentfilectx(ctx, f) |
|
472 else: |
|
473 return ctx[f] |
464 |
474 |
465 def preresolve(self, dfile, wctx, labels=None): |
475 def preresolve(self, dfile, wctx, labels=None): |
466 """run premerge process for dfile |
476 """run premerge process for dfile |
467 |
477 |
468 Returns whether the merge is complete, and the exit code.""" |
478 Returns whether the merge is complete, and the exit code.""" |