package com.beijunyi.parallelgit.filesystem; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import javax.annotation.Nonnull; import com.beijunyi.parallelgit.AbstractParallelGitTest; import org.junit.After; import static java.nio.file.Files.readAllBytes; import static org.eclipse.jgit.lib.Constants.*; import static org.eclipse.jgit.util.RawParseUtils.decode; public abstract class AbstractGitFileSystemTest extends AbstractParallelGitTest { protected final GitFileSystemProvider provider = GitFileSystemProvider.getDefault(); protected GitFileSystem gfs; protected GfsStatusProvider status; protected GfsObjectService objService; protected GitPath root; @After public void closeFileSystem() throws IOException { if(gfs != null) { gfs.close(); gfs = null; } } protected void writeToGfs(String path, byte[] data) throws IOException { GitPath file = gfs.getPath(path); GitPath parent = file.getParent(); if(parent != null) Files.createDirectories(file.getParent()); Files.write(file, data); } protected void writeToGfs(String path, String content) throws IOException { writeToGfs(path, encode(content)); } protected void writeToGfs(String path) throws IOException { writeToGfs(path, path + "'s unique content"); } protected void writeSomethingToGfs() throws IOException { writeToGfs("some_file.txt"); } protected void initGitFileSystemForBranch(String branch) throws IOException { assert repo != null; if(gfs == null) injectGitFileSystem(Gfs.newFileSystem(branch, repo)); } protected void initGitFileSystem(String... files) throws IOException { if(repo == null) initRepository(); if(files.length != 0) { writeMultipleToCache(files); commitToMaster(); } initGitFileSystemForBranch(MASTER); } protected void injectGitFileSystem(GitFileSystem gfs) { this.gfs = gfs; root = gfs.getRootPath(); status = gfs.getStatusProvider(); objService = gfs.getObjectService(); } @Nonnull protected static String readAsString(Path path) throws IOException { return decode(readAllBytes(path)); } }