A deleted work tree file is not a conflict when merge wants to delete it

Bug: 405199
Change-Id: I4b2ef3dc432d2fad8a6fabd1c8aec407b5c8c5ac
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/StashApplyCommandTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/StashApplyCommandTest.java
index 4dfac14..a81beb0 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/StashApplyCommandTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/StashApplyCommandTest.java
@@ -543,4 +543,19 @@ public void noStashedCommits() throws Exception {
 			assertNotNull(e.getMessage());
 		}
 	}
+
+	@Test
+	public void testApplyStashWithDeletedFile() throws Exception {
+		File file = writeTrashFile("file", "content");
+		git.add().addFilepattern("file").call();
+		git.commit().setMessage("x").call();
+		file.delete();
+		git.rm().addFilepattern("file").call();
+		git.stashCreate().call();
+		file.delete();
+
+		git.stashApply().setStashRef("stash@{0}").call();
+
+		assertFalse(file.exists());
+	}
 }
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/merge/ResolveMerger.java b/org.eclipse.jgit/src/org/eclipse/jgit/merge/ResolveMerger.java
index 2ea1160..710996d 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/merge/ResolveMerger.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/merge/ResolveMerger.java
@@ -488,7 +488,11 @@ private boolean processEntry(CanonicalTreeParser base,
 				return true;
 			} else if (modeT == 0 && modeB != 0) {
 				// we want THEIRS ... but THEIRS contains the deletion of the
-				// file
+				// file. Also, do not complain if the file is already deleted
+				// locally. This complements the test in isWorktreeDirty() for
+				// the same case.
+				if (tw.getTreeCount() > T_FILE && tw.getRawMode(T_FILE) == 0)
+					return true;
 				toBeDeleted.add(tw.getPathString());
 				return true;
 			}