Guitar
GitPack.h
Go to the documentation of this file.
1 #ifndef GITPACK_H
2 #define GITPACK_H
3 
4 #include "GitTypes.h"
5 #include <QIODevice>
6 #include <cstdint>
7 
8 struct GitPackIdxItem;
9 
10 struct GitPackInfo {
12  size_t expanded_size = 0;
13  uint64_t offset = 0;
14  QString ref_id;
15  uint32_t checksum = 0;
16 };
17 
18 struct GitPackObject : public GitPackInfo {
19  QByteArray content;
20  size_t packed_size = 0;
21 };
22 
23 class GitPack {
24 private:
25  static uint32_t read_uint32_be(const void *p)
26  {
27  auto const *q = (uint8_t const *)p;
28  return (q[0] << 24) | (q[1] << 16) | (q[2] << 8) | q[3];
29  }
30 
31 public:
32  static bool decompress(QIODevice *in, size_t expanded_size, QByteArray *out, size_t *consumed = nullptr, uint32_t *crc = nullptr);
33  static bool load(QIODevice *file, GitPackIdxItem const *item, GitPackObject *out);
34  static bool load(QString const &packfile, GitPackIdxItem const *item, GitPackObject *out);
35  static bool seekPackedObject(QIODevice *file, GitPackIdxItem const *item, GitPackInfo *out);
36  static void decodeTree(QByteArray *out);
37  static GitObject::Type stripHeader(QByteArray *out);
38 };
39 
40 #endif // GITPACK_H
Definition: GitPack.h:23
static void decodeTree(QByteArray *out)
Definition: GitPack.cpp:7
static GitObject::Type stripHeader(QByteArray *out)
Definition: GitPack.cpp:52
static uint32_t read_uint32_be(const void *p)
Definition: GitPack.h:25
static bool load(QIODevice *file, GitPackIdxItem const *item, GitPackObject *out)
Definition: GitPack.cpp:221
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, GitPackInfo *out)
Definition: GitPack.cpp:152
Definition: crc32.h:7
Type
Definition: GitTypes.h:79
Definition: GitPackIdxV2.h:10
Definition: GitPack.h:10
uint32_t checksum
Definition: GitPack.h:15
uint64_t offset
Definition: GitPack.h:13
QString ref_id
Definition: GitPack.h:14
size_t expanded_size
Definition: GitPack.h:12
GitObject::Type type
Definition: GitPack.h:11
Definition: GitPack.h:18
size_t packed_size
Definition: GitPack.h:20
QByteArray content
Definition: GitPack.h:19