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
Definition: GitPack.h:10
static void decodeTree(QByteArray *out)
Definition: GitPack.cpp:7
static uint32_t read_uint32_be(const void *p)
Definition: GitPack.h:24
static bool decompress(QIODevice *in, size_t expanded_size, QByteArray *out, size_t *consumed=nullptr, uint32_t *crc=nullptr)
Definition: GitPack.cpp:82
static bool seekPackedObject(QIODevice *file, GitPackIdxItem const *item, Info *out)
Definition: GitPack.cpp:152
static Git::Object::Type stripHeader(QByteArray *out)
Definition: GitPack.cpp:52
static bool load(QIODevice *file, GitPackIdxItem const *item, Object *out)
Definition: GitPack.cpp:221
Definition: GitPackIdxV2.h:10
Definition: GitPack.h:12
QString ref_id
Definition: GitPack.h:16
uint64_t offset
Definition: GitPack.h:15
Git::Object::Type type
Definition: GitPack.h:13
size_t expanded_size
Definition: GitPack.h:14
uint32_t checksum
Definition: GitPack.h:17
Definition: GitPack.h:19
size_t packed_size
Definition: GitPack.h:21
QByteArray content
Definition: GitPack.h:20
Type
Definition: Git.h:80