From d0d637342b5ac4381eee2b28ed71d2faa3156093 Mon Sep 17 00:00:00 2001 From: Christian Halstrick Date: Fri, 10 Jul 2015 13:01:10 +0200 Subject: [PATCH] Change FS not to throw NPE when facing InMemory databases The FS class and the subclasses FS_POSIX assumed in the findHook() method that every repository has a valid gitDir. But in tests when using in-memory-repositories this is not true and this method was generating NPEs. Change the method to return null if no repository directory can be determined. Change-Id: I38a4d36dc6452b5dacae3d0dbf562b569ca3c19b --- org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java | 5 ++++- org.eclipse.jgit/src/org/eclipse/jgit/util/FS_POSIX.java | 3 +++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java index 47c747e80..c1535fa1f 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java @@ -866,7 +866,10 @@ protected ProcessResult internalRunHookIfPresent(Repository repository, * @since 4.0 */ public File findHook(Repository repository, final String hookName) { - final File hookFile = new File(new File(repository.getDirectory(), + File gitDir = repository.getDirectory(); + if (gitDir == null) + return null; + final File hookFile = new File(new File(gitDir, Constants.HOOKS), hookName); return hookFile.isFile() ? hookFile : null; } diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/FS_POSIX.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/FS_POSIX.java index b07f8594d..80c729007 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/util/FS_POSIX.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/FS_POSIX.java @@ -335,6 +335,9 @@ public String normalize(String name) { @Override public File findHook(Repository repository, String hookName) { final File gitdir = repository.getDirectory(); + if (gitdir == null) { + return null; + } final Path hookPath = gitdir.toPath().resolve(Constants.HOOKS) .resolve(hookName); if (Files.isExecutable(hookPath))