import java.io.BufferedReader;\r
import java.io.File;\r
import java.io.FileFilter;\r
+import java.io.FileNotFoundException;\r
+import java.io.FileOutputStream;\r
import java.io.IOException;\r
import java.io.InputStream;\r
import java.io.InputStreamReader;\r
+import java.io.OutputStream;\r
import java.lang.reflect.Field;\r
import java.lang.reflect.Type;\r
import java.net.URI;\r
File base = com.gitblit.utils.FileUtils.resolveParameter(Constants.contextFolder$, contextFolder, path);\r
base.mkdirs();\r
\r
- // try to copy the data folder contents to the baseFolder\r
+ // try to extract the data folder resource to the baseFolder\r
File localSettings = new File(base, "gitblit.properties");\r
- if (contextFolder != null) {\r
- if (!localSettings.exists()) {\r
- File contextData = new File(contextFolder, "/WEB-INF/data");\r
- if (!base.equals(contextData)) {\r
- try {\r
- com.gitblit.utils.FileUtils.copy(base, contextData.listFiles());\r
- } catch (IOException e) {\r
- logger.error(MessageFormat.format(\r
- "Failed to copy included data from {0} to {1}",\r
- contextData, base));\r
- }\r
- }\r
- }\r
+ if (!localSettings.exists()) {\r
+ extractResources(context, "/WEB-INF/data/", base);\r
}\r
\r
// delegate all config to baseFolder/gitblit.properties file\r
settingsModel = loadSettingModels();\r
serverStatus.servletContainer = servletContext.getServerInfo();\r
}\r
+ \r
+ protected void extractResources(ServletContext context, String path, File toDir) {\r
+ for (String resource : context.getResourcePaths(path)) {\r
+ // extract the resource to the directory if it does not exist\r
+ File f = new File(toDir, resource.substring(path.length()));\r
+ if (!f.exists()) {\r
+ try {\r
+ if (resource.charAt(resource.length() - 1) == '/') {\r
+ // directory\r
+ f.mkdirs();\r
+ extractResources(context, resource, f);\r
+ } else {\r
+ // file\r
+ f.getParentFile().mkdirs();\r
+ InputStream is = context.getResourceAsStream(resource);\r
+ OutputStream os = new FileOutputStream(f);\r
+ byte [] buffer = new byte[4096];\r
+ int len = 0;\r
+ while ((len = is.read(buffer)) > -1) {\r
+ os.write(buffer, 0, len);\r
+ }\r
+ is.close();\r
+ os.close();\r
+ }\r
+ } catch (FileNotFoundException e) {\r
+ logger.error("Failed to find resource \"" + resource + "\"", e);\r
+ } catch (IOException e) {\r
+ logger.error("Failed to copy resource \"" + resource + "\" to " + f, e);\r
+ }\r
+ }\r
+ }\r
+ }\r
\r
/**\r
* Gitblit is being shutdown either because the servlet container is\r