From ad96546ca023c260ed7250c447f4c8abe168afd3 Mon Sep 17 00:00:00 2001 From: Mathias Kinzler Date: Tue, 7 Dec 2010 13:34:44 +0100 Subject: [PATCH] Rebase Interoperability third part: handle stop upon conflict There are some files that need to exist so that the CLI can continue after the rebase has been stopped due to conflicts Change-Id: I3cb4dc98609c059bf0cf9fd5f9e47a9c681cea2d Signed-off-by: Mathias Kinzler --- .../org/eclipse/jgit/api/RebaseCommand.java | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/RebaseCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/RebaseCommand.java index fbe7debc4..78ddf8707 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/api/RebaseCommand.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/RebaseCommand.java @@ -44,6 +44,7 @@ import java.io.BufferedReader; import java.io.BufferedWriter; +import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; @@ -63,6 +64,7 @@ import org.eclipse.jgit.api.errors.NoHeadException; import org.eclipse.jgit.api.errors.RefNotFoundException; import org.eclipse.jgit.api.errors.WrongRepositoryStateException; +import org.eclipse.jgit.diff.DiffFormatter; import org.eclipse.jgit.dircache.DirCacheCheckout; import org.eclipse.jgit.lib.AbbreviatedObjectId; import org.eclipse.jgit.lib.Constants; @@ -204,7 +206,7 @@ public RebaseResult call() throws NoHeadException, RefNotFoundException, .call(); monitor.endTask(); if (newHead == null) { - return new RebaseResult(commitToPick); + return stop(commitToPick); } stepsToPop++; } @@ -227,6 +229,29 @@ public RebaseResult call() throws NoHeadException, RefNotFoundException, } } + private RebaseResult stop(RevCommit commitToPick) throws IOException { + StringBuilder sb = new StringBuilder(100); + sb.append("GIT_AUTHOR_NAME='"); + sb.append(commitToPick.getAuthorIdent().getName()); + sb.append("'\n"); + sb.append("GIT_AUTHOR_EMAIL='"); + sb.append(commitToPick.getAuthorIdent().getEmailAddress()); + sb.append("'\n"); + sb.append("GIT_AUTHOR_DATE='"); + sb.append(commitToPick.getAuthorIdent().getWhen()); + sb.append("'\n"); + createFile(rebaseDir, "author-script", sb.toString()); + createFile(rebaseDir, "message", commitToPick.getShortMessage()); + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + DiffFormatter df = new DiffFormatter(bos); + df.setRepository(repo); + df.format(commitToPick.getParent(0), commitToPick); + createFile(rebaseDir, "patch", new String(bos.toByteArray(), "UTF-8")); + createFile(rebaseDir, "stopped-sha", repo.newObjectReader().abbreviate( + commitToPick).name()); + return new RebaseResult(commitToPick); + } + /** * Removes the number of lines given in the parameter from the * git-rebase-todo file but preserves comments and other lines