Guitar
AbstractGitSession.h
Go to the documentation of this file.
1 
2 #ifndef ABSTRACTGITSESSION_H
3 #define ABSTRACTGITSESSION_H
4 
5 #include "GitTypes.h"
6 #include <memory>
7 #include <optional>
8 #include <string>
9 #include <vector>
10 
11 class GitResult;
12 class GitCommandCache;
13 class AbstractPtyProcess;
14 class GitObjectCache;
15 
17  friend class GitRunner;
18 public:
19  struct Option {
20  bool use_cache = false;
21  bool chdir = true;
22  bool log = true;
23  bool errout = false;
24  AbstractPtyProcess *pty = nullptr;
25  };
26  struct Info {
27  std::string git_command;
28  std::string ssh_command;// = "C:/Program Files/Git/usr/bin/ssh.exe";
29  std::string ssh_key_override;// = "C:/a/id_rsa";
30  std::string working_repo_dir;
31  std::string submodule_path;
32  };
33 
34  struct GitCache;
35 private:
36  struct Private;
38 protected:
39  void insertIntoCommandCache(const std::string &key, std::vector<char> const &value);
40  std::vector<char> *findFromCommandCache(std::string const &key);
41  virtual std::shared_ptr<AbstractGitSession> dup() = 0;
42 public:
44  virtual ~AbstractGitSession();
46 
48  void clearCommandCache();
49  void clearObjectCache();
50 
51  Info &gitinfo();
52  Info const &gitinfo() const;
53  // Info2 &gitinfo2();
54  // Info2 const &gitinfo2() const;
55 
56  // GitCache &cache();
57  std::string workingDir() const;
58  virtual std::optional<GitResult> exec_git(std::string const &arg, Option const &opt) = 0;
59  virtual bool remove(std::string const &path) = 0;
60 
61  virtual bool is_connected() const = 0;
62  virtual bool isValidWorkingCopy(std::string const &dir) const = 0;
63 
64  virtual std::optional<std::vector<GitFileItem>> ls(char const *path) { return std::nullopt; }
65  virtual std::optional<std::vector<char>> readfile(char const *path) { return std::nullopt; }
66 };
67 
68 #endif // ABSTRACTGITSESSION_H
Definition: AbstractGitSession.h:16
virtual bool is_connected() const =0
Info & gitinfo()
Definition: AbstractGitSession.cpp:63
virtual std::optional< std::vector< char > > readfile(char const *path)
Definition: AbstractGitSession.h:65
void clearCommandCache()
Definition: AbstractGitSession.cpp:48
virtual std::optional< std::vector< GitFileItem > > ls(char const *path)
Definition: AbstractGitSession.h:64
void clearObjectCache()
Definition: AbstractGitSession.cpp:53
virtual bool isValidWorkingCopy(std::string const &dir) const =0
GitObjectCache * getObjectCache()
Definition: AbstractGitSession.cpp:58
void insertIntoCommandCache(const std::string &key, std::vector< char > const &value)
Definition: AbstractGitSession.cpp:22
virtual std::optional< GitResult > exec_git(std::string const &arg, Option const &opt)=0
Private * m
Definition: AbstractGitSession.h:36
virtual bool remove(std::string const &path)=0
std::vector< char > * findFromCommandCache(std::string const &key)
Definition: AbstractGitSession.cpp:27
virtual std::shared_ptr< AbstractGitSession > dup()=0
AbstractGitSession()
Definition: AbstractGitSession.cpp:32
std::string workingDir() const
Definition: AbstractGitSession.cpp:73
virtual ~AbstractGitSession()
Definition: AbstractGitSession.cpp:38
Definition: AbstractProcess.h:71
Definition: GitCommandCache.h:9
Definition: GitObjectManager.h:42
Definition: GitResult.h:8
Definition: GitRunner.h:21
Definition: AbstractGitSession.cpp:7
Definition: AbstractGitSession.h:26
std::string ssh_command
Definition: AbstractGitSession.h:28
std::string submodule_path
Definition: AbstractGitSession.h:31
std::string working_repo_dir
Definition: AbstractGitSession.h:30
std::string ssh_key_override
Definition: AbstractGitSession.h:29
std::string git_command
Definition: AbstractGitSession.h:27
Definition: AbstractGitSession.h:19
AbstractPtyProcess * pty
Definition: AbstractGitSession.h:24
bool log
Definition: AbstractGitSession.h:22
bool errout
Definition: AbstractGitSession.h:23
bool chdir
Definition: AbstractGitSession.h:21
bool use_cache
Definition: AbstractGitSession.h:20
Definition: AbstractGitSession.cpp:17