diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -4917,8 +4917,12 @@ if mark: if markcheck: - with repo.wvfs(f) as fobj: - fdata = fobj.read() + try: + with repo.wvfs(f) as fobj: + fdata = fobj.read() + except (IOError, OSError) as inst: + if inst.errno != errno.ENOENT: + raise if filemerge.hasconflictmarkers(fdata) and \ ms[f] != mergemod.MERGE_RECORD_RESOLVED: hasconflictmarkers.append(f) diff --git a/tests/test-resolve.t b/tests/test-resolve.t --- a/tests/test-resolve.t +++ b/tests/test-resolve.t @@ -616,3 +616,59 @@ Done with commands.resolve.confirm tests: $ cd .. + +Test that commands.resolve.mark-check works even if there are deleted files: + $ hg init resolve-deleted + $ cd resolve-deleted + $ echo r0 > file1 + $ hg ci -qAm r0 + $ echo r1 > file1 + $ hg ci -qm r1 + $ hg co -qr 0 + $ hg rm file1 + $ hg ci -qm "r2 (delete file1)" + +(At this point we have r0 creating file1, and sibling commits r1 and r2, which + modify and delete file1, respectively) + + $ hg merge -r 1 + file 'file1' was deleted in local [working copy] but was modified in other [merge rev]. + What do you want to do? + use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u + 0 files updated, 0 files merged, 0 files removed, 1 files unresolved + use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon + [1] + $ hg resolve --list + U file1 + $ hg resolve --mark --config commands.resolve.mark-check=abort + (no more unresolved files) + $ hg resolve --list + R file1 + $ hg resolve --unmark file1 + $ hg resolve --mark --config commands.resolve.mark-check=warn + (no more unresolved files) + $ hg resolve --list + R file1 + +For completeness, let's try that in the opposite direction (merging r2 into r1, +instead of r1 into r2): + $ hg update -qCr 1 + $ hg merge -r 2 + file 'file1' was deleted in other [merge rev] but was modified in local [working copy]. + What do you want to do? + use (c)hanged version, (d)elete, or leave (u)nresolved? u + 0 files updated, 0 files merged, 0 files removed, 1 files unresolved + use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon + [1] + $ hg resolve --list + U file1 + $ hg resolve --mark --config commands.resolve.mark-check=abort + (no more unresolved files) + $ hg resolve --list + R file1 + $ hg resolve --unmark file1 + $ hg resolve --mark --config commands.resolve.mark-check=warn + (no more unresolved files) + $ hg resolve --list + R file1 + $ cd ..