odb: Pass compression settings to filebuf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
diff --git a/src/filebuf.c b/src/filebuf.c
index bc1a8dc..1a98e3f 100644
--- a/src/filebuf.c
+++ b/src/filebuf.c
@@ -129,7 +129,7 @@ static int write_deflate(git_filebuf *file, void *source, size_t len)
int git_filebuf_open(git_filebuf *file, const char *path, int flags)
{
- int error;
+ int error, compression;
size_t path_len;
assert(file && path);
@@ -155,11 +155,12 @@ int git_filebuf_open(git_filebuf *file, const char *path, int flags)
}
}
- /* If we are deflating on-write, */
- if (flags & GIT_FILEBUF_DEFLATE_CONTENTS) {
+ compression = flags >> GIT_FILEBUF_DEFLATE_SHIFT;
+ /* If we are deflating on-write, */
+ if (compression != 0) {
/* Initialize the ZLib stream */
- if (deflateInit(&file->zs, Z_BEST_SPEED) != Z_OK) {
+ if (deflateInit(&file->zs, compression) != Z_OK) {
error = git__throw(GIT_EZLIB, "Failed to initialize zlib");
goto cleanup;
}
diff --git a/src/filebuf.h b/src/filebuf.h
index d20881e..525ca3c 100644
--- a/src/filebuf.h
+++ b/src/filebuf.h
@@ -19,7 +19,7 @@
#define GIT_FILEBUF_APPEND (1 << 2)
#define GIT_FILEBUF_FORCE (1 << 3)
#define GIT_FILEBUF_TEMPORARY (1 << 4)
-#define GIT_FILEBUF_DEFLATE_CONTENTS (1 << 5)
+#define GIT_FILEBUF_DEFLATE_SHIFT (5)
#define GIT_FILELOCK_EXTENSION ".lock\0"
#define GIT_FILELOCK_EXTLENGTH 6
diff --git a/src/odb_loose.c b/src/odb_loose.c
index 4b2216b..80f0aa9 100644
--- a/src/odb_loose.c
+++ b/src/odb_loose.c
@@ -735,8 +735,8 @@ static int loose_backend__stream(git_odb_stream **stream_out, git_odb_backend *_
error = git_filebuf_open(&stream->fbuf, tmp_path,
GIT_FILEBUF_HASH_CONTENTS |
- GIT_FILEBUF_DEFLATE_CONTENTS |
- GIT_FILEBUF_TEMPORARY);
+ GIT_FILEBUF_TEMPORARY |
+ (backend->object_zlib_level << GIT_FILEBUF_DEFLATE_SHIFT));
if (error < GIT_SUCCESS) {
free(stream);
@@ -774,8 +774,8 @@ static int loose_backend__write(git_oid *oid, git_odb_backend *_backend, const v
error = git_filebuf_open(&fbuf, final_path,
GIT_FILEBUF_HASH_CONTENTS |
- GIT_FILEBUF_DEFLATE_CONTENTS |
- GIT_FILEBUF_TEMPORARY);
+ GIT_FILEBUF_TEMPORARY |
+ (backend->object_zlib_level << GIT_FILEBUF_DEFLATE_SHIFT));
if (error < GIT_SUCCESS)
return error;