Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Lay2012-01-30 14:13:09 +0000
committerMatthias Sohn2012-01-30 16:03:45 +0000
commitacdb743e517df6ebb86cbd1061f75661582cd92b (patch)
treec86c41ef562f3352e9bdf50ea4c8fa844767a374 /org.eclipse.egit.ui
parentf743c8121dc5fae73fb57e0e4c5b912a31d7e63f (diff)
downloadegit-acdb743e517df6ebb86cbd1061f75661582cd92b.tar.gz
egit-acdb743e517df6ebb86cbd1061f75661582cd92b.tar.xz
egit-acdb743e517df6ebb86cbd1061f75661582cd92b.zip
Allow for repository configuration using GitRepositoryInfo
An extender of org.eclipse.egit.ui.cloneSourceProvider can specify configuration settings using the class GitRepositoryInfo. This info is used now in the clone step. Change-Id: Ic65f07474083cd98fcc11dc22e8bfc4a284ec9d5 Signed-off-by: Sascha Scholz <sascha.scholz@gmail.com> Signed-off-by: Stefan Lay <stefan.lay@sap.com> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
Diffstat (limited to 'org.eclipse.egit.ui')
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/AbstractGitCloneWizard.java61
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitImportWizard.java2
2 files changed, 61 insertions, 2 deletions
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/AbstractGitCloneWizard.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/AbstractGitCloneWizard.java
index 34c3b57eb1..f27aee767b 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/AbstractGitCloneWizard.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/AbstractGitCloneWizard.java
@@ -5,17 +5,19 @@
* Copyright (C) 2008, Robin Rosenberg <robin.rosenberg@dewire.com>
* Copyright (C) 2010, Mathias Kinzler <mathias.kinzler@sap.com>
* Copyright (C) 2010, Benjamin Muskalla <bmuskalla@eclipsesource.com>
- * Copyright (C) 2011, Stefan Lay <stefan.lay@sap.com>
+ * Copyright (C) 2012, Stefan Lay <stefan.lay@sap.com>
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*******************************************************************************/
+
package org.eclipse.egit.ui.internal.clone;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
+import java.net.URISyntaxException;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Collection;
@@ -37,6 +39,7 @@ import org.eclipse.egit.core.op.ConfigureFetchAfterCloneTask;
import org.eclipse.egit.core.op.ConfigurePushAfterCloneTask;
import org.eclipse.egit.core.op.ListRemoteOperation;
import org.eclipse.egit.core.op.SetChangeIdTask;
+import org.eclipse.egit.core.op.SetRepositoryConfigPropertyTask;
import org.eclipse.egit.core.securestorage.UserPasswordCredentials;
import org.eclipse.egit.ui.Activator;
import org.eclipse.egit.ui.JobFamilies;
@@ -44,6 +47,9 @@ import org.eclipse.egit.ui.UIPreferences;
import org.eclipse.egit.ui.UIText;
import org.eclipse.egit.ui.internal.components.RepositorySelection;
import org.eclipse.egit.ui.internal.credentials.EGitCredentialsProvider;
+import org.eclipse.egit.ui.internal.provisional.wizards.GitRepositoryInfo;
+import org.eclipse.egit.ui.internal.provisional.wizards.GitRepositoryInfo.PushInfo;
+import org.eclipse.egit.ui.internal.provisional.wizards.GitRepositoryInfo.RepositoryConfigProperty;
import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.operation.IRunnableWithProgress;
@@ -157,6 +163,25 @@ public abstract class AbstractGitCloneWizard extends Wizard {
*/
protected boolean performClone(URIish uri,
UserPasswordCredentials credentials) {
+ try {
+ GitRepositoryInfo info = new GitRepositoryInfo(uri.toString());
+ if (credentials != null)
+ info.setCredentials(credentials.getUser(), credentials.getPassword());
+ return performClone(info);
+ } catch (URISyntaxException e) {
+ Activator.error(e.getMessage(), e);
+ return false;
+ }
+ }
+
+ /**
+ * @param gitRepositoryInfo
+ * @return if clone was successful
+ * @throws URISyntaxException
+ */
+ protected boolean performClone(GitRepositoryInfo gitRepositoryInfo) throws URISyntaxException {
+ URIish uri = new URIish(gitRepositoryInfo.getCloneUri());
+ UserPasswordCredentials credentials = gitRepositoryInfo.getCredentials();
setWindowTitle(NLS.bind(UIText.GitCloneWizard_jobName, uri.toString()));
final boolean allSelected;
final Collection<Ref> selectedBranches;
@@ -196,6 +221,10 @@ public abstract class AbstractGitCloneWizard extends Wizard {
credentials.getUser(), credentials.getPassword()));
op.setCloneSubmodules(cloneDestination.isCloneSubmodules());
+ configureFetchSpec(op, gitRepositoryInfo, remoteName);
+ configurePush(op, gitRepositoryInfo, remoteName);
+ configureRepositoryConfig(op, gitRepositoryInfo);
+
if (gerritConfiguration != null
&& gerritConfiguration.configureGerrit()) {
boolean hasReviewNotes = hasReviewNotes(uri, timeout, credentials);
@@ -225,6 +254,36 @@ public abstract class AbstractGitCloneWizard extends Wizard {
return true;
}
+ private void configureFetchSpec(CloneOperation op,
+ GitRepositoryInfo gitRepositoryInfo, String remoteName) {
+ for (String fetchRefSpec : gitRepositoryInfo.getFetchRefSpecs())
+ op.addPostCloneTask(new ConfigureFetchAfterCloneTask(remoteName, fetchRefSpec));
+ }
+
+ private void configurePush(CloneOperation op,
+ GitRepositoryInfo gitRepositoryInfo, String remoteName) {
+ for (PushInfo pushInfo : gitRepositoryInfo.getPushInfos()) {
+ try {
+ URIish uri = pushInfo.getPushUri() != null ? new URIish(
+ pushInfo.getPushUri()) : null;
+ ConfigurePushAfterCloneTask task = new ConfigurePushAfterCloneTask(
+ remoteName, pushInfo.getPushRefSpec(), uri);
+ op.addPostCloneTask(task);
+ } catch (URISyntaxException e) {
+ Activator.handleError(UIText.GitCloneWizard_failed, e, true);
+ }
+ }
+ }
+
+ private void configureRepositoryConfig(CloneOperation op, GitRepositoryInfo gitRepositoryInfo) {
+ for (RepositoryConfigProperty p : gitRepositoryInfo.getRepositoryConfigProperties()) {
+ SetRepositoryConfigPropertyTask task = new SetRepositoryConfigPropertyTask(
+ p.getSection(), p.getSubsection(), p.getName(),
+ p.getValue());
+ op.addPostCloneTask(task);
+ }
+ }
+
private void importProjects(final Repository repository,
final IWorkingSet[] sets) {
String repoName = Activator.getDefault().getRepositoryUtil()
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitImportWizard.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitImportWizard.java
index 1a7d91f867..64d304da2b 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitImportWizard.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitImportWizard.java
@@ -64,7 +64,7 @@ public class GitImportWizard extends AbstractGitCloneWizard implements IImportWi
if (visible && (cloneDestination.cloneSettingsChanged())) {
setCallerRunsCloneOperation(true);
try {
- performClone(new URIish(currentSearchResult.getGitRepositoryInfo().getCloneUri()), getCredentials());
+ performClone(currentSearchResult.getGitRepositoryInfo());
importWithDirectoriesPage.getControl().getDisplay().asyncExec(new Runnable() {
public void run() {

Back to the top