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  QString prefix;
24  };
25  struct Info {
26  QString git_command;
27  QString ssh_command;// = "C:/Program Files/Git/usr/bin/ssh.exe";
28  QString ssh_key_override;// = "C:/a/id_rsa";
29  };
30  struct Info2 {
32  QString submodule_path;
34  };
35 
36  struct GitCache;
37 private:
38  struct Private;
40 protected:
41  void insertIntoCommandCache(QString const &key, std::vector<char> const &value);
42  std::vector<char> *findFromCommandCache(QString const &key);
43  virtual std::shared_ptr<AbstractGitSession> dup() = 0;
44 public:
46  virtual ~AbstractGitSession();
48 
49  void clearCommandCache();
50 
51  Info &gitinfo();
52  Info const &gitinfo() const;
53  Info2 &gitinfo2();
54  Info2 const &gitinfo2() const;
55 
56  GitCache &cache();
57  QString workingDir() const;
58  virtual std::optional<GitResult> exec_git(QString const &arg, Option const &opt) = 0;
59  virtual bool remove(QString const &path) = 0;
60 
61  virtual bool is_connected() const = 0;
62  virtual bool isValidWorkingCopy(QString 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 
69 #endif // ABSTRACTGITSESSION_H
Definition: AbstractGitSession.h:14
virtual bool is_connected() const =0
Info & gitinfo()
Definition: AbstractGitSession.cpp:46
virtual std::optional< std::vector< char > > readfile(char const *path)
Definition: AbstractGitSession.h:65
GitCache & cache()
Definition: AbstractGitSession.cpp:66
std::vector< char > * findFromCommandCache(QString const &key)
Definition: AbstractGitSession.cpp:20
void clearCommandCache()
Definition: AbstractGitSession.cpp:41
virtual bool isValidWorkingCopy(QString const &dir) const =0
virtual std::optional< std::vector< GitFileItem > > ls(char const *path)
Definition: AbstractGitSession.h:64
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:15
Private * m
Definition: AbstractGitSession.h:38
Info2 & gitinfo2()
Definition: AbstractGitSession.cpp:56
virtual std::shared_ptr< AbstractGitSession > dup()=0
QString workingDir() const
Definition: AbstractGitSession.cpp:71
AbstractGitSession()
Definition: AbstractGitSession.cpp:25
virtual bool remove(QString const &path)=0
virtual ~AbstractGitSession()
Definition: AbstractGitSession.cpp:31
Definition: AbstractProcess.h:11
Definition: GitCommandCache.h:9
Definition: GitObjectManager.h:37
Definition: GitRunner.h:11
Definition: AbstractGitSession.cpp:5
Definition: AbstractGitSession.h:30
GitObjectCache object_cache
Definition: AbstractGitSession.h:33
QString working_repo_dir
Definition: AbstractGitSession.h:31
QString submodule_path
Definition: AbstractGitSession.h:32
Definition: AbstractGitSession.h:25
QString git_command
Definition: AbstractGitSession.h:26
QString ssh_key_override
Definition: AbstractGitSession.h:28
QString ssh_command
Definition: AbstractGitSession.h:27
Definition: AbstractGitSession.h:17
AbstractPtyProcess * pty
Definition: AbstractGitSession.h:22
bool log
Definition: AbstractGitSession.h:20
QString prefix
Definition: AbstractGitSession.h:23
bool errout
Definition: AbstractGitSession.h:21
bool chdir
Definition: AbstractGitSession.h:19
bool use_cache
Definition: AbstractGitSession.h:18
Definition: AbstractGitSession.cpp:9