]> source.dussan.org Git - jgit.git/commitdiff
Rebase Interoperability third part: handle stop upon conflict 86/1986/2
authorMathias Kinzler <mathias.kinzler@sap.com>
Tue, 7 Dec 2010 12:34:44 +0000 (13:34 +0100)
committerMathias Kinzler <mathias.kinzler@sap.com>
Tue, 7 Dec 2010 12:34:44 +0000 (13:34 +0100)
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 <mathias.kinzler@sap.com>
org.eclipse.jgit/src/org/eclipse/jgit/api/RebaseCommand.java

index fbe7debc45c6a44f43f49b7c58afbc37ac29d0b0..78ddf870795240197e860479ecdb35a8b342b319 100644 (file)
@@ -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