Guitar
GitRunner.h
Go to the documentation of this file.
1 
2 #ifndef GITRUNNER_H
3 #define GITRUNNER_H
4 
5 #include "GitDiff.h"
6 #include "GitHash.h"
7 #include "GitObject.h"
8 #include "GitRemote.h"
9 #include "GitResult.h"
10 #include "GitTypes.h"
11 #include "GitUser.h"
12 #include <memory>
13 #include <optional>
14 #include <q/DateTime.h>
15 
16 class AbstractPtyProcess;
17 class Git;
18 class GitObjectCache;
19 struct GitCloneData;
20 
21 class GitRunner {
22 private:
24  {
25  Git *p = git.get();
26  Q_ASSERT(p);
27  return p;
28  }
29  Git const *gitptr() const
30  {
31  return const_cast<Git *>(git.get());
32  }
33 public:
34  std::shared_ptr<Git> git;
35  GitRunner() = default;
36  GitRunner(std::shared_ptr<Git> const &git);
37  GitRunner(GitRunner const &that);
38  GitRunner(GitRunner &&that);
39  void operator = (GitRunner const &that);
40  explicit operator bool () const;
41  GitRunner dup() const;
42 
44  void clearCommandCache();
45  void clearObjectCache();
46 
47  bool isValidWorkingCopy(const std::string &dir) const;
48 
49  bool isValidWorkingCopy() const;
50 
51  void setWorkingRepositoryDir(const std::string &repo, const std::string &sshkey);
52  void setSubmodulePath(const std::string &submodpath);
53  std::string workingDir() const;
54  const std::string &sshKey() const;
55  void setSshKey(const std::string &sshkey);
56 
57  std::string getMessage(const std::string &id);
58  std::string errorMessage(std::optional<GitResult> const &var) const;
59 
60  bool remove(const std::string &path);
61 
62  GitHash rev_parse(const std::string &name, bool use_cache = true);
63  void setRemoteURL(const GitRemote &remote);
64  void addRemoteURL(const GitRemote &remote);
65  void removeRemote(const std::string &name);
66  std::vector<std::string> getRemotes();
67 
68  std::string version();
69 
70  bool init();
71 
72  std::vector<GitTag> tags();
73  bool tag(const std::string &name, GitHash const &id = {});
74  bool delete_tag(const std::string &name, bool remote);
75 
76  void resetFile(const std::string &path);
77  void resetAllFiles();
78 
79  void removeFile(const std::string &path, bool rm_real_file);
80 
81  GitUser getUser(GitSource purpose);
82  void setUser(GitUser const&user, bool global);
83  std::string getDefaultBranch();
84  void setDefaultBranch(const std::string &branchname);
85  void unsetDefaultBranch();
87  std::string status();
88  bool commit(std::string const &text, bool sign, AbstractPtyProcess *pty);
89  bool commit_amend_m(const std::string &text, bool sign, AbstractPtyProcess *pty);
90  bool revert(const GitHash &id);
91  bool push_tags(AbstractPtyProcess *pty = nullptr);
92  std::vector<GitRemote> remote_v();
93  void createBranch(const std::string &name);
94  void checkoutBranch(const std::string &name);
95  void mergeBranch(const std::string &name, GitMergeFastForward ff, bool squash);
96  bool deleteBranch(const std::string &name);
97 
98  bool checkout(std::string const &branch_name, std::string const &id = {});
99  bool checkout_detach(std::string const &id);
100 
101  void rebaseBranch(const std::string &name);
102  bool rebase_continue();
103  bool rebase_quit();
104  bool rebase_abort();
105 
106  GitCommitItemList log_all(GitHash const &id, int maxcount);
107  GitCommitItemList log_file(const std::string &path, int maxcount);
108  std::vector<GitHash> rev_list_all(GitHash const &id, int maxcount);
109 
110  std::optional<GitCommitItem> log_signature(GitHash const &id);
111  GitCommitItemList log(int maxcount);
112  std::optional<GitCommitItem> queryCommitItem(const GitHash &id);
113 
114  std::string rev_parse_show_toplevel();
115 
116  bool stash();
117  bool stash_apply();
118  bool stash_drop();
119 
120  std::vector<GitSubmoduleItem> submodules();
121  bool submodule_add(const GitCloneData &data, bool force, AbstractPtyProcess *pty);
123  std::string queryEntireCommitMessage(const GitHash &id);
124 
125  std::vector<GitDiffRaw> diff_raw(GitHash const &old_id, GitHash const &new_id);
126  std::string diff(const std::string &old_id, const std::string &new_id, const GitDiffOption &opt);
127  std::string diff_file(const std::string &old_path, const std::string &new_path, const GitDiffOption &opt);
128  std::string diff_to_file(const std::string &old_id, const std::string &path, const GitDiffOption &opt);
129  std::vector<std::string> diff_name_only_head();
130  std::string diff_full_index_head_file(const std::string &file);
131 
132  std::vector<GitFileStatus> status_s_u(std::string *out = nullptr);
133  std::optional<std::vector<char> > cat_file_(const GitHash &id);
134  GitObject catFile(const GitHash &id, bool use_cache = true);
135  bool clone(GitCloneData const &data, AbstractPtyProcess *pty);
136  void add_A();
137  bool unstage_all();
138 
139  void stage(const std::string &path);
140  bool stage(const std::vector<std::string> &paths, AbstractPtyProcess *pty);
141  void unstage(const std::string &path);
142  void unstage(const std::vector<std::string> &paths);
143  bool pull(AbstractPtyProcess *pty = nullptr);
144 
145  bool fetch(AbstractPtyProcess *pty = nullptr, bool prune = false);
146  bool reset_head1();
147  bool reset_hard();
148  bool clean_df();
149  bool push_u(bool set_upstream, std::string const &remote, std::string const &branch, bool force, AbstractPtyProcess *pty);
150  std::string objectType(const GitHash &id);
151  bool rm_cached(const std::string &file);
152  void cherrypick(const std::string &name);
153  std::string getCherryPicking() const;
154  std::vector<GitBranch> branches();
155 
156  std::string signingKey(GitSource purpose);
157  bool setSigningKey(std::string const &id, bool global);
159  bool setSignPolicy(GitSource source, GitSignPolicy policy);
160  bool configGpgProgram(const std::string &path, bool global);
161 
162  std::optional<std::vector<GitReflogItem> > reflog(int maxcount = 100);
163  std::vector<char> blame(const std::string &path);
164 
165 
166  std::optional<std::vector<GitFileItem>> ls(const std::string &path);
167  std::optional<std::vector<char>> readfile(const std::string &path);
168 };
169 
170 #endif // GITRUNNER_H
ApplicationGlobal * global
Definition: main.cpp:27
GitSignPolicy
Definition: GitTypes.h:238
GitMergeFastForward
Definition: GitTypes.h:207
GitSource
Definition: GitTypes.h:100
Definition: AbstractProcess.h:71
Definition: DateTime.h:52
Definition: GitTypes.h:30
Definition: GitHash.h:9
Definition: GitObjectManager.h:42
Definition: GitRunner.h:21
GitObject catFile(const GitHash &id, bool use_cache=true)
Definition: GitRunner.cpp:402
GitRunner dup() const
Definition: GitRunner.cpp:32
std::string errorMessage(std::optional< GitResult > const &var) const
Definition: GitRunner.cpp:97
bool unstage_all()
Definition: GitRunner.cpp:430
GitCommitItemList log(int maxcount)
Definition: GitRunner.cpp:312
std::vector< GitFileStatus > status_s_u(std::string *out=nullptr)
Definition: GitRunner.cpp:392
std::string version()
Definition: GitRunner.cpp:141
void setSshKey(const std::string &sshkey)
Definition: GitRunner.cpp:87
bool submodule_update(const GitSubmoduleUpdateData &data, AbstractPtyProcess *pty)
Definition: GitRunner.cpp:352
bool setSignPolicy(GitSource source, GitSignPolicy policy)
Definition: GitRunner.cpp:525
GitCommitItemList log_all(GitHash const &id, int maxcount)
Definition: GitRunner.cpp:292
bool fetch(AbstractPtyProcess *pty=nullptr, bool prune=false)
Definition: GitRunner.cpp:460
std::optional< std::vector< GitFileItem > > ls(const std::string &path)
Definition: GitRunner.cpp:545
bool setSigningKey(std::string const &id, bool global)
Definition: GitRunner.cpp:515
GitHash rev_parse(const std::string &name, bool use_cache=true)
Definition: GitRunner.cpp:107
bool stash_drop()
Definition: GitRunner.cpp:337
GitRunner()=default
bool init()
Definition: GitRunner.cpp:146
void rebaseBranch(const std::string &name)
Definition: GitRunner.cpp:272
std::string rev_parse_show_toplevel()
Definition: GitRunner.cpp:322
bool rebase_abort()
Definition: GitRunner.cpp:287
DateTime repositoryLastModifiedTime()
Definition: GitRunner.cpp:207
bool clean_df()
Definition: GitRunner.cpp:475
std::string status()
Definition: GitRunner.cpp:212
std::string getMessage(const std::string &id)
Definition: GitRunner.cpp:92
std::string diff_file(const std::string &old_path, const std::string &new_path, const GitDiffOption &opt)
Definition: GitRunner.cpp:372
void checkoutBranch(const std::string &name)
Definition: GitRunner.cpp:247
std::string diff_full_index_head_file(const std::string &file)
Definition: GitRunner.cpp:387
std::vector< GitBranch > branches()
Definition: GitRunner.cpp:505
std::string diff(const std::string &old_id, const std::string &new_id, const GitDiffOption &opt)
Definition: GitRunner.cpp:367
bool deleteBranch(const std::string &name)
Definition: GitRunner.cpp:257
bool configGpgProgram(const std::string &path, bool global)
Definition: GitRunner.cpp:530
std::optional< std::vector< char > > cat_file_(const GitHash &id)
Definition: GitRunner.cpp:397
void setUser(GitUser const &user, bool global)
Definition: GitRunner.cpp:187
std::string signingKey(GitSource purpose)
Definition: GitRunner.cpp:510
bool checkout(std::string const &branch_name, std::string const &id={})
Definition: GitRunner.cpp:262
std::string diff_to_file(const std::string &old_id, const std::string &path, const GitDiffOption &opt)
Definition: GitRunner.cpp:377
void setRemoteURL(const GitRemote &remote)
Definition: GitRunner.cpp:121
bool delete_tag(const std::string &name, bool remote)
Definition: GitRunner.cpp:161
bool submodule_add(const GitCloneData &data, bool force, AbstractPtyProcess *pty)
Definition: GitRunner.cpp:347
bool stash()
Definition: GitRunner.cpp:327
bool push_tags(AbstractPtyProcess *pty=nullptr)
Definition: GitRunner.cpp:232
std::vector< GitHash > rev_list_all(GitHash const &id, int maxcount)
Definition: GitRunner.cpp:302
void removeFile(const std::string &path, bool rm_real_file)
Definition: GitRunner.cpp:176
bool push_u(bool set_upstream, std::string const &remote, std::string const &branch, bool force, AbstractPtyProcess *pty)
Definition: GitRunner.cpp:480
void add_A()
Definition: GitRunner.cpp:425
void createBranch(const std::string &name)
Definition: GitRunner.cpp:242
std::optional< GitCommitItem > queryCommitItem(const GitHash &id)
Definition: GitRunner.cpp:317
std::vector< std::string > getRemotes()
Definition: GitRunner.cpp:136
std::vector< char > blame(const std::string &path)
Definition: GitRunner.cpp:540
bool tag(const std::string &name, GitHash const &id={})
Definition: GitRunner.cpp:156
Git * gitptr()
Definition: GitRunner.h:23
std::string workingDir() const
Definition: GitRunner.cpp:77
bool commit_amend_m(const std::string &text, bool sign, AbstractPtyProcess *pty)
Definition: GitRunner.cpp:222
GitObjectCache * getObjCache()
Definition: GitRunner.cpp:39
GitSignPolicy signPolicy(GitSource source)
Definition: GitRunner.cpp:520
GitUser getUser(GitSource purpose)
Definition: GitRunner.cpp:181
GitCommitItemList log_file(const std::string &path, int maxcount)
Definition: GitRunner.cpp:297
bool commit(std::string const &text, bool sign, AbstractPtyProcess *pty)
Definition: GitRunner.cpp:217
void resetAllFiles()
Definition: GitRunner.cpp:171
void mergeBranch(const std::string &name, GitMergeFastForward ff, bool squash)
Definition: GitRunner.cpp:252
bool stash_apply()
Definition: GitRunner.cpp:332
bool isValidWorkingCopy() const
Definition: GitRunner.cpp:62
bool rebase_quit()
Definition: GitRunner.cpp:282
void removeRemote(const std::string &name)
Definition: GitRunner.cpp:131
void operator=(GitRunner const &that)
Definition: GitRunner.cpp:22
void setWorkingRepositoryDir(const std::string &repo, const std::string &sshkey)
Definition: GitRunner.cpp:67
std::string getDefaultBranch()
Definition: GitRunner.cpp:192
void unstage(const std::string &path)
Definition: GitRunner.cpp:445
void resetFile(const std::string &path)
Definition: GitRunner.cpp:166
bool clone(GitCloneData const &data, AbstractPtyProcess *pty)
Definition: GitRunner.cpp:420
void clearObjectCache()
Definition: GitRunner.cpp:50
std::shared_ptr< Git > git
Definition: GitRunner.h:34
std::optional< GitCommitItem > log_signature(GitHash const &id)
Definition: GitRunner.cpp:307
void clearCommandCache()
Definition: GitRunner.cpp:45
void unsetDefaultBranch()
Definition: GitRunner.cpp:202
void setSubmodulePath(const std::string &submodpath)
Definition: GitRunner.cpp:72
bool checkout_detach(std::string const &id)
Definition: GitRunner.cpp:267
Git const * gitptr() const
Definition: GitRunner.h:29
bool pull(AbstractPtyProcess *pty=nullptr)
Definition: GitRunner.cpp:455
bool rm_cached(const std::string &file)
Definition: GitRunner.cpp:490
bool revert(const GitHash &id)
Definition: GitRunner.cpp:227
std::string objectType(const GitHash &id)
Definition: GitRunner.cpp:485
std::vector< GitRemote > remote_v()
Definition: GitRunner.cpp:237
void addRemoteURL(const GitRemote &remote)
Definition: GitRunner.cpp:126
std::vector< GitSubmoduleItem > submodules()
Definition: GitRunner.cpp:342
void cherrypick(const std::string &name)
Definition: GitRunner.cpp:495
std::optional< std::vector< GitReflogItem > > reflog(int maxcount=100)
Definition: GitRunner.cpp:535
std::optional< std::vector< char > > readfile(const std::string &path)
Definition: GitRunner.cpp:550
std::string queryEntireCommitMessage(const GitHash &id)
Definition: GitRunner.cpp:357
std::vector< std::string > diff_name_only_head()
Definition: GitRunner.cpp:382
std::vector< GitTag > tags()
Definition: GitRunner.cpp:151
std::vector< GitDiffRaw > diff_raw(GitHash const &old_id, GitHash const &new_id)
Definition: GitRunner.cpp:362
bool reset_hard()
Definition: GitRunner.cpp:470
void stage(const std::string &path)
Definition: GitRunner.cpp:435
void setDefaultBranch(const std::string &branchname)
Definition: GitRunner.cpp:197
bool reset_head1()
Definition: GitRunner.cpp:465
const std::string & sshKey() const
Definition: GitRunner.cpp:82
bool rebase_continue()
Definition: GitRunner.cpp:277
bool remove(const std::string &path)
Definition: GitRunner.cpp:102
std::string getCherryPicking() const
Definition: GitRunner.cpp:500
Definition: Git.h:24
static Variant var(jstream::Reader const &reader)
Definition: jstream.h:1739
Definition: GitCloneData.h:7
Definition: GitDiff.h:55
Definition: GitObject.h:7
Definition: GitRemote.h:7
Definition: GitSubmodule.h:19
Definition: GitUser.h:7