summaryrefslogtreecommitdiff
path: root/src/repo.h
blob: b5b183c7e937d93308f41f35f41e5b7fb757663c (plain)
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 <Ice/Properties.h>
#include <volume.h>
#include "git.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::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