Guitar
GitPack.h
Go to the documentation of this file.
1 #ifndef GITPACK_H
2 #define GITPACK_H
3 
4 #include <QIODevice>
5 #include <cstdint>
6 #include "Git.h"
7 
8 struct GitPackIdxItem;
9 
10 class GitPack {
11 public:
12  struct Info {
14  size_t expanded_size = 0;
15  uint64_t offset = 0;
16  QString ref_id;
17  uint32_t checksum = 0;
18  };
19  struct Object : public Info {
20  QByteArray content;
21  size_t packed_size = 0;
22  };
23 private:
24  static uint32_t read_uint32_be(const void *p)
25  {
26  auto const *q = (uint8_t const *)p;
27  return (q[0] << 24) | (q[1] << 16) | (q[2] << 8) | q[3];
28  }
29 
30 public:
31  static bool decompress(QIODevice *in, size_t expanded_size, QByteArray *out, size_t *consumed = nullptr, uint32_t *crc = nullptr);
32  static bool load(QIODevice *file, GitPackIdxItem const *item, Object *out);
33  static bool load(QString const &packfile, GitPackIdxItem const *item, Object *out);
34  static bool seekPackedObject(QIODevice *file, GitPackIdxItem const *item, Info *out);
35  static void decodeTree(QByteArray *out);
36  static Git::Object::Type stripHeader(QByteArray *out);
37 };
38 
39 #endif // GITPACK_H
GitPack::stripHeader
static Git::Object::Type stripHeader(QByteArray *out)
Definition: GitPack.cpp:52
GitPack::decodeTree
static void decodeTree(QByteArray *out)
Definition: GitPack.cpp:7
GitPack::seekPackedObject
static bool seekPackedObject(QIODevice *file, GitPackIdxItem const *item, Info *out)
Definition: GitPack.cpp:152
Git::Object::Type::COMMIT
@ COMMIT
Git::Object::Type::BLOB
@ BLOB
GitPack::Object
Definition: GitPack.h:19
GitPackIdxItem::offset
size_t offset
Definition: GitPackIdxV2.h:13
GitPack::Info::expanded_size
size_t expanded_size
Definition: GitPack.h:14
GitPack
Definition: GitPack.h:10
Git::Object::Type::UNKNOWN
@ UNKNOWN
GitPack::Info::checksum
uint32_t checksum
Definition: GitPack.h:17
GitPack.h
GitPack::Info::offset
uint64_t offset
Definition: GitPack.h:15
GitPack::decompress
static bool decompress(QIODevice *in, size_t expanded_size, QByteArray *out, size_t *consumed=nullptr, uint32_t *crc=nullptr)
Definition: GitPack.cpp:82
GitPack::load
static bool load(QIODevice *file, GitPackIdxItem const *item, Object *out)
Definition: GitPack.cpp:221
Git::Object::Type::TREE
@ TREE
Git::Object::Type::OFS_DELTA
@ OFS_DELTA
GitPack::read_uint32_be
static uint32_t read_uint32_be(const void *p)
Definition: GitPack.h:24
Git.h
GitPackIdxItem
Definition: GitPackIdxV2.h:10
GitPack::Info
Definition: GitPack.h:12
GIT_ID_LENGTH
#define GIT_ID_LENGTH
Definition: Git.h:16
GitPack::Info::type
Git::Object::Type type
Definition: GitPack.h:13
GitPack::Object::content
QByteArray content
Definition: GitPack.h:20
Git::Object::Type
Type
Definition: Git.h:73
GitPackIdxV2.h
GitPack::Object::packed_size
size_t packed_size
Definition: GitPack.h:21
dtl::version
const string version
Definition: variables.hpp:66
Git::Object::Type::TAG
@ TAG
GitPack::Info::ref_id
QString ref_id
Definition: GitPack.h:16
Git::Object::Type::REF_DELTA
@ REF_DELTA