1
0
Fork 0
mirror of https://github.com/overleaf/overleaf.git synced 2025-04-14 17:43:31 +00:00

Merge pull request from overleaf/sk-reset-on-pull

Reset repository state before pull
This commit is contained in:
Shane Kilkelly 2020-10-07 09:43:17 +01:00 committed by GitHub
commit aae73d5c99
10 changed files with 153 additions and 0 deletions
services/git-bridge/src
main/java/uk/ac/ic/wlgitbridge/bridge/repo
test
java/uk/ac/ic/wlgitbridge/application
resources/uk/ac/ic/wlgitbridge/WLGitBridgeIntegrationTest/canPullIgnoredForceAddedFile
base
withUpdatedMainFile

View file

@ -240,6 +240,7 @@ public class GitProjectRepo implements ProjectRepo {
) throws IOException, GitAPIException {
Preconditions.checkState(repository.isPresent());
Repository repo = getJGitRepository();
resetHard();
String name = getProjectName();
Log.info("[{}] Writing commit", name);
contents.write();

View file

@ -1,6 +1,7 @@
package uk.ac.ic.wlgitbridge.bridge.repo;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.treewalk.AbstractTreeIterator;
import org.eclipse.jgit.treewalk.FileTreeIterator;
import org.eclipse.jgit.treewalk.WorkingTreeIterator;
import org.eclipse.jgit.treewalk.WorkingTreeOptions;
@ -64,6 +65,8 @@ public class NoGitignoreIterator extends FileTreeIterator {
super(p, root, fs, fileModeStrategy);
}
// Note: the `list` is a list of top-level entities in this directory,
// not a full list of files in the tree.
@Override
protected void init(Entry[] list) {
super.init(list);
@ -74,4 +77,11 @@ public class NoGitignoreIterator extends FileTreeIterator {
}
}
// When entering a sub-directory, create a new instance of this class,
// so we can also ignore gitignore specifications in sub-directories
@Override
protected AbstractTreeIterator enterSubtree() {
String fullPath = getDirectory().getAbsolutePath() + "/" + current().getName();
return new NoGitignoreIterator(this, new File(fullPath), fs, fileModeStrategy);
}
}

View file

@ -147,6 +147,10 @@ public class WLGitBridgeIntegrationTest {
put("cannotCloneAHasDotGitProject", new HashMap<String, SnapshotAPIState>() {{
put("state", new SnapshotAPIStateBuilder(getResourceAsStream("/cannotCloneAHasDotGitProject/state/state.json")).build());
}});
put("canPullIgnoredForceAddedFile", new HashMap<String, SnapshotAPIState>() {{
put("base", new SnapshotAPIStateBuilder(getResourceAsStream("/canPullIgnoredForceAddedFile/base/state.json")).build());
put("withUpdatedMainFile", new SnapshotAPIStateBuilder(getResourceAsStream("/canPullIgnoredForceAddedFile/withUpdatedMainFile/state.json")).build());
}});
}};
@Rule
@ -995,6 +999,52 @@ public class WLGitBridgeIntegrationTest {
assertTrue(responseString.contains("Git LFS is not supported on Overleaf"));
}
@Test
public void canPullIgnoredForceAddedFile() throws IOException, InterruptedException {
int gitBridgePort = 33891;
int mockServerPort = 3891;
server = new MockSnapshotServer(mockServerPort, getResource("/canPullIgnoredForceAddedFile").toFile());
server.start();
server.setState(states.get("canPullIgnoredForceAddedFile").get("base"));
wlgb = new GitBridgeApp(new String[] {
makeConfigFile(gitBridgePort, mockServerPort)
});
wlgb.run();
File testProjDir = gitClone("testproj", gitBridgePort, dir);
File one = new File(testProjDir, "sub/one.txt");
one.createNewFile();
FileWriter fw = new FileWriter(one.getPath());
fw.write("1");
fw.close();
assertEquals(0, runtime.exec(
"git add -A -f", null, testProjDir
).waitFor());
gitCommit(testProjDir, "push");
gitPush(testProjDir);
server.setState(states.get("canPullIgnoredForceAddedFile").get("withUpdatedMainFile"));
gitPull(testProjDir);
File f = new File(testProjDir.getPath() + "/sub/one.txt");
assertTrue(f.exists());
}
@Test
public void canPullIgnoredFileFromOverleaf() throws IOException, InterruptedException {
int gitBridgePort = 33892;
int mockServerPort = 3892;
server = new MockSnapshotServer(mockServerPort, getResource("/canPullIgnoredForceAddedFile").toFile());
server.start();
server.setState(states.get("canPullIgnoredForceAddedFile").get("base"));
wlgb = new GitBridgeApp(new String[] {
makeConfigFile(gitBridgePort, mockServerPort)
});
wlgb.run();
File testProjDir = gitClone("testproj", gitBridgePort, dir);
server.setState(states.get("canPullIgnoredForceAddedFile").get("withUpdatedMainFile"));
gitPull(testProjDir);
File f = new File(testProjDir.getPath() + "/sub/one.txt");
assertTrue(f.exists());
}
private String makeConfigFile(
int port,
int apiPort

View file

@ -0,0 +1,41 @@
[
{
"project": "testproj",
"getDoc": {
"versionID": 1,
"createdAt": "2014-11-30T18:40:58.123Z",
"email": "jdleesmiller+1@gmail.com",
"name": "John+1"
},
"getSavedVers": [
{
"versionID": 1,
"comment": "init",
"email": "jdleesmiller+1@gmail.com",
"name": "John+1",
"createdAt": "2014-11-30T18:47:01.456Z"
}
],
"getForVers": [
{
"versionID": 1,
"srcs": [
{
"content": "content\n",
"path": "main.tex"
},
{
"content": "*.txt",
"path": "sub/.gitignore"
}
],
"atts": []
}
],
"push": "success",
"postback": {
"type": "success",
"versionID": 2
}
}
]

View file

@ -0,0 +1,45 @@
[
{
"project": "testproj",
"getDoc": {
"versionID": 5,
"createdAt": "2014-11-30T18:40:58.123Z",
"email": "jdleesmiller+1@gmail.com",
"name": "John+1"
},
"getSavedVers": [
{
"versionID": 5,
"comment": "init",
"email": "jdleesmiller+1@gmail.com",
"name": "John+1",
"createdAt": "2014-11-30T18:47:01.456Z"
}
],
"getForVers": [
{
"versionID": 5,
"srcs": [
{
"content": "content\nupdated\n",
"path": "main.tex"
},
{
"content": "*.txt",
"path": "sub/.gitignore"
},
{
"content": "1",
"path": "sub/one.txt"
}
],
"atts": []
}
],
"push": "success",
"postback": {
"type": "success",
"versionID": 5
}
}
]