Guitar
Git.h
Go to the documentation of this file.
1 #ifndef GIT_H
2 #define GIT_H
3 
4 #include "AbstractProcess.h"
5 #include "common/misc.h"
6 #include <QDateTime>
7 #include <QDebug>
8 #include <QMutex>
9 #include <QObject>
10 #include <functional>
11 #include <memory>
12 #include <optional>
13 #include <functional>
14 
15 #define SINGLE_THREAD 0
16 
17 #define GIT_ID_LENGTH (40)
18 
19 #define PATH_PREFIX "*"
20 
21 class Win32PtyProcess;
22 
23 enum class LineSide {
24  Left,
25  Right,
26 };
27 
28 struct TreeLine {
29  int index;
30  int depth;
31  int color_number = 0;
32  bool bend_early = false;
33  TreeLine(int index = -1, int depth = -1)
34  : index(index)
35  , depth(depth)
36  {
37  }
38 };
39 
40 class Git;
41 using GitPtr = std::shared_ptr<Git>;
42 
43 class Git {
44  friend class GitRunner;
45 public:
46  class Hash {
47  private:
48  bool valid_ = false;
49  uint8_t id_[GIT_ID_LENGTH / 2];
50  template <typename VIEW> void _assign(VIEW const &id);
51  public:
52  Hash();
53  explicit Hash(std::string_view const &id);
54  explicit Hash(QString const &id);
55  explicit Hash(char const *id);
56  void assign(std::string_view const &qid);
57  void assign(const QString &qid);
58  QString toQString(int maxlen = -1) const;
59  bool isValid() const;
60  int compare(Hash const &other) const
61  {
62  if (!valid_ && other.valid_) return -1;
63  if (valid_ && !other.valid_) return 1;
64  if (!valid_ && !other.valid_) return 0;
65  return memcmp(id_, other.id_, sizeof(id_));
66  }
67  operator bool () const
68  {
69  return isValid();
70  }
71  };
72 
73  class Context {
74  public:
75  QString git_command;
76  QString ssh_command;
77  };
78 
79  struct Object {
80  enum class Type { // 値は固定。packフォーマットで決まってる
81  NONE = -1,
82  UNKNOWN = 0,
83  COMMIT = 1,
84  TREE = 2,
85  BLOB = 3,
86  TAG = 4,
87  UNDEFINED = 5,
88  OFS_DELTA = 6,
89  REF_DELTA = 7,
90  };
92  QByteArray content;
93  };
94 
95  struct SubmoduleItem {
96  QString name;
98  QString path;
99  QString refs;
100  QString url;
101  operator bool () const
102  {
103  return isValidID(id) && !path.isEmpty();
104  }
105  };
106 
107  enum class SignatureGrade {
108  NoSignature,
109  Unknown,
110  Good,
111  Dubious,
112  Missing,
113  Bad,
114  };
115 
116  struct CommitItem {
119  QList<Hash> parent_ids;
120  QString author;
121  QString email;
122  QString message;
123  QDateTime commit_date;
124  std::vector<TreeLine> parent_lines;
125  bool has_gpgsig = false;
126  QString gpgsig;
127  struct {
128  QString text;
129  char verify = 0; // git log format:%G?
130  std::vector<uint8_t> key_fingerprint;
131  QString trust;
132  } sign;
133  bool has_child = false;
134  int marker_depth = -1;
135  bool resolved = false;
136  bool order_fixed = false; // 時差や時計の誤差などの影響により、並び順の調整が行われたとき
137  void setParents(QStringList const &list);
138  operator bool () const
139  {
140  return commit_id;
141  }
142  };
143 
145  public:
146  std::vector<CommitItem> list;
147  std::map<Hash, size_t> index;
148  size_t size() const
149  {
150  return list.size();
151  }
152  CommitItem &at(size_t i)
153  {
154  return list[i];
155  }
156  CommitItem const &at(size_t i) const
157  {
158  return list.at(i);
159  }
161  {
162  return at(i);
163  }
164  CommitItem const &operator [] (size_t i) const
165  {
166  return at(i);
167  }
168  void clear()
169  {
170  list.clear();
171  }
172  bool empty() const
173  {
174  return list.empty();
175  }
176  void updateIndex()
177  {
178  index.clear();
179  for (size_t i = 0; i < list.size(); i++) {
180  index[list[i].commit_id] = i;
181  }
182  }
183  CommitItem *find(Hash const &id)
184  {
185  auto it = index.find(id);
186  if (it != index.end()) {
187  return &list[it->second];
188  }
189  return nullptr;
190  }
191  CommitItem const *find(Hash const &id) const
192  {
193  return const_cast<CommitItemList *>(this)->find(id);
194  }
195  };
196 
197  class Hunk {
198  public:
199  std::string at;
200  std::vector<std::string> lines;
201  };
202  class Diff {
203  public:
204  enum class Type {
205  Unknown,
206  Modify,
207  Copy,
208  Rename,
209  Create,
210  Delete,
211  ChType,
212  Unmerged,
213  };
215  QString diff;
216  QString index;
217  QString path;
218  QString mode;
219  struct BLOB_AB_ {
220  QString a_id_or_path; // コミットIDまたはファイルパス。パスのときは PATH_PREFIX('*')で始まる
221  QString b_id_or_path;
222  } blob;
223  QList<Hunk> hunks;
228  Diff() = default;
229  Diff(QString const &id, QString const &path, QString const &mode)
230  {
231  makeForSingleFile(this, QString(GIT_ID_LENGTH, '0'), id, path, mode);
232  }
233  bool isSubmodule() const
234  {
235  return mode == "160000";
236  }
237  private:
238  void makeForSingleFile(Diff *diff, QString const &id_a, QString const &id_b, QString const &path, QString const &mode);
239  };
240 
242  {
243  switch (c) {
244  case 'G':
245  return SignatureGrade::Good;
246  case 'U':
247  case 'X':
248  case 'Y':
250  case 'B':
251  case 'R':
252  return SignatureGrade::Bad;
253  case 'E':
255  case 'N':
256  case ' ':
257  case 0:
259  }
261  }
262 
263  static bool isUncommited(CommitItem const &item)
264  {
265  return !item.commit_id.isValid();
266  }
267 
268  struct Branch {
269  QString name;
271  QString remote;
272  int ahead = 0;
273  int behind = 0;
274  enum {
276  Current = 0x0001,
277  HeadDetachedAt = 0x0002,
279  };
280  int flags = 0;
281  operator bool () const
282  {
283  return id.isValid() && !name.isEmpty();
284  }
285  bool isCurrent() const
286  {
287  return flags & Current;
288  }
289  bool isHeadDetached() const
290  {
291  return flags & HeadDetachedAt;
292  }
293  };
294 
295  struct Tag {
296  QString name;
298  };
299 
300  enum class FileStatusCode : unsigned int {
301  Unknown,
302  Ignored,
303  Untracked,
304  NotUpdated = 0x10000000,
305  Staged_ = 0x20000000,
307  AddedToIndex,
311  Unmerged_ = 0x40000000,
319  Tracked_ = 0xf0000000
320  };
321 
322  enum class MergeFastForward {
323  Default,
324  No,
325  Only,
326  };
327 
328  class FileStatus {
329  public:
330  struct Data {
331  char code_x = 0;
332  char code_y = 0;
334  QString rawpath1;
335  QString rawpath2;
336  QString path1;
337  QString path2;
338  } data;
339 
340  static FileStatusCode parseFileStatusCode(char x, char y);
341 
342  bool isStaged() const
343  {
344  return (int)data.code & (int)FileStatusCode::Staged_;
345  }
346 
347  bool isUnmerged() const
348  {
349  return (int)data.code & (int)FileStatusCode::Unmerged_;
350  }
351 
352  bool isTracked() const
353  {
354  return (int)data.code & (int)FileStatusCode::Tracked_;
355  }
356 
357  void parse(QString const &text);
358 
359  FileStatus() = default;
360 
361  FileStatus(QString const &text)
362  {
363  parse(text);
364  }
365 
367  {
368  return data.code;
369  }
370 
371  int code_x() const
372  {
373  return data.code_x;
374  }
375 
376  int code_y() const
377  {
378  return data.code_y;
379  }
380 
381  bool isDeleted() const
382  {
383  return code_x() == 'D' || code_y() == 'D';
384  }
385 
386  QString path1() const
387  {
388  return data.path1;
389  }
390 
391  QString path2() const
392  {
393  return data.path2;
394  }
395 
396  QString rawpath1() const
397  {
398  return data.rawpath1;
399  }
400 
401  QString rawpath2() const
402  {
403  return data.rawpath2;
404  }
405  };
406  using FileStatusList = std::vector<FileStatus>;
407 
408  class CommandCache {
409  public:
410  struct Data {
411  std::map<QString, std::vector<char>> map;
412  };
413  std::shared_ptr<Data> d;
414  CommandCache(bool make = false)
415  {
416  if (make) {
417  d = std::make_shared<Data>();
418  }
419  }
420  operator bool () const
421  {
422  return (bool)d;
423  }
424  void clear()
425  {
426  if (d) {
427  d->map.clear();
428  }
429  }
430  std::vector<char> *find(QString const &key)
431  {
432  if (!d) return nullptr;
433  auto it = d->map.find(key);
434  if (it != d->map.end()) {
435  return &it->second;
436  }
437  return nullptr;
438  }
439  void insert(QString const &key, std::vector<char> const &value)
440  {
441  if (!d) return;
442  d->map[key] = value;
443  }
444  };
445 
446  static QString trimPath(QString const &s);
447 
448 private:
449  struct Private;
451  QStringList make_branch_list_();
452  QByteArray cat_file_(Hash const &id);
454  bool commit_(QString const &msg, bool amend, bool sign, AbstractPtyProcess *pty);
455  static void parseAheadBehind(QString const &s, Branch *b);
456  Git();
457  QString encodeQuotedText(QString const &str);
458  static std::optional<CommitItem> parseCommitItem(const QString &line);
459 public:
460  Git(Context const &cx, QString const &repodir, QString const &submodpath, QString const &sshkey);
461  Git(Git &&r) = delete;
462  ~Git();
463 
464  void setCommandCache(CommandCache const &cc);
465 
466  QByteArray toQByteArray() const;
467  void setGitCommand(QString const &gitcmd, const QString &sshcmd = {});
468  QString gitCommand() const;
469  void clearResult();
470  std::string_view resultStdString() const;
471  QString resultQString() const;
472  bool chdirexec(std::function<bool ()> const &fn);
473  struct Option {
474  bool chdir = true;
475  bool log = false;
476  bool errout = false;
478  QString prefix;
479  };
480  bool git(QString const &arg, Option const &opt, bool debug_ = false);
481  bool git(QString const &arg)
482  {
483  return git(arg, {});
484  }
485  bool git_nolog(QString const &arg, AbstractPtyProcess *pty)
486  {
487  Option opt;
488  opt.pty = pty;
489  opt.log = false;
490  return git(arg, opt);
491  }
492  bool git_nochdir(QString const &arg, AbstractPtyProcess *pty)
493  {
494  Option opt;
495  opt.pty = pty;
496  opt.chdir = false;
497  return git(arg, opt);
498  }
499 
500  void setWorkingRepositoryDir(QString const &repo, const QString &submodpath, const QString &sshkey);
501  QString workingDir() const;
502  QString const &sshKey() const;
503  void setSshKey(const QString &sshkey) const;
504 
505  QString getCurrentBranchName();
506  bool isValidWorkingCopy() const;
507  QString version();
508  bool init();
509  QStringList getUntrackedFiles();
510 
511  CommitItemList log_all(Hash const &id, int maxcount);
512  CommitItemList log_file(QString const &path, int maxcount);
513  QStringList rev_list_all(Hash const &id, int maxcount);
514 
515  std::optional<CommitItem> log_signature(Hash const &id);
516  CommitItemList log(int maxcount);
517  std::optional<CommitItem> queryCommitItem(const Hash &id);
518 
519  struct CloneData {
520  QString url;
521  QString basedir;
522  QString subdir;
523  };
524  static CloneData preclone(QString const &url, QString const &path);
525  bool clone(CloneData const &data, AbstractPtyProcess *pty);
526 
528  std::optional<QByteArray> cat_file(Hash const &id);
529  void resetFile(QString const &path);
530  void resetAllFiles();
531 
532  void removeFile(QString const &path);
533 
534  void add_A();
535  bool unstage_all();
536 
537  void stage(QString const &path);
538  bool stage(QStringList const &paths, AbstractPtyProcess *pty);
539  void unstage(QString const &path);
540  void unstage(QStringList const &paths);
541  bool pull(AbstractPtyProcess *pty = nullptr);
542 
543  bool fetch(AbstractPtyProcess *pty = nullptr, bool prune = false);
544  bool fetch_tags_f(AbstractPtyProcess *pty);
545 
546  QList<Branch> branches();
547 
548  int getProcessExitCode() const;
549 
550  QString diff(QString const &old_id, QString const &new_id);
551  QString diff_file(QString const &old_path, QString const &new_path);
552 
553  std::string diff_head(std::function<bool (std::string const &, std::string const &)> fn_accept = nullptr);
554 
555  struct DiffRaw {
556  struct AB {
557  QString id;
558  QString mode;
559  } a, b;
560  QString state;
561  QStringList files;
562  };
563 
564  struct Remote {
565  QString name;
566  QString url_fetch;
567  QString url_push;
568  QString ssh_key;
569  bool operator < (Remote const &r) const
570  {
571  return name < r.name;
572  }
573  QString const &url() const
574  {
575  return url_fetch;
576  }
577  void set_url(QString const &url)
578  {
579  url_fetch = url;
580  url_push = url;
581  }
582  };
583 
584  QList<DiffRaw> diff_raw(Hash const &old_id, Hash const &new_id);
585 
586  static bool isValidID(QString const &id);
587  static bool isValidID(Hash const &id)
588  {
589  return id.isValid();
590  }
591 
592  QString status();
593  bool commit(QString const &text, bool sign, AbstractPtyProcess *pty);
594  bool commit_amend_m(QString const &text, bool sign, AbstractPtyProcess *pty);
595  bool revert(const Hash &id);
596  bool push_tags(AbstractPtyProcess *pty = nullptr);
597  void remote_v(std::vector<Remote> *out);
598  void createBranch(QString const &name);
599  void checkoutBranch(QString const &name);
600  void mergeBranch(QString const &name, MergeFastForward ff, bool squash);
601  bool deleteBranch(QString const &name);
602 
603  bool checkout(QString const &branch_name, QString const &id = {});
604  bool checkout_detach(QString const &id);
605 
606  void rebaseBranch(QString const &name);
607  void rebase_abort();
608 
609  static bool isValidWorkingCopy(QString const &dir);
610  QString diff_to_file(QString const &old_id, QString const &path);
611  QString errorMessage() const;
612 
613  Hash rev_parse(QString const &name);
614  QList<Tag> tags();
615  bool tag(QString const &name, Hash const &id = {});
616  bool delete_tag(QString const &name, bool remote);
617  void setRemoteURL(const Remote &remote);
618  void addRemoteURL(const Remote &remote);
619  void removeRemote(QString const &name);
620  QStringList getRemotes();
621 
622  struct User {
623  QString name;
624  QString email;
625  operator bool () const
626  {
628  }
629  };
630  enum class Source {
631  Default,
632  Global,
633  Local,
634  };
635 
636  User getUser(Source purpose);
637  void setUser(User const&user, bool global);
638 
639  bool reset_head1();
640  bool reset_hard();
641  bool clean_df();
642  bool push_u(bool set_upstream, QString const &remote, QString const &branch, bool force, AbstractPtyProcess *pty);
643  QString objectType(const Hash &id);
644  bool rm_cached(QString const &file);
645  void cherrypick(QString const &name);
646  QString getCherryPicking() const;
647 
648  QString getMessage(const QString &id);
649 
650  struct ReflogItem {
651  QString id;
652  QString head;
653  QString command;
654  QString message;
655  struct File {
656  QString atts_a;
657  QString atts_b;
658  QString id_a;
659  QString id_b;
660  QString type;
661  QString path;
662  };
663  QList<File> files;
664  };
665  using ReflogItemList = QList<ReflogItem>;
666 
667  bool reflog(ReflogItemList *out, int maxcount = 100);
668  QByteArray blame(QString const &path);
669 
670  enum SignPolicy {
674  };
675  QString signingKey(Source purpose);
676  bool setSigningKey(QString const &id, bool global);
677  SignPolicy signPolicy(Source source);
678  bool setSignPolicy(Source source, SignPolicy policy);
679  bool configGpgProgram(QString const &path, bool global);
680 
681  struct RemoteInfo {
682  QString commit_id;
683  QString name;
684  };
685  QList<RemoteInfo> ls_remote();
686 
687  bool stash();
688  bool stash_apply();
689  bool stash_drop();
690 
692  bool init = true;
693  bool recursive = true;
694  };
695 
696 
697  QList<SubmoduleItem> submodules();
698  bool submodule_add(const CloneData &data, bool force, AbstractPtyProcess *pty);
700  static std::optional<CommitItem> parseCommit(QByteArray const &ba);
701  QString queryEntireCommitMessage(const Hash &id);
702 
703  QString getDefaultBranch();
704  void setDefaultBranch(QString const &branchname);
705  void unsetDefaultBranch();
706  QDateTime repositoryLastModifiedTime();
707 };
708 
710  enum class Type {
711  None,
712  BranchLocal,
713  BranchRemote,
714  Tag,
715  };
717  QString remote;
718  QString name;
720 };
721 using NamedCommitList = QList<NamedCommitItem>;
722 
723 void parseDiff(const std::string_view &s, Git::Diff const *info, Git::Diff *out);
724 
725 void parseGitSubModules(QByteArray const &ba, QList<Git::SubmoduleItem> *out);
726 
727 static inline bool operator == (Git::Hash const &l, Git::Hash const &r)
728 {
729  return l.compare(r) == 0;
730 }
731 
732 static inline bool operator < (Git::Hash const &l, Git::Hash const &r)
733 {
734  return l.compare(r) < 0;
735 }
736 
737 // GitRunner
738 
739 class GitRunner {
740 private:
741 public:
743  GitRunner() = default;
745  : git(git)
746  {
747  }
748  GitRunner(GitRunner const &that)
749  : git(that.git)
750  {
751  }
753  : git(std::move(that.git))
754  {
755  }
756  void operator = (GitRunner const &that)
757  {
758  git = that.git;
759  }
760  operator bool () const
761  {
762  return (bool)git;
763  }
764  GitRunner dup() const;
765 
766  void setWorkingRepositoryDir(QString const &repo, const QString &submodpath, const QString &sshkey)
767  {
768  git->setWorkingRepositoryDir(repo, submodpath, sshkey);
769  }
770  QString workingDir() const
771  {
772  return git->workingDir();
773  }
774  QString const &sshKey() const
775  {
776  return git->sshKey();
777  }
778  void setSshKey(const QString &sshkey) const
779  {
780  git->setSshKey(sshkey);
781  }
782 
783  QString getMessage(const QString &id)
784  {
785  return git->getMessage(id);
786  }
787  QString errorMessage() const
788  {
789  return git->errorMessage();
790  }
791 
792  bool chdirexec(std::function<bool ()> const &fn)
793  {
794  return git->chdirexec(fn);
795  }
796 
797  Git::Hash rev_parse(QString const &name)
798  {
799  return git->rev_parse(name);
800  }
801  void setRemoteURL(const Git::Remote &remote)
802  {
803  git->setRemoteURL(remote);
804  }
805  void addRemoteURL(const Git::Remote &remote)
806  {
807  git->addRemoteURL(remote);
808  }
809  void removeRemote(QString const &name)
810  {
811  git->removeRemote(name);
812  }
813  QStringList getRemotes()
814  {
815  return git->getRemotes();
816  }
817 
818  static bool isValidWorkingCopy(QString const &dir)
819  {
820  return Git::isValidWorkingCopy(dir);
821  }
822 
823  bool isValidWorkingCopy() const
824  {
825  return git && git->isValidWorkingCopy();
826  }
827 
828  QString version()
829  {
830  return git->version();
831  }
832 
833  bool init()
834  {
835  return git->init();
836  }
837 
838  QList<Git::Tag> tags()
839  {
840  return git->tags();
841  }
842  bool tag(QString const &name, Git::Hash const &id = {})
843  {
844  return git->tag(name, id);
845  }
846  bool delete_tag(QString const &name, bool remote)
847  {
848  return git->delete_tag(name, remote);
849  }
850 
851  void resetFile(QString const &path)
852  {
853  git->resetFile(path);
854  }
856  {
857  git->resetAllFiles();
858  }
859 
860  void removeFile(QString const &path)
861  {
862  git->removeFile(path);
863  }
864 
866  {
867  return git->getUser(purpose);
868  }
869  void setUser(Git::User const&user, bool global)
870  {
871  git->setUser(user, global);
872  }
874  {
875  return git->getDefaultBranch();
876  }
877  void setDefaultBranch(QString const &branchname)
878  {
879  git->setDefaultBranch(branchname);
880  }
882  {
883  git->unsetDefaultBranch();
884  }
886  {
887  return git->repositoryLastModifiedTime();
888  }
889  QString status()
890  {
891  return git->status();
892  }
893  bool commit(QString const &text, bool sign, AbstractPtyProcess *pty)
894  {
895  return git->commit(text, sign, pty);
896  }
897  bool commit_amend_m(QString const &text, bool sign, AbstractPtyProcess *pty)
898  {
899  return git->commit_amend_m(text, sign, pty);
900  }
901  bool revert(const Git::Hash &id)
902  {
903  return git->revert(id);
904  }
905  bool push_tags(AbstractPtyProcess *pty = nullptr)
906  {
907  return git->push_tags(pty);
908  }
909  void remote_v(std::vector<Git::Remote> *out)
910  {
911  git->remote_v(out);
912  }
913  void createBranch(QString const &name)
914  {
915  git->createBranch(name);
916  }
917  void checkoutBranch(QString const &name)
918  {
919  git->checkoutBranch(name);
920  }
921  void mergeBranch(QString const &name, Git::MergeFastForward ff, bool squash)
922  {
923  git->mergeBranch(name, ff, squash);
924  }
925  bool deleteBranch(QString const &name)
926  {
927  return git->deleteBranch(name);
928  }
929 
930  bool checkout(QString const &branch_name, QString const &id = {})
931  {
932  return git->checkout(branch_name, id);
933  }
934  bool checkout_detach(QString const &id)
935  {
936  return git->checkout_detach(id);
937  }
938 
939  void rebaseBranch(QString const &name)
940  {
941  git->rebaseBranch(name);
942  }
944  {
945  git->rebase_abort();
946  }
947 
948  Git::CommitItemList log_all(Git::Hash const &id, int maxcount)
949  {
950  return git->log_all(id, maxcount);
951  }
952  Git::CommitItemList log_file(QString const &path, int maxcount)
953  {
954  return git->log_file(path, maxcount);
955  }
956  QStringList rev_list_all(Git::Hash const &id, int maxcount)
957  {
958  return git->rev_list_all(id, maxcount);
959  }
960 
961  std::optional<Git::CommitItem> log_signature(Git::Hash const &id)
962  {
963  return git->log_signature(id);
964  }
965  Git::CommitItemList log(int maxcount)
966  {
967  return git->log(maxcount);
968  }
969  std::optional<Git::CommitItem> queryCommitItem(const Git::Hash &id)
970  {
971  return git->queryCommitItem(id);
972  }
973 
974  bool stash()
975  {
976  return git->stash();
977  }
978  bool stash_apply()
979  {
980  return git->stash_apply();
981  }
982  bool stash_drop()
983  {
984  return git->stash_drop();
985  }
986 
987  QList<Git::SubmoduleItem> submodules()
988  {
989  return git->submodules();
990  }
991  bool submodule_add(const Git::CloneData &data, bool force, AbstractPtyProcess *pty)
992  {
993  return git->submodule_add(data, force, pty);
994  }
996  {
997  return git->submodule_update(data, pty);
998  }
999  static std::optional<Git::CommitItem> parseCommit(QByteArray const &ba)
1000  {
1001  return Git::parseCommit(ba);
1002  }
1004  {
1005  return git->queryEntireCommitMessage(id);
1006  }
1007 
1008  QList<Git::DiffRaw> diff_raw(Git::Hash const &old_id, Git::Hash const &new_id)
1009  {
1010  return git->diff_raw(old_id, new_id);
1011  }
1012  std::string diff_head(std::function<bool (std::string const &name, std::string const &mime)> fn_accept = nullptr)
1013  {
1014  return git->diff_head(fn_accept);
1015  }
1016  QString diff(QString const &old_id, QString const &new_id)
1017  {
1018  return git->diff(old_id, new_id);
1019  }
1020  QString diff_file(QString const &old_path, QString const &new_path)
1021  {
1022  return git->diff_file(old_path, new_path);
1023  }
1024  QString diff_to_file(QString const &old_id, QString const &path)
1025  {
1026  return git->diff_to_file(old_id, path);
1027  }
1028 
1030  {
1031  return git->status_s();
1032  }
1033  std::optional<QByteArray> cat_file(const Git::Hash &id)
1034  {
1035  return git->cat_file(id);
1036  }
1037  bool clone(Git::CloneData const &data, AbstractPtyProcess *pty)
1038  {
1039  return git->clone(data, pty);
1040  }
1041  void add_A()
1042  {
1043  git->add_A();
1044  }
1046  {
1047  return git->unstage_all();
1048  }
1049 
1050  void stage(QString const &path)
1051  {
1052  git->stage(path);
1053  }
1054  bool stage(QStringList const &paths, AbstractPtyProcess *pty)
1055  {
1056  return git->stage(paths, pty);
1057  }
1058  void unstage(QString const &path)
1059  {
1060  git->unstage(path);
1061  }
1062  void unstage(QStringList const &paths)
1063  {
1064  git->unstage(paths);
1065  }
1066  bool pull(AbstractPtyProcess *pty = nullptr)
1067  {
1068  return git->pull(pty);
1069  }
1070 
1071  bool fetch(AbstractPtyProcess *pty = nullptr, bool prune = false)
1072  {
1073  return git->fetch(pty, prune);
1074  }
1076  {
1077  return git->fetch_tags_f(pty);
1078  }
1080  {
1081  return git->reset_head1();
1082  }
1083  bool reset_hard()
1084  {
1085  return git->reset_hard();
1086  }
1087  bool clean_df()
1088  {
1089  return git->clean_df();
1090  }
1091  bool push_u(bool set_upstream, QString const &remote, QString const &branch, bool force, AbstractPtyProcess *pty)
1092  {
1093  return git->push_u(set_upstream, remote, branch, force, pty);
1094  }
1095  QString objectType(const Git::Hash &id)
1096  {
1097  return git->objectType(id);
1098  }
1099  bool rm_cached(QString const &file)
1100  {
1101  return git->rm_cached(file);
1102  }
1103  void cherrypick(QString const &name)
1104  {
1105  git->cherrypick(name);
1106  }
1107  QString getCherryPicking() const
1108  {
1109  return git->getCherryPicking();
1110  }
1111  QList<Git::Branch> branches()
1112  {
1113  return git->branches();
1114  }
1115 
1116  QString signingKey(Git::Source purpose)
1117  {
1118  return git->signingKey(purpose);
1119  }
1120  bool setSigningKey(QString const &id, bool global)
1121  {
1122  return git->setSigningKey(id, global);
1123  }
1125  {
1126  return git->signPolicy(source);
1127  }
1129  {
1130  return git->setSignPolicy(source, policy);
1131  }
1132  bool configGpgProgram(QString const &path, bool global)
1133  {
1134  return git->configGpgProgram(path, global);
1135  }
1136 
1137  bool reflog(Git::ReflogItemList *out, int maxcount = 100)
1138  {
1139  return git->reflog(out, maxcount);
1140  }
1141  QByteArray blame(QString const &path)
1142  {
1143  return git->blame(path);
1144  }
1145 };
1146 
1147 #endif // GIT_H
ApplicationGlobal * global
Definition: main.cpp:27
void parseDiff(const std::string_view &s, Git::Diff const *info, Git::Diff *out)
Definition: Git.cpp:2047
void parseGitSubModules(QByteArray const &ba, QList< Git::SubmoduleItem > *out)
Definition: Git.cpp:2088
LineSide
Definition: Git.h:23
#define GIT_ID_LENGTH
Definition: Git.h:17
QList< NamedCommitItem > NamedCommitList
Definition: Git.h:721
static bool operator==(Git::Hash const &l, Git::Hash const &r)
Definition: Git.h:727
static bool operator<(Git::Hash const &l, Git::Hash const &r)
Definition: Git.h:732
std::shared_ptr< Git > GitPtr
Definition: Git.h:41
Definition: AbstractProcess.h:11
Definition: Git.h:739
GitRunner dup() const
Definition: Git.cpp:2132
void unstage(QStringList const &paths)
Definition: Git.h:1062
QList< Git::SubmoduleItem > submodules()
Definition: Git.h:987
QString workingDir() const
Definition: Git.h:770
bool configGpgProgram(QString const &path, bool global)
Definition: Git.h:1132
bool unstage_all()
Definition: Git.h:1045
bool checkout(QString const &branch_name, QString const &id={})
Definition: Git.h:930
QString diff(QString const &old_id, QString const &new_id)
Definition: Git.h:1016
void removeRemote(QString const &name)
Definition: Git.h:809
bool submodule_add(const Git::CloneData &data, bool force, AbstractPtyProcess *pty)
Definition: Git.h:991
void setRemoteURL(const Git::Remote &remote)
Definition: Git.h:801
Git::CommitItemList log_all(Git::Hash const &id, int maxcount)
Definition: Git.h:948
QList< Git::DiffRaw > diff_raw(Git::Hash const &old_id, Git::Hash const &new_id)
Definition: Git.h:1008
bool fetch(AbstractPtyProcess *pty=nullptr, bool prune=false)
Definition: Git.h:1071
QString diff_to_file(QString const &old_id, QString const &path)
Definition: Git.h:1024
QString signingKey(Git::Source purpose)
Definition: Git.h:1116
QString version()
Definition: Git.h:828
bool stash_drop()
Definition: Git.h:982
bool checkout_detach(QString const &id)
Definition: Git.h:934
GitRunner()=default
void setSshKey(const QString &sshkey) const
Definition: Git.h:778
void cherrypick(QString const &name)
Definition: Git.h:1103
bool init()
Definition: Git.h:833
bool push_u(bool set_upstream, QString const &remote, QString const &branch, bool force, AbstractPtyProcess *pty)
Definition: Git.h:1091
bool setSignPolicy(Git::Source source, Git::SignPolicy policy)
Definition: Git.h:1128
bool reflog(Git::ReflogItemList *out, int maxcount=100)
Definition: Git.h:1137
bool commit_amend_m(QString const &text, bool sign, AbstractPtyProcess *pty)
Definition: Git.h:897
std::optional< Git::CommitItem > log_signature(Git::Hash const &id)
Definition: Git.h:961
Git::FileStatusList status_s()
Definition: Git.h:1029
bool clean_df()
Definition: Git.h:1087
void setUser(Git::User const &user, bool global)
Definition: Git.h:869
static std::optional< Git::CommitItem > parseCommit(QByteArray const &ba)
Definition: Git.h:999
bool rm_cached(QString const &file)
Definition: Git.h:1099
void createBranch(QString const &name)
Definition: Git.h:913
bool commit(QString const &text, bool sign, AbstractPtyProcess *pty)
Definition: Git.h:893
GitRunner(GitRunner &&that)
Definition: Git.h:752
void checkoutBranch(QString const &name)
Definition: Git.h:917
QString const & sshKey() const
Definition: Git.h:774
bool fetch_tags_f(AbstractPtyProcess *pty)
Definition: Git.h:1075
void unstage(QString const &path)
Definition: Git.h:1058
QList< Git::Branch > branches()
Definition: Git.h:1111
bool delete_tag(QString const &name, bool remote)
Definition: Git.h:846
void addRemoteURL(const Git::Remote &remote)
Definition: Git.h:805
bool setSigningKey(QString const &id, bool global)
Definition: Git.h:1120
QString queryEntireCommitMessage(const Git::Hash &id)
Definition: Git.h:1003
std::optional< QByteArray > cat_file(const Git::Hash &id)
Definition: Git.h:1033
QDateTime repositoryLastModifiedTime()
Definition: Git.h:885
bool stash()
Definition: Git.h:974
bool push_tags(AbstractPtyProcess *pty=nullptr)
Definition: Git.h:905
QString diff_file(QString const &old_path, QString const &new_path)
Definition: Git.h:1020
void setDefaultBranch(QString const &branchname)
Definition: Git.h:877
void add_A()
Definition: Git.h:1041
QString getDefaultBranch()
Definition: Git.h:873
bool chdirexec(std::function< bool()> const &fn)
Definition: Git.h:792
void resetFile(QString const &path)
Definition: Git.h:851
std::string diff_head(std::function< bool(std::string const &name, std::string const &mime)> fn_accept=nullptr)
Definition: Git.h:1012
QString errorMessage() const
Definition: Git.h:787
QList< Git::Tag > tags()
Definition: Git.h:838
QStringList getRemotes()
Definition: Git.h:813
void rebase_abort()
Definition: Git.h:943
void resetAllFiles()
Definition: Git.h:855
Git::SignPolicy signPolicy(Git::Source source)
Definition: Git.h:1124
bool stash_apply()
Definition: Git.h:978
GitRunner(GitRunner const &that)
Definition: Git.h:748
Git::CommitItemList log(int maxcount)
Definition: Git.h:965
bool isValidWorkingCopy() const
Definition: Git.h:823
void mergeBranch(QString const &name, Git::MergeFastForward ff, bool squash)
Definition: Git.h:921
void removeFile(QString const &path)
Definition: Git.h:860
void operator=(GitRunner const &that)
Definition: Git.h:756
bool clone(Git::CloneData const &data, AbstractPtyProcess *pty)
Definition: Git.h:1037
QString objectType(const Git::Hash &id)
Definition: Git.h:1095
void unsetDefaultBranch()
Definition: Git.h:881
Git::User getUser(Git::Source purpose)
Definition: Git.h:865
Git::CommitItemList log_file(QString const &path, int maxcount)
Definition: Git.h:952
void stage(QString const &path)
Definition: Git.h:1050
bool tag(QString const &name, Git::Hash const &id={})
Definition: Git.h:842
QString status()
Definition: Git.h:889
GitRunner(GitPtr const &git)
Definition: Git.h:744
bool deleteBranch(QString const &name)
Definition: Git.h:925
Git::Hash rev_parse(QString const &name)
Definition: Git.h:797
void rebaseBranch(QString const &name)
Definition: Git.h:939
QStringList rev_list_all(Git::Hash const &id, int maxcount)
Definition: Git.h:956
bool pull(AbstractPtyProcess *pty=nullptr)
Definition: Git.h:1066
bool stage(QStringList const &paths, AbstractPtyProcess *pty)
Definition: Git.h:1054
QByteArray blame(QString const &path)
Definition: Git.h:1141
std::optional< Git::CommitItem > queryCommitItem(const Git::Hash &id)
Definition: Git.h:969
bool revert(const Git::Hash &id)
Definition: Git.h:901
void remote_v(std::vector< Git::Remote > *out)
Definition: Git.h:909
QString getMessage(const QString &id)
Definition: Git.h:783
bool reset_hard()
Definition: Git.h:1083
bool submodule_update(const Git::SubmoduleUpdateData &data, AbstractPtyProcess *pty)
Definition: Git.h:995
QString getCherryPicking() const
Definition: Git.h:1107
bool reset_head1()
Definition: Git.h:1079
static bool isValidWorkingCopy(QString const &dir)
Definition: Git.h:818
GitPtr git
Definition: Git.h:742
void setWorkingRepositoryDir(QString const &repo, const QString &submodpath, const QString &sshkey)
Definition: Git.h:766
Definition: Git.h:408
std::shared_ptr< Data > d
Definition: Git.h:413
std::vector< char > * find(QString const &key)
Definition: Git.h:430
void clear()
Definition: Git.h:424
void insert(QString const &key, std::vector< char > const &value)
Definition: Git.h:439
CommandCache(bool make=false)
Definition: Git.h:414
Definition: Git.h:144
CommitItem * find(Hash const &id)
Definition: Git.h:183
void clear()
Definition: Git.h:168
CommitItem & operator[](size_t i)
Definition: Git.h:160
bool empty() const
Definition: Git.h:172
CommitItem const * find(Hash const &id) const
Definition: Git.h:191
std::vector< CommitItem > list
Definition: Git.h:146
CommitItem const & at(size_t i) const
Definition: Git.h:156
void updateIndex()
Definition: Git.h:176
CommitItem & at(size_t i)
Definition: Git.h:152
size_t size() const
Definition: Git.h:148
std::map< Hash, size_t > index
Definition: Git.h:147
Definition: Git.h:73
QString git_command
Definition: Git.h:75
QString ssh_command
Definition: Git.h:76
Definition: Git.h:202
QString diff
Definition: Git.h:215
QString path
Definition: Git.h:217
Type
Definition: Git.h:204
struct Git::Diff::SubmoduleDetail a_submodule
Diff()=default
Type type
Definition: Git.h:214
void makeForSingleFile(Diff *diff, QString const &id_a, QString const &id_b, QString const &path, QString const &mode)
Definition: Git.cpp:2034
QString index
Definition: Git.h:216
Diff(QString const &id, QString const &path, QString const &mode)
Definition: Git.h:229
QList< Hunk > hunks
Definition: Git.h:223
struct Git::Diff::SubmoduleDetail b_submodule
struct Git::Diff::BLOB_AB_ blob
bool isSubmodule() const
Definition: Git.h:233
QString mode
Definition: Git.h:218
Definition: Git.h:328
static FileStatusCode parseFileStatusCode(char x, char y)
Definition: Git.cpp:1873
bool isUnmerged() const
Definition: Git.h:347
void parse(QString const &text)
Definition: Git.cpp:1895
int code_x() const
Definition: Git.h:371
QString path2() const
Definition: Git.h:391
int code_y() const
Definition: Git.h:376
FileStatusCode code() const
Definition: Git.h:366
bool isDeleted() const
Definition: Git.h:381
FileStatus(QString const &text)
Definition: Git.h:361
QString path1() const
Definition: Git.h:386
FileStatus()=default
bool isStaged() const
Definition: Git.h:342
QString rawpath2() const
Definition: Git.h:401
bool isTracked() const
Definition: Git.h:352
QString rawpath1() const
Definition: Git.h:396
struct Git::FileStatus::Data data
Definition: Git.h:46
void assign(std::string_view const &qid)
Definition: Git.cpp:87
QString toQString(int maxlen=-1) const
Definition: Git.cpp:97
bool isValid() const
Definition: Git.cpp:113
uint8_t id_[GIT_ID_LENGTH/2]
Definition: Git.h:49
int compare(Hash const &other) const
Definition: Git.h:60
Hash()
Definition: Git.cpp:20
bool valid_
Definition: Git.h:48
void _assign(VIEW const &id)
Definition: Git.cpp:62
Definition: Git.h:197
std::vector< std::string > lines
Definition: Git.h:200
std::string at
Definition: Git.h:199
Definition: Git.h:43
bool reflog(ReflogItemList *out, int maxcount=100)
Definition: Git.cpp:1762
QString getDefaultBranch()
Definition: Git.cpp:587
bool fetch(AbstractPtyProcess *pty=nullptr, bool prune=false)
Definition: Git.cpp:1494
QStringList getRemotes()
Definition: Git.cpp:1613
Source
Definition: Git.h:630
static bool isUncommited(CommitItem const &item)
Definition: Git.h:263
QString getCurrentBranchName()
Definition: Git.cpp:609
bool stash_drop()
Definition: Git.cpp:1683
void resetAllFiles()
Definition: Git.cpp:1427
bool git(QString const &arg)
Definition: Git.h:481
QStringList make_branch_list_()
Definition: Git.cpp:1515
SignPolicy
Definition: Git.h:670
@ Unset
Definition: Git.h:671
@ False
Definition: Git.h:672
@ True
Definition: Git.h:673
CommitItemList log(int maxcount)
Definition: Git.cpp:944
bool fetch_tags_f(AbstractPtyProcess *pty)
Definition: Git.cpp:1506
bool chdirexec(std::function< bool()> const &fn)
Definition: Git.cpp:279
bool isValidWorkingCopy() const
Definition: Git.cpp:424
QStringList rev_list_all(Hash const &id, int maxcount)
Definition: Git.cpp:924
void unsetDefaultBranch()
Definition: Git.cpp:602
void setUser(User const &user, bool global)
Definition: Git.cpp:1645
QString status()
Definition: Git.cpp:228
void setGitCommand(QString const &gitcmd, const QString &sshcmd={})
Definition: Git.cpp:252
QByteArray blame(QString const &path)
Definition: Git.cpp:1921
CommitItemList log_file(QString const &path, int maxcount)
Definition: Git.cpp:900
void rebase_abort()
Definition: Git.cpp:1608
static bool isValidID(QString const &id)
Definition: Git.cpp:204
bool pull(AbstractPtyProcess *pty=nullptr)
Definition: Git.cpp:1487
QList< DiffRaw > diff_raw(Hash const &old_id, Hash const &new_id)
Definition: Git.cpp:545
bool git(QString const &arg, Option const &opt, bool debug_=false)
Definition: Git.cpp:293
Hash rev_parse(QString const &name)
Definition: Git.cpp:453
QDateTime repositoryLastModifiedTime()
Definition: Git.cpp:949
bool commit_(QString const &msg, bool amend, bool sign, AbstractPtyProcess *pty)
Definition: Git.cpp:1282
FileStatusList status_s()
Definition: Git.cpp:1365
Private * m
Definition: Git.h:449
QString version()
Definition: Git.cpp:429
QString diff_file(QString const &old_path, QString const &new_path)
Definition: Git.cpp:512
bool stash_apply()
Definition: Git.cpp:1678
QString getCherryPicking() const
Definition: Git.cpp:1541
QList< ReflogItem > ReflogItemList
Definition: Git.h:665
QList< RemoteInfo > ls_remote()
Definition: Git.cpp:1931
bool tag(QString const &name, Hash const &id={})
Definition: Git.cpp:482
bool git_nochdir(QString const &arg, AbstractPtyProcess *pty)
Definition: Git.h:492
QString encodeQuotedText(QString const &str)
Definition: Git.cpp:1260
bool git_nolog(QString const &arg, AbstractPtyProcess *pty)
Definition: Git.h:485
QList< SubmoduleItem > submodules()
Definition: Git.cpp:1198
void createBranch(QString const &name)
Definition: Git.cpp:1526
QString workingDir() const
Definition: Git.cpp:185
QString const & sshKey() const
Definition: Git.cpp:194
void cherrypick(QString const &name)
Definition: Git.cpp:1536
bool configGpgProgram(QString const &path, bool global)
Definition: Git.cpp:2016
bool rm_cached(QString const &file)
Definition: Git.cpp:1688
static std::optional< CommitItem > parseCommitItem(const QString &line)
Definition: Git.cpp:830
SignatureGrade
Definition: Git.h:107
bool commit(QString const &text, bool sign, AbstractPtyProcess *pty)
Definition: Git.cpp:1304
static QString trimPath(QString const &s)
Definition: Git.cpp:1842
void setRemoteURL(const Remote &remote)
Definition: Git.cpp:1740
void checkoutBranch(QString const &name)
Definition: Git.cpp:1531
bool clone(CloneData const &data, AbstractPtyProcess *pty)
Definition: Git.cpp:1171
CommitItemList log_all(Hash const &id, int maxcount)
コミットログを取得する
Definition: Git.cpp:876
void add_A()
Definition: Git.cpp:1437
SignPolicy signPolicy(Source source)
Definition: Git.cpp:1978
QString resultQString() const
Definition: Git.cpp:247
std::optional< CommitItem > queryCommitItem(const Hash &id)
Definition: Git.cpp:1127
FileStatusCode
Definition: Git.h:300
User getUser(Source purpose)
Definition: Git.cpp:1626
std::string_view resultStdString() const
Definition: Git.cpp:240
void removeRemote(QString const &name)
Definition: Git.cpp:1755
void unstage(QString const &path)
Definition: Git.cpp:1464
static SignatureGrade evaluateSignature(char c)
Definition: Git.h:241
QString diff_to_file(QString const &old_id, QString const &path)
Definition: Git.cpp:579
std::vector< FileStatus > FileStatusList
Definition: Git.h:406
std::optional< CommitItem > log_signature(Hash const &id)
Git::log_signature.
Definition: Git.cpp:967
void setSshKey(const QString &sshkey) const
Definition: Git.cpp:199
QString gitCommand() const
Definition: Git.cpp:258
void stage(QString const &path)
Definition: Git.cpp:1442
bool clean_df()
Definition: Git.cpp:1668
QString errorMessage() const
Definition: Git.cpp:269
bool stash()
Definition: Git.cpp:1673
std::optional< QByteArray > cat_file(Hash const &id)
Definition: Git.cpp:1388
QString signingKey(Source purpose)
Definition: Git.cpp:1950
bool revert(const Hash &id)
Definition: Git.cpp:1314
void addRemoteURL(const Remote &remote)
Definition: Git.cpp:1747
void setDefaultBranch(QString const &branchname)
Definition: Git.cpp:595
void clearResult()
Definition: Git.cpp:264
bool unstage_all()
Definition: Git.cpp:1482
bool submodule_update(const SubmoduleUpdateData &data, AbstractPtyProcess *pty)
Definition: Git.cpp:1245
void rebaseBranch(QString const &name)
Definition: Git.cpp:1603
FileStatusList status_s_()
Definition: Git.cpp:1347
QString diff(QString const &old_id, QString const &new_id)
Definition: Git.cpp:504
bool commit_amend_m(QString const &text, bool sign, AbstractPtyProcess *pty)
Definition: Git.cpp:1309
QString objectType(const Hash &id)
Definition: Git.cpp:1370
~Git()
Definition: Git.cpp:168
bool setSigningKey(QString const &id, bool global)
Definition: Git.cpp:1965
Git(Git &&r)=delete
bool push_tags(AbstractPtyProcess *pty=nullptr)
Definition: Git.cpp:1339
bool reset_head1()
Definition: Git.cpp:1658
void resetFile(QString const &path)
Definition: Git.cpp:1422
QByteArray toQByteArray() const
Definition: Git.cpp:234
QStringList getUntrackedFiles()
Definition: Git.cpp:621
static bool isValidID(Hash const &id)
Definition: Git.h:587
bool checkout(QString const &branch_name, QString const &id={})
Definition: Git.cpp:1586
bool checkout_detach(QString const &id)
Definition: Git.cpp:1598
static CloneData preclone(QString const &url, QString const &path)
Definition: Git.cpp:1142
void mergeBranch(QString const &name, MergeFastForward ff, bool squash)
Definition: Git.cpp:1561
QString queryEntireCommitMessage(const Hash &id)
Definition: Git.cpp:1397
bool deleteBranch(QString const &name)
Definition: Git.cpp:1581
QList< Branch > branches()
Definition: Git.cpp:699
MergeFastForward
Definition: Git.h:322
QList< Tag > tags()
Definition: Git.cpp:463
void setCommandCache(CommandCache const &cc)
Definition: Git.cpp:173
bool delete_tag(QString const &name, bool remote)
Definition: Git.cpp:489
void setWorkingRepositoryDir(QString const &repo, const QString &submodpath, const QString &sshkey)
Definition: Git.cpp:178
int getProcessExitCode() const
Definition: Git.cpp:274
QByteArray cat_file_(Hash const &id)
Definition: Git.cpp:1379
static void parseAheadBehind(QString const &s, Branch *b)
Definition: Git.cpp:633
bool reset_hard()
Definition: Git.cpp:1663
static std::optional< CommitItem > parseCommit(QByteArray const &ba)
Definition: Git.cpp:1028
void remote_v(std::vector< Remote > *out)
Definition: Git.cpp:1694
void removeFile(QString const &path)
Definition: Git.cpp:1432
bool submodule_add(const CloneData &data, bool force, AbstractPtyProcess *pty)
Definition: Git.cpp:1227
std::string diff_head(std::function< bool(std::string const &, std::string const &)> fn_accept=nullptr)
Definition: Git.cpp:520
bool setSignPolicy(Source source, SignPolicy policy)
Definition: Git.cpp:1995
bool push_u(bool set_upstream, QString const &remote, QString const &branch, bool force, AbstractPtyProcess *pty)
Definition: Git.cpp:1321
bool init()
Definition: Git.cpp:435
Git()
Definition: Git.cpp:156
QString getMessage(const QString &id)
Definition: Git.cpp:1555
Definition: Win32PtyProcess.h:9
static bool isValidMailAddress(const QString &email)
文字列が有効なメールアドレスか判定する
Definition: misc.cpp:748
Definition: Git.h:268
int flags
Definition: Git.h:280
bool isHeadDetached() const
Definition: Git.h:289
int behind
Definition: Git.h:273
@ None
Definition: Git.h:275
@ Current
Definition: Git.h:276
@ HeadDetachedFrom
Definition: Git.h:278
@ HeadDetachedAt
Definition: Git.h:277
QString remote
Definition: Git.h:271
QString name
Definition: Git.h:269
int ahead
Definition: Git.h:272
bool isCurrent() const
Definition: Git.h:285
Hash id
Definition: Git.h:270
Definition: Git.h:519
QString subdir
Definition: Git.h:522
QString url
Definition: Git.h:520
QString basedir
Definition: Git.h:521
Definition: Git.h:410
std::map< QString, std::vector< char > > map
Definition: Git.h:411
Definition: Git.h:116
QList< Hash > parent_ids
Definition: Git.h:119
void setParents(QStringList const &list)
Definition: Git.cpp:123
bool has_gpgsig
Definition: Git.h:125
bool has_child
Definition: Git.h:133
bool order_fixed
Definition: Git.h:136
QString email
Definition: Git.h:121
std::vector< TreeLine > parent_lines
Definition: Git.h:124
QString message
Definition: Git.h:122
QDateTime commit_date
Definition: Git.h:123
QString text
Definition: Git.h:128
QString author
Definition: Git.h:120
bool resolved
Definition: Git.h:135
std::vector< uint8_t > key_fingerprint
Definition: Git.h:130
Hash commit_id
Definition: Git.h:117
QString gpgsig
Definition: Git.h:126
char verify
Definition: Git.h:129
Hash tree
Definition: Git.h:118
QString trust
Definition: Git.h:131
int marker_depth
Definition: Git.h:134
struct Git::CommitItem::@7 sign
Definition: Git.h:556
QString id
Definition: Git.h:557
QString mode
Definition: Git.h:558
Definition: Git.h:555
QStringList files
Definition: Git.h:561
struct Git::DiffRaw::AB b
struct Git::DiffRaw::AB a
QString state
Definition: Git.h:560
Definition: Git.h:219
QString b_id_or_path
Definition: Git.h:221
QString a_id_or_path
Definition: Git.h:220
Definition: Git.h:224
CommitItem commit
Definition: Git.h:226
SubmoduleItem item
Definition: Git.h:225
Definition: Git.h:330
QString rawpath1
Definition: Git.h:334
char code_y
Definition: Git.h:332
FileStatusCode code
Definition: Git.h:333
QString path1
Definition: Git.h:336
QString path2
Definition: Git.h:337
char code_x
Definition: Git.h:331
QString rawpath2
Definition: Git.h:335
Definition: Git.h:79
Type
Definition: Git.h:80
QByteArray content
Definition: Git.h:92
Type type
Definition: Git.h:91
Definition: Git.h:473
AbstractPtyProcess * pty
Definition: Git.h:477
bool errout
Definition: Git.h:476
bool chdir
Definition: Git.h:474
QString prefix
Definition: Git.h:478
bool log
Definition: Git.h:475
Definition: Git.cpp:135
Definition: Git.h:655
QString type
Definition: Git.h:660
QString path
Definition: Git.h:661
QString atts_a
Definition: Git.h:656
QString id_a
Definition: Git.h:658
QString id_b
Definition: Git.h:659
QString atts_b
Definition: Git.h:657
Definition: Git.h:650
QString message
Definition: Git.h:654
QList< File > files
Definition: Git.h:663
QString id
Definition: Git.h:651
QString head
Definition: Git.h:652
QString command
Definition: Git.h:653
Definition: Git.h:681
QString name
Definition: Git.h:683
QString commit_id
Definition: Git.h:682
Definition: Git.h:564
QString url_push
Definition: Git.h:567
QString ssh_key
Definition: Git.h:568
bool operator<(Remote const &r) const
Definition: Git.h:569
void set_url(QString const &url)
Definition: Git.h:577
QString const & url() const
Definition: Git.h:573
QString name
Definition: Git.h:565
QString url_fetch
Definition: Git.h:566
Definition: Git.h:95
QString name
Definition: Git.h:96
QString refs
Definition: Git.h:99
QString url
Definition: Git.h:100
QString path
Definition: Git.h:98
Hash id
Definition: Git.h:97
Definition: Git.h:691
bool recursive
Definition: Git.h:693
bool init
Definition: Git.h:692
Definition: Git.h:295
QString name
Definition: Git.h:296
Hash id
Definition: Git.h:297
Definition: Git.h:622
QString email
Definition: Git.h:624
QString name
Definition: Git.h:623
Definition: Git.h:709
Type type
Definition: Git.h:716
QString remote
Definition: Git.h:717
Type
Definition: Git.h:710
Git::Hash id
Definition: Git.h:719
QString name
Definition: Git.h:718
Definition: Git.h:28
TreeLine(int index=-1, int depth=-1)
Definition: Git.h:33
bool bend_early
Definition: Git.h:32
int depth
Definition: Git.h:30
int index
Definition: Git.h:29
int color_number
Definition: Git.h:31