mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-21 20:47:08 -05:00
Fixed directory problem in file store and wrote working code for reading new revs.
This commit is contained in:
parent
abc8854f59
commit
6d4309267e
4 changed files with 47 additions and 9 deletions
|
@ -1,10 +1,17 @@
|
||||||
package uk.ac.ic.wlgitbridge.git.handler.hook;
|
package uk.ac.ic.wlgitbridge.git.handler.hook;
|
||||||
|
|
||||||
import org.eclipse.jgit.lib.RefUpdate;
|
import org.eclipse.jgit.lib.RefUpdate;
|
||||||
|
import org.eclipse.jgit.revwalk.RevCommit;
|
||||||
|
import org.eclipse.jgit.revwalk.RevTree;
|
||||||
|
import org.eclipse.jgit.revwalk.RevWalk;
|
||||||
import org.eclipse.jgit.transport.PreReceiveHook;
|
import org.eclipse.jgit.transport.PreReceiveHook;
|
||||||
import org.eclipse.jgit.transport.ReceiveCommand;
|
import org.eclipse.jgit.transport.ReceiveCommand;
|
||||||
import org.eclipse.jgit.transport.ReceivePack;
|
import org.eclipse.jgit.transport.ReceivePack;
|
||||||
|
import org.eclipse.jgit.treewalk.TreeWalk;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -15,11 +22,39 @@ public class CheckNonFastForwardHook implements PreReceiveHook {
|
||||||
@Override
|
@Override
|
||||||
public void onPreReceive(ReceivePack receivePack, Collection<ReceiveCommand> receiveCommands) {
|
public void onPreReceive(ReceivePack receivePack, Collection<ReceiveCommand> receiveCommands) {
|
||||||
for (ReceiveCommand receiveCommand : receiveCommands) {
|
for (ReceiveCommand receiveCommand : receiveCommands) {
|
||||||
|
receiveCommand.setResult(RefUpdate.Result.REJECTED);
|
||||||
|
System.out.println(receiveCommand.getRef());
|
||||||
|
try {
|
||||||
|
|
||||||
|
// a RevWalk allows to walk over commits based on some filtering that is
|
||||||
|
// defined
|
||||||
|
RevWalk walk = new RevWalk(receivePack.getRepository());
|
||||||
|
|
||||||
|
RevCommit commit = walk.parseCommit(receiveCommand.getNewId());
|
||||||
|
RevTree tree = commit.getTree();
|
||||||
|
System.out.println("Having tree: " + tree);
|
||||||
|
|
||||||
|
// now use a TreeWalk to iterate over all files in the Tree recursively
|
||||||
|
// you can set Filters to narrow down the results if needed
|
||||||
|
TreeWalk treeWalk = new TreeWalk(receivePack.getRepository());
|
||||||
|
treeWalk.addTree(tree);
|
||||||
|
treeWalk.setRecursive(true);
|
||||||
|
while (treeWalk.next()) {
|
||||||
|
File file = new File("/Users/Roxy/git/testing/" + treeWalk.getPathString());
|
||||||
|
file.getParentFile().mkdirs();
|
||||||
|
FileOutputStream out = new FileOutputStream(file);
|
||||||
|
receivePack.getRepository().open(treeWalk.getObjectId(0)).copyTo(out);
|
||||||
|
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
if (receiveCommand.getType() == ReceiveCommand.Type.UPDATE_NONFASTFORWARD) {
|
if (receiveCommand.getType() == ReceiveCommand.Type.UPDATE_NONFASTFORWARD) {
|
||||||
receivePack.sendError("You can't do a force push");
|
receivePack.sendError("You can't do a force push");
|
||||||
receiveCommand.setResult(RefUpdate.Result.REJECTED);
|
receiveCommand.setResult(RefUpdate.Result.REJECTED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
System.out.println("Pre receive");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import uk.ac.ic.wlgitbridge.writelatex.api.request.exception.FailedConnectionExc
|
||||||
import uk.ac.ic.wlgitbridge.writelatex.filestore.node.FileNode;
|
import uk.ac.ic.wlgitbridge.writelatex.filestore.node.FileNode;
|
||||||
import uk.ac.ic.wlgitbridge.writelatex.model.Snapshot;
|
import uk.ac.ic.wlgitbridge.writelatex.model.Snapshot;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@ -14,14 +15,14 @@ import java.util.List;
|
||||||
public class GitDirectoryContents implements WritableRepositoryContents {
|
public class GitDirectoryContents implements WritableRepositoryContents {
|
||||||
|
|
||||||
private final List<FileNode> fileNodes;
|
private final List<FileNode> fileNodes;
|
||||||
private final String rootGitDirectoryPath;
|
private final File gitDirectory;
|
||||||
private final String userName;
|
private final String userName;
|
||||||
private final String userEmail;
|
private final String userEmail;
|
||||||
private final String commitMessage;
|
private final String commitMessage;
|
||||||
|
|
||||||
public GitDirectoryContents(List<FileNode> fileNodes, String rootGitDirectoryPath, Snapshot snapshot) {
|
public GitDirectoryContents(List<FileNode> fileNodes, File rootGitDirectory, String projectName, Snapshot snapshot) {
|
||||||
this.fileNodes = fileNodes;
|
this.fileNodes = fileNodes;
|
||||||
this.rootGitDirectoryPath = rootGitDirectoryPath;
|
gitDirectory = new File(rootGitDirectory, projectName);
|
||||||
userName = snapshot.getUserName();
|
userName = snapshot.getUserName();
|
||||||
userEmail = snapshot.getUserEmail();
|
userEmail = snapshot.getUserEmail();
|
||||||
commitMessage = snapshot.getComment();
|
commitMessage = snapshot.getComment();
|
||||||
|
@ -30,7 +31,7 @@ public class GitDirectoryContents implements WritableRepositoryContents {
|
||||||
@Override
|
@Override
|
||||||
public void write() throws IOException, FailedConnectionException {
|
public void write() throws IOException, FailedConnectionException {
|
||||||
for (FileNode fileNode : fileNodes) {
|
for (FileNode fileNode : fileNodes) {
|
||||||
fileNode.writeToDisk(rootGitDirectoryPath);
|
fileNode.writeToDisk(gitDirectory);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -32,8 +32,8 @@ public abstract class FileNode {
|
||||||
return getBlob().getContents();
|
return getBlob().getContents();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeToDisk(String repoDir) throws FailedConnectionException, IOException {
|
public void writeToDisk(File directory) throws FailedConnectionException, IOException {
|
||||||
File file = new File(repoDir, filePath);
|
File file = new File(directory, filePath);
|
||||||
file.getParentFile().mkdirs();
|
file.getParentFile().mkdirs();
|
||||||
file.createNewFile();
|
file.createNewFile();
|
||||||
OutputStream out = new FileOutputStream(file);
|
OutputStream out = new FileOutputStream(file);
|
||||||
|
|
|
@ -8,6 +8,7 @@ import uk.ac.ic.wlgitbridge.writelatex.filestore.node.WLDirectoryNode;
|
||||||
import uk.ac.ic.wlgitbridge.writelatex.model.Snapshot;
|
import uk.ac.ic.wlgitbridge.writelatex.model.Snapshot;
|
||||||
import uk.ac.ic.wlgitbridge.writelatex.model.WLProject;
|
import uk.ac.ic.wlgitbridge.writelatex.model.WLProject;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -16,11 +17,11 @@ import java.util.*;
|
||||||
public class WLFileStore {
|
public class WLFileStore {
|
||||||
|
|
||||||
private final Map<String, WLDirectoryNode> fileStore;
|
private final Map<String, WLDirectoryNode> fileStore;
|
||||||
private final String rootGitDirectoryPath;
|
private final File rootGitDirectory;
|
||||||
|
|
||||||
public WLFileStore(String rootGitDirectoryPath) {
|
public WLFileStore(String rootGitDirectoryPath) {
|
||||||
fileStore = new HashMap<String, WLDirectoryNode>();
|
fileStore = new HashMap<String, WLDirectoryNode>();
|
||||||
this.rootGitDirectoryPath = rootGitDirectoryPath;
|
rootGitDirectory = new File(rootGitDirectoryPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<WritableRepositoryContents> updateForProject(WLProject project) throws FailedConnectionException,
|
public List<WritableRepositoryContents> updateForProject(WLProject project) throws FailedConnectionException,
|
||||||
|
@ -31,7 +32,8 @@ public class WLFileStore {
|
||||||
List<WritableRepositoryContents> writableRepositories = new LinkedList<WritableRepositoryContents>();
|
List<WritableRepositoryContents> writableRepositories = new LinkedList<WritableRepositoryContents>();
|
||||||
for (Snapshot snapshot : snapshots) {
|
for (Snapshot snapshot : snapshots) {
|
||||||
writableRepositories.add(new GitDirectoryContents(directoryNode.updateFromSnapshot(snapshot),
|
writableRepositories.add(new GitDirectoryContents(directoryNode.updateFromSnapshot(snapshot),
|
||||||
rootGitDirectoryPath,
|
rootGitDirectory,
|
||||||
|
projectName,
|
||||||
snapshot));
|
snapshot));
|
||||||
}
|
}
|
||||||
return writableRepositories;
|
return writableRepositories;
|
||||||
|
|
Loading…
Reference in a new issue