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());
}
}
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();
}
}
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);
}
}
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);
}
}
Aggregations