#ifndef GITFS_GIT_H #define GITFS_GIT_H #include #include #include #include #include namespace GitFS::Git { template [[noreturn]] void throwError(int err); template void gitSafe(int (*func)(P...), A... p) { if (int _giterror = func(p...)) { throwError(_giterror); } } template using TPtr = std::shared_ptr; template auto gitSafeGet(int (*get)(R **, P...), void (*release)(R *), A... p) { R * r = nullptr; gitSafe(get, &r, p...); return TPtr(r, release); } git_oid OidParse(const std::string_view & str); using RepositoryPtr = TPtr; RepositoryPtr RepositoryOpenBare(const std::string & path); using BlobPtr = TPtr; BlobPtr BlobLookup(const RepositoryPtr & repo, const git_oid & blob); using CommitPtr = TPtr; CommitPtr CommitLookup(const RepositoryPtr & repo, const git_oid & commitId); using TreePtr = TPtr; TreePtr TreeLookup(const RepositoryPtr & repo, const git_oid & treeId); using TreeEntryPtr = TPtr; TreeEntryPtr TreeEntryByPath(const TreePtr & tree, const std::string & path); using RefPtr = TPtr; RefPtr Commitish(const RepositoryPtr & repo, const std::string & name); RefPtr Resolve(const RefPtr &); } namespace NetFS { struct Attr; Attr & operator<<(Attr &, const git_tree_entry &); Attr & operator<<(Attr &, const git_commit &); Attr & operator<<(Attr &, const git_blob &); } namespace std { std::ostream & operator<<(std::ostream &, const git_oid &); } #endif