Improve error reporting in the branch dialog
[egit/imyousuf.git] / org.spearce.egit.core / src / org / spearce / egit / core / op / ConnectProviderOperation.java
blob274fabbe940db2db1ec4de4a8479e6d3eaefe256
1 /*******************************************************************************
2 * Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org>
3 * Copyright (C) 2008, Google Inc.
5 * All rights reserved. This program and the accompanying materials
6 * are made available under the terms of the Eclipse Public License v1.0
7 * See LICENSE for the full license text, also available.
8 *******************************************************************************/
9 package org.spearce.egit.core.op;
11 import java.util.Collection;
13 import org.eclipse.core.resources.IProject;
14 import org.eclipse.core.resources.IResource;
15 import org.eclipse.core.resources.IWorkspaceRunnable;
16 import org.eclipse.core.runtime.CoreException;
17 import org.eclipse.core.runtime.IProgressMonitor;
18 import org.eclipse.core.runtime.NullProgressMonitor;
19 import org.eclipse.core.runtime.SubProgressMonitor;
20 import org.eclipse.osgi.util.NLS;
21 import org.eclipse.team.core.RepositoryProvider;
22 import org.spearce.egit.core.Activator;
23 import org.spearce.egit.core.CoreText;
24 import org.spearce.egit.core.GitProvider;
25 import org.spearce.egit.core.project.GitProjectData;
26 import org.spearce.egit.core.project.RepositoryFinder;
27 import org.spearce.egit.core.project.RepositoryMapping;
29 /**
30 * Connects Eclipse to an existing Git repository
32 public class ConnectProviderOperation implements IWorkspaceRunnable {
33 private final IProject[] projects;
35 /**
36 * Create a new connection operation to execute within the workspace.
38 * @param proj
39 * the project to connect to the Git team provider.
41 public ConnectProviderOperation(final IProject proj) {
42 this(new IProject[] { proj });
45 /**
46 * Create a new connection operation to execute within the workspace.
48 * @param projects
49 * the projects to connect to the Git team provider.
51 public ConnectProviderOperation(final IProject[] projects) {
52 this.projects = projects;
55 public void run(IProgressMonitor m) throws CoreException {
56 if (m == null) {
57 m = new NullProgressMonitor();
60 m.beginTask(CoreText.ConnectProviderOperation_connecting,
61 100 * projects.length);
62 try {
64 for (IProject project : projects) {
65 m.setTaskName(NLS.bind(
66 CoreText.ConnectProviderOperation_ConnectingProject,
67 project.getName()));
68 Activator.trace("Locating repository for " + project); //$NON-NLS-1$
69 Collection<RepositoryMapping> repos = new RepositoryFinder(
70 project).find(new SubProgressMonitor(m, 40));
71 if (repos.size() == 1) {
72 GitProjectData projectData = new GitProjectData(project);
73 try {
74 projectData.setRepositoryMappings(repos);
75 projectData.store();
76 } catch (CoreException ce) {
77 GitProjectData.delete(project);
78 throw ce;
79 } catch (RuntimeException ce) {
80 GitProjectData.delete(project);
81 throw ce;
83 RepositoryProvider
84 .map(project, GitProvider.class.getName());
85 projectData = GitProjectData.get(project);
86 project.refreshLocal(IResource.DEPTH_INFINITE,
87 new SubProgressMonitor(m, 50));
88 m.worked(10);
89 } else {
90 Activator
91 .trace("Attempted to share project without repository ignored :" //$NON-NLS-1$
92 + project);
93 m.worked(60);
96 } finally {
97 m.done();