From e36d4de3a9dc55359f3b54dbf06adc8209d1028c Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Fri, 06 Jan 2012 17:20:59 -0500
Subject: [PATCH] WAR/Express builds now copy bundled push scripts to configured scripts folder

---
 src/com/gitblit/GitBlit.java         |   19 ++++++++-
 build.xml                            |    9 ++++
 src/com/gitblit/utils/FileUtils.java |   46 +++++++++++++++++++++++
 3 files changed, 72 insertions(+), 2 deletions(-)

diff --git a/build.xml b/build.xml
index c704046..0d906ed 100644
--- a/build.xml
+++ b/build.xml
@@ -499,6 +499,15 @@
 		<copy tofile="${deployments.root}/WEB-INF/reference.properties" 
 			file="${basedir}/distrib/gitblit.properties"/>
 
+		<!-- Copy the supported Groovy hook scripts -->
+		<mkdir dir="${deployments.root}/WEB-INF/groovy" />
+		<copy todir="${deployments.root}/WEB-INF/groovy">
+			<fileset dir="${basedir}/groovy">
+				<include name="sendmail.groovy" />
+				<include name="jenkins.groovy" />
+			</fileset>
+		</copy>
+					
 		<!-- Build the WAR web.xml from the prototype web.xml and gitblit.properties -->
 		<!-- THIS FILE IS NOT OVERRIDDEN ONCE IT IS BUILT!!! -->
 		<java classpath="${project.build.dir}" classname="com.gitblit.build.BuildWebXml">
diff --git a/src/com/gitblit/GitBlit.java b/src/com/gitblit/GitBlit.java
index d712056..ce3e16d 100644
--- a/src/com/gitblit/GitBlit.java
+++ b/src/com/gitblit/GitBlit.java
@@ -452,7 +452,7 @@
 		List<String> names = new ArrayList<String>(userService.getAllUsernames());
 		return names;
 	}
-	
+
 	/**
 	 * Returns the list of all users available to the login service.
 	 * 
@@ -546,7 +546,7 @@
 		List<String> teams = new ArrayList<String>(userService.getAllTeamNames());
 		return teams;
 	}
-	
+
 	/**
 	 * Returns the list of available teams that a user or repository may be
 	 * assigned to.
@@ -1788,6 +1788,21 @@
 				webxmlSettings.applyOverrides(overrideFile);
 			}
 			configureContext(webxmlSettings, true);
+
+			// Copy the included scripts to the configured groovy folder
+			File localScripts = getFileOrFolder(Keys.groovy.scriptsFolder, "groovy");
+			if (!localScripts.exists()) {
+				File includedScripts = new File(context.getRealPath("/WEB-INF/groovy"));
+				if (!includedScripts.equals(localScripts)) {
+					try {
+						com.gitblit.utils.FileUtils.copy(localScripts, includedScripts.listFiles());
+					} catch (IOException e) {
+						logger.error(MessageFormat.format(
+								"Failed to copy included Groovy scripts from {0} to {1}",
+								includedScripts, localScripts));
+					}
+				}
+			}
 		}
 
 		serverStatus.servletContainer = servletContext.getServerInfo();
diff --git a/src/com/gitblit/utils/FileUtils.java b/src/com/gitblit/utils/FileUtils.java
index 73bef34..29c9d0f 100644
--- a/src/com/gitblit/utils/FileUtils.java
+++ b/src/com/gitblit/utils/FileUtils.java
@@ -15,11 +15,14 @@
  */
 package com.gitblit.utils;
 
+import java.io.BufferedInputStream;
 import java.io.BufferedReader;
 import java.io.BufferedWriter;
 import java.io.File;
 import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
+import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.OutputStreamWriter;
 import java.nio.charset.Charset;
@@ -103,4 +106,47 @@
 		}
 		return length;
 	}
+
+	/**
+	 * Copies a file or folder (recursively) to a destination folder.
+	 * 
+	 * @param destinationFolder
+	 * @param filesOrFolders
+	 * @return
+	 * @throws FileNotFoundException
+	 * @throws IOException
+	 */
+	public static void copy(File destinationFolder, File... filesOrFolders)
+			throws FileNotFoundException, IOException {
+		destinationFolder.mkdirs();
+		for (File file : filesOrFolders) {
+			if (file.isDirectory()) {
+				copy(new File(destinationFolder, file.getName()), file.listFiles());
+			} else {
+				File dFile = new File(destinationFolder, file.getName());
+				BufferedInputStream bufin = null;
+				FileOutputStream fos = null;
+				try {
+					bufin = new BufferedInputStream(new FileInputStream(file));
+					fos = new FileOutputStream(dFile);
+					int len = 8196;
+					byte[] buff = new byte[len];
+					int n = 0;
+					while ((n = bufin.read(buff, 0, len)) != -1) {
+						fos.write(buff, 0, n);
+					}
+				} finally {
+					try {
+						bufin.close();
+					} catch (Throwable t) {
+					}
+					try {
+						fos.close();
+					} catch (Throwable t) {
+					}
+				}
+				dFile.setLastModified(file.lastModified());
+			}
+		}
+	}
 }

--
Gitblit v1.9.1