Guitar
GitTypes.h
Go to the documentation of this file.
1 #ifndef GITTYPES_H
2 #define GITTYPES_H
3 
4 #include "GitHash.h"
5 #include "ProcessStatus.h"
6 #include <QByteArray>
7 #include <QList>
8 #include <map>
9 #include <span>
10 
11 #define PATH_PREFIX "*"
12 
13 struct GitCommitItem;
14 
15 namespace std {
16 template <> class hash<GitHash> {
17 public:
18  size_t operator () (GitHash const &h) const
19  {
20  return h._std_hash();
21  }
22 };
23 }
24 
25 struct GitFileItem {
26  std::string name;
27  bool isdir = false;
28 };
29 
31 private:
32  struct Private;
34  GitCommitItem &_at(size_t i);
35  void _update_ptrs();
36  void assign(GitCommitItemList const &r);
37 public:
42  GitCommitItemList(std::vector<GitCommitItem> &&list);
44  {
45  assign(r);
46  }
47  void setList(std::vector<GitCommitItem> &&list);
48 
49  bool empty() const;
50  size_t size() const;
51  GitCommitItem const &at(size_t i) const;
52  GitCommitItem const &operator [] (size_t i) const;
53  void push_front(GitCommitItem const &item);
54  std::string previousMessage() const;
55  void updateIndex();
56 
57  int find_index(GitHash const &id) const;
58  GitCommitItem const *find(GitHash const &id) const;
59 
60  std::span<GitCommitItem const *const> items() const;
61 
62  std::span<GitCommitItem const *const> c_items() const;
63 
64  void fixCommitLogOrder();
65  void updateCommitGraph();
66 };
67 
68 struct GitTag {
69  std::string name;
71 };
72 
73 struct GitBranch {
74  std::string name;
76  std::string remote;
77  int ahead = 0;
78  int behind = 0;
79  enum {
81  Current = 0x0001,
82  HeadDetachedAt = 0x0002,
83  HeadDetachedFrom = 0x0004,
84  };
85  int flags = 0;
86  explicit operator bool () const
87  {
88  return id.isValid() && !name.empty();
89  }
90  bool isCurrent() const
91  {
92  return flags & Current;
93  }
94  bool isHeadDetached() const
95  {
96  return flags & HeadDetachedAt;
97  }
98 };
99 
100 enum class GitSource {
101  Default,
102  Global,
103  Local,
104 };
105 
107 public:
108  enum class Code : unsigned int {
109  Unknown,
110  Ignored,
111  Untracked,
112  NotUpdated = 0x10000000,
113  Staged_ = 0x20000000,
115  AddedToIndex,
119  Unmerged_ = 0x40000000,
127  Tracked_ = 0xf0000000
128  };
129 
130  struct Data {
131  char code_x = 0;
132  char code_y = 0;
134  std::string rawpath1;
135  std::string rawpath2;
136  std::string path1;
137  std::string path2;
138  } data;
139 
140  static Code parseFileStatusCode(char x, char y);
141 
142  bool isStaged() const
143  {
144  return (int)data.code & (int)Code::Staged_;
145  }
146 
147  bool isUnmerged() const
148  {
149  return (int)data.code & (int)Code::Unmerged_;
150  }
151 
152  bool isTracked() const
153  {
154  return (int)data.code & (int)Code::Tracked_;
155  }
156 
157  void parse(std::string const &text);
158 
159  GitFileStatus() = default;
160 
161  GitFileStatus(std::string const &text)
162  {
163  parse(text);
164  }
165 
166  Code code() const
167  {
168  return data.code;
169  }
170 
171  int code_x() const
172  {
173  return data.code_x;
174  }
175 
176  int code_y() const
177  {
178  return data.code_y;
179  }
180 
181  bool isDeleted() const
182  {
183  return code_x() == 'D' || code_y() == 'D';
184  }
185 
186  std::string path1() const
187  {
188  return data.path1;
189  }
190 
191  std::string path2() const
192  {
193  return data.path2;
194  }
195 
196  std::string rawpath1() const
197  {
198  return data.rawpath1;
199  }
200 
201  std::string rawpath2() const
202  {
203  return data.rawpath2;
204  }
205 };
206 
208  Default,
209  No,
210  Only,
211 };
212 
213 struct GitDiffRaw {
214  struct AB {
215  std::string id;
216  std::string mode;
217  } a, b;
218  std::string state;
219  std::vector<std::string> files;
220 };
221 
223  std::string id;
224  std::string head;
225  std::string command;
226  std::string message;
227  struct File {
228  std::string atts_a;
229  std::string atts_b;
230  std::string id_a;
231  std::string id_b;
232  std::string type;
233  std::string path;
234  };
235  QList<File> files;
236 };
237 
242 };
243 
244 enum class GitSignatureGrade {
245  NoSignature,
246  Unknown,
247  Good,
248  Dubious,
249  Missing,
250  Bad,
251 };
252 
253 std::string gitTrimPath(std::string const &s);
254 
255 #endif // GITTYPES_H
GitSignPolicy
Definition: GitTypes.h:238
@ True
Definition: GitTypes.h:241
@ Unset
Definition: GitTypes.h:239
@ False
Definition: GitTypes.h:240
GitMergeFastForward
Definition: GitTypes.h:207
std::string gitTrimPath(std::string const &s)
Definition: GitTypes.cpp:159
GitSource
Definition: GitTypes.h:100
GitSignatureGrade
Definition: GitTypes.h:244
Definition: GitTypes.h:30
GitCommitItem const * find(GitHash const &id) const
Definition: GitTypes.cpp:326
GitCommitItemList()
Definition: GitTypes.cpp:210
size_t size() const
Definition: GitTypes.cpp:257
GitCommitItem const & at(size_t i) const
Definition: GitTypes.cpp:267
void fixCommitLogOrder()
Definition: GitTypes.cpp:347
void assign(GitCommitItemList const &r)
Definition: GitTypes.cpp:244
void setList(std::vector< GitCommitItem > &&list)
Definition: GitTypes.cpp:251
GitCommitItem & _at(size_t i)
Definition: GitTypes.cpp:262
void _update_ptrs()
Definition: GitTypes.cpp:233
void updateIndex()
Definition: GitTypes.cpp:298
std::span< GitCommitItem const *const > c_items() const
Definition: GitTypes.cpp:341
void push_front(GitCommitItem const &item)
Definition: GitTypes.cpp:282
Private * m
Definition: GitTypes.h:32
void operator=(GitCommitItemList const &r)
Definition: GitTypes.h:43
bool empty() const
Definition: GitTypes.cpp:277
int find_index(GitHash const &id) const
Definition: GitTypes.cpp:306
void updateCommitGraph()
MainWindow::updateCommitGraph.
Definition: GitTypes.cpp:417
std::span< GitCommitItem const *const > items() const
Definition: GitTypes.cpp:335
GitCommitItem const & operator[](size_t i) const
Definition: GitTypes.cpp:272
~GitCommitItemList()
Definition: GitTypes.cpp:205
std::string previousMessage() const
Definition: GitTypes.cpp:288
Definition: GitTypes.h:106
int code_y() const
Definition: GitTypes.h:176
bool isStaged() const
Definition: GitTypes.h:142
GitFileStatus(std::string const &text)
Definition: GitTypes.h:161
std::string rawpath1() const
Definition: GitTypes.h:196
std::string path1() const
Definition: GitTypes.h:186
void parse(std::string const &text)
Definition: Git.cpp:1646
bool isTracked() const
Definition: GitTypes.h:152
std::string rawpath2() const
Definition: GitTypes.h:201
int code_x() const
Definition: GitTypes.h:171
Code code() const
Definition: GitTypes.h:166
static Code parseFileStatusCode(char x, char y)
Definition: Git.cpp:1624
std::string path2() const
Definition: GitTypes.h:191
bool isUnmerged() const
Definition: GitTypes.h:147
bool isDeleted() const
Definition: GitTypes.h:181
GitFileStatus()=default
Code
Definition: GitTypes.h:108
struct GitFileStatus::Data data
Definition: GitHash.h:9
size_t _std_hash() const
Definition: GitTypes.cpp:128
Definition: GitObjectManager.h:7
Definition: GitTypes.h:73
GitHash id
Definition: GitTypes.h:75
std::string remote
Definition: GitTypes.h:76
int ahead
Definition: GitTypes.h:77
int flags
Definition: GitTypes.h:85
int behind
Definition: GitTypes.h:78
std::string name
Definition: GitTypes.h:74
@ Current
Definition: GitTypes.h:81
@ HeadDetachedFrom
Definition: GitTypes.h:83
@ None
Definition: GitTypes.h:80
@ HeadDetachedAt
Definition: GitTypes.h:82
bool isHeadDetached() const
Definition: GitTypes.h:94
bool isCurrent() const
Definition: GitTypes.h:90
Definition: GitTypes.cpp:197
Definition: GitCommitItem.h:21
Definition: GitTypes.h:214
std::string mode
Definition: GitTypes.h:216
std::string id
Definition: GitTypes.h:215
Definition: GitTypes.h:213
struct GitDiffRaw::AB a
std::vector< std::string > files
Definition: GitTypes.h:219
struct GitDiffRaw::AB b
std::string state
Definition: GitTypes.h:218
Definition: GitTypes.h:25
std::string name
Definition: GitTypes.h:26
bool isdir
Definition: GitTypes.h:27
Definition: GitTypes.h:130
std::string rawpath1
Definition: GitTypes.h:134
char code_y
Definition: GitTypes.h:132
std::string rawpath2
Definition: GitTypes.h:135
Code code
Definition: GitTypes.h:133
char code_x
Definition: GitTypes.h:131
std::string path1
Definition: GitTypes.h:136
std::string path2
Definition: GitTypes.h:137
Definition: GitTypes.h:227
std::string type
Definition: GitTypes.h:232
std::string atts_a
Definition: GitTypes.h:228
std::string path
Definition: GitTypes.h:233
std::string id_b
Definition: GitTypes.h:231
std::string atts_b
Definition: GitTypes.h:229
std::string id_a
Definition: GitTypes.h:230
Definition: GitTypes.h:222
QList< File > files
Definition: GitTypes.h:235
std::string message
Definition: GitTypes.h:226
std::string id
Definition: GitTypes.h:223
std::string head
Definition: GitTypes.h:224
std::string command
Definition: GitTypes.h:225
Definition: GitTypes.h:68
std::string name
Definition: GitTypes.h:69
GitHash id
Definition: GitTypes.h:70