Guitar
GitObjectManager.h
Go to the documentation of this file.
1 #ifndef GITOBJECTMANAGER_H
2 #define GITOBJECTMANAGER_H
3 
4 #include <QMutex>
5 #include <QString>
6 #include "GitPack.h"
7 #include "GitPackIdxV2.h"
8 #include <map>
9 #include "common/joinpath.h"
10 #include <mutex>
11 
12 class GitPackIdxV2;
13 
14 class Git;
15 
17  friend class GitObjectCache;
18 private:
21  std::vector<GitPackIdxPtr> git_idx_list;
22 
23  static void applyDelta(QByteArray const *base, QByteArray const *delta, QByteArray *out);
24  static bool loadPackedObject(GitPackIdxPtr const &idx, QIODevice *packfile, GitPackIdxItem const *item, GitPack::Object *out);
25  bool extractObjectFromPackFile(GitPackIdxPtr const &idx, GitPackIdxItem const *item, GitPack::Object *out);
26  bool extractObjectFromPackFile(GitRunner g, const Git::Hash &id, QByteArray *out, Git::Object::Type *type);
27  void loadIndexes(GitRunner g);
28  QString findObjectPath(GitRunner g, const Git::Hash &id);
29  bool loadObject(GitRunner g, const Git::Hash &id, QByteArray *out, Git::Object::Type *type);
30  void init();
31 public:
33  void setup();
34  bool catFile(GitRunner g, const Git::Hash &id, QByteArray *out, Git::Object::Type *type);
35  void clearIndexes();
36 
37  static QStringList findObject(const QString &id, const QString &repo_local_dir);
38 };
39 
41 public:
42  struct Item {
44  QByteArray ba;
46  };
47 private:
49  using ItemPtr = std::shared_ptr<Item>;
50  std::vector<ItemPtr> items_;
51  std::map<QString, Git::Hash> rev_parse_map_;
52  size_t size() const;
53 public:
54  void clear();
55  Git::Hash revParse(GitRunner g, QString const &name);
56  Git::Object catFile(GitRunner g, const Git::Hash &id);
57 
58  Git::Hash const &item_id(int i) const
59  {
60  return items_[i]->id;
61  }
62 };
63 
64 class GitCommit {
65 public:
66  QString tree_id;
67  QStringList parents;
68 
69  static bool parseCommit(GitRunner g, GitObjectCache *objcache, Git::Hash const &id, GitCommit *out);
70 };
71 
72 struct GitTreeItem {
73  enum Type {
78  };
80  QString name;
81  QString id;
82  QString mode;
83 
84  QString to_string_() const
85  {
86  QString t;
87  switch (type) {
88  case TREE: t = "TREE"; break;
89  case BLOB: t = "BLOB"; break;
90  }
91  return QString("GitTreeItem:{ %1 %2 %3 %4 }").arg(t).arg(id).arg(mode).arg(name);
92  }
93 };
94 
95 using GitTreeItemList = QList<GitTreeItem>;
96 
98 private:
101 
102  std::map<QString, GitTreeItem> blob_map;
103  std::map<QString, QString> tree_id_map;
104 
105  QString lookup_(GitRunner g, QString const &file, GitTreeItem *out);
106 public:
108 
109  QString lookup(GitRunner g, QString const &file);
110  bool lookup(GitRunner g, QString const &file, GitTreeItem *out);
111 
112  void parseTree(GitRunner g, QString const &tree_id);
113  QString parseCommit(GitRunner g, const Git::Hash &commit_id);
114 
115  GitTreeItemList const *treelist() const
116  {
117  return &root_item_list;
118  }
119 };
120 
121 void parseGitTreeObject(QByteArray const &ba, const QString &path_prefix, GitTreeItemList *out);
122 bool parseGitTreeObject(GitRunner g, GitObjectCache *objcache, QString const &commit_id, QString const &path_prefix, GitTreeItemList *out);
123 
124 #endif // GITOBJECTMANAGER_H
void parseGitTreeObject(QByteArray const &ba, const QString &path_prefix, GitTreeItemList *out)
Definition: GitObjectManager.cpp:364
QList< GitTreeItem > GitTreeItemList
Definition: GitObjectManager.h:95
std::shared_ptr< GitPackIdxV2 > GitPackIdxPtr
Definition: GitPackIdxV2.h:68
Definition: GitObjectManager.h:97
GitCommitTree(GitObjectCache *objcache)
Definition: GitDiff.cpp:312
GitTreeItemList const * treelist() const
Definition: GitObjectManager.h:115
std::map< QString, GitTreeItem > blob_map
Definition: GitObjectManager.h:102
GitTreeItemList root_item_list
Definition: GitObjectManager.h:100
std::map< QString, QString > tree_id_map
Definition: GitObjectManager.h:103
QString parseCommit(GitRunner g, const Git::Hash &commit_id)
Definition: GitDiff.cpp:396
QString lookup_(GitRunner g, QString const &file, GitTreeItem *out)
Definition: GitDiff.cpp:317
void parseTree(GitRunner g, QString const &tree_id)
Definition: GitDiff.cpp:391
GitObjectCache * objcache
Definition: GitObjectManager.h:99
QString lookup(GitRunner g, QString const &file)
Definition: GitDiff.cpp:371
Definition: GitObjectManager.h:64
static bool parseCommit(GitRunner g, GitObjectCache *objcache, Git::Hash const &id, GitCommit *out)
Definition: GitObjectManager.cpp:334
QString tree_id
Definition: GitObjectManager.h:66
QStringList parents
Definition: GitObjectManager.h:67
Definition: GitObjectManager.h:40
GitObjectManager object_manager_
Definition: GitObjectManager.h:48
Git::Hash const & item_id(int i) const
Definition: GitObjectManager.h:58
size_t size() const
Definition: GitObjectManager.cpp:233
void clear()
Definition: GitObjectManager.cpp:242
std::vector< ItemPtr > items_
Definition: GitObjectManager.h:50
std::map< QString, Git::Hash > rev_parse_map_
Definition: GitObjectManager.h:51
Git::Object catFile(GitRunner g, const Git::Hash &id)
Definition: GitObjectManager.cpp:270
std::shared_ptr< Item > ItemPtr
Definition: GitObjectManager.h:49
Git::Hash revParse(GitRunner g, QString const &name)
Definition: GitObjectManager.cpp:249
Definition: GitObjectManager.h:16
QString findObjectPath(GitRunner g, const Git::Hash &id)
Definition: GitObjectManager.cpp:179
QString subdir_git_objects_pack
Definition: GitObjectManager.h:20
static void applyDelta(QByteArray const *base, QByteArray const *delta, QByteArray *out)
Definition: GitObjectManager.cpp:52
void clearIndexes()
Definition: GitObjectManager.cpp:47
void init()
Definition: GitObjectManager.cpp:20
GitObjectManager()
Definition: GitObjectManager.cpp:14
std::vector< GitPackIdxPtr > git_idx_list
Definition: GitObjectManager.h:21
QString subdir_git_objects
Definition: GitObjectManager.h:19
void loadIndexes(GitRunner g)
Definition: GitObjectManager.cpp:31
static bool loadPackedObject(GitPackIdxPtr const &idx, QIODevice *packfile, GitPackIdxItem const *item, GitPack::Object *out)
Definition: GitObjectManager.cpp:109
void setup()
Definition: GitObjectManager.cpp:26
bool extractObjectFromPackFile(GitPackIdxPtr const &idx, GitPackIdxItem const *item, GitPack::Object *out)
Definition: GitObjectManager.cpp:144
bool loadObject(GitRunner g, const Git::Hash &id, QByteArray *out, Git::Object::Type *type)
Definition: GitObjectManager.cpp:205
static QStringList findObject(const QString &id, const QString &repo_local_dir)
GitObjectManager::findObject.
Definition: GitObjectManager.cpp:415
bool catFile(GitRunner g, const Git::Hash &id, QByteArray *out, Git::Object::Type *type)
Definition: GitObjectManager.cpp:223
Definition: GitPackIdxV2.h:20
Definition: Git.h:739
Definition: Git.h:46
Definition: Git.h:43
Definition: GitObjectManager.h:42
QByteArray ba
Definition: GitObjectManager.h:44
Git::Object::Type type
Definition: GitObjectManager.h:45
Git::Hash id
Definition: GitObjectManager.h:43
Definition: GitPackIdxV2.h:10
Definition: GitPack.h:19
Definition: GitObjectManager.h:72
QString mode
Definition: GitObjectManager.h:82
Type
Definition: GitObjectManager.h:73
@ TREE
Definition: GitObjectManager.h:75
@ UNKNOWN
Definition: GitObjectManager.h:74
@ COMMIT
Definition: GitObjectManager.h:77
@ BLOB
Definition: GitObjectManager.h:76
QString name
Definition: GitObjectManager.h:80
QString id
Definition: GitObjectManager.h:81
QString to_string_() const
Definition: GitObjectManager.h:84
Type type
Definition: GitObjectManager.h:79
Definition: Git.h:79
Type
Definition: Git.h:80