1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
#ifndef GITFS_REPO_H
#define GITFS_REPO_H
#include "git.h"
#include <Ice/Properties.h>
#include <volume.h>
namespace GitFS {
using namespace NetFS;
using PropertyReader = std::function<std::string(const std::string_view &)>;
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<Ice::Int>,
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
|