git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[EGIT PATCH 5/5] Correct getRepositoryMapping callers to use any IResource

From
Shawn O. Pearce <spearce@spearce.org>
Date
Aug 6, 2008, 03:09 UTC
Message-ID
<1217992180-5697-6-git-send-email-spearce@spearce.org>
In-Reply-To
<1217992180-5697-5-git-send-email-spearce@spearce.org>

We really need to use the exact resource we want a mapping for, even if that is an IFile, because the file may be in a different repository than the project it is contained in. This can happen due to linked resources, or due to submodules. Either way the mapping cannot be driven by the project.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
---
 .../org/spearce/egit/core/op/UntrackOperation.java |    4 +---
 .../egit/core/project/RepositoryMapping.java       |   14 +++++++-------
 .../egit/ui/internal/actions/CommitAction.java     |    2 +-
 3 files changed, 9 insertions(+), 11 deletions(-)
diff --git a/org.spearce.egit.core/src/org/spearce/egit/core/op/UntrackOperation.java b/org.spearce.egit.core/src/org/spearce/egit/core/op/UntrackOperation.java
index 369ff38..b491e6d 100644
--- a/org.spearce.egit.core/src/org/spearce/egit/core/op/UntrackOperation.java
+++ b/org.spearce.egit.core/src/org/spearce/egit/core/op/UntrackOperation.java
@@ -15,7 +15,6 @@ import java.util.IdentityHashMap;
 import java.util.Iterator;
 
 import org.eclipse.core.resources.IContainer;
-import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.IResourceVisitor;
 import org.eclipse.core.resources.IWorkspaceRunnable;
@@ -67,9 +66,8 @@ public class UntrackOperation implements IWorkspaceRunnable {
 				obj = ((IAdaptable)obj).getAdapter(IResource.class);
 				if (obj instanceof IResource) {
 					final IResource toRemove = (IResource)obj;
-					final IProject p = toRemove.getProject();					
 					final GitProjectData pd = GitProjectData.get(toRemove.getProject());
-					final RepositoryMapping rm = pd.getRepositoryMapping(p);
+					final RepositoryMapping rm = pd.getRepositoryMapping(toRemove);
 					final GitIndex index = rm.getRepository().getIndex();
 					tomerge.put(rm, Boolean.TRUE);
 					if (toRemove instanceof IContainer) {
diff --git a/org.spearce.egit.core/src/org/spearce/egit/core/project/RepositoryMapping.java b/org.spearce.egit.core/src/org/spearce/egit/core/project/RepositoryMapping.java
index 17e8142..961dbaf 100644
--- a/org.spearce.egit.core/src/org/spearce/egit/core/project/RepositoryMapping.java
+++ b/org.spearce.egit.core/src/org/spearce/egit/core/project/RepositoryMapping.java
@@ -221,15 +221,15 @@ public class RepositoryMapping {
 	 * @return the RepositoryMapping for this resource,
 	 *         or null for non GitProvider.
 	 */
-	public static RepositoryMapping getMapping(IResource resource) {
-		IProject project = resource.getProject();
+	public static RepositoryMapping getMapping(final IResource resource) {
+		final IProject project = resource.getProject();
 		if (project == null)
 			return null;
-		RepositoryProvider provider = RepositoryProvider.getProvider(project);
-		if (!(provider instanceof GitProvider))
+
+		final RepositoryProvider rp = RepositoryProvider.getProvider(project);
+		if (!(rp instanceof GitProvider))
 			return null;
-		GitProvider gp = (GitProvider)provider;
-		RepositoryMapping repositoryMapping = gp.getData().getRepositoryMapping(project);
-		return repositoryMapping;
+
+		return ((GitProvider)rp).getData().getRepositoryMapping(resource);
 	}
 }
diff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/CommitAction.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/CommitAction.java
index db38c10..4956be3 100644
--- a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/CommitAction.java
+++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/CommitAction.java
@@ -363,7 +363,7 @@ public class CommitAction extends RepositoryAction {
 
 		try {
 			RepositoryMapping repositoryMapping = projectData
-					.getRepositoryMapping(resource.getProject());
+					.getRepositoryMapping(resource);
 
 			if (isChanged(repositoryMapping, resource)) {
 				files.add(resource);
-- 
1.6.0.rc1.250.g9b5e2
Previous: Shawn O. Pearce
Message 6 of 6 in “Support linked resources in repositories”
  1. 0/5 Support linked resources in repositoriesShawn O. Pearce, Aug 6, 2008
  2. 1/5 Remove the pointless GitProjectData resource change listenerShawn O. Pearce, Aug 6, 2008
  3. 2/5 Don't crash the decorator update loop when resources are deletedShawn O. Pearce, Aug 6, 2008
  4. 3/5 Fix RepositoryMapping.getRepoRelativePath to honor linked resourcesShawn O. Pearce, Aug 6, 2008
  5. 4/5 Change GitProjectData.getRepositoryMapping to work on linked resourcesShawn O. Pearce, Aug 6, 2008
  6. 5/5 Correct getRepositoryMapping callers to use any IResourceShawn O. Pearce, Aug 6, 2008

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.