#ifndef GITFS_REPO_H #define GITFS_REPO_H #include "git.h" #include #include #include #include #include #include #include #include #include #include namespace Ice { struct Current; } namespace GitFS { using namespace NetFS; using PropertyReader = std::function; class Repo : public Volume { public: Repo(const PropertyReader &); void disconnect(const ::Ice::Current & current) override; DirectoryPrxPtr opendir(ReqEnv env, ::std::string path, const ::Ice::Current & current) override; VFS statfs(ReqEnv env, ::std::string path, const ::Ice::Current & current) override; int access(ReqEnv env, ::std::string path, int mode, const ::Ice::Current & current) override; Attr getattr(ReqEnv env, ::std::string path, const ::Ice::Current & current) override; ::std::string readlink(ReqEnv env, ::std::string path, const ::Ice::Current & current) override; FilePrxPtr open(ReqEnv env, ::std::string path, int flags, const ::Ice::Current & current) override; FilePrxPtr create(ReqEnv env, ::std::string path, int flags, int mode, const ::Ice::Current & current) override; void truncate(ReqEnv env, ::std::string path, long long int size, const ::Ice::Current & current) override; void unlink(ReqEnv env, ::std::string path, const ::Ice::Current & current) override; void mkdir(ReqEnv env, ::std::string path, int mode, const ::Ice::Current & current) override; void rmdir(ReqEnv env, ::std::string path, const ::Ice::Current & current) override; void mknod(ReqEnv env, ::std::string path, int mode, int dev, const ::Ice::Current & current) override; void symlink(ReqEnv env, ::std::string path1, ::std::string path2, const ::Ice::Current & current) override; void link(ReqEnv env, ::std::string path1, ::std::string path2, const ::Ice::Current & current) override; void rename(ReqEnv env, ::std::string from, ::std::string to, const Ice::optional, const ::Ice::Current & current) override; void chmod(ReqEnv env, ::std::string path, int mode, const ::Ice::Current & current) override; void chown(ReqEnv env, ::std::string path, int uid, int gid, const ::Ice::Current & current) override; void utimens(ReqEnv env, ::std::string path, long long int atime, long long int atimens, long long int mtime, long long int mtimens, const ::Ice::Current & current) override; private: void update(); friend class Directory; friend class Blob; const Git::RepositoryPtr repo; const std::string commitish; Git::RefPtr ref; bool isBranch; std::time_t resolvedAt; Git::CommitPtr commit; Git::TreePtr tree; const std::string gid, uid; }; } #endif