Blame src/pack-objects.h

Packit Service 20376f
/*
Packit Service 20376f
 * Copyright (C) the libgit2 contributors. All rights reserved.
Packit Service 20376f
 *
Packit Service 20376f
 * This file is part of libgit2, distributed under the GNU GPL v2 with
Packit Service 20376f
 * a Linking Exception. For full terms see the included COPYING file.
Packit Service 20376f
 */
Packit Service 20376f
Packit Service 20376f
#ifndef INCLUDE_pack_objects_h__
Packit Service 20376f
#define INCLUDE_pack_objects_h__
Packit Service 20376f
Packit Service 20376f
#include "common.h"
Packit Service 20376f
Packit Service 20376f
#include "buffer.h"
Packit Service 20376f
#include "hash.h"
Packit Service 20376f
#include "oidmap.h"
Packit Service 20376f
#include "netops.h"
Packit Service 20376f
#include "zstream.h"
Packit Service 20376f
#include "pool.h"
Packit Service 20376f
#include "indexer.h"
Packit Service 20376f
Packit Service 20376f
#include "git2/oid.h"
Packit Service 20376f
#include "git2/pack.h"
Packit Service 20376f
Packit Service 20376f
#define GIT_PACK_WINDOW 10 /* number of objects to possibly delta against */
Packit Service 20376f
#define GIT_PACK_DEPTH 50 /* max delta depth */
Packit Service 20376f
#define GIT_PACK_DELTA_CACHE_SIZE (256 * 1024 * 1024)
Packit Service 20376f
#define GIT_PACK_DELTA_CACHE_LIMIT 1000
Packit Service 20376f
#define GIT_PACK_BIG_FILE_THRESHOLD (512 * 1024 * 1024)
Packit Service 20376f
Packit Service 20376f
typedef struct git_pobject {
Packit Service 20376f
	git_oid id;
Packit Service 20376f
	git_otype type;
Packit Service 20376f
	git_off_t offset;
Packit Service 20376f
Packit Service 20376f
	size_t size;
Packit Service 20376f
Packit Service 20376f
	unsigned int hash; /* name hint hash */
Packit Service 20376f
Packit Service 20376f
	struct git_pobject *delta; /* delta base object */
Packit Service 20376f
	struct git_pobject *delta_child; /* deltified objects who bases me */
Packit Service 20376f
	struct git_pobject *delta_sibling; /* other deltified objects
Packit Service 20376f
					    * who uses the same base as
Packit Service 20376f
					    * me */
Packit Service 20376f
Packit Service 20376f
	void *delta_data;
Packit Service 20376f
	size_t delta_size;
Packit Service 20376f
	size_t z_delta_size;
Packit Service 20376f
Packit Service 20376f
	int written:1,
Packit Service 20376f
	    recursing:1,
Packit Service 20376f
	    tagged:1,
Packit Service 20376f
	    filled:1;
Packit Service 20376f
} git_pobject;
Packit Service 20376f
Packit Service 20376f
typedef struct {
Packit Service 20376f
	git_oid id;
Packit Service 20376f
	unsigned int uninteresting:1,
Packit Service 20376f
		seen:1;
Packit Service 20376f
} git_walk_object;
Packit Service 20376f
Packit Service 20376f
struct git_packbuilder {
Packit Service 20376f
	git_repository *repo; /* associated repository */
Packit Service 20376f
	git_odb *odb; /* associated object database */
Packit Service 20376f
Packit Service 20376f
	git_hash_ctx ctx;
Packit Service 20376f
	git_zstream zstream;
Packit Service 20376f
Packit Service 20376f
	uint32_t nr_objects,
Packit Service 20376f
		nr_deltified,
Packit Service 20376f
		nr_written,
Packit Service 20376f
		nr_remaining;
Packit Service 20376f
Packit Service 20376f
	size_t nr_alloc;
Packit Service 20376f
Packit Service 20376f
	git_pobject *object_list;
Packit Service 20376f
Packit Service 20376f
	git_oidmap *object_ix;
Packit Service 20376f
Packit Service 20376f
	git_oidmap *walk_objects;
Packit Service 20376f
	git_pool object_pool;
Packit Service 20376f
Packit Service 20376f
	git_oid pack_oid; /* hash of written pack */
Packit Service 20376f
Packit Service 20376f
	/* synchronization objects */
Packit Service 20376f
	git_mutex cache_mutex;
Packit Service 20376f
	git_mutex progress_mutex;
Packit Service 20376f
	git_cond progress_cond;
Packit Service 20376f
Packit Service 20376f
	/* configs */
Packit Service 20376f
	size_t delta_cache_size;
Packit Service 20376f
	size_t max_delta_cache_size;
Packit Service 20376f
	size_t cache_max_small_delta_size;
Packit Service 20376f
	size_t big_file_threshold;
Packit Service 20376f
	size_t window_memory_limit;
Packit Service 20376f
Packit Service 20376f
	unsigned int nr_threads; /* nr of threads to use */
Packit Service 20376f
Packit Service 20376f
	git_packbuilder_progress progress_cb;
Packit Service 20376f
	void *progress_cb_payload;
Packit Service 20376f
	double last_progress_report_time; /* the time progress was last reported */
Packit Service 20376f
Packit Service 20376f
	bool done;
Packit Service 20376f
};
Packit Service 20376f
Packit Service 20376f
int git_packbuilder_write_buf(git_buf *buf, git_packbuilder *pb);
Packit Service 20376f
Packit Service 20376f
#endif /* INCLUDE_pack_objects_h__ */