diff options
| author | Skirmantas Kligys | 2009-10-15 01:35:03 +0000 |
|---|---|---|
| committer | Shawn O. Pearce | 2009-12-01 02:03:46 +0000 |
| commit | efbfafde119eaa2ddd5156e19b1b73485c0f4fa6 (patch) | |
| tree | b04bc0c154ccdc2236dd5cd9f4600bc108fda940 | |
| parent | cb9adcf59464fc49a555516039435c45eb6ccb60 (diff) | |
| download | egit-efbfafde119eaa2ddd5156e19b1b73485c0f4fa6.tar.gz egit-efbfafde119eaa2ddd5156e19b1b73485c0f4fa6.tar.xz egit-efbfafde119eaa2ddd5156e19b1b73485c0f4fa6.zip | |
Fix RepositoryFinder to work with linked folders
When displaying the path to a repository contained within a linked
folder, use the path of the linked folder within the project as
the prefix of the repository location as the repository location
string is relative to that folder.
When a tree node is selected without a project, use the parent tree
node to acquire the project.
Change-Id: If7214ca8bf10439e7e27b424864742a10dd8b766
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
3 files changed, 21 insertions, 4 deletions
diff --git a/org.eclipse.egit.core/src/org/eclipse/egit/core/project/RepositoryFinder.java b/org.eclipse.egit.core/src/org/eclipse/egit/core/project/RepositoryFinder.java index 4b4956ef90..42305434a8 100644 --- a/org.eclipse.egit.core/src/org/eclipse/egit/core/project/RepositoryFinder.java +++ b/org.eclipse.egit.core/src/org/eclipse/egit/core/project/RepositoryFinder.java @@ -14,6 +14,8 @@ import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; +import java.util.HashSet; +import java.util.Set; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IProject; @@ -49,6 +51,7 @@ public class RepositoryFinder { private final IProject proj; private final Collection<RepositoryMapping> results = new ArrayList<RepositoryMapping>(); + private final Set<File> gitdirs = new HashSet<File>(); /** * Create a new finder to locate Git repositories for a project. @@ -138,6 +141,9 @@ public class RepositoryFinder { } catch (IOException ioe) { f = gitdir.getAbsoluteFile(); } + if (gitdirs.contains(f)) + return; + gitdirs.add(f); results.add(new RepositoryMapping(c, f)); } } diff --git a/org.eclipse.egit.core/src/org/eclipse/egit/core/project/RepositoryMapping.java b/org.eclipse.egit.core/src/org/eclipse/egit/core/project/RepositoryMapping.java index a9808a2ef1..c09a595568 100644 --- a/org.eclipse.egit.core/src/org/eclipse/egit/core/project/RepositoryMapping.java +++ b/org.eclipse.egit.core/src/org/eclipse/egit/core/project/RepositoryMapping.java @@ -98,7 +98,10 @@ public class RepositoryMapping { } } - IPath getContainerPath() { + /** + * @return the container path corresponding to git repository + */ + public IPath getContainerPath() { return Path.fromPortableString(containerPath); } diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/sharing/ExistingOrNewPage.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/sharing/ExistingOrNewPage.java index 87893278f4..d880b81481 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/sharing/ExistingOrNewPage.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/sharing/ExistingOrNewPage.java @@ -186,8 +186,12 @@ class ExistingOrNewPage extends WizardPage { private void fillTreeItemWithGitDirectory(RepositoryMapping m, TreeItem treeItem2) { if (m.getGitDir() == null) treeItem2.setText(2, UIText.ExistingOrNewPage_SymbolicValueEmptyMapping); - else - treeItem2.setText(2, m.getGitDir()); + else { + String container = m.getContainerPath().toString(); + if (container.length() > 0) + container += File.separator; + treeItem2.setText(2, container + m.getGitDir()); + } } private void updateCreateOptions() { @@ -241,7 +245,11 @@ class ExistingOrNewPage extends WizardPage { final TreeItem[] selection = tree.getSelection(); Map<IProject, File> ret = new HashMap<IProject, File>(selection.length); for (int i = 0; i < selection.length; ++i) { - final TreeItem treeItem = selection[i]; + TreeItem treeItem = selection[i]; + while (treeItem.getData() == null && treeItem.getParentItem() != null) { + treeItem = treeItem.getParentItem(); + } + final IProject project = (IProject) treeItem.getData(); final File selectedRepo = new File(treeItem.getText(2)); File localPathToRepo = selectedRepo; |
