|
|
|
@ -44,6 +44,7 @@ package org.eclipse.jgit.api;
|
|
|
|
|
|
|
|
|
|
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.JGitInternalException;
|
|
|
|
|
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 class RebaseCommand extends GitCommand<RebaseResult> {
|
|
|
|
|
.call(); |
|
|
|
|
monitor.endTask(); |
|
|
|
|
if (newHead == null) { |
|
|
|
|
return new RebaseResult(commitToPick); |
|
|
|
|
return stop(commitToPick); |
|
|
|
|
} |
|
|
|
|
stepsToPop++; |
|
|
|
|
} |
|
|
|
@ -227,6 +229,29 @@ public class RebaseCommand extends GitCommand<RebaseResult> {
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
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 |
|
|
|
|
* <code>git-rebase-todo</code> file but preserves comments and other lines |
|
|
|
|