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 <matthias.sohn@sap.com>
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
This commit is contained in:
Matthias Sohn 2019-09-24 00:14:12 +02:00
parent d44a30a27f
commit cda3b2b492
2 changed files with 25 additions and 0 deletions

View File

@ -58,6 +58,8 @@
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 void testCherryPickConflictMarkers() throws Exception {
}
}
@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)) {

View File

@ -57,6 +57,7 @@
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 CherryPickResult call() throws GitAPIException, NoMessageException,
repo.writeCherryPickHead(srcCommit.getId());
repo.writeMergeCommitMsg(message);
repo.fireEvent(new WorkingTreeModifiedEvent(
merger.getModifiedFiles(), null));
return CherryPickResult.CONFLICT;
}
}