diff options
author | Thomas Wolf | 2017-05-07 15:19:36 +0000 |
---|---|---|
committer | Thomas Wolf | 2017-05-08 08:25:12 +0000 |
commit | 29b253947bd29341a4b7d3b1cd86190a7983f1f4 (patch) | |
tree | d71aef31da1e7faad4bcca9463ec32ac3481332a | |
parent | aa4edf4186a04beea7f09f20224228845c57593d (diff) | |
download | egit-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>
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()); |