From: Matthias Sohn Date: Mon, 23 Sep 2019 22:14:12 +0000 (+0200) Subject: Fire WorkingTreeModifiedEvent if cherry-pick failed with conflicts X-Git-Tag: v5.6.0.201911271000-m3~102 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=cda3b2b49261acaf96629b98feba88acaee3a0b6;p=jgit.git Fire WorkingTreeModifiedEvent if cherry-pick failed with conflicts Otherwise the paths modified by a cherry-pick with conflicts won't be reported as modified via WorkingTreeModifiedEvents. Change-Id: I875b67c0d2f68efdf90a9c32b80a2e074ed3570d Signed-off-by: Matthias Sohn Signed-off-by: Thomas Wolf --- diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CherryPickCommandTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CherryPickCommandTest.java index fbc2cf67e1..adeb8b839c 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CherryPickCommandTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CherryPickCommandTest.java @@ -58,6 +58,8 @@ import org.eclipse.jgit.api.errors.GitAPIException; import org.eclipse.jgit.api.errors.JGitInternalException; import org.eclipse.jgit.api.errors.MultipleParentsNotAllowedException; import org.eclipse.jgit.dircache.DirCache; +import org.eclipse.jgit.events.ChangeRecorder; +import org.eclipse.jgit.events.ListenerHandle; import org.eclipse.jgit.junit.RepositoryTestCase; import org.eclipse.jgit.lib.ConfigConstants; import org.eclipse.jgit.lib.Constants; @@ -324,6 +326,25 @@ public class CherryPickCommandTest extends RepositoryTestCase { } } + @Test + public void testCherryPickConflictFiresModifiedEvent() throws Exception { + ListenerHandle listener = null; + try (Git git = new Git(db)) { + RevCommit sideCommit = prepareCherryPick(git); + ChangeRecorder recorder = new ChangeRecorder(); + listener = db.getListenerList() + .addWorkingTreeModifiedListener(recorder); + CherryPickResult result = git.cherryPick() + .include(sideCommit.getId()).call(); + assertEquals(CherryPickStatus.CONFLICTING, result.getStatus()); + recorder.assertEvent(new String[] { "a" }, ChangeRecorder.EMPTY); + } finally { + if (listener != null) { + listener.remove(); + } + } + } + @Test public void testCherryPickOurCommitName() throws Exception { try (Git git = new Git(db)) { diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/CherryPickCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/CherryPickCommand.java index c9dd547b49..15352ec73d 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/api/CherryPickCommand.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/CherryPickCommand.java @@ -57,6 +57,7 @@ import org.eclipse.jgit.api.errors.UnmergedPathsException; import org.eclipse.jgit.api.errors.WrongRepositoryStateException; import org.eclipse.jgit.dircache.DirCacheCheckout; import org.eclipse.jgit.errors.MissingObjectException; +import org.eclipse.jgit.events.WorkingTreeModifiedEvent; import org.eclipse.jgit.internal.JGitText; import org.eclipse.jgit.lib.AnyObjectId; import org.eclipse.jgit.lib.Constants; @@ -188,6 +189,9 @@ public class CherryPickCommand extends GitCommand { repo.writeCherryPickHead(srcCommit.getId()); repo.writeMergeCommitMsg(message); + repo.fireEvent(new WorkingTreeModifiedEvent( + merger.getModifiedFiles(), null)); + return CherryPickResult.CONFLICT; } }