diff options
| author | Vicent Martà <vicent@github.com> | 2013-11-04 12:16:14 -0800 |
|---|---|---|
| committer | Vicent Martà <vicent@github.com> | 2013-11-04 12:16:14 -0800 |
| commit | 0e1115d2872fcb8f13fd28a52f1f14d52792623e (patch) | |
| tree | da6478448bf9eae826f2b83236ee169c606884f1 /src | |
| parent | fb6b0e019e30a2f9b653e5b1e6b8d5fc1105aee7 (diff) | |
| parent | dd64c71c2685d0b72b6f58149ecf2a972a6ea98b (diff) | |
| download | libgit2-0e1115d2872fcb8f13fd28a52f1f14d52792623e.tar.gz | |
Merge pull request #1939 from ethomson/readwrite_odb
Allow backend consumers to specify file mode
Diffstat (limited to 'src')
| -rw-r--r-- | src/odb.c | 2 | ||||
| -rw-r--r-- | src/odb_loose.c | 20 |
2 files changed, 17 insertions, 5 deletions
@@ -492,7 +492,7 @@ static int add_default_backends( #endif /* add the loose object backend */ - if (git_odb_backend_loose(&loose, objects_dir, -1, 0) < 0 || + if (git_odb_backend_loose(&loose, objects_dir, -1, 0, 0, 0) < 0 || add_backend_internal(db, loose, GIT_LOOSE_PRIORITY, as_alternates, inode) < 0) return -1; diff --git a/src/odb_loose.c b/src/odb_loose.c index 07dfae539..0dfd78aee 100644 --- a/src/odb_loose.c +++ b/src/odb_loose.c @@ -33,6 +33,8 @@ typedef struct loose_backend { int object_zlib_level; /** loose object zlib compression level. */ int fsync_object_files; /** loose object file fsync flag. */ + mode_t object_file_mode; + mode_t object_dir_mode; size_t objects_dirlen; char objects_dir[GIT_FLEX_ARRAY]; @@ -79,7 +81,7 @@ static int object_file_name( static int object_mkdir(const git_buf *name, const loose_backend *be) { return git_futils_mkdir( - name->ptr + be->objects_dirlen, be->objects_dir, GIT_OBJECT_DIR_MODE, + name->ptr + be->objects_dirlen, be->objects_dir, be->object_dir_mode, GIT_MKDIR_PATH | GIT_MKDIR_SKIP_LAST | GIT_MKDIR_VERIFY_DIR); } @@ -787,7 +789,7 @@ static int loose_backend__stream_fwrite(git_odb_stream *_stream, const git_oid * error = -1; else error = git_filebuf_commit_at( - &stream->fbuf, final_path.ptr, GIT_OBJECT_FILE_MODE); + &stream->fbuf, final_path.ptr, backend->object_file_mode); git_buf_free(&final_path); @@ -876,7 +878,7 @@ static int loose_backend__write(git_odb_backend *_backend, const git_oid *oid, c if (object_file_name(&final_path, backend, oid) < 0 || object_mkdir(&final_path, backend) < 0 || - git_filebuf_commit_at(&fbuf, final_path.ptr, GIT_OBJECT_FILE_MODE) < 0) + git_filebuf_commit_at(&fbuf, final_path.ptr, backend->object_file_mode) < 0) error = -1; cleanup: @@ -899,7 +901,9 @@ int git_odb_backend_loose( git_odb_backend **backend_out, const char *objects_dir, int compression_level, - int do_fsync) + int do_fsync, + mode_t dir_mode, + mode_t file_mode) { loose_backend *backend; size_t objects_dirlen; @@ -920,8 +924,16 @@ int git_odb_backend_loose( if (compression_level < 0) compression_level = Z_BEST_SPEED; + if (dir_mode == 0) + dir_mode = GIT_OBJECT_DIR_MODE; + + if (file_mode == 0) + file_mode = GIT_OBJECT_FILE_MODE; + backend->object_zlib_level = compression_level; backend->fsync_object_files = do_fsync; + backend->object_dir_mode = dir_mode; + backend->object_file_mode = file_mode; backend->parent.read = &loose_backend__read; backend->parent.write = &loose_backend__write; |
