Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Wolf2017-05-07 15:19:36 +0000
committerThomas Wolf2017-05-08 08:25:12 +0000
commit29b253947bd29341a4b7d3b1cd86190a7983f1f4 (patch)
treed71aef31da1e7faad4bcca9463ec32ac3481332a
parentaa4edf4186a04beea7f09f20224228845c57593d (diff)
downloadegit-29b253947bd29341a4b7d3b1cd86190a7983f1f4.tar.gz
egit-29b253947bd29341a4b7d3b1cd86190a7983f1f4.tar.xz
egit-29b253947bd29341a4b7d3b1cd86190a7983f1f4.zip
Improve progress reporting for submodules
Use the new CloneCommand.Callback interface to improve progress reporting a little by telling the user during clone and submodule updates which submodules are being cloned. Change-Id: Ie62e41211f6108bc10702e6136e524d05bc135e7 Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
-rw-r--r--org.eclipse.egit.core/src/org/eclipse/egit/core/internal/CoreText.java9
-rw-r--r--org.eclipse.egit.core/src/org/eclipse/egit/core/internal/coretext.properties4
-rw-r--r--org.eclipse.egit.core/src/org/eclipse/egit/core/op/CloneOperation.java28
-rw-r--r--org.eclipse.egit.core/src/org/eclipse/egit/core/op/SubmoduleUpdateOperation.java31
4 files changed, 70 insertions, 2 deletions
diff --git a/org.eclipse.egit.core/src/org/eclipse/egit/core/internal/CoreText.java b/org.eclipse.egit.core/src/org/eclipse/egit/core/internal/CoreText.java
index 963f4a91b3..f68fff8dcf 100644
--- a/org.eclipse.egit.core/src/org/eclipse/egit/core/internal/CoreText.java
+++ b/org.eclipse.egit.core/src/org/eclipse/egit/core/internal/CoreText.java
@@ -287,6 +287,9 @@ public class CoreText extends NLS {
public static String CloneOperation_failed_cleanup;
/** */
+ public static String CloneOperation_submodule_title;
+
+ /** */
public static String CloneOperation_title;
/** */
@@ -476,6 +479,12 @@ public class CoreText extends NLS {
public static String SquashCommitsOperation_squashing;
/** */
+ public static String SubmoduleUpdateOperation_updating;
+
+ /** */
+ public static String SubmoduleUpdateOperation_cloning;
+
+ /** */
public static String Utils_InvalidAdapterError;
static {
diff --git a/org.eclipse.egit.core/src/org/eclipse/egit/core/internal/coretext.properties b/org.eclipse.egit.core/src/org/eclipse/egit/core/internal/coretext.properties
index 4dd9f420c3..742b24c1e1 100644
--- a/org.eclipse.egit.core/src/org/eclipse/egit/core/internal/coretext.properties
+++ b/org.eclipse.egit.core/src/org/eclipse/egit/core/internal/coretext.properties
@@ -112,6 +112,7 @@ GitProjectSetCapability_ExportNoRemote=No remote URL configured for current bran
CloneOperation_failed_cleanup=Clone operation failed, with failed cleanup: {0}. Manual cleanup may be required.
CloneOperation_title=Cloning from {0}
+CloneOperation_submodule_title=Cloning from {0}: submodule {1}
CloneOperation_configuring=Configuring the clone...
CreateLocalBranchOperation_CreatingBranchMessage=Creating branch {0}
CreatePatchOperation_repoRequired=A repository is required to create a patch
@@ -193,4 +194,7 @@ MergeStrategy_MissingName=A merge strategy must have a name. The unnamed strateg
MergeStrategy_DuplicateName=Another merge strategy is already registered by class {1} with the same name {0}. The strategy {0} implemented by class {2} will be ignored
MergeStrategy_ReservedName=The strategy name {0} is reserved by JGit for class {1}. The strategy implemented by class {2} will be ignored
+SubmoduleUpdateOperation_updating=Updating submodules in {0}
+SubmoduleUpdateOperation_cloning=Updating submodules in {0}: cloning submodule {1}
+
Utils_InvalidAdapterError=Adaptable of type {0} returned from getAdapter({1}.class) an object of type {2}, which is not of the requested type. Please ask the provider of {0} to fix this bug in their code.
diff --git a/org.eclipse.egit.core/src/org/eclipse/egit/core/op/CloneOperation.java b/org.eclipse.egit.core/src/org/eclipse/egit/core/op/CloneOperation.java
index 6e8a523ea7..99e4227296 100644
--- a/org.eclipse.egit.core/src/org/eclipse/egit/core/op/CloneOperation.java
+++ b/org.eclipse.egit.core/src/org/eclipse/egit/core/op/CloneOperation.java
@@ -28,6 +28,7 @@ import org.eclipse.egit.core.EclipseGitProgressTransformer;
import org.eclipse.egit.core.internal.CoreText;
import org.eclipse.jgit.api.CloneCommand;
import org.eclipse.jgit.api.Git;
+import org.eclipse.jgit.lib.AnyObjectId;
import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.lib.Repository;
@@ -124,12 +125,30 @@ public class CloneOperation {
*/
public void run(final IProgressMonitor monitor)
throws InvocationTargetException, InterruptedException {
- SubMonitor progress = SubMonitor.convert(monitor,
- NLS.bind(CoreText.CloneOperation_title, uri),
+ String title = NLS.bind(CoreText.CloneOperation_title, uri);
+ SubMonitor progress = SubMonitor.convert(monitor, title,
postCloneTasks.isEmpty() ? 10 : 11);
EclipseGitProgressTransformer gitMonitor = new EclipseGitProgressTransformer(
progress.newChild(10));
+ CloneCommand.Callback callback = new CloneCommand.Callback() {
+
+ @Override
+ public void initializedSubmodules(Collection<String> submodules) {
+ // Nothing to do
+ }
+
+ @Override
+ public void cloningSubmodule(String path) {
+ progress.setTaskName(NLS.bind(
+ CoreText.CloneOperation_submodule_title, uri, path));
+ }
+
+ @Override
+ public void checkingOut(AnyObjectId commit, String path) {
+ // Nothing to do
+ }
+ };
Repository repository = null;
try {
CloneCommand cloneRepository = Git.cloneRepository();
@@ -146,6 +165,9 @@ public class CloneOperation {
cloneRepository.setTimeout(timeout);
cloneRepository.setCloneAllBranches(allSelected);
cloneRepository.setCloneSubmodules(cloneSubmodules);
+ if (cloneSubmodules) {
+ cloneRepository.setCallback(callback);
+ }
if (selectedBranches != null) {
List<String> branches = new ArrayList<String>();
for (Ref branch : selectedBranches) {
@@ -156,6 +178,7 @@ public class CloneOperation {
Git git = cloneRepository.call();
repository = git.getRepository();
if (!postCloneTasks.isEmpty()) {
+ progress.setTaskName(title);
progress.setWorkRemaining(postCloneTasks.size());
progress.subTask(CoreText.CloneOperation_configuring);
for (PostCloneTask task : postCloneTasks) {
@@ -166,6 +189,7 @@ public class CloneOperation {
try {
if (repository != null) {
repository.close();
+ repository = null;
}
FileUtils.delete(workdir, FileUtils.RECURSIVE);
} catch (IOException ioe) {
diff --git a/org.eclipse.egit.core/src/org/eclipse/egit/core/op/SubmoduleUpdateOperation.java b/org.eclipse.egit.core/src/org/eclipse/egit/core/op/SubmoduleUpdateOperation.java
index aea7f6cd6e..aa2d11fa85 100644
--- a/org.eclipse.egit.core/src/org/eclipse/egit/core/op/SubmoduleUpdateOperation.java
+++ b/org.eclipse.egit.core/src/org/eclipse/egit/core/op/SubmoduleUpdateOperation.java
@@ -13,6 +13,7 @@
package org.eclipse.egit.core.op;
import java.io.IOException;
+import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Collection;
@@ -25,11 +26,15 @@ import org.eclipse.core.runtime.SubMonitor;
import org.eclipse.core.runtime.jobs.ISchedulingRule;
import org.eclipse.egit.core.Activator;
import org.eclipse.egit.core.EclipseGitProgressTransformer;
+import org.eclipse.egit.core.RepositoryUtil;
+import org.eclipse.egit.core.internal.CoreText;
import org.eclipse.egit.core.internal.util.ProjectUtil;
+import org.eclipse.jgit.api.CloneCommand;
import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.api.SubmoduleInitCommand;
import org.eclipse.jgit.api.SubmoduleUpdateCommand;
import org.eclipse.jgit.api.errors.GitAPIException;
+import org.eclipse.jgit.lib.AnyObjectId;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.merge.MergeStrategy;
import org.eclipse.jgit.submodule.SubmoduleWalk;
@@ -71,7 +76,12 @@ public class SubmoduleUpdateOperation implements IEGitOperation {
@Override
public void run(IProgressMonitor pm) throws CoreException {
+ RepositoryUtil util = Activator.getDefault()
+ .getRepositoryUtil();
SubMonitor progress = SubMonitor.convert(pm, 4);
+ progress.setTaskName(MessageFormat.format(
+ CoreText.SubmoduleUpdateOperation_updating,
+ util.getRepositoryName(repository)));
Git git = Git.wrap(repository);
@@ -93,6 +103,27 @@ public class SubmoduleUpdateOperation implements IEGitOperation {
if (strategy != null) {
update.setStrategy(strategy);
}
+ update.setCallback(new CloneCommand.Callback() {
+
+ @Override
+ public void initializedSubmodules(
+ Collection<String> submodules) {
+ // Nothing to do
+ }
+
+ @Override
+ public void cloningSubmodule(String path) {
+ progress.setTaskName(MessageFormat.format(
+ CoreText.SubmoduleUpdateOperation_cloning,
+ util.getRepositoryName(repository), path));
+ }
+
+ @Override
+ public void checkingOut(AnyObjectId commit,
+ String path) {
+ // Nothing to do
+ }
+ });
updated = update.call();
SubMonitor refreshMonitor = progress.newChild(1)
.setWorkRemaining(updated.size());

Back to the top