]> source.dussan.org Git - jgit.git/commitdiff
Add progress monitor to Merger 80/64280/3
authorLaurent Delaigue <laurent.delaigue@obeo.fr>
Wed, 13 Jan 2016 15:56:00 +0000 (16:56 +0100)
committerMatthias Sohn <matthias.sohn@sap.com>
Thu, 21 Jan 2016 10:37:26 +0000 (11:37 +0100)
Monitoring progress of merges can be useful for users for large
repositories or complex merge processes that take some time.

This enables setting a monitor. Existing merge implementations in jgit
do not yet report progress if a monitor is set. This will be added in a
later change.

Change-Id: I17b978b3fc91750dd88649638b90a46820a0877c
Signed-off-by: Laurent Delaigue <laurent.delaigue@obeo.fr>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
org.eclipse.jgit/src/org/eclipse/jgit/api/MergeCommand.java
org.eclipse.jgit/src/org/eclipse/jgit/api/PullCommand.java
org.eclipse.jgit/src/org/eclipse/jgit/api/RebaseCommand.java
org.eclipse.jgit/src/org/eclipse/jgit/api/SubmoduleUpdateCommand.java
org.eclipse.jgit/src/org/eclipse/jgit/merge/Merger.java

index d2075a70f2a95e72fdc726ce3ca57d3f7394df4c..bfe90a3a4f9f25e5d5949d79bcaf4e6921db82c8 100644 (file)
@@ -1,6 +1,7 @@
 /*
  * Copyright (C) 2010, Christian Halstrick <christian.halstrick@sap.com>
  * Copyright (C) 2010-2014, Stefan Lay <stefan.lay@sap.com>
+ * Copyright (C) 2016, Laurent Delaigue <laurent.delaigue@obeo.fr>
  * and other copyright owners as documented in the project's IP log.
  *
  * This program and the accompanying materials are made available
@@ -65,8 +66,10 @@ import org.eclipse.jgit.internal.JGitText;
 import org.eclipse.jgit.lib.AnyObjectId;
 import org.eclipse.jgit.lib.Config.ConfigEnum;
 import org.eclipse.jgit.lib.Constants;
+import org.eclipse.jgit.lib.NullProgressMonitor;
 import org.eclipse.jgit.lib.ObjectId;
 import org.eclipse.jgit.lib.ObjectIdRef;
+import org.eclipse.jgit.lib.ProgressMonitor;
 import org.eclipse.jgit.lib.Ref;
 import org.eclipse.jgit.lib.Ref.Storage;
 import org.eclipse.jgit.lib.RefUpdate;
@@ -106,6 +109,8 @@ public class MergeCommand extends GitCommand<MergeResult> {
 
        private String message;
 
+       private ProgressMonitor monitor = NullProgressMonitor.INSTANCE;
+
        /**
         * The modes available for fast forward merges corresponding to the
         * <code>--ff</code>, <code>--no-ff</code> and <code>--ff-only</code>
@@ -330,6 +335,7 @@ public class MergeCommand extends GitCommand<MergeResult> {
                                        repo.writeSquashCommitMsg(squashMessage);
                                }
                                Merger merger = mergeStrategy.newMerger(repo);
+                               merger.setProgressMonitor(monitor);
                                boolean noProblems;
                                Map<String, org.eclipse.jgit.merge.MergeResult<?>> lowLevelResults = null;
                                Map<String, MergeFailureReason> failingPaths = null;
@@ -586,4 +592,23 @@ public class MergeCommand extends GitCommand<MergeResult> {
                this.message = message;
                return this;
        }
+
+       /**
+        * The progress monitor associated with the diff operation. By default, this
+        * is set to <code>NullProgressMonitor</code>
+        *
+        * @see NullProgressMonitor
+        *
+        * @param monitor
+        *            A progress monitor
+        * @return this instance
+        * @since 4.2
+        */
+       public MergeCommand setProgressMonitor(ProgressMonitor monitor) {
+               if (monitor == null) {
+                       monitor = NullProgressMonitor.INSTANCE;
+               }
+               this.monitor = monitor;
+               return this;
+       }
 }
index 2783edd5d8bf422e987d9e5a95d918f32c349e81..549ef6cf135c8e105e8ca4099cc62cf6c0a4e8ea 100644 (file)
@@ -1,6 +1,7 @@
 /*
  * Copyright (C) 2010, Christian Halstrick <christian.halstrick@sap.com>
  * Copyright (C) 2010, Mathias Kinzler <mathias.kinzler@sap.com>
+ * Copyright (C) 2016, Laurent Delaigue <laurent.delaigue@obeo.fr>
  * and other copyright owners as documented in the project's IP log.
  *
  * This program and the accompanying materials are made available
@@ -326,6 +327,7 @@ public class PullCommand extends TransportCommand<PullCommand, PullResult> {
                        MergeCommand merge = new MergeCommand(repo);
                        merge.include(upstreamName, commitToMerge);
                        merge.setStrategy(strategy);
+                       merge.setProgressMonitor(monitor);
                        MergeResult mergeRes = merge.call();
                        monitor.update(1);
                        result = new PullResult(fetchRes, remote, mergeRes);
index e3e76c95f4c8a781f04061b08645b0af2f7cbb98..643ec7a51fa6eab554dbbe444a14d8b95e718b98 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2010, 2013 Mathias Kinzler <mathias.kinzler@sap.com>
+ * Copyright (C) 2016, Laurent Delaigue <laurent.delaigue@obeo.fr>
  * and other copyright owners as documented in the project's IP log.
  *
  * This program and the accompanying materials are made available
@@ -611,6 +612,7 @@ public class RebaseCommand extends GitCommand<RebaseResult> {
                                        // their non-first parents rewritten
                                        MergeCommand merge = git.merge()
                                                        .setFastForward(MergeCommand.FastForwardMode.NO_FF)
+                                                       .setProgressMonitor(monitor)
                                                        .setCommit(false);
                                        for (int i = 1; i < commitToPick.getParentCount(); i++)
                                                merge.include(newParents.get(i));
index e288d7755b5dbcbb642679a47acf76390a3b18d9..342d7f42f39cadba44bc0b061f744aceb93ff8f1 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2011, GitHub Inc.
+ * Copyright (C) 2016, Laurent Delaigue <laurent.delaigue@obeo.fr>
  * and other copyright owners as documented in the project's IP log.
  *
  * This program and the accompanying materials are made available
@@ -178,11 +179,13 @@ public class SubmoduleUpdateCommand extends
                                        if (ConfigConstants.CONFIG_KEY_MERGE.equals(update)) {
                                                MergeCommand merge = new MergeCommand(submoduleRepo);
                                                merge.include(commit);
+                                               merge.setProgressMonitor(monitor);
                                                merge.setStrategy(strategy);
                                                merge.call();
                                        } else if (ConfigConstants.CONFIG_KEY_REBASE.equals(update)) {
                                                RebaseCommand rebase = new RebaseCommand(submoduleRepo);
                                                rebase.setUpstream(commit);
+                                               rebase.setProgressMonitor(monitor);
                                                rebase.setStrategy(strategy);
                                                rebase.call();
                                        } else {
index 983bf5c91c911f878bcc1399afdb7bc033e4c0cb..bee2d03523628405e07b4ab9a1c043b433cc058c 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2008-2013, Google Inc.
+ * Copyright (C) 2016, Laurent Delaigue <laurent.delaigue@obeo.fr>
  * and other copyright owners as documented in the project's IP log.
  *
  * This program and the accompanying materials are made available
@@ -51,9 +52,11 @@ import org.eclipse.jgit.errors.NoMergeBaseException;
 import org.eclipse.jgit.errors.NoMergeBaseException.MergeBaseFailureReason;
 import org.eclipse.jgit.internal.JGitText;
 import org.eclipse.jgit.lib.AnyObjectId;
+import org.eclipse.jgit.lib.NullProgressMonitor;
 import org.eclipse.jgit.lib.ObjectId;
 import org.eclipse.jgit.lib.ObjectInserter;
 import org.eclipse.jgit.lib.ObjectReader;
+import org.eclipse.jgit.lib.ProgressMonitor;
 import org.eclipse.jgit.lib.Repository;
 import org.eclipse.jgit.revwalk.RevCommit;
 import org.eclipse.jgit.revwalk.RevObject;
@@ -87,6 +90,13 @@ public abstract class Merger {
        /** The trees matching every entry in {@link #sourceObjects}. */
        protected RevTree[] sourceTrees;
 
+       /**
+        * A progress monitor.
+        *
+        * @since 4.2
+        */
+       protected ProgressMonitor monitor = NullProgressMonitor.INSTANCE;
+
        /**
         * Create a new merge instance for a repository.
         *
@@ -290,4 +300,20 @@ public abstract class Merger {
         * @return resulting tree, if {@link #merge(AnyObjectId[])} returned true.
         */
        public abstract ObjectId getResultTreeId();
+
+       /**
+        * Set a progress monitor.
+        *
+        * @param monitor
+        *            Monitor to use, can be null to indicate no progress reporting
+        *            is desired.
+        * @since 4.2
+        */
+       public void setProgressMonitor(ProgressMonitor monitor) {
+               if (monitor == null) {
+                       this.monitor = NullProgressMonitor.INSTANCE;
+               } else {
+                       this.monitor = monitor;
+               }
+       }
 }