Guitar
GitRunner.h
Go to the documentation of this file.
1 #ifndef GITRUNNER_H
2 #define GITRUNNER_H
3 
4 #include <memory>
5 #include <optional>
6 #include "GitTypes.h"
7 
8 #define PATH_PREFIX "*"
9 
10 class Git;
11 class GitObjectCache;
12 
13 class GitRunner {
14 private:
16  {
17  Git *p = git.get();
18  Q_ASSERT(p);
19  return p;
20  }
21  Git const *gitptr() const
22  {
23  return const_cast<Git *>(git.get());
24  }
25 public:
26  std::shared_ptr<Git> git;
27  GitRunner() = default;
28  GitRunner(std::shared_ptr<Git> const &git);
29  GitRunner(GitRunner const &that);
30  GitRunner(GitRunner &&that);
31  void operator = (GitRunner const &that);
32  explicit operator bool () const;
33  GitRunner dup() const;
34 
36  void clearCommandCache();
37  void clearObjectCache();
38 
39  bool isValidWorkingCopy(const std::string &dir) const;
40 
41  bool isValidWorkingCopy() const;
42 
43  void setWorkingRepositoryDir(const std::string &repo, const std::string &sshkey);
44  void setSubmodulePath(const std::string &submodpath);
45  std::string workingDir() const;
46  const std::string &sshKey() const;
47  void setSshKey(const std::string &sshkey);
48 
49  std::string getMessage(const std::string &id);
50  std::string errorMessage(std::optional<GitResult> const &var) const;
51 
52  bool remove(const std::string &path);
53 
54  GitHash rev_parse(const std::string &name, bool use_cache = true);
55  void setRemoteURL(const GitRemote &remote);
56  void addRemoteURL(const GitRemote &remote);
57  void removeRemote(const std::string &name);
58  std::vector<std::string> getRemotes();
59 
60  std::string version();
61 
62  bool init();
63 
64  std::vector<GitTag> tags();
65  bool tag(const std::string &name, GitHash const &id = {});
66  bool delete_tag(const std::string &name, bool remote);
67 
68  void resetFile(const std::string &path);
69  void resetAllFiles();
70 
71  void removeFile(const std::string &path, bool rm_real_file);
72 
73  GitUser getUser(GitSource purpose);
74  void setUser(GitUser const&user, bool global);
75  std::string getDefaultBranch();
76  void setDefaultBranch(const std::string &branchname);
77  void unsetDefaultBranch();
79  std::string status();
80  bool commit(std::string const &text, bool sign, AbstractPtyProcess *pty);
81  bool commit_amend_m(const std::string &text, bool sign, AbstractPtyProcess *pty);
82  bool revert(const GitHash &id);
83  bool push_tags(AbstractPtyProcess *pty = nullptr);
84  void remote_v(std::vector<GitRemote> *out);
85  void createBranch(const std::string &name);
86  void checkoutBranch(const std::string &name);
87  void mergeBranch(const std::string &name, GitMergeFastForward ff, bool squash);
88  bool deleteBranch(const std::string &name);
89 
90  bool checkout(std::string const &branch_name, std::string const &id = {});
91  bool checkout_detach(std::string const &id);
92 
93  void rebaseBranch(const std::string &name);
94  bool rebase_continue();
95  bool rebase_quit();
96  bool rebase_abort();
97 
98  GitCommitItemList log_all(GitHash const &id, int maxcount);
99  GitCommitItemList log_file(const std::string &path, int maxcount);
100  std::vector<GitHash> rev_list_all(GitHash const &id, int maxcount);
101 
102  std::optional<GitCommitItem> log_signature(GitHash const &id);
103  GitCommitItemList log(int maxcount);
104  std::optional<GitCommitItem> queryCommitItem(const GitHash &id);
105 
106  std::string rev_parse_show_toplevel();
107 
108  bool stash();
109  bool stash_apply();
110  bool stash_drop();
111 
112  std::vector<GitSubmoduleItem> submodules();
113  bool submodule_add(const GitCloneData &data, bool force, AbstractPtyProcess *pty);
115  std::string queryEntireCommitMessage(const GitHash &id);
116 
117  std::vector<GitDiffRaw> diff_raw(GitHash const &old_id, GitHash const &new_id);
118  std::string diff(const std::string &old_id, const std::string &new_id, const GitDiffOption &opt);
119  std::string diff_file(const std::string &old_path, const std::string &new_path, const GitDiffOption &opt);
120  std::string diff_to_file(const std::string &old_id, const std::string &path, const GitDiffOption &opt);
121  std::vector<std::string> diff_name_only_head();
122  std::string diff_full_index_head_file(const std::string &file);
123 
124  std::vector<GitFileStatus> status_s_u(std::string *out = nullptr);
125  std::optional<std::vector<char> > cat_file_(const GitHash &id);
126  GitObject catFile(const GitHash &id, bool use_cache = true);
127  bool clone(GitCloneData const &data, AbstractPtyProcess *pty);
128  void add_A();
129  bool unstage_all();
130 
131  void stage(const std::string &path);
132  bool stage(const std::vector<std::string> &paths, AbstractPtyProcess *pty);
133  void unstage(const std::string &path);
134  void unstage(const std::vector<std::string> &paths);
135  bool pull(AbstractPtyProcess *pty = nullptr);
136 
137  bool fetch(AbstractPtyProcess *pty = nullptr, bool prune = false);
138  bool reset_head1();
139  bool reset_hard();
140  bool clean_df();
141  bool push_u(bool set_upstream, std::string const &remote, std::string const &branch, bool force, AbstractPtyProcess *pty);
142  std::string objectType(const GitHash &id);
143  bool rm_cached(const std::string &file);
144  void cherrypick(const std::string &name);
145  std::string getCherryPicking() const;
146  std::vector<GitBranch> branches();
147 
148  std::string signingKey(GitSource purpose);
149  bool setSigningKey(std::string const &id, bool global);
151  bool setSignPolicy(GitSource source, GitSignPolicy policy);
152  bool configGpgProgram(const std::string &path, bool global);
153 
154  std::optional<std::vector<GitReflogItem> > reflog(int maxcount = 100);
155  std::vector<char> blame(const std::string &path);
156 
157 
158  std::optional<std::vector<GitFileItem>> ls(const std::string &path);
159  std::optional<std::vector<char>> readfile(const std::string &path);
160 };
161 
162 #endif // GITRUNNER_H
ApplicationGlobal * global
Definition: main.cpp:24
GitSignPolicy
Definition: GitTypes.h:464
GitMergeFastForward
Definition: GitTypes.h:416
GitSource
Definition: GitTypes.h:309
Definition: AbstractProcess.h:31
Definition: DateTime.h:52
Definition: GitTypes.h:157
Definition: GitTypes.h:31
Definition: GitObjectManager.h:38
Definition: GitRunner.h:13
GitObject catFile(const GitHash &id, bool use_cache=true)
Definition: GitRunner.cpp:401
GitRunner dup() const
Definition: GitRunner.cpp:31
std::string errorMessage(std::optional< GitResult > const &var) const
Definition: GitRunner.cpp:96
bool unstage_all()
Definition: GitRunner.cpp:429
GitCommitItemList log(int maxcount)
Definition: GitRunner.cpp:311
std::vector< GitFileStatus > status_s_u(std::string *out=nullptr)
Definition: GitRunner.cpp:391
std::string version()
Definition: GitRunner.cpp:140
void setSshKey(const std::string &sshkey)
Definition: GitRunner.cpp:86
bool submodule_update(const GitSubmoduleUpdateData &data, AbstractPtyProcess *pty)
Definition: GitRunner.cpp:351
bool setSignPolicy(GitSource source, GitSignPolicy policy)
Definition: GitRunner.cpp:524
GitCommitItemList log_all(GitHash const &id, int maxcount)
Definition: GitRunner.cpp:291
bool fetch(AbstractPtyProcess *pty=nullptr, bool prune=false)
Definition: GitRunner.cpp:459
std::optional< std::vector< GitFileItem > > ls(const std::string &path)
Definition: GitRunner.cpp:544
bool setSigningKey(std::string const &id, bool global)
Definition: GitRunner.cpp:514
GitHash rev_parse(const std::string &name, bool use_cache=true)
Definition: GitRunner.cpp:106
bool stash_drop()
Definition: GitRunner.cpp:336
GitRunner()=default
bool init()
Definition: GitRunner.cpp:145
void rebaseBranch(const std::string &name)
Definition: GitRunner.cpp:271
std::string rev_parse_show_toplevel()
Definition: GitRunner.cpp:321
bool rebase_abort()
Definition: GitRunner.cpp:286
DateTime repositoryLastModifiedTime()
Definition: GitRunner.cpp:206
bool clean_df()
Definition: GitRunner.cpp:474
std::string status()
Definition: GitRunner.cpp:211
std::string getMessage(const std::string &id)
Definition: GitRunner.cpp:91
std::string diff_file(const std::string &old_path, const std::string &new_path, const GitDiffOption &opt)
Definition: GitRunner.cpp:371
void checkoutBranch(const std::string &name)
Definition: GitRunner.cpp:246
std::string diff_full_index_head_file(const std::string &file)
Definition: GitRunner.cpp:386
std::vector< GitBranch > branches()
Definition: GitRunner.cpp:504
std::string diff(const std::string &old_id, const std::string &new_id, const GitDiffOption &opt)
Definition: GitRunner.cpp:366
bool deleteBranch(const std::string &name)
Definition: GitRunner.cpp:256
bool configGpgProgram(const std::string &path, bool global)
Definition: GitRunner.cpp:529
std::optional< std::vector< char > > cat_file_(const GitHash &id)
Definition: GitRunner.cpp:396
void remote_v(std::vector< GitRemote > *out)
Definition: GitRunner.cpp:236
void setUser(GitUser const &user, bool global)
Definition: GitRunner.cpp:186
std::string signingKey(GitSource purpose)
Definition: GitRunner.cpp:509
bool checkout(std::string const &branch_name, std::string const &id={})
Definition: GitRunner.cpp:261
std::string diff_to_file(const std::string &old_id, const std::string &path, const GitDiffOption &opt)
Definition: GitRunner.cpp:376
void setRemoteURL(const GitRemote &remote)
Definition: GitRunner.cpp:120
bool delete_tag(const std::string &name, bool remote)
Definition: GitRunner.cpp:160
bool submodule_add(const GitCloneData &data, bool force, AbstractPtyProcess *pty)
Definition: GitRunner.cpp:346
bool stash()
Definition: GitRunner.cpp:326
bool push_tags(AbstractPtyProcess *pty=nullptr)
Definition: GitRunner.cpp:231
std::vector< GitHash > rev_list_all(GitHash const &id, int maxcount)
Definition: GitRunner.cpp:301
void removeFile(const std::string &path, bool rm_real_file)
Definition: GitRunner.cpp:175
bool push_u(bool set_upstream, std::string const &remote, std::string const &branch, bool force, AbstractPtyProcess *pty)
Definition: GitRunner.cpp:479
void add_A()
Definition: GitRunner.cpp:424
void createBranch(const std::string &name)
Definition: GitRunner.cpp:241
std::optional< GitCommitItem > queryCommitItem(const GitHash &id)
Definition: GitRunner.cpp:316
std::vector< std::string > getRemotes()
Definition: GitRunner.cpp:135
std::vector< char > blame(const std::string &path)
Definition: GitRunner.cpp:539
bool tag(const std::string &name, GitHash const &id={})
Definition: GitRunner.cpp:155
Git * gitptr()
Definition: GitRunner.h:15
std::string workingDir() const
Definition: GitRunner.cpp:76
bool commit_amend_m(const std::string &text, bool sign, AbstractPtyProcess *pty)
Definition: GitRunner.cpp:221
GitObjectCache * getObjCache()
Definition: GitRunner.cpp:38
GitSignPolicy signPolicy(GitSource source)
Definition: GitRunner.cpp:519
GitUser getUser(GitSource purpose)
Definition: GitRunner.cpp:180
GitCommitItemList log_file(const std::string &path, int maxcount)
Definition: GitRunner.cpp:296
bool commit(std::string const &text, bool sign, AbstractPtyProcess *pty)
Definition: GitRunner.cpp:216
void resetAllFiles()
Definition: GitRunner.cpp:170
void mergeBranch(const std::string &name, GitMergeFastForward ff, bool squash)
Definition: GitRunner.cpp:251
bool stash_apply()
Definition: GitRunner.cpp:331
bool isValidWorkingCopy() const
Definition: GitRunner.cpp:61
bool rebase_quit()
Definition: GitRunner.cpp:281
void removeRemote(const std::string &name)
Definition: GitRunner.cpp:130
void operator=(GitRunner const &that)
Definition: GitRunner.cpp:21
void setWorkingRepositoryDir(const std::string &repo, const std::string &sshkey)
Definition: GitRunner.cpp:66
std::string getDefaultBranch()
Definition: GitRunner.cpp:191
void unstage(const std::string &path)
Definition: GitRunner.cpp:444
void resetFile(const std::string &path)
Definition: GitRunner.cpp:165
bool clone(GitCloneData const &data, AbstractPtyProcess *pty)
Definition: GitRunner.cpp:419
void clearObjectCache()
Definition: GitRunner.cpp:49
std::shared_ptr< Git > git
Definition: GitRunner.h:26
std::optional< GitCommitItem > log_signature(GitHash const &id)
Definition: GitRunner.cpp:306
void clearCommandCache()
Definition: GitRunner.cpp:44
void unsetDefaultBranch()
Definition: GitRunner.cpp:201
void setSubmodulePath(const std::string &submodpath)
Definition: GitRunner.cpp:71
bool checkout_detach(std::string const &id)
Definition: GitRunner.cpp:266
Git const * gitptr() const
Definition: GitRunner.h:21
bool pull(AbstractPtyProcess *pty=nullptr)
Definition: GitRunner.cpp:454
bool rm_cached(const std::string &file)
Definition: GitRunner.cpp:489
bool revert(const GitHash &id)
Definition: GitRunner.cpp:226
std::string objectType(const GitHash &id)
Definition: GitRunner.cpp:484
void addRemoteURL(const GitRemote &remote)
Definition: GitRunner.cpp:125
std::vector< GitSubmoduleItem > submodules()
Definition: GitRunner.cpp:341
void cherrypick(const std::string &name)
Definition: GitRunner.cpp:494
std::optional< std::vector< GitReflogItem > > reflog(int maxcount=100)
Definition: GitRunner.cpp:534
std::optional< std::vector< char > > readfile(const std::string &path)
Definition: GitRunner.cpp:549
std::string queryEntireCommitMessage(const GitHash &id)
Definition: GitRunner.cpp:356
std::vector< std::string > diff_name_only_head()
Definition: GitRunner.cpp:381
std::vector< GitTag > tags()
Definition: GitRunner.cpp:150
std::vector< GitDiffRaw > diff_raw(GitHash const &old_id, GitHash const &new_id)
Definition: GitRunner.cpp:361
bool reset_hard()
Definition: GitRunner.cpp:469
void stage(const std::string &path)
Definition: GitRunner.cpp:434
void setDefaultBranch(const std::string &branchname)
Definition: GitRunner.cpp:196
bool reset_head1()
Definition: GitRunner.cpp:464
const std::string & sshKey() const
Definition: GitRunner.cpp:81
bool rebase_continue()
Definition: GitRunner.cpp:276
bool remove(const std::string &path)
Definition: GitRunner.cpp:101
std::string getCherryPicking() const
Definition: GitRunner.cpp:499
Definition: Git.h:16
static Variant var(jstream::Reader const &reader)
Definition: jstream.h:1738
Definition: GitTypes.h:303
Definition: GitTypes.h:518
Definition: GitTypes.h:84
Definition: GitTypes.h:11
Definition: GitTypes.h:434
Definition: GitTypes.h:267