Guitar
AbstractGitSession.h
Go to the documentation of this file.
1 #ifndef ABSTRACTGITSESSION_H
2 #define ABSTRACTGITSESSION_H
3 
4 #include <map>
5 #include <vector>
6 #include <memory>
7 #include <optional>
8 #include <QString>
9 #include "MyProcess.h"
10 #include "GitTypes.h"
11 
12 class GitCommandCache;
13 class AbstractPtyProcess;
14 
15 class GitResult {
16 private:
18 public:
19  void set_exit_code(int code)
20  {
21  status_.exit_code = code;
22  }
23  void set_output(std::vector<char> const &out)
24  {
25  status_.output = out;
26  }
27  void set_error_message(std::string const &msg)
28  {
29  status_.error_message = msg;
30  }
31 
32  bool ok() const
33  {
34  return status_.ok;
35  }
36  int exit_code()
37  {
38  return status_.exit_code;
39  }
40  std::vector<char> const &output() const
41  {
42  return status_.output;
43  }
44  std::string error_message() const
45  {
46  return status_.error_message;
47  }
48  std::string log_message() const
49  {
50  return status_.log_message;
51  }
52 };
53 
55 public:
56  struct Option {
57  bool use_cache = false;
58  bool chdir = true;
59  bool log = true;
60  bool errout = false;
61  AbstractPtyProcess *pty = nullptr;
62  QString prefix;
63  };
64  struct Info {
65  QString git_command;
67  QString submodule_path;
68  QString ssh_command;// = "C:/Program Files/Git/usr/bin/ssh.exe";
69  QString ssh_key_override;// = "C:/a/id_rsa";
70  };
71 
72  struct GitCache;
73 private:
74  struct Private;
76 protected:
77  void insertIntoCommandCache(QString const &key, std::vector<char> const &value);
78  std::vector<char> *findFromCommandCache(QString const &key);
79 public:
81  virtual ~AbstractGitSession();
82 
83  void clearCommandCache();
84 
85  Info &gitinfo();
86  Info const &gitinfo() const;
87 
88  GitCache &cache();
89  QString workingDir() const;
90  virtual std::optional<GitResult> exec_git(QString const &arg, Option const &opt) = 0;
91  virtual bool remove(QString const &path) = 0;
92 
93  virtual bool is_connected() const = 0;
94  virtual bool isValidWorkingCopy(QString const &dir) const = 0;
95 
96  virtual std::optional<std::vector<GitFileItem>> ls(char const *path) { return std::nullopt; }
97  virtual std::optional<std::vector<char>> readfile(char const *path) { return std::nullopt; }
98 
99  void set_command_cache(GitCommandCache const &cc);
100 };
101 
102 
103 #endif // ABSTRACTGITSESSION_H
Definition: AbstractGitSession.h:54
virtual bool is_connected() const =0
Info & gitinfo()
Definition: AbstractGitSession.cpp:45
virtual std::optional< std::vector< char > > readfile(char const *path)
Definition: AbstractGitSession.h:97
GitCache & cache()
Definition: AbstractGitSession.cpp:55
std::vector< char > * findFromCommandCache(QString const &key)
Definition: AbstractGitSession.cpp:21
void clearCommandCache()
Definition: AbstractGitSession.cpp:40
virtual bool isValidWorkingCopy(QString const &dir) const =0
void set_command_cache(GitCommandCache const &cc)
Definition: AbstractGitSession.cpp:69
virtual std::optional< std::vector< GitFileItem > > ls(char const *path)
Definition: AbstractGitSession.h:96
virtual std::optional< GitResult > exec_git(QString const &arg, Option const &opt)=0
void insertIntoCommandCache(QString const &key, std::vector< char > const &value)
Definition: AbstractGitSession.cpp:14
Private * m
Definition: AbstractGitSession.h:74
QString workingDir() const
Definition: AbstractGitSession.cpp:60
AbstractGitSession()
Definition: AbstractGitSession.cpp:29
virtual bool remove(QString const &path)=0
virtual ~AbstractGitSession()
Definition: AbstractGitSession.cpp:35
Definition: AbstractProcess.h:11
Definition: GitCommandCache.h:9
Definition: AbstractGitSession.h:15
int exit_code()
Definition: AbstractGitSession.h:36
std::vector< char > const & output() const
Definition: AbstractGitSession.h:40
void set_error_message(std::string const &msg)
Definition: AbstractGitSession.h:27
void set_exit_code(int code)
Definition: AbstractGitSession.h:19
std::string error_message() const
Definition: AbstractGitSession.h:44
ProcessStatus status_
Definition: AbstractGitSession.h:17
bool ok() const
Definition: AbstractGitSession.h:32
void set_output(std::vector< char > const &out)
Definition: AbstractGitSession.h:23
std::string log_message() const
Definition: AbstractGitSession.h:48
Definition: MyProcess.h:21
bool ok
Definition: MyProcess.h:23
int exit_code
Definition: MyProcess.h:24
std::string error_message
Definition: MyProcess.h:26
std::vector< char > output
Definition: MyProcess.h:25
std::string log_message
Definition: MyProcess.h:27
Definition: AbstractGitSession.cpp:5
Definition: AbstractGitSession.h:64
QString git_command
Definition: AbstractGitSession.h:65
QString submodule_path
Definition: AbstractGitSession.h:67
QString ssh_key_override
Definition: AbstractGitSession.h:69
QString ssh_command
Definition: AbstractGitSession.h:68
QString working_repo_dir
Definition: AbstractGitSession.h:66
Definition: AbstractGitSession.h:56
AbstractPtyProcess * pty
Definition: AbstractGitSession.h:61
bool log
Definition: AbstractGitSession.h:59
QString prefix
Definition: AbstractGitSession.h:62
bool errout
Definition: AbstractGitSession.h:60
bool chdir
Definition: AbstractGitSession.h:58
bool use_cache
Definition: AbstractGitSession.h:57
Definition: AbstractGitSession.cpp:9