Make zlib compression level configurable, and change default.
With the change in default, "git add ." on kernel dir is about twice as fast as before, with only minimal (0.5%) change in object size. The speed difference is even more noticeable when committing large files, which is now up to 8 times faster. The configurability is through setting core.compression = [-1..9] which maps to the zlib constants; -1 is the default, 0 is no compression, and 1..9 are various speed/size tradeoffs, 9 being slowest. Signed-off-by: Joachim B Haga (cjhaga@fys.uio.no) Acked-by: Linus Torvalds <torvalds@osdl.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
8fced61cbc
commit
12f6c308d5
@ -91,6 +91,12 @@ core.warnAmbiguousRefs::
|
|||||||
If true, git will warn you if the ref name you passed it is ambiguous
|
If true, git will warn you if the ref name you passed it is ambiguous
|
||||||
and might match multiple refs in the .git/refs/ tree. True by default.
|
and might match multiple refs in the .git/refs/ tree. True by default.
|
||||||
|
|
||||||
|
core.compression:
|
||||||
|
An integer -1..9, indicating the compression level for objects that
|
||||||
|
are not in a pack file. -1 is the zlib and git default. 0 means no
|
||||||
|
compression, and 1..9 are various speed/size tradeoffs, 9 being
|
||||||
|
slowest.
|
||||||
|
|
||||||
alias.*::
|
alias.*::
|
||||||
Command aliases for the gitlink:git[1] command wrapper - e.g.
|
Command aliases for the gitlink:git[1] command wrapper - e.g.
|
||||||
after defining "alias.last = cat-file commit HEAD", the invocation
|
after defining "alias.last = cat-file commit HEAD", the invocation
|
||||||
|
1
cache.h
1
cache.h
@ -183,6 +183,7 @@ extern int log_all_ref_updates;
|
|||||||
extern int warn_ambiguous_refs;
|
extern int warn_ambiguous_refs;
|
||||||
extern int shared_repository;
|
extern int shared_repository;
|
||||||
extern const char *apply_default_whitespace;
|
extern const char *apply_default_whitespace;
|
||||||
|
extern int zlib_compression_level;
|
||||||
|
|
||||||
#define GIT_REPO_VERSION 0
|
#define GIT_REPO_VERSION 0
|
||||||
extern int repository_format_version;
|
extern int repository_format_version;
|
||||||
|
10
config.c
10
config.c
@ -279,6 +279,16 @@ int git_default_config(const char *var, const char *value)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!strcmp(var, "core.compression")) {
|
||||||
|
int level = git_config_int(var, value);
|
||||||
|
if (level == -1)
|
||||||
|
level = Z_DEFAULT_COMPRESSION;
|
||||||
|
else if (level < 0 || level > Z_BEST_COMPRESSION)
|
||||||
|
die("bad zlib compression level %d", level);
|
||||||
|
zlib_compression_level = level;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (!strcmp(var, "user.name")) {
|
if (!strcmp(var, "user.name")) {
|
||||||
strlcpy(git_default_name, value, sizeof(git_default_name));
|
strlcpy(git_default_name, value, sizeof(git_default_name));
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -122,7 +122,7 @@ int sha1write_compressed(struct sha1file *f, void *in, unsigned int size)
|
|||||||
void *out;
|
void *out;
|
||||||
|
|
||||||
memset(&stream, 0, sizeof(stream));
|
memset(&stream, 0, sizeof(stream));
|
||||||
deflateInit(&stream, Z_DEFAULT_COMPRESSION);
|
deflateInit(&stream, zlib_compression_level);
|
||||||
maxsize = deflateBound(&stream, size);
|
maxsize = deflateBound(&stream, size);
|
||||||
out = xmalloc(maxsize);
|
out = xmalloc(maxsize);
|
||||||
|
|
||||||
|
2
diff.c
2
diff.c
@ -583,7 +583,7 @@ static unsigned char *deflate_it(char *data,
|
|||||||
z_stream stream;
|
z_stream stream;
|
||||||
|
|
||||||
memset(&stream, 0, sizeof(stream));
|
memset(&stream, 0, sizeof(stream));
|
||||||
deflateInit(&stream, Z_BEST_COMPRESSION);
|
deflateInit(&stream, zlib_compression_level);
|
||||||
bound = deflateBound(&stream, size);
|
bound = deflateBound(&stream, size);
|
||||||
deflated = xmalloc(bound);
|
deflated = xmalloc(bound);
|
||||||
stream.next_out = deflated;
|
stream.next_out = deflated;
|
||||||
|
@ -20,6 +20,7 @@ int repository_format_version = 0;
|
|||||||
char git_commit_encoding[MAX_ENCODING_LENGTH] = "utf-8";
|
char git_commit_encoding[MAX_ENCODING_LENGTH] = "utf-8";
|
||||||
int shared_repository = PERM_UMASK;
|
int shared_repository = PERM_UMASK;
|
||||||
const char *apply_default_whitespace = NULL;
|
const char *apply_default_whitespace = NULL;
|
||||||
|
int zlib_compression_level = Z_DEFAULT_COMPRESSION;
|
||||||
|
|
||||||
static char *git_dir, *git_object_dir, *git_index_file, *git_refs_dir,
|
static char *git_dir, *git_object_dir, *git_index_file, *git_refs_dir,
|
||||||
*git_graft_file;
|
*git_graft_file;
|
||||||
|
@ -492,7 +492,7 @@ static void start_put(struct transfer_request *request)
|
|||||||
|
|
||||||
/* Set it up */
|
/* Set it up */
|
||||||
memset(&stream, 0, sizeof(stream));
|
memset(&stream, 0, sizeof(stream));
|
||||||
deflateInit(&stream, Z_BEST_COMPRESSION);
|
deflateInit(&stream, zlib_compression_level);
|
||||||
size = deflateBound(&stream, len + hdrlen);
|
size = deflateBound(&stream, len + hdrlen);
|
||||||
request->buffer.buffer = xmalloc(size);
|
request->buffer.buffer = xmalloc(size);
|
||||||
|
|
||||||
|
@ -1458,7 +1458,7 @@ int write_sha1_file(void *buf, unsigned long len, const char *type, unsigned cha
|
|||||||
|
|
||||||
/* Set it up */
|
/* Set it up */
|
||||||
memset(&stream, 0, sizeof(stream));
|
memset(&stream, 0, sizeof(stream));
|
||||||
deflateInit(&stream, Z_BEST_COMPRESSION);
|
deflateInit(&stream, zlib_compression_level);
|
||||||
size = deflateBound(&stream, len+hdrlen);
|
size = deflateBound(&stream, len+hdrlen);
|
||||||
compressed = xmalloc(size);
|
compressed = xmalloc(size);
|
||||||
|
|
||||||
@ -1511,7 +1511,7 @@ static void *repack_object(const unsigned char *sha1, unsigned long *objsize)
|
|||||||
|
|
||||||
/* Set it up */
|
/* Set it up */
|
||||||
memset(&stream, 0, sizeof(stream));
|
memset(&stream, 0, sizeof(stream));
|
||||||
deflateInit(&stream, Z_BEST_COMPRESSION);
|
deflateInit(&stream, zlib_compression_level);
|
||||||
size = deflateBound(&stream, len + hdrlen);
|
size = deflateBound(&stream, len + hdrlen);
|
||||||
buf = xmalloc(size);
|
buf = xmalloc(size);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user