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