diff options
author | James Moger <james.moger@gitblit.com> | 2013-05-10 08:20:39 -0400 |
---|---|---|
committer | James Moger <james.moger@gitblit.com> | 2013-05-10 08:20:39 -0400 |
commit | 9e7041fad08a4e83be6ef18d30f0902b8a39bcdb (patch) | |
tree | 7b349cc83eb8b7e01b05efe70e51a350d7883495 | |
parent | 4fb6af1374106e082a27bd573dedbeb77ca75280 (diff) | |
download | gitblit-9e7041fad08a4e83be6ef18d30f0902b8a39bcdb.tar.gz gitblit-9e7041fad08a4e83be6ef18d30f0902b8a39bcdb.zip |
Fix NPEs when initializing on a servlet container which returns a null contextFolder
-rw-r--r-- | releases.moxie | 3 | ||||
-rw-r--r-- | src/main/java/com/gitblit/GitBlit.java | 40 |
2 files changed, 30 insertions, 13 deletions
diff --git a/releases.moxie b/releases.moxie index 0ac22c6f..64544bc3 100644 --- a/releases.moxie +++ b/releases.moxie @@ -16,6 +16,7 @@ r17: { - Use bash instead of sh in Linux/OSX shell scripts (issue 154)
- Fix NPE when getting user's fork without repository list caching (issue 182)
- Fix internal error on folder history links (issue 192)
+ - Fix NPEs when initializing the context on a servlet containers which returns a null contextFolder (issue 199)
- Fixed incorrect icon file name for .doc files (issue 200)
- Do not queue emails with no recipients (issue 201)
- Disable view and blame links for deleted blobs (issue 216)
@@ -27,6 +28,7 @@ r17: { - Use standard ServletRequestWrapper instead of custom wrapper (issue 224)
changes:
+ - Improved error logging for servlet containers which provide a null contextFolder (issue 199)
- Improved the repository url display. This display now indicates your repository access permission, per-protocol.
- Improve Gerrit change ref decoration in the refs panel (issue 206)
- Disable Gson's pretty printing which has a huge performance gain
@@ -64,6 +66,7 @@ r17: { - Lee Grofit
- Lukasz Jader
- Martijn Laan
+ - Matthias Bauer
- Michael Schaefers
- Philip Boutros
- Rafael Cavazin
diff --git a/src/main/java/com/gitblit/GitBlit.java b/src/main/java/com/gitblit/GitBlit.java index 9346e0ac..3a79f8bc 100644 --- a/src/main/java/com/gitblit/GitBlit.java +++ b/src/main/java/com/gitblit/GitBlit.java @@ -3412,7 +3412,8 @@ public class GitBlit implements ServletContextListener { // Gitblit is running in a servlet container
ServletContext context = contextEvent.getServletContext();
WebXmlSettings webxmlSettings = new WebXmlSettings(context);
- File contextFolder = new File(context.getRealPath("/"));
+ String contextRealPath = context.getRealPath("/");
+ File contextFolder = (contextRealPath != null) ? new File(contextRealPath) : null;
String openShift = System.getenv("OPENSHIFT_DATA_DIR");
if (!StringUtils.isEmpty(openShift)) {
@@ -3444,27 +3445,40 @@ public class GitBlit implements ServletContextListener { configureContext(webxmlSettings, base, true);
} else {
// Gitblit is running in a standard servlet container
- logger.info("WAR contextFolder is " + contextFolder.getAbsolutePath());
+ logger.info("WAR contextFolder is " + ((contextFolder != null) ? contextFolder.getAbsolutePath() : "<empty>"));
String path = webxmlSettings.getString(Constants.baseFolder, Constants.contextFolder$ + "/WEB-INF/data");
+
+ if (path.contains(Constants.contextFolder$) && contextFolder == null) {
+ // warn about null contextFolder (issue-199)
+ logger.error("");
+ logger.error(MessageFormat.format("\"{0}\" depends on \"{1}\" but \"{2}\" is returning NULL for \"{1}\"!",
+ Constants.baseFolder, Constants.contextFolder$, context.getServerInfo()));
+ logger.error(MessageFormat.format("Please specify a non-parameterized path for <context-param> {0} in web.xml!!", Constants.baseFolder));
+ logger.error(MessageFormat.format("OR configure your servlet container to specify a \"{0}\" parameter in the context configuration!!", Constants.baseFolder));
+ logger.error("");
+ }
+
File base = com.gitblit.utils.FileUtils.resolveParameter(Constants.contextFolder$, contextFolder, path);
base.mkdirs();
-
+
// try to copy the data folder contents to the baseFolder
File localSettings = new File(base, "gitblit.properties");
- if (!localSettings.exists()) {
- File contextData = new File(contextFolder, "/WEB-INF/data");
- if (!base.equals(contextData)) {
- try {
- com.gitblit.utils.FileUtils.copy(base, contextData.listFiles());
- } catch (IOException e) {
- logger.error(MessageFormat.format(
- "Failed to copy included data from {0} to {1}",
- contextData, base));
+ if (contextFolder != null) {
+ if (!localSettings.exists()) {
+ File contextData = new File(contextFolder, "/WEB-INF/data");
+ if (!base.equals(contextData)) {
+ try {
+ com.gitblit.utils.FileUtils.copy(base, contextData.listFiles());
+ } catch (IOException e) {
+ logger.error(MessageFormat.format(
+ "Failed to copy included data from {0} to {1}",
+ contextData, base));
+ }
}
}
}
-
+
// delegate all config to baseFolder/gitblit.properties file
FileSettings settings = new FileSettings(localSettings.getAbsolutePath());
configureContext(settings, base, true);
|