]> source.dussan.org Git - jgit.git/commitdiff
Provide merge result when revert command fails 61/4661/1
authorKevin Sawicki <kevin@github.com>
Tue, 22 Nov 2011 01:14:11 +0000 (17:14 -0800)
committerKevin Sawicki <kevin@github.com>
Tue, 22 Nov 2011 01:14:11 +0000 (17:14 -0800)
This allows callers to determine why the revert
did not complete successfully

Change-Id: Ie44bb8523cac388b63748bc69ebdd3c3a3665d06
Signed-off-by: Kevin Sawicki <kevin@github.com>
org.eclipse.jgit/src/org/eclipse/jgit/api/RevertCommand.java

index 6e27bf287208ab7f41af78db7e7d22df550305a4..3475ed7d644cdc0c2f8c701a9853e8220ecb80f1 100644 (file)
@@ -46,8 +46,10 @@ import java.io.IOException;
 import java.text.MessageFormat;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Map;
 
 import org.eclipse.jgit.JGitText;
+import org.eclipse.jgit.api.MergeResult.MergeStatus;
 import org.eclipse.jgit.api.errors.GitAPIException;
 import org.eclipse.jgit.api.errors.MultipleParentsNotAllowedException;
 import org.eclipse.jgit.api.errors.JGitInternalException;
@@ -62,6 +64,7 @@ import org.eclipse.jgit.lib.Ref.Storage;
 import org.eclipse.jgit.lib.Repository;
 import org.eclipse.jgit.merge.MergeStrategy;
 import org.eclipse.jgit.merge.ResolveMerger;
+import org.eclipse.jgit.merge.ResolveMerger.MergeFailureReason;
 import org.eclipse.jgit.revwalk.RevCommit;
 import org.eclipse.jgit.revwalk.RevWalk;
 import org.eclipse.jgit.treewalk.FileTreeIterator;
@@ -81,6 +84,8 @@ public class RevertCommand extends GitCommand<RevCommit> {
 
        private List<Ref> revertedRefs = new LinkedList<Ref>();
 
+       private MergeResult failingResult;
+
        /**
         * @param repo
         */
@@ -155,6 +160,15 @@ public class RevertCommand extends GitCommand<RevCommit> {
                                                        .setReflogComment("revert: " + shortMessage).call();
                                        revertedRefs.add(src);
                                } else {
+                                       Map<String, MergeFailureReason> failingPaths = merger
+                                                       .getFailingPaths();
+                                       if (failingPaths != null)
+                                               failingResult = new MergeResult(null,
+                                                               merger.getBaseCommit(0, 1),
+                                                               new ObjectId[] { headCommit.getId(),
+                                                                               srcParent.getId() },
+                                                               MergeStatus.FAILED, MergeStrategy.RESOLVE,
+                                                               merger.getMergeResults(), failingPaths, null);
                                        return null;
                                }
                        }
@@ -210,4 +224,12 @@ public class RevertCommand extends GitCommand<RevCommit> {
        public List<Ref> getRevertedRefs() {
                return revertedRefs;
        }
+
+       /**
+        * @return the result of the merge failure, <code>null</code> if no merge
+        *         failure occurred during the revert
+        */
+       public MergeResult getFailingResult() {
+               return failingResult;
+       }
 }