diff --git a/services/git-bridge/.idea/workspace.xml b/services/git-bridge/.idea/workspace.xml index 1617220ed5..b50bb06fc0 100644 --- a/services/git-bridge/.idea/workspace.xml +++ b/services/git-bridge/.idea/workspace.xml @@ -7,10 +7,9 @@ - + - @@ -34,71 +33,31 @@ - - - - - - - - - - - - - - - - - - - - - + - - + + - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - + + @@ -107,25 +66,45 @@ - - + + - - + + - - + + - - + + + + + + + + + + + + + + + + + + + + + + @@ -134,6 +113,26 @@ + + + + + + + + + + + + + + + + + + + + @@ -147,14 +146,6 @@ @@ -781,13 +780,13 @@ - - - + + + @@ -1069,57 +1068,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1373,14 +1321,6 @@ - - - - - - - - @@ -1408,7 +1348,7 @@ - + @@ -1429,14 +1369,6 @@ - - - - - - - - @@ -1447,8 +1379,80 @@ - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 61dd811585..8879aa1524 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 @@ -6,7 +6,7 @@ import uk.ac.ic.wlgitbridge.git.exception.InvalidRootDirectoryPathException; import uk.ac.ic.wlgitbridge.git.handler.WLReceivePackFactory; import uk.ac.ic.wlgitbridge.git.handler.WLRepositoryResolver; import uk.ac.ic.wlgitbridge.git.handler.WLUploadPackFactory; -import uk.ac.ic.wlgitbridge.writelatex.SnapshotRepositoryBuilder; +import uk.ac.ic.wlgitbridge.writelatex.SnapshotRepositorySource; import javax.servlet.ServletException; @@ -16,7 +16,7 @@ import javax.servlet.ServletException; public class WLGitServlet extends GitServlet { public WLGitServlet(ServletContextHandler servletContextHandler, String rootGitDirectoryPath) throws ServletException, InvalidRootDirectoryPathException { - setRepositoryResolver(new WLRepositoryResolver(rootGitDirectoryPath, new SnapshotRepositoryBuilder())); + setRepositoryResolver(new WLRepositoryResolver(rootGitDirectoryPath, new SnapshotRepositorySource())); setReceivePackFactory(new WLReceivePackFactory()); setUploadPackFactory(new WLUploadPackFactory()); init(new WLGitServletConfig(servletContextHandler)); diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/git/handler/WLRepositoryResolver.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/git/handler/WLRepositoryResolver.java index 18fe7e006d..f2f4c6699f 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/git/handler/WLRepositoryResolver.java +++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/git/handler/WLRepositoryResolver.java @@ -8,7 +8,7 @@ import org.eclipse.jgit.transport.resolver.ServiceNotAuthorizedException; import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException; import uk.ac.ic.wlgitbridge.git.exception.InvalidRootDirectoryPathException; import uk.ac.ic.wlgitbridge.bridge.RepositorySource; -import uk.ac.ic.wlgitbridge.writelatex.SnapshotRepositoryBuilder; +import uk.ac.ic.wlgitbridge.writelatex.SnapshotRepositorySource; import javax.servlet.http.HttpServletRequest; import java.io.File; @@ -21,7 +21,7 @@ public class WLRepositoryResolver implements RepositoryResolver getSnapshots() { + return null; + } + + @Override + public void putSnapshots(List snapshots) { + + } + +} diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/DummySnapshotDBAPI.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/DummySnapshotDBAPI.java new file mode 100644 index 0000000000..89fbb80eef --- /dev/null +++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/DummySnapshotDBAPI.java @@ -0,0 +1,23 @@ +package uk.ac.ic.wlgitbridge.writelatex; + +import org.eclipse.jgit.lib.Repository; + +import java.util.LinkedList; +import java.util.List; + +/** + * Created by Winston on 03/11/14. + */ +public class DummySnapshotDBAPI implements SnapshotDBAPI { + + @Override + public boolean repositoryExists(Repository repository) { + return false; + } + + @Override + public List getSnapshotsToAddToRepository(Repository repository) { + return new LinkedList(); + } + +} diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/RepositoryBuilder.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/RepositoryBuilder.java new file mode 100644 index 0000000000..1ab161d74b --- /dev/null +++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/RepositoryBuilder.java @@ -0,0 +1,13 @@ +package uk.ac.ic.wlgitbridge.writelatex; + +import org.eclipse.jgit.errors.RepositoryNotFoundException; +import org.eclipse.jgit.lib.Repository; + +/** + * Created by Winston on 03/11/14. + */ +public interface RepositoryBuilder { + + public void buildRepository(Repository repository) throws RepositoryNotFoundException; + +} diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/Snapshot.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/Snapshot.java new file mode 100644 index 0000000000..f7eb685d4f --- /dev/null +++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/Snapshot.java @@ -0,0 +1,7 @@ +package uk.ac.ic.wlgitbridge.writelatex; + +/** + * Created by Winston on 03/11/14. + */ +public class Snapshot { +} diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/SnapshotAPI.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/SnapshotAPI.java new file mode 100644 index 0000000000..f7a34237fe --- /dev/null +++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/SnapshotAPI.java @@ -0,0 +1,13 @@ +package uk.ac.ic.wlgitbridge.writelatex; + +import java.util.List; + +/** + * Created by Winston on 03/11/14. + */ +public interface SnapshotAPI { + + public List getSnapshots(); + public void putSnapshots(List snapshots); + +} diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/SnapshotDBAPI.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/SnapshotDBAPI.java new file mode 100644 index 0000000000..bbc695b5b6 --- /dev/null +++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/SnapshotDBAPI.java @@ -0,0 +1,15 @@ +package uk.ac.ic.wlgitbridge.writelatex; + +import org.eclipse.jgit.lib.Repository; + +import java.util.List; + +/** + * Created by Winston on 03/11/14. + */ +public interface SnapshotDBAPI { + + public boolean repositoryExists(Repository repository); + public List getSnapshotsToAddToRepository(Repository repository); + +} diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/SnapshotRepositoryBuilder.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/SnapshotRepositoryBuilder.java index 5095cd86b8..9261b45d5a 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/SnapshotRepositoryBuilder.java +++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/SnapshotRepositoryBuilder.java @@ -2,31 +2,40 @@ package uk.ac.ic.wlgitbridge.writelatex; import org.eclipse.jgit.errors.RepositoryNotFoundException; import org.eclipse.jgit.lib.Repository; -import org.eclipse.jgit.storage.file.FileRepositoryBuilder; -import uk.ac.ic.wlgitbridge.bridge.RepositorySource; -import java.io.File; -import java.io.IOException; +import java.util.List; /** * Created by Winston on 03/11/14. */ -public class SnapshotRepositoryBuilder implements RepositorySource { +public class SnapshotRepositoryBuilder implements RepositoryBuilder { + + private SnapshotDBAPI snapshotDBAPI; + private SnapshotAPI snapshotAPI; + + public SnapshotRepositoryBuilder() { + snapshotDBAPI = new DummySnapshotDBAPI(); + snapshotAPI = new DummySnapshotAPI(); + } @Override - public Repository getRepositoryWithNameAtRootDirectory(String name, File rootDirectory) throws RepositoryNotFoundException { - File repositoryRoot = new File(rootDirectory.getAbsolutePath(), name); + public void buildRepository(Repository repository) throws RepositoryNotFoundException { + if (repository.getObjectDatabase().exists()) { + updateRepositoryFromSnapshots(repository); + } else { + buildRepositoryFromScratch(repository); + } + } - Repository repository = null; - try { - repository = new FileRepositoryBuilder().setWorkTree(repositoryRoot).build(); - } catch (IOException e) { - throw new RepositoryNotFoundException(name); + private void updateRepositoryFromSnapshots(Repository repository) { + List snapshotsToAdd = snapshotDBAPI.getSnapshotsToAddToRepository(repository); + } + + private void buildRepositoryFromScratch(Repository repository) throws RepositoryNotFoundException { + if (!snapshotDBAPI.repositoryExists(repository)) { + throw new RepositoryNotFoundException(repository.getDirectory()); } - if (!repository.getObjectDatabase().exists()) { - throw new RepositoryNotFoundException(name); - } - return repository; + updateRepositoryFromSnapshots(repository); } } diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/SnapshotRepositorySource.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/SnapshotRepositorySource.java new file mode 100644 index 0000000000..62071dc332 --- /dev/null +++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/SnapshotRepositorySource.java @@ -0,0 +1,36 @@ +package uk.ac.ic.wlgitbridge.writelatex; + +import org.eclipse.jgit.errors.RepositoryNotFoundException; +import org.eclipse.jgit.lib.Repository; +import org.eclipse.jgit.storage.file.FileRepositoryBuilder; +import uk.ac.ic.wlgitbridge.bridge.RepositorySource; + +import java.io.File; +import java.io.IOException; + +/** + * Created by Winston on 03/11/14. + */ +public class SnapshotRepositorySource implements RepositorySource { + + private RepositoryBuilder repositoryBuilder; + + public SnapshotRepositorySource() { + repositoryBuilder = new SnapshotRepositoryBuilder(); + } + + @Override + public Repository getRepositoryWithNameAtRootDirectory(String name, File rootDirectory) throws RepositoryNotFoundException { + File repositoryDirectory = new File(rootDirectory.getAbsolutePath(), name); + + Repository repository = null; + try { + repository = new FileRepositoryBuilder().setWorkTree(repositoryDirectory).build(); + } catch (IOException e) { + throw new RepositoryNotFoundException(name); + } + repositoryBuilder.buildRepository(repository); + return repository; + } + +}