Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Wolf2017-09-18 12:16:27 +0000
committerThomas Wolf2017-09-18 13:21:09 +0000
commit416e90dda1dac7a38399572cb4b59896e086a165 (patch)
treec50fab94d0b07491168fb59e8b194eba957a562d
parentcabdbb9db3de014294ac0b8a3740643364d44edf (diff)
downloadegit-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.java37
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())

Back to the top