Search in sources :

Example 1 with RepositoryFinder

use of org.eclipse.egit.core.project.RepositoryFinder in project egit by eclipse.

the class ConnectProviderOperation method connectProject.

private void connectProject(Entry<IProject, File> entry, MultiStatus ms, IProgressMonitor monitor) throws CoreException {
    IProject project = entry.getKey();
    String taskName = NLS.bind(CoreText.ConnectProviderOperation_ConnectingProject, project.getName());
    SubMonitor subMon = SubMonitor.convert(monitor, taskName, 100);
    if (GitTraceLocation.CORE.isActive()) {
        GitTraceLocation.getTrace().trace(GitTraceLocation.CORE.getLocation(), taskName);
    }
    RepositoryFinder finder = new RepositoryFinder(project);
    finder.setFindInChildren(false);
    Collection<RepositoryMapping> repos = finder.find(subMon.newChild(50));
    if (repos.isEmpty()) {
        ms.add(Activator.error(NLS.bind(CoreText.ConnectProviderOperation_NoRepositoriesError, project.getName()), null));
        return;
    }
    RepositoryMapping actualMapping = findActualRepository(repos, entry.getValue());
    if (actualMapping == null) {
        ms.add(Activator.error(NLS.bind(CoreText.ConnectProviderOperation_UnexpectedRepositoryError, new Object[] { project.getName(), entry.getValue().toString(), repos.toString() }), null));
        return;
    }
    GitProjectData projectData = new GitProjectData(project);
    try {
        projectData.setRepositoryMappings(Arrays.asList(actualMapping));
        projectData.store();
        GitProjectData.add(project, projectData);
    } catch (CoreException ce) {
        ms.add(ce.getStatus());
        deleteGitProvider(ms, project);
        return;
    } catch (RuntimeException ce) {
        ms.add(Activator.error(ce.getMessage(), ce));
        deleteGitProvider(ms, project);
        return;
    }
    RepositoryProvider.map(project, GitProvider.ID);
    IPath gitPath = actualMapping.getGitDirAbsolutePath();
    if (refreshResources) {
        touchGitResources(project, subMon.newChild(10));
        project.refreshLocal(IResource.DEPTH_INFINITE, subMon.newChild(30));
        if (gitPath != null) {
            try {
                Repository repository = org.eclipse.egit.core.Activator.getDefault().getRepositoryCache().lookupRepository(gitPath.toFile());
                IndexDiffCacheEntry cacheEntry = org.eclipse.egit.core.Activator.getDefault().getIndexDiffCache().getIndexDiffCacheEntry(repository);
                if (cacheEntry != null) {
                    cacheEntry.refresh();
                }
            } catch (IOException e) {
                Activator.logError(e.getMessage(), e);
            }
        }
    } else {
        subMon.worked(40);
    }
    autoIgnoreDerivedResources(project, subMon.newChild(10));
    if (gitPath != null) {
        autoIgnoreWorkspaceMetaData(gitPath.toFile());
    }
}
Also used : IPath(org.eclipse.core.runtime.IPath) RepositoryFinder(org.eclipse.egit.core.project.RepositoryFinder) SubMonitor(org.eclipse.core.runtime.SubMonitor) IOException(java.io.IOException) GitProjectData(org.eclipse.egit.core.project.GitProjectData) IProject(org.eclipse.core.resources.IProject) Repository(org.eclipse.jgit.lib.Repository) CoreException(org.eclipse.core.runtime.CoreException) IndexDiffCacheEntry(org.eclipse.egit.core.internal.indexdiff.IndexDiffCacheEntry) RepositoryMapping(org.eclipse.egit.core.project.RepositoryMapping)

Example 2 with RepositoryFinder

use of org.eclipse.egit.core.project.RepositoryFinder in project egit by eclipse.

the class ExistingOrNewPage method createControl.

@Override
public void createControl(Composite parent) {
    final RepositoryUtil util = Activator.getDefault().getRepositoryUtil();
    Composite main = new Composite(parent, SWT.NONE);
    // use zero spacing to save some real estate here
    GridLayoutFactory.fillDefaults().spacing(0, 0).applyTo(main);
    final Button internalModeButton = new Button(main, SWT.CHECK);
    internalModeButton.setText(UIText.ExistingOrNewPage_InternalModeCheckbox);
    internalModeButton.setToolTipText(UIText.ExistingOrNewPage_CreationInWorkspaceWarningTooltip);
    internalModeButton.addSelectionListener(new SelectionAdapter() {

        @Override
        public void widgetSelected(SelectionEvent e) {
            internalMode = internalModeButton.getSelection();
            updateControls();
        }
    });
    externalComposite = new Composite(main, SWT.NONE);
    GridDataFactory.fillDefaults().grab(true, true).applyTo(externalComposite);
    externalComposite.setLayout(new GridLayout(3, false));
    new Label(externalComposite, SWT.NONE).setText(UIText.ExistingOrNewPage_ExistingRepositoryLabel);
    final Combo existingRepoCombo = new Combo(externalComposite, SWT.READ_ONLY);
    GridDataFactory.fillDefaults().grab(true, false).applyTo(existingRepoCombo);
    final ComboViewer v = new ComboViewer(existingRepoCombo);
    v.setContentProvider(new RepoComboContentProvider());
    v.setLabelProvider(new RepoComboLabelProvider());
    v.setInput(new Object());
    // the default ViewerSorter seems to do the right thing
    // i.e. sort as String
    v.setComparator(new ViewerComparator());
    existingRepoCombo.addSelectionListener(new SelectionAdapter() {

        @Override
        public void widgetSelected(SelectionEvent e) {
            selectedRepository = null;
            IStructuredSelection sel = (IStructuredSelection) v.getSelection();
            setRepository((Repository) sel.getFirstElement());
            updateControls();
        }
    });
    Button createRepoWizard = new Button(externalComposite, SWT.PUSH);
    createRepoWizard.setText(UIText.ExistingOrNewPage_CreateRepositoryButton);
    createRepoWizard.addSelectionListener(new SelectionAdapter() {

        @Override
        public void widgetSelected(SelectionEvent e) {
            NewRepositoryWizard wiz = new NewRepositoryWizard(true);
            if (new WizardDialog(getShell(), wiz).open() == Window.OK) {
                v.refresh();
                selectedRepository = wiz.getCreatedRepository();
                v.setSelection(new StructuredSelection(selectedRepository));
                updateControls();
            }
        }
    });
    new Label(externalComposite, SWT.NONE).setText(UIText.ExistingOrNewPage_WorkingDirectoryLabel);
    workDir = new Text(externalComposite, SWT.BORDER | SWT.READ_ONLY);
    GridDataFactory.fillDefaults().grab(true, false).applyTo(workDir);
    GridDataFactory.fillDefaults().applyTo(workDir);
    // leave the space between the "Create" and "Browse" buttons empty (i.e.
    // do not fill to the right border
    new Label(externalComposite, SWT.NONE);
    new Label(externalComposite, SWT.NONE).setText(UIText.ExistingOrNewPage_RelativePathLabel);
    relPath = new Text(externalComposite, SWT.BORDER);
    relPath.addModifyListener(new ModifyListener() {

        @Override
        public void modifyText(ModifyEvent e) {
            updateControls();
        }
    });
    GridDataFactory.fillDefaults().grab(true, false).applyTo(relPath);
    browseRepository = new Button(externalComposite, SWT.PUSH);
    browseRepository.setEnabled(false);
    browseRepository.setText(UIText.ExistingOrNewPage_BrowseRepositoryButton);
    browseRepository.addSelectionListener(new SelectionAdapter() {

        @Override
        public void widgetSelected(SelectionEvent e) {
            DirectoryDialog dlg = new DirectoryDialog(getShell());
            dlg.setMessage(UIText.ExistingOrNewPage_title);
            dlg.setFilterPath(selectedRepository.getWorkTree().getPath());
            String directory = dlg.open();
            if (directory != null) {
                setRelativePath(directory);
                updateControls();
            }
        }
    });
    Table projectMoveTable = new Table(externalComposite, SWT.MULTI | SWT.FULL_SELECTION | SWT.CHECK | SWT.BORDER);
    projectMoveViewer = new CheckboxTableViewer(projectMoveTable);
    GridDataFactory.fillDefaults().span(3, 1).grab(true, true).applyTo(projectMoveTable);
    TableColumn tc;
    tc = new TableColumn(projectMoveTable, SWT.NONE);
    tc.setText(UIText.ExistingOrNewPage_ProjectNameColumnHeader);
    tc.setWidth(100);
    tc = new TableColumn(projectMoveTable, SWT.NONE);
    tc.setText(UIText.ExistingOrNewPage_CurrentLocationColumnHeader);
    tc.setWidth(250);
    tc = new TableColumn(projectMoveTable, SWT.NONE);
    tc.setText(UIText.ExistingOrNewPage_NewLocationTargetHeader);
    tc.setWidth(350);
    projectMoveTable.setHeaderVisible(true);
    projectMoveViewer.setContentProvider(ArrayContentProvider.getInstance());
    projectMoveViewer.setLabelProvider(moveProjectsLabelProvider);
    projectMoveViewer.setInput(myWizard.projects);
    projectMoveViewer.addCheckStateListener(new ICheckStateListener() {

        @Override
        public void checkStateChanged(CheckStateChangedEvent event) {
            updateControls();
        }
    });
    TableItem[] children = projectMoveViewer.getTable().getItems();
    for (int i = 0; i < children.length; i++) {
        TableItem item = children[i];
        IProject data = (IProject) item.getData();
        RepositoryFinder repositoryFinder = new RepositoryFinder(data);
        repositoryFinder.setFindInChildren(false);
        try {
            Collection<RepositoryMapping> find = repositoryFinder.find(new NullProgressMonitor());
            if (find.size() != 1)
                item.setChecked(true);
        } catch (CoreException e1) {
            item.setText(2, e1.getMessage());
        }
    }
    parentRepoComposite = new Composite(main, SWT.NONE);
    parentRepoComposite.setLayout(new GridLayout(3, false));
    GridDataFactory.fillDefaults().grab(true, true).applyTo(parentRepoComposite);
    tree = new Tree(parentRepoComposite, SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION | SWT.CHECK);
    viewer = new CheckboxTreeViewer(tree);
    tree.setHeaderVisible(true);
    tree.setLayout(new GridLayout());
    tree.setLayoutData(GridDataFactory.fillDefaults().grab(true, true).span(3, 1).create());
    viewer.addCheckStateListener(new ICheckStateListener() {

        @Override
        public void checkStateChanged(CheckStateChangedEvent event) {
            if (event.getChecked()) {
                ProjectAndRepo checkable = (ProjectAndRepo) event.getElement();
                for (TreeItem ti : tree.getItems()) {
                    if (ti.getItemCount() > 0 || ((ProjectAndRepo) ti.getData()).getRepo().equals(// $NON-NLS-1$
                    ""))
                        ti.setChecked(false);
                    for (TreeItem subTi : ti.getItems()) {
                        IProject project = ((ProjectAndRepo) subTi.getData()).getProject();
                        if (checkable.getProject() != null && !subTi.getData().equals(checkable) && checkable.getProject().equals(project))
                            subTi.setChecked(false);
                    }
                }
            }
        }
    });
    TreeColumn c1 = new TreeColumn(tree, SWT.NONE);
    c1.setText(UIText.ExistingOrNewPage_HeaderProject);
    c1.setWidth(100);
    TreeColumn c2 = new TreeColumn(tree, SWT.NONE);
    c2.setText(UIText.ExistingOrNewPage_HeaderLocation);
    c2.setWidth(400);
    TreeColumn c3 = new TreeColumn(tree, SWT.NONE);
    c3.setText(UIText.ExistingOrNewPage_HeaderRepository);
    c3.setWidth(200);
    boolean allProjectsInExistingRepos = true;
    for (IProject project : myWizard.projects) {
        RepositoryFinder repositoryFinder = new RepositoryFinder(project);
        repositoryFinder.setFindInChildren(false);
        try {
            Collection<RepositoryMapping> mappings;
            mappings = repositoryFinder.find(new NullProgressMonitor());
            Iterator<RepositoryMapping> mi = mappings.iterator();
            RepositoryMapping m = mi.hasNext() ? mi.next() : null;
            if (m == null) {
                // no mapping found, enable repository creation
                TreeItem treeItem = new TreeItem(tree, SWT.NONE);
                updateProjectTreeItem(treeItem, project);
                treeItem.setText(1, project.getLocation().toOSString());
                // $NON-NLS-1$
                treeItem.setText(2, "");
                // $NON-NLS-1$
                treeItem.setData(new ProjectAndRepo(project, ""));
                allProjectsInExistingRepos = false;
            } else if (!mi.hasNext()) {
                // exactly one mapping found
                IPath path = m.getGitDirAbsolutePath();
                if (path != null) {
                    TreeItem treeItem = new TreeItem(tree, SWT.NONE);
                    updateProjectTreeItem(treeItem, project);
                    treeItem.setText(1, project.getLocation().toOSString());
                    fillTreeItemWithGitDirectory(m, treeItem, path, false);
                    treeItem.setData(new ProjectAndRepo(project, path.toOSString()));
                    treeItem.setChecked(true);
                }
            } else {
                IPath path = m.getGitDirAbsolutePath();
                if (path != null) {
                    TreeItem treeItem = new TreeItem(tree, SWT.NONE);
                    updateProjectTreeItem(treeItem, project);
                    treeItem.setText(1, project.getLocation().toOSString());
                    // $NON-NLS-1$
                    treeItem.setData(new ProjectAndRepo(project, ""));
                    TreeItem treeItem2 = new TreeItem(treeItem, SWT.NONE);
                    updateProjectTreeItem(treeItem2, project);
                    fillTreeItemWithGitDirectory(m, treeItem2, path, true);
                    treeItem2.setData(new ProjectAndRepo(project, path.toOSString()));
                    while (mi.hasNext()) {
                        // fill in additional mappings
                        m = mi.next();
                        path = m.getGitDirAbsolutePath();
                        if (path != null) {
                            treeItem2 = new TreeItem(treeItem, SWT.NONE);
                            updateProjectTreeItem(treeItem2, project);
                            fillTreeItemWithGitDirectory(m, treeItem2, path, true);
                            treeItem2.setData(new ProjectAndRepo(m.getContainer().getProject(), path.toOSString()));
                        }
                    }
                    treeItem.setExpanded(true);
                }
                allProjectsInExistingRepos = false;
            }
        } catch (CoreException e) {
            TreeItem treeItem2 = new TreeItem(tree, SWT.BOLD | SWT.ITALIC);
            treeItem2.setText(e.getMessage());
        }
    }
    createRepo = new Button(parentRepoComposite, SWT.PUSH);
    createRepo.setLayoutData(GridDataFactory.fillDefaults().create());
    createRepo.setText(UIText.ExistingOrNewPage_CreateButton);
    createRepo.addSelectionListener(new SelectionAdapter() {

        @Override
        public void widgetSelected(SelectionEvent e) {
            File gitDir = new File(repositoryToCreate.getText(), Constants.DOT_GIT);
            try {
                Repository repository = FileRepositoryBuilder.create(gitDir);
                repository.create();
                for (IProject project : getProjects(false).keySet()) {
                    // 
                    if (// $NON-NLS-1$
                    !gitDir.toString().contains(".."))
                        project.refreshLocal(IResource.DEPTH_ONE, new NullProgressMonitor());
                }
                util.addConfiguredRepository(gitDir);
            } catch (IOException e1) {
                String msg = NLS.bind(UIText.ExistingOrNewPage_ErrorFailedToCreateRepository, gitDir.toString());
                org.eclipse.egit.ui.Activator.handleError(msg, e1, true);
            } catch (CoreException e2) {
                String msg = NLS.bind(UIText.ExistingOrNewPage_ErrorFailedToRefreshRepository, gitDir);
                org.eclipse.egit.ui.Activator.handleError(msg, e2, true);
            }
            for (TreeItem ti : tree.getSelection()) {
                IPath projectPath = new Path(ti.getText(1));
                IPath gitPath = new Path(gitDir.toString());
                IPath relative = gitPath.makeRelativeTo(projectPath);
                ti.setText(2, relative.toOSString());
                ((ProjectAndRepo) ti.getData()).repo = gitDir.toString();
                ti.setChecked(true);
            }
            updateControls();
        }
    });
    repositoryToCreate = new Text(parentRepoComposite, SWT.SINGLE | SWT.BORDER);
    repositoryToCreate.setLayoutData(GridDataFactory.fillDefaults().grab(true, false).span(1, 1).create());
    repositoryToCreate.addListener(SWT.Modify, new Listener() {

        @Override
        public void handleEvent(Event e) {
            if (repositoryToCreate.getText().equals("")) {
                // $NON-NLS-1$
                createRepo.setEnabled(false);
                return;
            }
            IPath fromOSString = Path.fromOSString(repositoryToCreate.getText());
            createRepo.setEnabled(minumumPath.matchingFirstSegments(fromOSString) == fromOSString.segmentCount());
        }
    });
    dotGitSegment = new Label(parentRepoComposite, SWT.NONE);
    dotGitSegment.setEnabled(false);
    dotGitSegment.setText(File.separatorChar + Constants.DOT_GIT);
    dotGitSegment.setLayoutData(GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.CENTER).create());
    tree.addSelectionListener(new SelectionAdapter() {

        @Override
        public void widgetSelected(SelectionEvent e) {
            tree.select((TreeItem) e.item);
            updateControls();
        }
    });
    Dialog.applyDialogFont(main);
    setControl(main);
    if (allProjectsInExistingRepos) {
        internalMode = true;
        internalModeButton.setSelection(true);
        updateControls();
    }
}
Also used : CheckboxTableViewer(org.eclipse.jface.viewers.CheckboxTableViewer) TreeItem(org.eclipse.swt.widgets.TreeItem) ICheckStateListener(org.eclipse.jface.viewers.ICheckStateListener) RepositoryFinder(org.eclipse.egit.core.project.RepositoryFinder) TableItem(org.eclipse.swt.widgets.TableItem) Label(org.eclipse.swt.widgets.Label) IStructuredSelection(org.eclipse.jface.viewers.IStructuredSelection) StructuredSelection(org.eclipse.jface.viewers.StructuredSelection) Combo(org.eclipse.swt.widgets.Combo) IStructuredSelection(org.eclipse.jface.viewers.IStructuredSelection) ModifyEvent(org.eclipse.swt.events.ModifyEvent) Button(org.eclipse.swt.widgets.Button) SelectionEvent(org.eclipse.swt.events.SelectionEvent) RevTree(org.eclipse.jgit.revwalk.RevTree) Tree(org.eclipse.swt.widgets.Tree) IPath(org.eclipse.core.runtime.IPath) TableColumn(org.eclipse.swt.widgets.TableColumn) CheckboxTreeViewer(org.eclipse.jface.viewers.CheckboxTreeViewer) CoreException(org.eclipse.core.runtime.CoreException) ComboViewer(org.eclipse.jface.viewers.ComboViewer) File(java.io.File) NullProgressMonitor(org.eclipse.core.runtime.NullProgressMonitor) ICheckStateListener(org.eclipse.jface.viewers.ICheckStateListener) Listener(org.eclipse.swt.widgets.Listener) ModifyListener(org.eclipse.swt.events.ModifyListener) ModifyListener(org.eclipse.swt.events.ModifyListener) GridLayout(org.eclipse.swt.layout.GridLayout) TreeColumn(org.eclipse.swt.widgets.TreeColumn) RepositoryMapping(org.eclipse.egit.core.project.RepositoryMapping) NewRepositoryWizard(org.eclipse.egit.ui.internal.repository.NewRepositoryWizard) DirectoryDialog(org.eclipse.swt.widgets.DirectoryDialog) IPath(org.eclipse.core.runtime.IPath) Path(org.eclipse.core.runtime.Path) Table(org.eclipse.swt.widgets.Table) Composite(org.eclipse.swt.widgets.Composite) ViewerComparator(org.eclipse.jface.viewers.ViewerComparator) SelectionAdapter(org.eclipse.swt.events.SelectionAdapter) Text(org.eclipse.swt.widgets.Text) UIText(org.eclipse.egit.ui.internal.UIText) IOException(java.io.IOException) IProject(org.eclipse.core.resources.IProject) RepositoryUtil(org.eclipse.egit.core.RepositoryUtil) Repository(org.eclipse.jgit.lib.Repository) ModifyEvent(org.eclipse.swt.events.ModifyEvent) CheckStateChangedEvent(org.eclipse.jface.viewers.CheckStateChangedEvent) Event(org.eclipse.swt.widgets.Event) SelectionEvent(org.eclipse.swt.events.SelectionEvent) CheckStateChangedEvent(org.eclipse.jface.viewers.CheckStateChangedEvent) WizardDialog(org.eclipse.jface.wizard.WizardDialog)

Example 3 with RepositoryFinder

use of org.eclipse.egit.core.project.RepositoryFinder in project egit by eclipse.

the class AddCommand method autoShareProjects.

private void autoShareProjects(File repositoryDir) {
    // Don't even try to auto-share for bare repositories.
    IPath workingDirPath;
    try {
        Repository repo = Activator.getDefault().getRepositoryCache().lookupRepository(repositoryDir);
        if (repo.isBare()) {
            return;
        }
        workingDirPath = new Path(repo.getWorkTree().getAbsolutePath());
    } catch (IOException e) {
        org.eclipse.egit.ui.Activator.logError(e.getLocalizedMessage(), e);
        return;
    }
    Map<IProject, File> connections = new HashMap<>();
    IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
    for (IProject project : projects) {
        // Skip closed projects
        if (!project.isAccessible()) {
            continue;
        }
        RepositoryProvider provider = RepositoryProvider.getProvider(project);
        if (provider != null) {
            continue;
        }
        IPath location = project.getLocation();
        if (location == null) {
            continue;
        }
        // even search for a mapping.
        if (!workingDirPath.isPrefixOf(location)) {
            continue;
        }
        RepositoryFinder f = new RepositoryFinder(project);
        f.setFindInChildren(false);
        try {
            List<RepositoryMapping> mappings = f.find(new NullProgressMonitor());
            if (!mappings.isEmpty()) {
                // Connect to the first one; it's the innermost.
                IPath gitDir = mappings.get(0).getGitDirAbsolutePath();
                if (gitDir != null) {
                    connections.put(project, gitDir.toFile());
                }
            }
        } catch (CoreException e) {
            // Ignore this project in that case
            continue;
        }
    }
    if (!connections.isEmpty()) {
        ConnectProviderOperation operation = new ConnectProviderOperation(connections);
        operation.setRefreshResources(false);
        JobUtil.scheduleUserJob(operation, CoreText.Activator_AutoShareJobName, JobFamilies.AUTO_SHARE);
    }
}
Also used : IPath(org.eclipse.core.runtime.IPath) Path(org.eclipse.core.runtime.Path) NullProgressMonitor(org.eclipse.core.runtime.NullProgressMonitor) IPath(org.eclipse.core.runtime.IPath) HashMap(java.util.HashMap) RepositoryFinder(org.eclipse.egit.core.project.RepositoryFinder) IOException(java.io.IOException) IProject(org.eclipse.core.resources.IProject) Repository(org.eclipse.jgit.lib.Repository) CoreException(org.eclipse.core.runtime.CoreException) RepositoryMapping(org.eclipse.egit.core.project.RepositoryMapping) ConnectProviderOperation(org.eclipse.egit.core.op.ConnectProviderOperation) File(java.io.File) RepositoryProvider(org.eclipse.team.core.RepositoryProvider)

Example 4 with RepositoryFinder

use of org.eclipse.egit.core.project.RepositoryFinder in project egit by eclipse.

the class ProjectUtils method createProjects.

/**
 * Create (import) a set of existing projects. The projects are
 * automatically connected to the repository they reside in.
 *
 * @param projectsToCreate
 *            the projects to create
 * @param open
 *            true to open existing projects, false to leave in current
 *            state
 * @param selectedWorkingSets
 *            the workings sets to add the created projects to, may be null
 *            or empty
 * @param monitor
 * @throws InvocationTargetException
 * @throws InterruptedException
 */
public static void createProjects(final Set<ProjectRecord> projectsToCreate, final boolean open, final IWorkingSet[] selectedWorkingSets, IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
    if (projectsToCreate.isEmpty()) {
        return;
    }
    IWorkspaceRunnable wsr = new IWorkspaceRunnable() {

        @Override
        public void run(IProgressMonitor actMonitor) throws CoreException {
            IWorkingSetManager workingSetManager = PlatformUI.getWorkbench().getWorkingSetManager();
            if (actMonitor.isCanceled()) {
                throw new OperationCanceledException();
            }
            Map<IProject, File> projectsToConnect = new HashMap<>();
            SubMonitor progress = SubMonitor.convert(actMonitor, projectsToCreate.size() * 2 + 1);
            for (ProjectRecord projectRecord : projectsToCreate) {
                if (progress.isCanceled()) {
                    throw new OperationCanceledException();
                }
                progress.setTaskName(projectRecord.getProjectLabel());
                IProject project = createExistingProject(projectRecord, open, progress.newChild(1));
                if (project == null) {
                    continue;
                }
                RepositoryFinder finder = new RepositoryFinder(project);
                finder.setFindInChildren(false);
                Collection<RepositoryMapping> mappings = finder.find(progress.newChild(1));
                if (!mappings.isEmpty()) {
                    RepositoryMapping mapping = mappings.iterator().next();
                    IPath absolutePath = mapping.getGitDirAbsolutePath();
                    if (absolutePath != null) {
                        projectsToConnect.put(project, absolutePath.toFile());
                    }
                }
                if (selectedWorkingSets != null && selectedWorkingSets.length > 0) {
                    workingSetManager.addToWorkingSets(project, selectedWorkingSets);
                }
            }
            if (!projectsToConnect.isEmpty()) {
                ConnectProviderOperation connect = new ConnectProviderOperation(projectsToConnect);
                connect.execute(progress.newChild(1));
            }
        }
    };
    try {
        ResourcesPlugin.getWorkspace().run(wsr, monitor);
    } catch (OperationCanceledException e) {
        throw new InterruptedException();
    } catch (CoreException e) {
        throw new InvocationTargetException(e);
    }
}
Also used : IWorkspaceRunnable(org.eclipse.core.resources.IWorkspaceRunnable) IPath(org.eclipse.core.runtime.IPath) HashMap(java.util.HashMap) RepositoryFinder(org.eclipse.egit.core.project.RepositoryFinder) OperationCanceledException(org.eclipse.core.runtime.OperationCanceledException) SubMonitor(org.eclipse.core.runtime.SubMonitor) IProject(org.eclipse.core.resources.IProject) InvocationTargetException(java.lang.reflect.InvocationTargetException) IProgressMonitor(org.eclipse.core.runtime.IProgressMonitor) CoreException(org.eclipse.core.runtime.CoreException) IWorkingSetManager(org.eclipse.ui.IWorkingSetManager) RepositoryMapping(org.eclipse.egit.core.project.RepositoryMapping) ConnectProviderOperation(org.eclipse.egit.core.op.ConnectProviderOperation) File(java.io.File)

Aggregations

IProject (org.eclipse.core.resources.IProject)4 CoreException (org.eclipse.core.runtime.CoreException)4 IPath (org.eclipse.core.runtime.IPath)4 RepositoryFinder (org.eclipse.egit.core.project.RepositoryFinder)4 RepositoryMapping (org.eclipse.egit.core.project.RepositoryMapping)4 File (java.io.File)3 IOException (java.io.IOException)3 Repository (org.eclipse.jgit.lib.Repository)3 HashMap (java.util.HashMap)2 NullProgressMonitor (org.eclipse.core.runtime.NullProgressMonitor)2 Path (org.eclipse.core.runtime.Path)2 SubMonitor (org.eclipse.core.runtime.SubMonitor)2 ConnectProviderOperation (org.eclipse.egit.core.op.ConnectProviderOperation)2 InvocationTargetException (java.lang.reflect.InvocationTargetException)1 IWorkspaceRunnable (org.eclipse.core.resources.IWorkspaceRunnable)1 IProgressMonitor (org.eclipse.core.runtime.IProgressMonitor)1 OperationCanceledException (org.eclipse.core.runtime.OperationCanceledException)1 RepositoryUtil (org.eclipse.egit.core.RepositoryUtil)1 IndexDiffCacheEntry (org.eclipse.egit.core.internal.indexdiff.IndexDiffCacheEntry)1 GitProjectData (org.eclipse.egit.core.project.GitProjectData)1