diff options
author | Thomas Wolf | 2017-09-18 12:16:27 +0000 |
---|---|---|
committer | Thomas Wolf | 2017-09-18 13:21:09 +0000 |
commit | 416e90dda1dac7a38399572cb4b59896e086a165 (patch) | |
tree | c50fab94d0b07491168fb59e8b194eba957a562d | |
parent | cabdbb9db3de014294ac0b8a3740643364d44edf (diff) | |
download | egit-416e90dda1dac7a38399572cb4b59896e086a165.tar.gz egit-416e90dda1dac7a38399572cb4b59896e086a165.tar.xz egit-416e90dda1dac7a38399572cb4b59896e086a165.zip |
Fix NPE in ConnectProviderOperation
The repository of a mapping created by the RepositoryFinder is
not set yet. Don't use RepositoryMapping.getRepository() when
auto-sharing but use the mapping's gitDir to get a repository.
Bug: 522423
Change-Id: I0a2de2bed137a2b05964debd0cf3f447d742faa7
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
-rw-r--r-- | org.eclipse.egit.core/src/org/eclipse/egit/core/op/ConnectProviderOperation.java | 37 |
1 files changed, 24 insertions, 13 deletions
diff --git a/org.eclipse.egit.core/src/org/eclipse/egit/core/op/ConnectProviderOperation.java b/org.eclipse.egit.core/src/org/eclipse/egit/core/op/ConnectProviderOperation.java index b0ee64680d..0f2442b8ac 100644 --- a/org.eclipse.egit.core/src/org/eclipse/egit/core/op/ConnectProviderOperation.java +++ b/org.eclipse.egit.core/src/org/eclipse/egit/core/op/ConnectProviderOperation.java @@ -60,7 +60,7 @@ import org.eclipse.team.core.RepositoryProvider; * Connects Eclipse to an existing Git repository */ public class ConnectProviderOperation implements IEGitOperation { - private final Map<IProject, File> projects = new LinkedHashMap<IProject, File>(); + private final Map<IProject, File> projects = new LinkedHashMap<>(); private boolean refreshResources = true; @@ -162,22 +162,33 @@ public class ConnectProviderOperation implements IEGitOperation { } RepositoryProvider.map(project, GitProvider.ID); + IPath gitPath = actualMapping.getGitDirAbsolutePath(); if (refreshResources) { touchGitResources(project, subMon.newChild(10)); project.refreshLocal(IResource.DEPTH_INFINITE, subMon.newChild(30)); - IndexDiffCacheEntry cacheEntry = org.eclipse.egit.core.Activator - .getDefault().getIndexDiffCache() - .getIndexDiffCacheEntry(actualMapping.getRepository()); - if (cacheEntry != null) { - cacheEntry.refresh(); + 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)); - autoIgnoreWorkspaceMetaData( - actualMapping.getRepository().getDirectory().toPath()); + if (gitPath != null) { + autoIgnoreWorkspaceMetaData(gitPath.toFile()); + } } /** @@ -238,12 +249,12 @@ public class ConnectProviderOperation implements IEGitOperation { * repository (which is not recommended) * * @param gitDir - * path of git directory containing the git repository + * the .git directory containing the repository metadata */ - private static void autoIgnoreWorkspaceMetaData(java.nio.file.Path gitDir) { + private static void autoIgnoreWorkspaceMetaData(File gitDir) { java.nio.file.Path workspaceRoot = ResourcesPlugin.getWorkspace() .getRoot().getLocation().toFile().toPath(); - try (Repository r = FileRepositoryBuilder.create(gitDir.toFile())) { + try (Repository r = FileRepositoryBuilder.create(gitDir)) { if (!r.isBare() && workspaceRoot.startsWith(r.getWorkTree().toPath())) { Collection<IPath> ignoredPaths = buildIgnoredPathsList( @@ -261,7 +272,7 @@ public class ConnectProviderOperation implements IEGitOperation { private static Collection<IPath> buildIgnoredPathsList( java.nio.file.Path workspaceRoot, String... metaDataDirectoryNames) { - Collection<IPath> ignoredPaths = new HashSet<IPath>(); + Collection<IPath> ignoredPaths = new HashSet<>(); for (String m : metaDataDirectoryNames) { Path metaData = new Path( workspaceRoot.resolve(m).toAbsolutePath().toString()); @@ -278,7 +289,7 @@ public class ConnectProviderOperation implements IEGitOperation { private List<IPath> findDerivedResources(IContainer c) throws CoreException { - List<IPath> derived = new ArrayList<IPath>(); + List<IPath> derived = new ArrayList<>(); IResource[] members = c.members(IContainer.INCLUDE_HIDDEN); for (IResource r : members) { if (r.isDerived()) |