diff --git a/services/git-bridge/.idea/workspace.xml b/services/git-bridge/.idea/workspace.xml
index 5ccda29b38..619aab2e46 100644
--- a/services/git-bridge/.idea/workspace.xml
+++ b/services/git-bridge/.idea/workspace.xml
@@ -8,6 +8,11 @@
+
+
+
+
+
@@ -30,31 +35,21 @@
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
-
+
+
-
-
+
+
@@ -70,11 +65,21 @@
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
@@ -84,27 +89,37 @@
-
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -113,18 +128,8 @@
-
-
-
-
-
-
-
-
-
-
-
-
+
+
@@ -177,17 +182,20 @@
-
-
-
+
+
+
+
+
+
@@ -263,6 +271,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -325,6 +355,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -416,12 +472,14 @@
+
+
@@ -651,7 +709,7 @@
-
+
@@ -709,17 +767,11 @@
-
-
-
-
-
-
-
+
@@ -944,13 +996,6 @@
-
-
-
-
-
-
-
@@ -972,13 +1017,6 @@
-
-
-
-
-
-
-
@@ -1003,14 +1041,6 @@
-
-
-
-
-
-
-
-
@@ -1027,38 +1057,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -1067,14 +1065,6 @@
-
-
-
-
-
-
-
-
@@ -1083,10 +1073,82 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/application/WLGitBridgeApplication.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/application/WLGitBridgeApplication.java
index 6421ff0c3f..41572b0653 100644
--- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/application/WLGitBridgeApplication.java
+++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/application/WLGitBridgeApplication.java
@@ -1,6 +1,7 @@
package uk.ac.ic.wlgitbridge.application;
import uk.ac.ic.wlgitbridge.application.exception.InvalidProgramArgumentsException;
+import uk.ac.ic.wlgitbridge.git.exception.InvalidRootDirectoryPathException;
import javax.servlet.ServletException;
@@ -40,6 +41,9 @@ public class WLGitBridgeApplication {
new WLGitBridgeServer(port, rootGitDirectoryPath).start();
} catch (ServletException e) {
e.printStackTrace();
+ } catch (InvalidRootDirectoryPathException e) {
+ printUsage();
+ System.exit(EXIT_CODE_FAILED);
}
}
diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/application/WLGitBridgeServer.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/application/WLGitBridgeServer.java
index d77f2c9bff..eac82a6948 100644
--- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/application/WLGitBridgeServer.java
+++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/application/WLGitBridgeServer.java
@@ -4,6 +4,7 @@ import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import uk.ac.ic.wlgitbridge.git.WLGitServlet;
+import uk.ac.ic.wlgitbridge.git.exception.InvalidRootDirectoryPathException;
import javax.servlet.ServletException;
import java.net.BindException;
@@ -11,18 +12,30 @@ import java.net.BindException;
/**
* Created by Winston on 02/11/14.
*/
+
+/**
+ * Class for the actual server.
+ */
public class WLGitBridgeServer {
private final Server jettyServer;
private final int port;
- public WLGitBridgeServer(final int port, String rootGitDirectoryPath) throws ServletException {
+ /**
+ * Constructs an instance of the server.
+ * @param port the port number to listen on
+ * @param rootGitDirectoryPath the root directory path containing the git repositories
+ * @throws ServletException if the servlet throws an exception
+ */
+ public WLGitBridgeServer(final int port, String rootGitDirectoryPath) throws ServletException, InvalidRootDirectoryPathException {
this.port = port;
jettyServer = new Server(port);
- configureJettyServer();
-
+ configureJettyServer(rootGitDirectoryPath);
}
+ /**
+ * Starts the server on the port given on construction.
+ */
public void start() {
try {
jettyServer.start();
@@ -38,10 +51,14 @@ public class WLGitBridgeServer {
}
}
- private void configureJettyServer() throws ServletException {
+ private void configureJettyServer(String rootGitDirectoryPath) throws ServletException, InvalidRootDirectoryPathException {
final ServletContextHandler servletContextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS);
servletContextHandler.setContextPath("/");
- servletContextHandler.addServlet(new ServletHolder(new WLGitServlet(servletContextHandler)), "/*");
+ servletContextHandler.addServlet(
+ new ServletHolder(
+ new WLGitServlet(servletContextHandler,rootGitDirectoryPath)),
+ "/*"
+ );
jettyServer.setHandler(servletContextHandler);
}
diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/git/WLGitServlet.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/git/WLGitServlet.java
index 18116871f7..1042cea476 100644
--- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/git/WLGitServlet.java
+++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/git/WLGitServlet.java
@@ -2,6 +2,7 @@ package uk.ac.ic.wlgitbridge.git;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jgit.http.server.GitServlet;
+import uk.ac.ic.wlgitbridge.git.exception.InvalidRootDirectoryPathException;
import javax.servlet.ServletException;
@@ -10,8 +11,8 @@ import javax.servlet.ServletException;
*/
public class WLGitServlet extends GitServlet {
- public WLGitServlet(ServletContextHandler servletContextHandler) throws ServletException {
- setRepositoryResolver(new WLRepositoryResolver());
+ public WLGitServlet(ServletContextHandler servletContextHandler, String rootGitDirectoryPath) throws ServletException, InvalidRootDirectoryPathException {
+ setRepositoryResolver(new WLRepositoryResolver(rootGitDirectoryPath));
setReceivePackFactory(new WLReceivePackFactory());
setUploadPackFactory(new WLUploadPackFactory());
init(new WLGitServletConfig(servletContextHandler));
diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/git/WLRepositoryResolver.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/git/WLRepositoryResolver.java
index 267f8abb54..7180f08234 100644
--- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/git/WLRepositoryResolver.java
+++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/git/WLRepositoryResolver.java
@@ -11,6 +11,7 @@ import org.eclipse.jgit.transport.ServiceMayNotContinueException;
import org.eclipse.jgit.transport.resolver.RepositoryResolver;
import org.eclipse.jgit.transport.resolver.ServiceNotAuthorizedException;
import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException;
+import uk.ac.ic.wlgitbridge.git.exception.InvalidRootDirectoryPathException;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
@@ -21,44 +22,36 @@ import java.io.IOException;
*/
public class WLRepositoryResolver implements RepositoryResolver {
+ private File rootGitDirectory;
+
+ public WLRepositoryResolver(String rootGitDirectoryPath) throws InvalidRootDirectoryPathException {
+ initRootGitDirectory(rootGitDirectoryPath);
+ }
+
@Override
public Repository open(HttpServletRequest httpServletRequest, String name) throws RepositoryNotFoundException, ServiceNotAuthorizedException, ServiceNotEnabledException, ServiceMayNotContinueException {
- System.out.println(name);
+ File repositoryRoot = new File(rootGitDirectory.getAbsolutePath(), name);
-
- File workspace = new File("/Users/Roxy/git-test/hello");
- workspace.mkdirs();
- Repository r = null;
+ Repository repository = null;
try {
- r = new FileRepositoryBuilder().setWorkTree(workspace).build();
+ repository = new FileRepositoryBuilder().setWorkTree(repositoryRoot).build();
} catch (IOException e) {
- e.printStackTrace();
+ throw new RepositoryNotFoundException(name);
}
-
- // if the repository doesn't exist, create it
- if (!r.getObjectDatabase().exists()) {
- try {
- r.create();
- } catch (IOException e) {
- e.printStackTrace();
- }
-
- try {
- // import initial content
- Git git = new Git(r);
- AddCommand cmd = git.add();
- cmd.addFilepattern(".");
- cmd.call();
-
- CommitCommand co = git.commit();
- co.setAuthor("Winston", "wl3912@ic.ac.uk");
- co.setMessage("i am java miaow");
- co.call();
- } catch (GitAPIException e) {
- e.printStackTrace();
- }
+ if (!repository.getObjectDatabase().exists()) {
+ throw new RepositoryNotFoundException(name);
+ }
+ return repository;
+ }
+
+ private void initRootGitDirectory(String rootGitDirectoryPath) throws InvalidRootDirectoryPathException {
+ rootGitDirectory = new File(rootGitDirectoryPath);
+ /* throws SecurityException */
+ rootGitDirectory.mkdirs();
+ rootGitDirectory.getAbsolutePath();
+ if (!rootGitDirectory.isDirectory()) {
+ throw new InvalidRootDirectoryPathException();
}
- return r;
}
}
diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/git/exception/InvalidRootDirectoryPathException.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/git/exception/InvalidRootDirectoryPathException.java
new file mode 100644
index 0000000000..0d71855840
--- /dev/null
+++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/git/exception/InvalidRootDirectoryPathException.java
@@ -0,0 +1,7 @@
+package uk.ac.ic.wlgitbridge.git.exception;
+
+/**
+ * Created by Winston on 03/11/14.
+ */
+public class InvalidRootDirectoryPathException extends Throwable {
+}
diff --git a/services/git-bridge/test/uk/ac/ic/wlgitbridge/test/git/WLRepositoryResolverTests.java b/services/git-bridge/test/uk/ac/ic/wlgitbridge/test/git/WLRepositoryResolverTests.java
index 183c82d12e..74587c9bf5 100644
--- a/services/git-bridge/test/uk/ac/ic/wlgitbridge/test/git/WLRepositoryResolverTests.java
+++ b/services/git-bridge/test/uk/ac/ic/wlgitbridge/test/git/WLRepositoryResolverTests.java
@@ -8,7 +8,7 @@ import org.junit.Test;
public class WLRepositoryResolverTests {
@Test
- public void nothingToTest() {
+ public void joinsFilePathsTogether() {
}