diff options
author | Stefan Lay | 2012-01-30 14:13:09 +0000 |
---|---|---|
committer | Matthias Sohn | 2012-01-30 16:03:45 +0000 |
commit | acdb743e517df6ebb86cbd1061f75661582cd92b (patch) | |
tree | c86c41ef562f3352e9bdf50ea4c8fa844767a374 /org.eclipse.egit.ui | |
parent | f743c8121dc5fae73fb57e0e4c5b912a31d7e63f (diff) | |
download | egit-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.java | 61 | ||||
-rw-r--r-- | org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitImportWizard.java | 2 |
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() { |