]> source.dussan.org Git - jgit.git/commitdiff
Enable to prepare interactive rebase and then start it explicitly 55/16755/6
authorTobias Pfeifer <to.pfeifer@web.de>
Thu, 11 Jul 2013 09:09:30 +0000 (11:09 +0200)
committerMatthias Sohn <matthias.sohn@sap.com>
Fri, 1 Nov 2013 22:43:59 +0000 (23:43 +0100)
Add Operation.PROCESS_STEPS to RebaseCommand to enable starting
interactive rebase explicitly after rebase steps have been configured.

Change-Id: I2d6f0de82010ea6523fbce6fb4501e847bdcdddc
Signed-off-by: Tobias Pfeifer <to.pfeifer@web.de>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
org.eclipse.jgit/src/org/eclipse/jgit/api/RebaseCommand.java
org.eclipse.jgit/src/org/eclipse/jgit/api/RebaseResult.java

index b8cbb9f0488134caf38dd6518ec4d01c1d3e4ad2..e7c31da4174b45118b8af345fd8e605792a00ba7 100644 (file)
@@ -166,7 +166,11 @@ public class RebaseCommand extends GitCommand<RebaseResult> {
                /**
                 * Aborts and resets the current rebase
                 */
-               ABORT;
+               ABORT,
+               /**
+                * Starts processing steps
+                */
+               PROCESS_STEPS;
        }
 
        private Operation operation = Operation.BEGIN;
@@ -183,6 +187,8 @@ public class RebaseCommand extends GitCommand<RebaseResult> {
 
        private InteractiveHandler interactiveHandler;
 
+       private boolean stopAfterInitialization = false;
+
        /**
         * @param repo
         */
@@ -218,6 +224,8 @@ public class RebaseCommand extends GitCommand<RebaseResult> {
                                } catch (IOException ioe) {
                                        throw new JGitInternalException(ioe.getMessage(), ioe);
                                }
+                       case PROCESS_STEPS:
+                               // fall through
                        case SKIP:
                                // fall through
                        case CONTINUE:
@@ -234,6 +242,8 @@ public class RebaseCommand extends GitCommand<RebaseResult> {
                                break;
                        case BEGIN:
                                RebaseResult res = initFilesAndRewind();
+                               if (stopAfterInitialization)
+                                       return RebaseResult.INTERACTIVE_PREPARED_RESULT;
                                if (res != null)
                                        return res;
                        }
@@ -709,6 +719,12 @@ public class RebaseCommand extends GitCommand<RebaseResult> {
        }
 
        private void checkParameters() throws WrongRepositoryStateException {
+               if (this.operation == Operation.PROCESS_STEPS) {
+                       if (rebaseState.getFile(DONE).exists())
+                               throw new WrongRepositoryStateException(MessageFormat.format(
+                                               JGitText.get().wrongRepositoryState, repo
+                                                               .getRepositoryState().name()));
+               }
                if (this.operation != Operation.BEGIN) {
                        // these operations are only possible while in a rebasing state
                        switch (repo.getRepositoryState()) {
@@ -923,11 +939,36 @@ public class RebaseCommand extends GitCommand<RebaseResult> {
 
        /**
         * Enables interactive rebase
+        * <p>
+        * Does not stop after initialization of interactive rebase. This is
+        * equivalent to
+        * {@link RebaseCommand#runInteractively(InteractiveHandler, boolean)
+        * runInteractively(handler, false)};
+        * </p>
         *
         * @param handler
         * @return this
         */
        public RebaseCommand runInteractively(InteractiveHandler handler) {
+               return runInteractively(handler, false);
+       }
+
+       /**
+        * Enables interactive rebase
+        * <p>
+        * If stopAfterRebaseInteractiveInitialization is {@code true} the rebase
+        * stops after initialization of interactive rebase returning
+        * {@link RebaseResult#INTERACTIVE_PREPARED_RESULT}
+        * </p>
+        *
+        * @param handler
+        * @param stopAfterRebaseInteractiveInitialization
+        *            if {@code true} the rebase stops after initialization
+        * @return this instance
+        */
+       public RebaseCommand runInteractively(InteractiveHandler handler,
+                       final boolean stopAfterRebaseInteractiveInitialization) {
+               this.stopAfterInitialization = stopAfterRebaseInteractiveInitialization;
                this.interactiveHandler = handler;
                return this;
        }
index 59655570c0a23323027327a9beb6a45f33ee6a08..ff18adce4f3873516bb703c82befcdab3cfcad7f 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2010, Mathias Kinzler <mathias.kinzler@sap.com>
+ * Copyright (C) 2010, 2013, Mathias Kinzler <mathias.kinzler@sap.com>
  * and other copyright owners as documented in the project's IP log.
  *
  * This program and the accompanying materials are made available
@@ -131,6 +131,16 @@ public class RebaseResult {
                        public boolean isSuccessful() {
                                return false;
                        }
+               },
+
+               /**
+                * Interactive rebase has been prepared
+                */
+               INTERACTIVE_PREPARED {
+                       @Override
+                       public boolean isSuccessful() {
+                               return false;
+                       }
                };
 
                /**
@@ -152,6 +162,9 @@ public class RebaseResult {
        static final RebaseResult NOTHING_TO_COMMIT_RESULT = new RebaseResult(
                        Status.NOTHING_TO_COMMIT);
 
+       static final RebaseResult INTERACTIVE_PREPARED_RESULT =  new RebaseResult(
+                       Status.INTERACTIVE_PREPARED);
+
        private final Status status;
 
        private final RevCommit currentCommit;