Pārlūkot izejas kodu

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>
tags/v4.2.0.201601211800-r
Laurent Delaigue pirms 8 gadiem
vecāks
revīzija
4409751516

+ 25
- 0
org.eclipse.jgit/src/org/eclipse/jgit/api/MergeCommand.java Parādīt failu

@@ -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;
}
}

+ 2
- 0
org.eclipse.jgit/src/org/eclipse/jgit/api/PullCommand.java Parādīt failu

@@ -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);

+ 2
- 0
org.eclipse.jgit/src/org/eclipse/jgit/api/RebaseCommand.java Parādīt failu

@@ -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));

+ 3
- 0
org.eclipse.jgit/src/org/eclipse/jgit/api/SubmoduleUpdateCommand.java Parādīt failu

@@ -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 {

+ 26
- 0
org.eclipse.jgit/src/org/eclipse/jgit/merge/Merger.java Parādīt failu

@@ -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;
}
}
}

Notiek ielāde…
Atcelt
Saglabāt