package com.beijunyi.parallelgit.utils; import java.io.IOException; import java.io.InputStream; import java.nio.file.NoSuchFileException; import javax.annotation.Nonnull; import com.beijunyi.parallelgit.utils.io.BlobSnapshot; import org.eclipse.jgit.lib.*; import org.eclipse.jgit.revwalk.RevTree; public final class GitFileUtils { public static boolean exists(String file, AnyObjectId commit, ObjectReader reader) throws IOException { return TreeUtils.exists(file, getRootTree(commit, reader), reader); } public static boolean exists(String file, AnyObjectId commit, Repository repo) throws IOException { try(ObjectReader reader = repo.newObjectReader()) { return exists(file, commit, reader); } } public static boolean exists(String file, String commit, Repository repo) throws IOException { return exists(file, repo.resolve(commit), repo); } public static boolean isDirectory(String file, AnyObjectId commit, ObjectReader reader) throws IOException { return TreeUtils.isDirectory(file, getRootTree(commit, reader), reader); } public static boolean isDirectory(String file, AnyObjectId commit, Repository repo) throws IOException { try(ObjectReader reader = repo.newObjectReader()) { return isDirectory(file, commit, reader); } } public static boolean isDirectory(String file, String commit, Repository repo) throws IOException { return isDirectory(file, repo.resolve(commit), repo); } public static boolean isFile(String file, AnyObjectId commit, ObjectReader reader) throws IOException { ObjectId root = getRootTree(commit, reader); return TreeUtils.isFile(file, root, reader); } public static boolean isFile(String file, AnyObjectId commit, Repository repo) throws IOException { try(ObjectReader reader = repo.newObjectReader()) { return isFile(file, commit, reader); } } public static boolean isFile(String file, String commit, Repository repo) throws IOException { return isFile(file, repo.resolve(commit), repo); } public static boolean isSymbolicLink(String file, AnyObjectId commit, ObjectReader reader) throws IOException { return TreeUtils.isSymbolicLink(file, getRootTree(commit, reader), reader); } public static boolean isSymbolicLink(String file, AnyObjectId commit, Repository repo) throws IOException { try(ObjectReader reader = repo.newObjectReader()) { return isSymbolicLink(file, commit, reader); } } public static boolean isSymbolicLink(String file, String commit, Repository repo) throws IOException { return isSymbolicLink(file, repo.resolve(commit), repo); } @Nonnull public static InputStream openFile(String file, AnyObjectId commit, ObjectReader reader) throws IOException { AnyObjectId blobId = TreeUtils.getObjectId(file, getRootTree(commit, reader), reader); if(blobId == null) throw new NoSuchFileException(file); return BlobUtils.openBlob(blobId, reader); } @Nonnull public static InputStream openFile(String file, AnyObjectId commit, Repository repo) throws IOException { try(ObjectReader reader = repo.newObjectReader()) { return openFile(file, commit, reader); } } @Nonnull public static InputStream openFile(String file, String commit, Repository repo) throws IOException { return openFile(file, repo.resolve(commit), repo); } @Nonnull public static BlobSnapshot readFile(String file, AnyObjectId commit, ObjectReader reader) throws IOException { ObjectId blobId = TreeUtils.getObjectId(file, getRootTree(commit, reader), reader); if(blobId == null) throw new NoSuchFileException(file); return BlobUtils.readBlob(blobId, reader); } @Nonnull public static BlobSnapshot readFile(String file, AnyObjectId commit, Repository repo) throws IOException { try(ObjectReader reader = repo.newObjectReader()) { return readFile(file, commit, reader); } } @Nonnull public static BlobSnapshot readFile(String file, String revision, Repository repo) throws IOException { return readFile(file, repo.resolve(revision), repo); } @Nonnull private static RevTree getRootTree(AnyObjectId commit, ObjectReader reader) throws IOException { return CommitUtils.getCommit(commit, reader).getTree(); } }