Add progress monitor to Merger
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>
This commit is contained in:
parent
82f47ace3d
commit
4409751516
|
@ -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.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 MergeResult call() throws GitAPIException, NoHeadException,
|
|||
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 MergeCommand setMessage(String message) {
|
|||
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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 PullResult call() throws GitAPIException,
|
|||
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);
|
||||
|
|
|
@ -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 @@ private RebaseResult cherryPickCommitPreservingMerges(RevCommit commitToPick)
|
|||
// 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));
|
||||
|
|
|
@ -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 Collection<String> call() throws InvalidConfigurationException,
|
|||
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 {
|
||||
|
|
|
@ -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.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 @@ protected AbstractTreeIterator openTree(final AnyObjectId treeId)
|
|||
* @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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue