From 19075f18bcfd9838868887b4ce31b336f7ec1411 Mon Sep 17 00:00:00 2001 From: Shane Kilkelly Date: Thu, 22 Nov 2018 12:01:28 +0000 Subject: [PATCH 01/24] Add `migratedFromID` property to `GetDocResult` --- .../snapshot/getdoc/GetDocResult.java | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/getdoc/GetDocResult.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/getdoc/GetDocResult.java index 6b47a3985d..9ccdc4a6ec 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/getdoc/GetDocResult.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/getdoc/GetDocResult.java @@ -19,6 +19,7 @@ public class GetDocResult extends Result { private int error; private int versionID; + private String migratedFromID; private String createdAt; private WLUser user; @@ -37,7 +38,8 @@ public class GetDocResult extends Result { int versionID, String createdAt, String email, - String name + String name, + String migratedFromID ) { if (error == null) { this.error = -1; @@ -47,6 +49,17 @@ public class GetDocResult extends Result { this.versionID = versionID; this.createdAt = createdAt; this.user = new WLUser(name, email); + this.migratedFromID = migratedFromID; + } + + public GetDocResult( + JsonElement error, + int versionID, + String createdAt, + String email, + String name + ) { + this(error, versionID, createdAt, email, name, null); } @Override @@ -59,6 +72,9 @@ public class GetDocResult extends Result { latestVerBy.addProperty("email", getEmail()); latestVerBy.addProperty("name", getName()); jsonThis.add("latestVerBy", latestVerBy); + if (migratedFromID != null) { + jsonThis.addProperty("migratedFromId", migratedFromID); + } } else { jsonThis.addProperty("status", error); String message; @@ -93,6 +109,11 @@ public class GetDocResult extends Result { } else { versionID = jsonObject.get("latestVerId").getAsInt(); createdAt = jsonObject.get("latestVerAt").getAsString(); + if (jsonObject.has("migratedFromId")) { + migratedFromID = jsonObject.get("migratedFromId").getAsString(); + } else { + migratedFromID = null; + } String name = null; String email = null; JsonElement latestVerBy = jsonObject.get("latestVerBy"); @@ -126,4 +147,6 @@ public class GetDocResult extends Result { return user.getEmail(); } + public String getMigratedFromID() { return migratedFromID; } + } From 4f3021cca1bccd4d265cd95a2e8af1375be5b4ac Mon Sep 17 00:00:00 2001 From: Shane Kilkelly Date: Tue, 27 Nov 2018 11:35:22 +0000 Subject: [PATCH 02/24] Speculative solution --- services/git-bridge/pom.xml | 1 + .../uk/ac/ic/wlgitbridge/bridge/Bridge.java | 50 ++++++++++++++++--- .../bridge/repo/FSGitRepoStore.java | 33 ++++++++++++ .../ic/wlgitbridge/bridge/repo/RepoStore.java | 2 + .../bridge/snapshot/SnapshotApiFacade.java | 9 ++++ .../git/handler/WLRepositoryResolver.java | 2 +- 6 files changed, 90 insertions(+), 7 deletions(-) diff --git a/services/git-bridge/pom.xml b/services/git-bridge/pom.xml index 74eaefe50d..f5e7f3176a 100644 --- a/services/git-bridge/pom.xml +++ b/services/git-bridge/pom.xml @@ -9,6 +9,7 @@ 1.0-SNAPSHOT UTF-8 + true diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/Bridge.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/Bridge.java index 9ee76263de..d4c680afff 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/Bridge.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/Bridge.java @@ -37,6 +37,7 @@ import uk.ac.ic.wlgitbridge.server.PostbackContents; import uk.ac.ic.wlgitbridge.server.PostbackHandler; import uk.ac.ic.wlgitbridge.snapshot.base.MissingRepositoryException; import uk.ac.ic.wlgitbridge.snapshot.base.ForbiddenException; +import uk.ac.ic.wlgitbridge.snapshot.getdoc.GetDocResult; import uk.ac.ic.wlgitbridge.snapshot.getforversion.SnapshotAttachment; import uk.ac.ic.wlgitbridge.snapshot.push.PostbackManager; import uk.ac.ic.wlgitbridge.snapshot.push.PostbackPromise; @@ -299,7 +300,7 @@ public class Bridge { * Synchronises the given repository with Overleaf. * * It acquires the project lock and calls - * {@link #getUpdatedRepoCritical(Optional, String)}. + * {@link #getUpdatedRepoCritical(Optional, String, GetDocResult)}. * @param oauth2 The oauth2 to use * @param projectName The name of the project * @throws IOException @@ -310,11 +311,13 @@ public class Bridge { String projectName ) throws IOException, GitUserException { try (LockGuard __ = lock.lockGuard(projectName)) { - if (!snapshotAPI.projectExists(oauth2, projectName)) { + Optional maybeDoc = snapshotAPI.getDoc(oauth2, projectName); + if (!maybeDoc.isPresent()) { throw new RepositoryNotFoundException(projectName); } + GetDocResult doc = maybeDoc.get(); Log.info("[{}] Updating repository", projectName); - return getUpdatedRepoCritical(oauth2, projectName); + return getUpdatedRepoCritical(oauth2, projectName, doc); } } @@ -346,14 +349,49 @@ public class Bridge { */ private ProjectRepo getUpdatedRepoCritical( Optional oauth2, - String projectName + String projectName, + GetDocResult doc ) throws IOException, GitUserException { ProjectRepo repo; ProjectState state = dbStore.getProjectState(projectName); + Log.info(">>>> RepoStore {}", repoStore.getRepoStorePath()); + Log.info( + ">>>> getUpdatedRepoCritical, {} migratedFrom {}", + projectName, + doc.getMigratedFromID() + ); switch (state) { case NOT_PRESENT: - repo = repoStore.initRepo(projectName); - break; + Log.info(">>>> Not present {}", projectName); + String migratedFromID = doc.getMigratedFromID(); + if (migratedFromID != null) { + Log.info(">>>> has a migratedFromId {} {}", projectName, migratedFromID); + ProjectState sourceState = dbStore.getProjectState(migratedFromID); + try (LockGuard __ = lock.lockGuard(migratedFromID)) { + switch (sourceState) { + case NOT_PRESENT: + // Normal init-repo + Log.info(">>>> migrated-from-id not present, proceed as normal"); + repo = repoStore.initRepo(projectName); + break; + case SWAPPED: + // Swap back and then copy + Log.info(">>>> migrated-from-id swapped, unswap and proceed"); + swapJob.restore(migratedFromID); + /* Fallthrough */ + default: + // Copy data, and set version to zero + Log.info(">>>> migrated-from-id init from existing"); + repo = repoStore.initRepoFromExisting(projectName, migratedFromID); + dbStore.setLatestVersionForProject(migratedFromID, 0); + } + } + break; + } else { + Log.info(">>>> no migrated-from-id {}", projectName); + repo = repoStore.initRepo(projectName); + break; + } case SWAPPED: swapJob.restore(projectName); /* Fallthrough */ diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/repo/FSGitRepoStore.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/repo/FSGitRepoStore.java index a3bfe30928..55ae573337 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/repo/FSGitRepoStore.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/repo/FSGitRepoStore.java @@ -4,6 +4,7 @@ import com.google.api.client.repackaged.com.google.common.base.Preconditions; import org.apache.commons.io.FileUtils; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.Repository; +import uk.ac.ic.wlgitbridge.util.Log; import uk.ac.ic.wlgitbridge.util.Project; import uk.ac.ic.wlgitbridge.util.Tar; @@ -74,6 +75,38 @@ public class FSGitRepoStore implements RepoStore { ret, Optional.of(maxFileSize), Optional.empty()); } + @Override + public ProjectRepo initRepoFromExisting( + String project, String fromProject + ) throws IOException { + GitProjectRepo ret = GitProjectRepo.fromName(project); + // GitProjectRepo origin = GitProjectRepo.fromName(fromProject); + ret.initRepo(this); + Log.info(">>>> Copy from {} to {}", fromProject, project); + String repoRoot = getRepoStorePath(); + String sourcePath = repoRoot + "/" + fromProject; + String destinationPath = repoRoot + "/" + project; + Log.info(">>>> paths from: {} and to: {}", sourcePath, destinationPath); + new ProcessBuilder( + "rm", "-rf", + destinationPath + ).start(); + Process copyProcess = new ProcessBuilder( + "cp", "-ra", + sourcePath, + destinationPath + "/" + ).start(); + Log.info(">>>> done copy"); + try { + copyProcess.waitFor(); + } catch (InterruptedException e) { + e.printStackTrace(); + throw new IOException("copy failed" + e.getLocalizedMessage()); + } + return new WalkOverrideGitRepo( + ret, Optional.of(maxFileSize), Optional.empty()); + } + @Override public ProjectRepo getExistingRepo(String project) throws IOException { GitProjectRepo ret = GitProjectRepo.fromName(project); diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/repo/RepoStore.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/repo/RepoStore.java index a5eb289942..18bea89cd5 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/repo/RepoStore.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/repo/RepoStore.java @@ -22,6 +22,8 @@ public interface RepoStore { ProjectRepo initRepo(String project) throws IOException; + ProjectRepo initRepoFromExisting(String project, String fromProject) throws IOException; + ProjectRepo getExistingRepo(String project) throws IOException; ProjectRepo useJGitRepo(Repository repo, ObjectId commitId); diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/snapshot/SnapshotApiFacade.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/snapshot/SnapshotApiFacade.java index f9085febcb..07f19640fa 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/snapshot/SnapshotApiFacade.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/snapshot/SnapshotApiFacade.java @@ -44,6 +44,15 @@ public class SnapshotApiFacade { } } + public Optional getDoc( + Optional oauth2, + String projectName + ) throws FailedConnectionException, GitUserException { + GetDocResult doc = SnapshotApi + .getResult(api.getDoc(oauth2, projectName)); + return Optional.ofNullable(doc); + } + public Deque getSnapshots( Optional oauth2, String projectName, diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/git/handler/WLRepositoryResolver.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/git/handler/WLRepositoryResolver.java index 022101fc5b..0405323298 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/git/handler/WLRepositoryResolver.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/git/handler/WLRepositoryResolver.java @@ -90,7 +90,7 @@ public class WLRepositoryResolver return bridge.getUpdatedRepo(oauth2, projName).getJGitRepository(); } catch (RepositoryNotFoundException e) { Log.info("Repository not found: " + name); - throw e; + throw new RepositoryNotFoundException("derp"); /* } catch (ServiceNotAuthorizedException e) { cannot occur From 66fa946cb86348c0c3efc98e41809feac45aa755 Mon Sep 17 00:00:00 2001 From: Shane Kilkelly Date: Tue, 27 Nov 2018 16:07:26 +0000 Subject: [PATCH 03/24] set timestamp on new record too --- .../src/main/java/uk/ac/ic/wlgitbridge/bridge/Bridge.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/Bridge.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/Bridge.java index d4c680afff..cdbde1d1e4 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/Bridge.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/Bridge.java @@ -384,6 +384,11 @@ public class Bridge { Log.info(">>>> migrated-from-id init from existing"); repo = repoStore.initRepoFromExisting(projectName, migratedFromID); dbStore.setLatestVersionForProject(migratedFromID, 0); + dbStore.setLastAccessedTime( + migratedFromID, + Timestamp.valueOf(LocalDateTime.now()) + + ); } } break; From a524bfbac19e350a695e80a586a0e5bf5f4e95b2 Mon Sep 17 00:00:00 2001 From: Shane Kilkelly Date: Tue, 27 Nov 2018 16:07:42 +0000 Subject: [PATCH 04/24] Minor cleanup --- .../uk/ac/ic/wlgitbridge/bridge/Bridge.java | 21 ++++++++----------- .../bridge/repo/FSGitRepoStore.java | 9 ++++---- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/Bridge.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/Bridge.java index cdbde1d1e4..0f97ac0221 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/Bridge.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/Bridge.java @@ -354,34 +354,32 @@ public class Bridge { ) throws IOException, GitUserException { ProjectRepo repo; ProjectState state = dbStore.getProjectState(projectName); - Log.info(">>>> RepoStore {}", repoStore.getRepoStorePath()); - Log.info( - ">>>> getUpdatedRepoCritical, {} migratedFrom {}", - projectName, - doc.getMigratedFromID() - ); switch (state) { case NOT_PRESENT: - Log.info(">>>> Not present {}", projectName); + Log.info(">>>> [{}] Repo not present", projectName); String migratedFromID = doc.getMigratedFromID(); if (migratedFromID != null) { - Log.info(">>>> has a migratedFromId {} {}", projectName, migratedFromID); + Log.info("[{}] Has a migratedFromId: {}", projectName, migratedFromID); ProjectState sourceState = dbStore.getProjectState(migratedFromID); try (LockGuard __ = lock.lockGuard(migratedFromID)) { switch (sourceState) { case NOT_PRESENT: // Normal init-repo - Log.info(">>>> migrated-from-id not present, proceed as normal"); + Log.info("[{}] migrated-from project not present, proceed as normal", + projectName + ); repo = repoStore.initRepo(projectName); break; case SWAPPED: // Swap back and then copy - Log.info(">>>> migrated-from-id swapped, unswap and proceed"); swapJob.restore(migratedFromID); /* Fallthrough */ default: // Copy data, and set version to zero - Log.info(">>>> migrated-from-id init from existing"); + Log.info("[{}] Init from other project: {}", + projectName, + migratedFromID + ); repo = repoStore.initRepoFromExisting(projectName, migratedFromID); dbStore.setLatestVersionForProject(migratedFromID, 0); dbStore.setLastAccessedTime( @@ -393,7 +391,6 @@ public class Bridge { } break; } else { - Log.info(">>>> no migrated-from-id {}", projectName); repo = repoStore.initRepo(projectName); break; } diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/repo/FSGitRepoStore.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/repo/FSGitRepoStore.java index 55ae573337..d32bb423fe 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/repo/FSGitRepoStore.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/repo/FSGitRepoStore.java @@ -80,13 +80,15 @@ public class FSGitRepoStore implements RepoStore { String project, String fromProject ) throws IOException { GitProjectRepo ret = GitProjectRepo.fromName(project); - // GitProjectRepo origin = GitProjectRepo.fromName(fromProject); ret.initRepo(this); - Log.info(">>>> Copy from {} to {}", fromProject, project); String repoRoot = getRepoStorePath(); String sourcePath = repoRoot + "/" + fromProject; String destinationPath = repoRoot + "/" + project; - Log.info(">>>> paths from: {} and to: {}", sourcePath, destinationPath); + Log.info("[{}] Init repo by copying data from: {}, to: {}", + project, + sourcePath, + destinationPath + ); new ProcessBuilder( "rm", "-rf", destinationPath @@ -96,7 +98,6 @@ public class FSGitRepoStore implements RepoStore { sourcePath, destinationPath + "/" ).start(); - Log.info(">>>> done copy"); try { copyProcess.waitFor(); } catch (InterruptedException e) { From b061608124c4d7afa31d7102e31cecc535ecb515 Mon Sep 17 00:00:00 2001 From: Shane Kilkelly Date: Tue, 27 Nov 2018 16:24:40 +0000 Subject: [PATCH 05/24] Re-instate tests --- services/git-bridge/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/git-bridge/pom.xml b/services/git-bridge/pom.xml index f5e7f3176a..5f8c991216 100644 --- a/services/git-bridge/pom.xml +++ b/services/git-bridge/pom.xml @@ -9,7 +9,7 @@ 1.0-SNAPSHOT UTF-8 - true + From 245cd67a3983ff720479fb8d0c694bb33ff9f5be Mon Sep 17 00:00:00 2001 From: Shane Kilkelly Date: Tue, 27 Nov 2018 16:24:50 +0000 Subject: [PATCH 06/24] Fix tests --- .../src/test/java/uk/ac/ic/wlgitbridge/bridge/BridgeTest.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/bridge/BridgeTest.java b/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/bridge/BridgeTest.java index 4d6df351ea..79dc4327b6 100644 --- a/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/bridge/BridgeTest.java +++ b/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/bridge/BridgeTest.java @@ -14,6 +14,7 @@ import uk.ac.ic.wlgitbridge.bridge.snapshot.SnapshotApiFacade; import uk.ac.ic.wlgitbridge.bridge.swap.job.SwapJob; import uk.ac.ic.wlgitbridge.bridge.swap.store.SwapStore; import uk.ac.ic.wlgitbridge.git.exception.GitUserException; +import uk.ac.ic.wlgitbridge.snapshot.getdoc.GetDocResult; import java.io.IOException; import java.util.ArrayDeque; @@ -91,6 +92,9 @@ public class BridgeTest { when(repoStore.getExistingRepo("asdf")).thenReturn(repo); when(dbStore.getProjectState("asdf")).thenReturn(ProjectState.PRESENT); when(snapshotAPI.projectExists(Optional.empty(), "asdf")).thenReturn(true); + when( + snapshotAPI.getDoc(Optional.empty(), "asdf") + ).thenReturn(Optional.of(mock(GetDocResult.class))); when( snapshotAPI.getSnapshots( any(), From 8bdf7031c51fb763200d3ff40b2160f44cfca0d8 Mon Sep 17 00:00:00 2001 From: Shane Kilkelly Date: Wed, 28 Nov 2018 14:17:30 +0000 Subject: [PATCH 07/24] Fix log line --- .../src/main/java/uk/ac/ic/wlgitbridge/bridge/Bridge.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/Bridge.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/Bridge.java index 0f97ac0221..b505fe3065 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/Bridge.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/Bridge.java @@ -356,7 +356,7 @@ public class Bridge { ProjectState state = dbStore.getProjectState(projectName); switch (state) { case NOT_PRESENT: - Log.info(">>>> [{}] Repo not present", projectName); + Log.info("[{}] Repo not present", projectName); String migratedFromID = doc.getMigratedFromID(); if (migratedFromID != null) { Log.info("[{}] Has a migratedFromId: {}", projectName, migratedFromID); From 1a646d3fd0e2a59f811be74ec54c8aab31812f2d Mon Sep 17 00:00:00 2001 From: Shane Kilkelly Date: Thu, 29 Nov 2018 10:22:22 +0000 Subject: [PATCH 08/24] Add an integration test for migrating repository --- services/git-bridge/pom.xml | 8 ++ .../state/SnapshotAPIStateBuilder.java | 34 ++++--- .../WLGitBridgeIntegrationTest.java | 21 +++++ .../canMigrateRepository/state/state.json | 83 ++++++++++++++++++ .../state/testproj/foo/bar/test.tex | 1 + .../state/testproj/main.tex | 1 + .../min_mean_wait_evm_7_eps_150dpi.png | Bin 0 -> 10402 bytes 7 files changed, 138 insertions(+), 10 deletions(-) create mode 100644 services/git-bridge/src/test/resources/uk/ac/ic/wlgitbridge/WLGitBridgeIntegrationTest/canMigrateRepository/state/state.json create mode 100644 services/git-bridge/src/test/resources/uk/ac/ic/wlgitbridge/WLGitBridgeIntegrationTest/canMigrateRepository/state/testproj/foo/bar/test.tex create mode 100644 services/git-bridge/src/test/resources/uk/ac/ic/wlgitbridge/WLGitBridgeIntegrationTest/canMigrateRepository/state/testproj/main.tex create mode 100644 services/git-bridge/src/test/resources/uk/ac/ic/wlgitbridge/WLGitBridgeIntegrationTest/canMigrateRepository/state/testproj/min_mean_wait_evm_7_eps_150dpi.png diff --git a/services/git-bridge/pom.xml b/services/git-bridge/pom.xml index 5f8c991216..351cc054e0 100644 --- a/services/git-bridge/pom.xml +++ b/services/git-bridge/pom.xml @@ -22,6 +22,14 @@ 1.8 + + + + org.apache.maven.plugins + maven-surefire-plugin + + false + diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/servermock/state/SnapshotAPIStateBuilder.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/servermock/state/SnapshotAPIStateBuilder.java index 2204592ca7..cdc305f2c6 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/servermock/state/SnapshotAPIStateBuilder.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/servermock/state/SnapshotAPIStateBuilder.java @@ -83,16 +83,30 @@ public class SnapshotAPIStateBuilder { String projectName, JsonObject jsonGetDoc ) { - getDoc.put( - projectName, - new GetDocResult( - jsonGetDoc.get("error"), - jsonGetDoc.get("versionID").getAsInt(), - jsonGetDoc.get("createdAt").getAsString(), - jsonGetDoc.get("email").getAsString(), - jsonGetDoc.get("name").getAsString() - ) - ); + if (jsonGetDoc.has("migratedFromId")) { + getDoc.put( + projectName, + new GetDocResult( + jsonGetDoc.get("error"), + jsonGetDoc.get("versionID").getAsInt(), + jsonGetDoc.get("createdAt").getAsString(), + jsonGetDoc.get("email").getAsString(), + jsonGetDoc.get("name").getAsString(), + jsonGetDoc.get("migratedFromId").getAsString() + ) + ); + } else { + getDoc.put( + projectName, + new GetDocResult( + jsonGetDoc.get("error"), + jsonGetDoc.get("versionID").getAsInt(), + jsonGetDoc.get("createdAt").getAsString(), + jsonGetDoc.get("email").getAsString(), + jsonGetDoc.get("name").getAsString() + ) + ); + } } private void addGetSavedVersForProject( diff --git a/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/application/WLGitBridgeIntegrationTest.java b/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/application/WLGitBridgeIntegrationTest.java index dba7989362..0b45431ed9 100644 --- a/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/application/WLGitBridgeIntegrationTest.java +++ b/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/application/WLGitBridgeIntegrationTest.java @@ -117,6 +117,9 @@ public class WLGitBridgeIntegrationTest { put("pushSubmoduleFailsWithInvalidGitRepo", new HashMap() {{ put("state", new SnapshotAPIStateBuilder(getResourceAsStream("/pushSubmoduleFailsWithInvalidGitRepo/state/state.json")).build()); }}); + put("canMigrateRepository", new HashMap() {{ + put("state", new SnapshotAPIStateBuilder(getResourceAsStream("/canMigrateRepository/state/state.json")).build()); + }}); }}; @Rule @@ -787,6 +790,24 @@ public class WLGitBridgeIntegrationTest { assertNotEquals(0, gitProcess.waitFor()); } + @Test + public void canMigrateRepository() throws IOException, GitAPIException, InterruptedException { + int gitBridgePort = 33881; + int mockServerPort = 3881; + MockSnapshotServer server = new MockSnapshotServer(mockServerPort, getResource("/canMigrateRepository").toFile()); + server.start(); + server.setState(states.get("canMigrateRepository").get("state")); + GitBridgeApp wlgb = new GitBridgeApp(new String[] { + makeConfigFile(gitBridgePort, mockServerPort) + }); + wlgb.run(); + File testprojDir = gitClone("testproj", gitBridgePort, dir); + File testprojDir2 = gitClone("testproj2", gitBridgePort, dir); + wlgb.stop(); + + assertTrue(FileUtil.gitDirectoriesAreEqual(getResource("/canMigrateRepository/state/testproj"), testprojDir2.toPath())); + } + private String makeConfigFile( int port, int apiPort diff --git a/services/git-bridge/src/test/resources/uk/ac/ic/wlgitbridge/WLGitBridgeIntegrationTest/canMigrateRepository/state/state.json b/services/git-bridge/src/test/resources/uk/ac/ic/wlgitbridge/WLGitBridgeIntegrationTest/canMigrateRepository/state/state.json new file mode 100644 index 0000000000..895cd6ea76 --- /dev/null +++ b/services/git-bridge/src/test/resources/uk/ac/ic/wlgitbridge/WLGitBridgeIntegrationTest/canMigrateRepository/state/state.json @@ -0,0 +1,83 @@ +[ + { + "project": "testproj2", + "getDoc": { + "versionID": 1, + "createdAt": "2014-11-30T18:40:58.123Z", + "email": "jdleesmiller+1@gmail.com", + "name": "John+1", + "migratedFromId": "testproj" + }, + "getSavedVers": [], + "getForVers": [ + { + "versionID": 1, + "srcs": [ + { + "content": "content\n", + "path": "main.tex" + }, + { + "content": "This text is from another file.", + "path": "foo/bar/test.tex" + } + ], + "atts": [ + { + "url": "http://127.0.0.1:3857/state/testproj/min_mean_wait_evm_7_eps_150dpi.png", + "path": "min_mean_wait_evm_7_eps_150dpi.png" + } + ] + } + ], + "push": "success", + "postback": { + "type": "success", + "versionID": 2 + } + }, + { + "project": "testproj", + "getDoc": { + "versionID": 1, + "createdAt": "2014-11-30T18:40:58.123Z", + "email": "jdleesmiller+1@gmail.com", + "name": "John+1" + }, + "getSavedVers": [ + { + "versionID": 1, + "comment": "added more info on doc GET and error details", + "email": "jdleesmiller+1@gmail.com", + "name": "John+1", + "createdAt": "2014-11-30T18:47:01.333Z" + } + ], + "getForVers": [ + { + "versionID": 1, + "srcs": [ + { + "content": "content\n", + "path": "main.tex" + }, + { + "content": "This text is from another file.", + "path": "foo/bar/test.tex" + } + ], + "atts": [ + { + "url": "http://127.0.0.1:3857/state/testproj/min_mean_wait_evm_7_eps_150dpi.png", + "path": "min_mean_wait_evm_7_eps_150dpi.png" + } + ] + } + ], + "push": "success", + "postback": { + "type": "success", + "versionID": 2 + } + } +] diff --git a/services/git-bridge/src/test/resources/uk/ac/ic/wlgitbridge/WLGitBridgeIntegrationTest/canMigrateRepository/state/testproj/foo/bar/test.tex b/services/git-bridge/src/test/resources/uk/ac/ic/wlgitbridge/WLGitBridgeIntegrationTest/canMigrateRepository/state/testproj/foo/bar/test.tex new file mode 100644 index 0000000000..046794f19a --- /dev/null +++ b/services/git-bridge/src/test/resources/uk/ac/ic/wlgitbridge/WLGitBridgeIntegrationTest/canMigrateRepository/state/testproj/foo/bar/test.tex @@ -0,0 +1 @@ +This text is from another file. \ No newline at end of file diff --git a/services/git-bridge/src/test/resources/uk/ac/ic/wlgitbridge/WLGitBridgeIntegrationTest/canMigrateRepository/state/testproj/main.tex b/services/git-bridge/src/test/resources/uk/ac/ic/wlgitbridge/WLGitBridgeIntegrationTest/canMigrateRepository/state/testproj/main.tex new file mode 100644 index 0000000000..d95f3ad14d --- /dev/null +++ b/services/git-bridge/src/test/resources/uk/ac/ic/wlgitbridge/WLGitBridgeIntegrationTest/canMigrateRepository/state/testproj/main.tex @@ -0,0 +1 @@ +content diff --git a/services/git-bridge/src/test/resources/uk/ac/ic/wlgitbridge/WLGitBridgeIntegrationTest/canMigrateRepository/state/testproj/min_mean_wait_evm_7_eps_150dpi.png b/services/git-bridge/src/test/resources/uk/ac/ic/wlgitbridge/WLGitBridgeIntegrationTest/canMigrateRepository/state/testproj/min_mean_wait_evm_7_eps_150dpi.png new file mode 100644 index 0000000000000000000000000000000000000000..74e1fcd990e0bcf170aeddc797d74fbfab0c4e08 GIT binary patch literal 10402 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 Date: Thu, 29 Nov 2018 11:39:30 +0000 Subject: [PATCH 09/24] Use FileUtils to handle copying of migrated repository --- .../wlgitbridge/bridge/repo/FSGitRepoStore.java | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/repo/FSGitRepoStore.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/repo/FSGitRepoStore.java index d32bb423fe..9e13e85668 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/repo/FSGitRepoStore.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/repo/FSGitRepoStore.java @@ -89,18 +89,12 @@ public class FSGitRepoStore implements RepoStore { sourcePath, destinationPath ); - new ProcessBuilder( - "rm", "-rf", - destinationPath - ).start(); - Process copyProcess = new ProcessBuilder( - "cp", "-ra", - sourcePath, - destinationPath + "/" - ).start(); try { - copyProcess.waitFor(); - } catch (InterruptedException e) { + File source = new File(sourcePath); + File destination = new File(destinationPath); + FileUtils.deleteDirectory(destination); + FileUtils.copyDirectory(source, destination); + } catch (Exception e) { e.printStackTrace(); throw new IOException("copy failed" + e.getLocalizedMessage()); } From dd2e9b6945a47d0b1838b46e76336143e1b83b42 Mon Sep 17 00:00:00 2001 From: Shane Kilkelly Date: Thu, 29 Nov 2018 11:39:56 +0000 Subject: [PATCH 10/24] More closely match the semantics of `projectExists` --- .../bridge/snapshot/SnapshotApiFacade.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/snapshot/SnapshotApiFacade.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/snapshot/SnapshotApiFacade.java index 07f19640fa..9bbcf09142 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/snapshot/SnapshotApiFacade.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/snapshot/SnapshotApiFacade.java @@ -48,9 +48,14 @@ public class SnapshotApiFacade { Optional oauth2, String projectName ) throws FailedConnectionException, GitUserException { - GetDocResult doc = SnapshotApi - .getResult(api.getDoc(oauth2, projectName)); - return Optional.ofNullable(doc); + try { + GetDocResult doc = SnapshotApi + .getResult(api.getDoc(oauth2, projectName)); + doc.getVersionID(); + return Optional.of(doc); + } catch (InvalidProjectException e) { + return Optional.empty(); + } } public Deque getSnapshots( From 267d3248702f0c79c407818bed91f926776712fd Mon Sep 17 00:00:00 2001 From: Shane Kilkelly Date: Fri, 30 Nov 2018 15:21:48 +0000 Subject: [PATCH 11/24] Alter the classloader workaround, and leave link to SO page describing the problem --- services/git-bridge/pom.xml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/services/git-bridge/pom.xml b/services/git-bridge/pom.xml index 351cc054e0..18cbd74e3a 100644 --- a/services/git-bridge/pom.xml +++ b/services/git-bridge/pom.xml @@ -23,12 +23,13 @@ - + + org.apache.maven.plugins maven-surefire-plugin - false + -Djdk.net.URLClassPath.disableClassPathURLCheck=true From aa267a59da8e52dedbb31c771c16a9a0ba003ad9 Mon Sep 17 00:00:00 2001 From: Shane Kilkelly Date: Fri, 30 Nov 2018 16:13:33 +0000 Subject: [PATCH 12/24] fix whitespace --- services/git-bridge/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/services/git-bridge/pom.xml b/services/git-bridge/pom.xml index 18cbd74e3a..4499489564 100644 --- a/services/git-bridge/pom.xml +++ b/services/git-bridge/pom.xml @@ -23,8 +23,8 @@ - - + + org.apache.maven.plugins maven-surefire-plugin From c553094a60f12923eca89e5946a384482ac25f9d Mon Sep 17 00:00:00 2001 From: Shane Kilkelly Date: Mon, 3 Dec 2018 10:13:10 +0000 Subject: [PATCH 13/24] Add a test for when migrated-from project is not present --- .../WLGitBridgeIntegrationTest.java | 22 ++++++++++ .../state/state.json | 39 ++++++++++++++++++ .../state/testproj2/foo/bar/test.tex | 1 + .../state/testproj2/main.tex | 1 + .../min_mean_wait_evm_7_eps_150dpi.png | Bin 0 -> 10402 bytes 5 files changed, 63 insertions(+) create mode 100644 services/git-bridge/src/test/resources/uk/ac/ic/wlgitbridge/WLGitBridgeIntegrationTest/skipMigrationWhenMigratedFromMissing/state/state.json create mode 100644 services/git-bridge/src/test/resources/uk/ac/ic/wlgitbridge/WLGitBridgeIntegrationTest/skipMigrationWhenMigratedFromMissing/state/testproj2/foo/bar/test.tex create mode 100644 services/git-bridge/src/test/resources/uk/ac/ic/wlgitbridge/WLGitBridgeIntegrationTest/skipMigrationWhenMigratedFromMissing/state/testproj2/main.tex create mode 100644 services/git-bridge/src/test/resources/uk/ac/ic/wlgitbridge/WLGitBridgeIntegrationTest/skipMigrationWhenMigratedFromMissing/state/testproj2/min_mean_wait_evm_7_eps_150dpi.png diff --git a/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/application/WLGitBridgeIntegrationTest.java b/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/application/WLGitBridgeIntegrationTest.java index 0b45431ed9..1c3f7f9950 100644 --- a/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/application/WLGitBridgeIntegrationTest.java +++ b/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/application/WLGitBridgeIntegrationTest.java @@ -120,6 +120,9 @@ public class WLGitBridgeIntegrationTest { put("canMigrateRepository", new HashMap() {{ put("state", new SnapshotAPIStateBuilder(getResourceAsStream("/canMigrateRepository/state/state.json")).build()); }}); + put("skipMigrationWhenMigratedFromMissing", new HashMap() {{ + put("state", new SnapshotAPIStateBuilder(getResourceAsStream("/skipMigrationWhenMigratedFromMissing/state/state.json")).build()); + }}); }}; @Rule @@ -805,9 +808,28 @@ public class WLGitBridgeIntegrationTest { File testprojDir2 = gitClone("testproj2", gitBridgePort, dir); wlgb.stop(); + // Second project content is equal to content of the first assertTrue(FileUtil.gitDirectoriesAreEqual(getResource("/canMigrateRepository/state/testproj"), testprojDir2.toPath())); } + @Test + public void skipMigrationWhenMigratedFromMissing() throws IOException, GitAPIException, InterruptedException { + int gitBridgePort = 33882; + int mockServerPort = 3882; + MockSnapshotServer server = new MockSnapshotServer(mockServerPort, getResource("/skipMigrationWhenMigratedFromMissing").toFile()); + server.start(); + server.setState(states.get("skipMigrationWhenMigratedFromMissing").get("state")); + GitBridgeApp wlgb = new GitBridgeApp(new String[] { + makeConfigFile(gitBridgePort, mockServerPort) + }); + wlgb.run(); + // don't clone the source project first + File testprojDir2 = gitClone("testproj2", gitBridgePort, dir); + wlgb.stop(); + + assertTrue(FileUtil.gitDirectoriesAreEqual(getResource("/skipMigrationWhenMigratedFromMissing/state/testproj2"), testprojDir2.toPath())); + } + private String makeConfigFile( int port, int apiPort diff --git a/services/git-bridge/src/test/resources/uk/ac/ic/wlgitbridge/WLGitBridgeIntegrationTest/skipMigrationWhenMigratedFromMissing/state/state.json b/services/git-bridge/src/test/resources/uk/ac/ic/wlgitbridge/WLGitBridgeIntegrationTest/skipMigrationWhenMigratedFromMissing/state/state.json new file mode 100644 index 0000000000..5e1f5efe80 --- /dev/null +++ b/services/git-bridge/src/test/resources/uk/ac/ic/wlgitbridge/WLGitBridgeIntegrationTest/skipMigrationWhenMigratedFromMissing/state/state.json @@ -0,0 +1,39 @@ +[ + { + "project": "testproj2", + "getDoc": { + "versionID": 1, + "createdAt": "2014-11-30T18:40:58.123Z", + "email": "jdleesmiller+1@gmail.com", + "name": "John+1", + "migratedFromId": "testprojthatdoesnotexist" + }, + "getSavedVers": [], + "getForVers": [ + { + "versionID": 1, + "srcs": [ + { + "content": "two\n", + "path": "main.tex" + }, + { + "content": "This text is from another file.", + "path": "foo/bar/test.tex" + } + ], + "atts": [ + { + "url": "http://127.0.0.1:3857/state/testproj/min_mean_wait_evm_7_eps_150dpi.png", + "path": "min_mean_wait_evm_7_eps_150dpi.png" + } + ] + } + ], + "push": "success", + "postback": { + "type": "success", + "versionID": 2 + } + } +] diff --git a/services/git-bridge/src/test/resources/uk/ac/ic/wlgitbridge/WLGitBridgeIntegrationTest/skipMigrationWhenMigratedFromMissing/state/testproj2/foo/bar/test.tex b/services/git-bridge/src/test/resources/uk/ac/ic/wlgitbridge/WLGitBridgeIntegrationTest/skipMigrationWhenMigratedFromMissing/state/testproj2/foo/bar/test.tex new file mode 100644 index 0000000000..046794f19a --- /dev/null +++ b/services/git-bridge/src/test/resources/uk/ac/ic/wlgitbridge/WLGitBridgeIntegrationTest/skipMigrationWhenMigratedFromMissing/state/testproj2/foo/bar/test.tex @@ -0,0 +1 @@ +This text is from another file. \ No newline at end of file diff --git a/services/git-bridge/src/test/resources/uk/ac/ic/wlgitbridge/WLGitBridgeIntegrationTest/skipMigrationWhenMigratedFromMissing/state/testproj2/main.tex b/services/git-bridge/src/test/resources/uk/ac/ic/wlgitbridge/WLGitBridgeIntegrationTest/skipMigrationWhenMigratedFromMissing/state/testproj2/main.tex new file mode 100644 index 0000000000..f719efd430 --- /dev/null +++ b/services/git-bridge/src/test/resources/uk/ac/ic/wlgitbridge/WLGitBridgeIntegrationTest/skipMigrationWhenMigratedFromMissing/state/testproj2/main.tex @@ -0,0 +1 @@ +two diff --git a/services/git-bridge/src/test/resources/uk/ac/ic/wlgitbridge/WLGitBridgeIntegrationTest/skipMigrationWhenMigratedFromMissing/state/testproj2/min_mean_wait_evm_7_eps_150dpi.png b/services/git-bridge/src/test/resources/uk/ac/ic/wlgitbridge/WLGitBridgeIntegrationTest/skipMigrationWhenMigratedFromMissing/state/testproj2/min_mean_wait_evm_7_eps_150dpi.png new file mode 100644 index 0000000000000000000000000000000000000000..74e1fcd990e0bcf170aeddc797d74fbfab0c4e08 GIT binary patch literal 10402 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 Date: Mon, 3 Dec 2018 11:49:06 +0000 Subject: [PATCH 14/24] When a repo has migrated to v2, print message about updating remote --- .../base/MissingRepositoryException.java | 29 +++++++++++++++---- .../ic/wlgitbridge/snapshot/base/Request.java | 10 ++++++- 2 files changed, 33 insertions(+), 6 deletions(-) diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/base/MissingRepositoryException.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/base/MissingRepositoryException.java index c39f6c2481..0056dfbeef 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/base/MissingRepositoryException.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/base/MissingRepositoryException.java @@ -15,11 +15,30 @@ public class MissingRepositoryException extends SnapshotAPIException { "If this problem persists, please contact us." ); - public static final List EXPORTED_TO_V2 = Arrays.asList( - "This Overleaf project has been moved to Overleaf v2, and git access is temporarily unsupported.", - "", - "See https://www.overleaf.com/help/342 for more information." - ); + static List buildExportedToV2Message(String remoteUrl) { + if (remoteUrl == null) { + return Arrays.asList( + "This Overleaf project has been moved to Overleaf v2, and cannot be used with git at this time.", + "", + "If this error persists, please contact us at support@overleaf.com, or", + "see https://www.overleaf.com/help/342 for more information." + ); + } else { + return Arrays.asList( + "This Overleaf project has been moved to Overleaf v2, You should change your remote to:", + "", + " " + remoteUrl, + "", + "Assuming you are using the default \"origin\" remote, the following commands", + "will change the remote for you:", + "", + " git remote set-url origin " + remoteUrl, + "", + "If this does not work, contact us at support@overleaf.com, or", + "see https://www.overleaf.com/help/342 for more information." + ); + } + } private List descriptionLines; diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/base/Request.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/base/Request.java index 34fabb794e..2f95c46e5d 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/base/Request.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/base/Request.java @@ -79,9 +79,17 @@ public abstract class Request { try { JsonObject json = Instance.gson.fromJson(httpCause.getContent(), JsonObject.class); String message = json.get("message").getAsString(); + String newRemote; + if (json.has("new_remote")) { + newRemote = json.get("new_remote").getAsString(); + } else { + newRemote = null; + } if ("Exported to v2".equals(message)) { - throw new MissingRepositoryException(MissingRepositoryException.EXPORTED_TO_V2); + throw new MissingRepositoryException( + MissingRepositoryException.buildExportedToV2Message(newRemote) + ); } } catch (IllegalStateException | ClassCastException From c0b52c58517121c6240aa37e3815ad675849563b Mon Sep 17 00:00:00 2001 From: Shane Kilkelly Date: Mon, 3 Dec 2018 11:53:34 +0000 Subject: [PATCH 15/24] Add 'please' to message shown to client for migrated project --- .../wlgitbridge/snapshot/base/MissingRepositoryException.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/base/MissingRepositoryException.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/base/MissingRepositoryException.java index 0056dfbeef..420c3b0c01 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/base/MissingRepositoryException.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/base/MissingRepositoryException.java @@ -34,7 +34,7 @@ public class MissingRepositoryException extends SnapshotAPIException { "", " git remote set-url origin " + remoteUrl, "", - "If this does not work, contact us at support@overleaf.com, or", + "If this does not work, please contact us at support@overleaf.com, or", "see https://www.overleaf.com/help/342 for more information." ); } From 8005ebf5d057f3051cc1ac727a9a1102d683e51b Mon Sep 17 00:00:00 2001 From: Shane Kilkelly Date: Tue, 4 Dec 2018 10:14:39 +0000 Subject: [PATCH 16/24] Remove test exception --- .../uk/ac/ic/wlgitbridge/git/handler/WLRepositoryResolver.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/git/handler/WLRepositoryResolver.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/git/handler/WLRepositoryResolver.java index 0405323298..022101fc5b 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/git/handler/WLRepositoryResolver.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/git/handler/WLRepositoryResolver.java @@ -90,7 +90,7 @@ public class WLRepositoryResolver return bridge.getUpdatedRepo(oauth2, projName).getJGitRepository(); } catch (RepositoryNotFoundException e) { Log.info("Repository not found: " + name); - throw new RepositoryNotFoundException("derp"); + throw e; /* } catch (ServiceNotAuthorizedException e) { cannot occur From 007dfe1420682cc17d53fea407d08eb0ffd91122 Mon Sep 17 00:00:00 2001 From: Shane Kilkelly Date: Tue, 4 Dec 2018 10:43:48 +0000 Subject: [PATCH 17/24] Change `new_remote` to `newRemote` --- .../main/java/uk/ac/ic/wlgitbridge/snapshot/base/Request.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/base/Request.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/base/Request.java index 2f95c46e5d..65dc8af0b9 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/base/Request.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/base/Request.java @@ -80,8 +80,8 @@ public abstract class Request { JsonObject json = Instance.gson.fromJson(httpCause.getContent(), JsonObject.class); String message = json.get("message").getAsString(); String newRemote; - if (json.has("new_remote")) { - newRemote = json.get("new_remote").getAsString(); + if (json.has("newRemote")) { + newRemote = json.get("newRemote").getAsString(); } else { newRemote = null; } From 439d55d80559e3f9f511f7ce4dd7dc21d410035b Mon Sep 17 00:00:00 2001 From: Shane Kilkelly Date: Wed, 5 Dec 2018 10:42:58 +0000 Subject: [PATCH 18/24] Update wording of the change-your-remote message shown to user --- .../wlgitbridge/snapshot/base/MissingRepositoryException.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/base/MissingRepositoryException.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/base/MissingRepositoryException.java index 420c3b0c01..35def75dca 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/base/MissingRepositoryException.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/base/MissingRepositoryException.java @@ -25,7 +25,8 @@ public class MissingRepositoryException extends SnapshotAPIException { ); } else { return Arrays.asList( - "This Overleaf project has been moved to Overleaf v2, You should change your remote to:", + "This Overleaf project has been moved to Overleaf v2, and has a new identifier.", + "Please update your remote to:", "", " " + remoteUrl, "", From 925ebc2133a34a492fed9c73752c261d155a4428 Mon Sep 17 00:00:00 2001 From: Shane Kilkelly Date: Wed, 5 Dec 2018 14:58:51 +0000 Subject: [PATCH 19/24] Check project state inside the lock --- .../src/main/java/uk/ac/ic/wlgitbridge/bridge/Bridge.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/Bridge.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/Bridge.java index b505fe3065..3c543f50f5 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/Bridge.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/Bridge.java @@ -360,8 +360,8 @@ public class Bridge { String migratedFromID = doc.getMigratedFromID(); if (migratedFromID != null) { Log.info("[{}] Has a migratedFromId: {}", projectName, migratedFromID); - ProjectState sourceState = dbStore.getProjectState(migratedFromID); try (LockGuard __ = lock.lockGuard(migratedFromID)) { + ProjectState sourceState = dbStore.getProjectState(migratedFromID); switch (sourceState) { case NOT_PRESENT: // Normal init-repo From 709cb0887cc63c7a682a92701e1150c584365ef8 Mon Sep 17 00:00:00 2001 From: Shane Kilkelly Date: Wed, 5 Dec 2018 14:59:41 +0000 Subject: [PATCH 20/24] Remove old constructor without the `migratedFromId` param --- .../ic/wlgitbridge/snapshot/getdoc/GetDocResult.java | 10 ---------- .../snapshot/servermock/state/SnapshotAPIState.java | 3 ++- 2 files changed, 2 insertions(+), 11 deletions(-) diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/getdoc/GetDocResult.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/getdoc/GetDocResult.java index 9ccdc4a6ec..3fafb394f0 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/getdoc/GetDocResult.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/getdoc/GetDocResult.java @@ -52,16 +52,6 @@ public class GetDocResult extends Result { this.migratedFromID = migratedFromID; } - public GetDocResult( - JsonElement error, - int versionID, - String createdAt, - String email, - String name - ) { - this(error, versionID, createdAt, email, name, null); - } - @Override public JsonElement toJson() { JsonObject jsonThis = new JsonObject(); diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/servermock/state/SnapshotAPIState.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/servermock/state/SnapshotAPIState.java index 02f8e19a8b..b3095874f9 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/servermock/state/SnapshotAPIState.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/servermock/state/SnapshotAPIState.java @@ -48,7 +48,8 @@ public class SnapshotAPIState { 243, "2014-11-30T18:40:58Z", "jdleesmiller+1@gmail.com", - "John+1" + "John+1", + null ) ); From 8cb715014c813150c87b1f4d7579f23ebf7fc560 Mon Sep 17 00:00:00 2001 From: Shane Kilkelly Date: Wed, 5 Dec 2018 15:00:00 +0000 Subject: [PATCH 21/24] More concise handling of optional `migratedFromId` in test --- .../state/SnapshotAPIStateBuilder.java | 35 +++++++------------ 1 file changed, 13 insertions(+), 22 deletions(-) diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/servermock/state/SnapshotAPIStateBuilder.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/servermock/state/SnapshotAPIStateBuilder.java index cdc305f2c6..179985f1ea 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/servermock/state/SnapshotAPIStateBuilder.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/servermock/state/SnapshotAPIStateBuilder.java @@ -83,30 +83,21 @@ public class SnapshotAPIStateBuilder { String projectName, JsonObject jsonGetDoc ) { + String migratedFromId = null; if (jsonGetDoc.has("migratedFromId")) { - getDoc.put( - projectName, - new GetDocResult( - jsonGetDoc.get("error"), - jsonGetDoc.get("versionID").getAsInt(), - jsonGetDoc.get("createdAt").getAsString(), - jsonGetDoc.get("email").getAsString(), - jsonGetDoc.get("name").getAsString(), - jsonGetDoc.get("migratedFromId").getAsString() - ) - ); - } else { - getDoc.put( - projectName, - new GetDocResult( - jsonGetDoc.get("error"), - jsonGetDoc.get("versionID").getAsInt(), - jsonGetDoc.get("createdAt").getAsString(), - jsonGetDoc.get("email").getAsString(), - jsonGetDoc.get("name").getAsString() - ) - ); + migratedFromId = jsonGetDoc.get("migratedFromId").getAsString(); } + getDoc.put( + projectName, + new GetDocResult( + jsonGetDoc.get("error"), + jsonGetDoc.get("versionID").getAsInt(), + jsonGetDoc.get("createdAt").getAsString(), + jsonGetDoc.get("email").getAsString(), + jsonGetDoc.get("name").getAsString(), + migratedFromId + ) + ); } private void addGetSavedVersForProject( From 6b8101d278bd2b9c8582cf1232a500bbb50c0ca4 Mon Sep 17 00:00:00 2001 From: Shane Kilkelly Date: Wed, 5 Dec 2018 16:54:58 +0000 Subject: [PATCH 22/24] Init the new repo from existing repository, avoid creating files then deleting --- .../uk/ac/ic/wlgitbridge/bridge/repo/FSGitRepoStore.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/repo/FSGitRepoStore.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/repo/FSGitRepoStore.java index 9e13e85668..5b64e7c689 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/repo/FSGitRepoStore.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/repo/FSGitRepoStore.java @@ -79,8 +79,6 @@ public class FSGitRepoStore implements RepoStore { public ProjectRepo initRepoFromExisting( String project, String fromProject ) throws IOException { - GitProjectRepo ret = GitProjectRepo.fromName(project); - ret.initRepo(this); String repoRoot = getRepoStorePath(); String sourcePath = repoRoot + "/" + fromProject; String destinationPath = repoRoot + "/" + project; @@ -92,12 +90,13 @@ public class FSGitRepoStore implements RepoStore { try { File source = new File(sourcePath); File destination = new File(destinationPath); - FileUtils.deleteDirectory(destination); FileUtils.copyDirectory(source, destination); } catch (Exception e) { e.printStackTrace(); throw new IOException("copy failed" + e.getLocalizedMessage()); } + GitProjectRepo ret = GitProjectRepo.fromName(project); + ret.useExistingRepository(this); return new WalkOverrideGitRepo( ret, Optional.of(maxFileSize), Optional.empty()); } From 67d365e6616000a219f36fed6ba5f529f99d4307 Mon Sep 17 00:00:00 2001 From: Shane Kilkelly Date: Thu, 6 Dec 2018 09:40:09 +0000 Subject: [PATCH 23/24] Remove commas because grammer --- .../wlgitbridge/snapshot/base/MissingRepositoryException.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/base/MissingRepositoryException.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/base/MissingRepositoryException.java index 35def75dca..9578c18f27 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/base/MissingRepositoryException.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/base/MissingRepositoryException.java @@ -18,14 +18,14 @@ public class MissingRepositoryException extends SnapshotAPIException { static List buildExportedToV2Message(String remoteUrl) { if (remoteUrl == null) { return Arrays.asList( - "This Overleaf project has been moved to Overleaf v2, and cannot be used with git at this time.", + "This Overleaf project has been moved to Overleaf v2 and cannot be used with git at this time.", "", "If this error persists, please contact us at support@overleaf.com, or", "see https://www.overleaf.com/help/342 for more information." ); } else { return Arrays.asList( - "This Overleaf project has been moved to Overleaf v2, and has a new identifier.", + "This Overleaf project has been moved to Overleaf v2 and has a new identifier.", "Please update your remote to:", "", " " + remoteUrl, From d22d5829bb4e00d2858da373e9a66393600ea38c Mon Sep 17 00:00:00 2001 From: Shane Kilkelly Date: Thu, 6 Dec 2018 09:45:07 +0000 Subject: [PATCH 24/24] Remove redundant try/catch around directory copy operation --- .../ac/ic/wlgitbridge/bridge/repo/FSGitRepoStore.java | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/repo/FSGitRepoStore.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/repo/FSGitRepoStore.java index 5b64e7c689..47a7eede67 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/repo/FSGitRepoStore.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/repo/FSGitRepoStore.java @@ -87,14 +87,9 @@ public class FSGitRepoStore implements RepoStore { sourcePath, destinationPath ); - try { - File source = new File(sourcePath); - File destination = new File(destinationPath); - FileUtils.copyDirectory(source, destination); - } catch (Exception e) { - e.printStackTrace(); - throw new IOException("copy failed" + e.getLocalizedMessage()); - } + File source = new File(sourcePath); + File destination = new File(destinationPath); + FileUtils.copyDirectory(source, destination); GitProjectRepo ret = GitProjectRepo.fromName(project); ret.useExistingRepository(this); return new WalkOverrideGitRepo(