summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/filebuf.c3
-rw-r--r--src/fileops.c15
-rw-r--r--src/fileops.h8
-rw-r--r--src/odb.h3
-rw-r--r--src/odb_loose.c4
-rw-r--r--src/posix.h1
-rw-r--r--src/reflog.c2
-rw-r--r--src/reflog.h1
-rw-r--r--src/refs.h1
-rw-r--r--src/repository.c11
-rw-r--r--src/repository.h4
-rw-r--r--tests-clay/core/dirent.c4
-rw-r--r--tests-clay/core/rmdir.c12
-rw-r--r--tests/t00-core.c18
-rw-r--r--tests/t03-objwrite.c2
-rw-r--r--tests/t06-index.c2
-rw-r--r--tests/t09-tree.c3
-rw-r--r--tests/t10-refs.c3
-rw-r--r--tests/t12-repo.c8
-rw-r--r--tests/test_helpers.c42
-rw-r--r--tests/test_helpers.h4
-rw-r--r--tests/test_main.c4
22 files changed, 103 insertions, 52 deletions
diff --git a/src/filebuf.c b/src/filebuf.c
index 1a98e3f43..e6167d014 100644
--- a/src/filebuf.c
+++ b/src/filebuf.c
@@ -23,7 +23,8 @@ static int lock_file(git_filebuf *file, int flags)
/* create path to the file buffer is required */
if (flags & GIT_FILEBUF_FORCE) {
- file->fd = git_futils_creat_locked_withpath(file->path_lock, 0644);
+ /* XXX: Should dirmode here be configurable? Or is 0777 always fine? */
+ file->fd = git_futils_creat_locked_withpath(file->path_lock, 0777, 0644);
} else {
file->fd = git_futils_creat_locked(file->path_lock, 0644);
}
diff --git a/src/fileops.c b/src/fileops.c
index da9c55f14..ff36b007e 100644
--- a/src/fileops.c
+++ b/src/fileops.c
@@ -31,9 +31,8 @@ int git_futils_mv_atomic(const char *from, const char *to)
#endif
}
-int git_futils_mkpath2file(const char *file_path)
+int git_futils_mkpath2file(const char *file_path, const mode_t mode)
{
- const mode_t mode = 0755; /* or 0777 ? */
int error = GIT_SUCCESS;
char target_folder_path[GIT_PATH_MAX];
@@ -67,9 +66,9 @@ int git_futils_mktmp(char *path_out, const char *filename)
return fd;
}
-int git_futils_creat_withpath(const char *path, const mode_t mode)
+int git_futils_creat_withpath(const char *path, const mode_t dirmode, const mode_t mode)
{
- if (git_futils_mkpath2file(path) < GIT_SUCCESS)
+ if (git_futils_mkpath2file(path, dirmode) < GIT_SUCCESS)
return git__throw(GIT_EOSERR, "Failed to create file %s", path);
return p_creat(path, mode);
@@ -81,9 +80,9 @@ int git_futils_creat_locked(const char *path, const mode_t mode)
return fd >= 0 ? fd : git__throw(GIT_EOSERR, "Failed to create locked file. Could not open %s", path);
}
-int git_futils_creat_locked_withpath(const char *path, const mode_t mode)
+int git_futils_creat_locked_withpath(const char *path, const mode_t dirmode, const mode_t mode)
{
- if (git_futils_mkpath2file(path) < GIT_SUCCESS)
+ if (git_futils_mkpath2file(path, dirmode) < GIT_SUCCESS)
return git__throw(GIT_EOSERR, "Failed to create locked file %s", path);
return git_futils_creat_locked(path, mode);
@@ -212,9 +211,9 @@ void git_futils_freebuffer(git_fbuffer *obj)
}
-int git_futils_mv_withpath(const char *from, const char *to)
+int git_futils_mv_withpath(const char *from, const char *to, const mode_t dirmode)
{
- if (git_futils_mkpath2file(to) < GIT_SUCCESS)
+ if (git_futils_mkpath2file(to, dirmode) < GIT_SUCCESS)
return GIT_EOSERR; /* The callee already takes care of setting the correct error message. */
return git_futils_mv_atomic(from, to); /* The callee already takes care of setting the correct error message. */
diff --git a/src/fileops.h b/src/fileops.h
index 176888895..56c4770cb 100644
--- a/src/fileops.h
+++ b/src/fileops.h
@@ -48,7 +48,7 @@ extern int git_futils_exists(const char *path);
* Create and open a file, while also
* creating all the folders in its path
*/
-extern int git_futils_creat_withpath(const char *path, const mode_t mode);
+extern int git_futils_creat_withpath(const char *path, const mode_t dirmode, const mode_t mode);
/**
* Create an open a process-locked file
@@ -59,7 +59,7 @@ extern int git_futils_creat_locked(const char *path, const mode_t mode);
* Create an open a process-locked file, while
* also creating all the folders in its path
*/
-extern int git_futils_creat_locked_withpath(const char *path, const mode_t mode);
+extern int git_futils_creat_locked_withpath(const char *path, const mode_t dirmode, const mode_t mode);
/**
* Check if the given path points to a directory
@@ -80,7 +80,7 @@ extern int git_futils_mkdir_r(const char *path, const mode_t mode);
* Create all the folders required to contain
* the full path of a file
*/
-extern int git_futils_mkpath2file(const char *path);
+extern int git_futils_mkpath2file(const char *path, const mode_t mode);
extern int git_futils_rmdir_r(const char *path, int force);
@@ -98,7 +98,7 @@ extern int git_futils_mv_atomic(const char *from, const char *to);
* Move a file on the filesystem, create the
* destination path if it doesn't exist
*/
-extern int git_futils_mv_withpath(const char *from, const char *to);
+extern int git_futils_mv_withpath(const char *from, const char *to, const mode_t dirmode);
/**
diff --git a/src/odb.h b/src/odb.h
index 4e850916b..7c8c9f9e2 100644
--- a/src/odb.h
+++ b/src/odb.h
@@ -14,6 +14,9 @@
#include "vector.h"
#include "cache.h"
+#define GIT_OBJECTS_DIR "objects/"
+#define GIT_OBJECT_DIR_MODE 0777
+
/* DO NOT EXPORT */
typedef struct {
void *data; /**< Raw, decompressed object data. */
diff --git a/src/odb_loose.c b/src/odb_loose.c
index 80f0aa9e7..a3013d3dd 100644
--- a/src/odb_loose.c
+++ b/src/odb_loose.c
@@ -666,7 +666,7 @@ static int loose_backend__stream_fwrite(git_oid *oid, git_odb_stream *_stream)
if (object_file_name(final_path, sizeof(final_path), backend->objects_dir, oid))
return GIT_ENOMEM;
- if ((error = git_futils_mkpath2file(final_path)) < GIT_SUCCESS)
+ if ((error = git_futils_mkpath2file(final_path, GIT_OBJECT_DIR_MODE)) < GIT_SUCCESS)
return git__rethrow(error, "Failed to write loose backend");
stream->finished = 1;
@@ -787,7 +787,7 @@ static int loose_backend__write(git_oid *oid, git_odb_backend *_backend, const v
if ((error = object_file_name(final_path, sizeof(final_path), backend->objects_dir, oid)) < GIT_SUCCESS)
goto cleanup;
- if ((error = git_futils_mkpath2file(final_path)) < GIT_SUCCESS)
+ if ((error = git_futils_mkpath2file(final_path, GIT_OBJECT_DIR_MODE)) < GIT_SUCCESS)
goto cleanup;
return git_filebuf_commit_at(&fbuf, final_path);
diff --git a/src/posix.h b/src/posix.h
index 389578d5b..55cd35a38 100644
--- a/src/posix.h
+++ b/src/posix.h
@@ -40,6 +40,7 @@ extern int p_write(git_file fd, const void *buf, size_t cnt);
#define p_fstat(f,b) fstat(f, b)
#define p_lseek(f,n,w) lseek(f, n, w)
#define p_close(fd) close(fd)
+#define p_umask(m) umask(m)
extern int p_open(const char *path, int flags);
extern int p_creat(const char *path, mode_t mode);
diff --git a/src/reflog.c b/src/reflog.c
index 594963c03..6cdb35304 100644
--- a/src/reflog.c
+++ b/src/reflog.c
@@ -226,7 +226,7 @@ int git_reflog_write(git_reference *ref, const git_oid *oid_old,
git_path_join_n(log_path, 3, ref->owner->path_repository, GIT_REFLOG_DIR, ref->name);
if (git_futils_exists(log_path)) {
- if ((error = git_futils_mkpath2file(log_path)) < GIT_SUCCESS)
+ if ((error = git_futils_mkpath2file(log_path, GIT_REFLOG_DIR_MODE)) < GIT_SUCCESS)
return git__rethrow(error, "Failed to write reflog. Cannot create reflog directory");
} else if (git_futils_isfile(log_path)) {
return git__throw(GIT_ERROR, "Failed to write reflog. `%s` is directory", log_path);
diff --git a/src/reflog.h b/src/reflog.h
index 093874e51..16e9a94ec 100644
--- a/src/reflog.h
+++ b/src/reflog.h
@@ -12,6 +12,7 @@
#include "vector.h"
#define GIT_REFLOG_DIR "logs/"
+#define GIT_REFLOG_DIR_MODE 0777
#define GIT_REFLOG_SIZE_MIN (2*GIT_OID_HEXSZ+2+17)
diff --git a/src/refs.h b/src/refs.h
index c4b0b0e39..f802cfe4a 100644
--- a/src/refs.h
+++ b/src/refs.h
@@ -16,6 +16,7 @@
#define GIT_REFS_HEADS_DIR GIT_REFS_DIR "heads/"
#define GIT_REFS_TAGS_DIR GIT_REFS_DIR "tags/"
#define GIT_REFS_REMOTES_DIR GIT_REFS_DIR "remotes/"
+#define GIT_REFS_DIR_MODE 0777
#define GIT_RENAMED_REF_FILE GIT_REFS_DIR "RENAMED-REF"
diff --git a/src/repository.c b/src/repository.c
index 36642e5ae..d583cad6a 100644
--- a/src/repository.c
+++ b/src/repository.c
@@ -609,12 +609,11 @@ static int repo_init_createhead(git_repository *repo)
static int repo_init_structure(const char *git_dir, int is_bare)
{
- const mode_t mode = 0755; /* or 0777 ? */
int error;
char temp_path[GIT_PATH_MAX];
- if (git_futils_mkdir_r(git_dir, mode))
+ if (git_futils_mkdir_r(git_dir, is_bare ? GIT_BARE_DIR_MODE : GIT_DIR_MODE))
return git__throw(GIT_ERROR, "Failed to initialize repository structure. Could not mkdir");
/* Hides the ".git" directory */
@@ -628,25 +627,25 @@ static int repo_init_structure(const char *git_dir, int is_bare)
/* Creates the '/objects/info/' directory */
git_path_join(temp_path, git_dir, GIT_OBJECTS_INFO_DIR);
- error = git_futils_mkdir_r(temp_path, mode);
+ error = git_futils_mkdir_r(temp_path, GIT_OBJECT_DIR_MODE);
if (error < GIT_SUCCESS)
return git__rethrow(error, "Failed to initialize repository structure");
/* Creates the '/objects/pack/' directory */
git_path_join(temp_path, git_dir, GIT_OBJECTS_PACK_DIR);
- error = p_mkdir(temp_path, mode);
+ error = p_mkdir(temp_path, GIT_OBJECT_DIR_MODE);
if (error < GIT_SUCCESS)
return git__throw(error, "Unable to create `%s` folder", temp_path);
/* Creates the '/refs/heads/' directory */
git_path_join(temp_path, git_dir, GIT_REFS_HEADS_DIR);
- error = git_futils_mkdir_r(temp_path, mode);
+ error = git_futils_mkdir_r(temp_path, GIT_REFS_DIR_MODE);
if (error < GIT_SUCCESS)
return git__rethrow(error, "Failed to initialize repository structure");
/* Creates the '/refs/tags/' directory */
git_path_join(temp_path, git_dir, GIT_REFS_TAGS_DIR);
- error = p_mkdir(temp_path, mode);
+ error = p_mkdir(temp_path, GIT_REFS_DIR_MODE);
if (error < GIT_SUCCESS)
return git__throw(error, "Unable to create `%s` folder", temp_path);
diff --git a/src/repository.h b/src/repository.h
index 99217e5a4..a12dd9da0 100644
--- a/src/repository.h
+++ b/src/repository.h
@@ -18,10 +18,12 @@
#include "cache.h"
#include "refs.h"
#include "buffer.h"
+#include "odb.h"
#define DOT_GIT ".git"
#define GIT_DIR DOT_GIT "/"
-#define GIT_OBJECTS_DIR "objects/"
+#define GIT_DIR_MODE 0755
+#define GIT_BARE_DIR_MODE 0777
#define GIT_INDEX_FILE "index"
struct git_object {
diff --git a/tests-clay/core/dirent.c b/tests-clay/core/dirent.c
index 73f571595..898b1227b 100644
--- a/tests-clay/core/dirent.c
+++ b/tests-clay/core/dirent.c
@@ -20,12 +20,12 @@ static void setup(walk_data *d)
{
name_data *n;
- cl_must_pass(p_mkdir(top_dir, 0755));
+ cl_must_pass(p_mkdir(top_dir, 0777));
cl_must_pass(p_chdir(top_dir));
if (strcmp(d->sub, ".") != 0)
- cl_must_pass(p_mkdir(d->sub, 0755));
+ cl_must_pass(p_mkdir(d->sub, 0777));
strcpy(path_buffer, d->sub);
state_loc = d;
diff --git a/tests-clay/core/rmdir.c b/tests-clay/core/rmdir.c
index aa21c6a3d..03baecf23 100644
--- a/tests-clay/core/rmdir.c
+++ b/tests-clay/core/rmdir.c
@@ -7,22 +7,22 @@ void test_core_rmdir__initialize(void)
{
char path[GIT_PATH_MAX];
- cl_must_pass(p_mkdir(empty_tmp_dir, 0755));
+ cl_must_pass(p_mkdir(empty_tmp_dir, 0777));
git_path_join(path, empty_tmp_dir, "/one");
- cl_must_pass(p_mkdir(path, 0755));
+ cl_must_pass(p_mkdir(path, 0777));
git_path_join(path, empty_tmp_dir, "/one/two_one");
- cl_must_pass(p_mkdir(path, 0755));
+ cl_must_pass(p_mkdir(path, 0777));
git_path_join(path, empty_tmp_dir, "/one/two_two");
- cl_must_pass(p_mkdir(path, 0755));
+ cl_must_pass(p_mkdir(path, 0777));
git_path_join(path, empty_tmp_dir, "/one/two_two/three");
- cl_must_pass(p_mkdir(path, 0755));
+ cl_must_pass(p_mkdir(path, 0777));
git_path_join(path, empty_tmp_dir, "/two");
- cl_must_pass(p_mkdir(path, 0755));
+ cl_must_pass(p_mkdir(path, 0777));
}
/* make sure empty dir can be deleted recusively */
diff --git a/tests/t00-core.c b/tests/t00-core.c
index 703504bf8..185681562 100644
--- a/tests/t00-core.c
+++ b/tests/t00-core.c
@@ -250,14 +250,14 @@ static int setup(walk_data *d)
{
name_data *n;
- if (p_mkdir(top_dir, 0755) < 0)
+ if (p_mkdir(top_dir, 0777) < 0)
return error("can't mkdir(\"%s\")", top_dir);
if (p_chdir(top_dir) < 0)
return error("can't chdir(\"%s\")", top_dir);
if (strcmp(d->sub, ".") != 0)
- if (p_mkdir(d->sub, 0755) < 0)
+ if (p_mkdir(d->sub, 0777) < 0)
return error("can't mkdir(\"%s\")", d->sub);
strcpy(path_buffer, d->sub);
@@ -510,27 +510,27 @@ static int setup_empty_tmp_dir(void)
{
char path[GIT_PATH_MAX];
- if (p_mkdir(empty_tmp_dir, 0755))
+ if (p_mkdir(empty_tmp_dir, 0777))
return -1;
git_path_join(path, empty_tmp_dir, "/one");
- if (p_mkdir(path, 0755))
+ if (p_mkdir(path, 0777))
return -1;
git_path_join(path, empty_tmp_dir, "/one/two_one");
- if (p_mkdir(path, 0755))
+ if (p_mkdir(path, 0777))
return -1;
git_path_join(path, empty_tmp_dir, "/one/two_two");
- if (p_mkdir(path, 0755))
+ if (p_mkdir(path, 0777))
return -1;
git_path_join(path, empty_tmp_dir, "/one/two_two/three");
- if (p_mkdir(path, 0755))
+ if (p_mkdir(path, 0777))
return -1;
git_path_join(path, empty_tmp_dir, "/two");
- if (p_mkdir(path, 0755))
+ if (p_mkdir(path, 0777))
return -1;
return 0;
@@ -547,7 +547,7 @@ BEGIN_TEST(rmdir1, "make sure non-empty dir cannot be deleted recusively")
must_pass(setup_empty_tmp_dir());
git_path_join(file, empty_tmp_dir, "/two/file.txt");
- fd = p_creat(file, 0755);
+ fd = p_creat(file, 0777);
must_pass(fd);
must_pass(p_close(fd));
must_fail(git_futils_rmdir_r(empty_tmp_dir, 0));
diff --git a/tests/t03-objwrite.c b/tests/t03-objwrite.c
index 31f611a5c..7563d0e3a 100644
--- a/tests/t03-objwrite.c
+++ b/tests/t03-objwrite.c
@@ -31,7 +31,7 @@ static char *odb_dir = "test-objects";
static int make_odb_dir(void)
{
- if (p_mkdir(odb_dir, 0755) < 0) {
+ if (p_mkdir(odb_dir, GIT_OBJECT_DIR_MODE) < 0) {
int err = errno;
fprintf(stderr, "can't make directory \"%s\"", odb_dir);
if (err == EEXIST)
diff --git a/tests/t06-index.c b/tests/t06-index.c
index 621e742b3..dde98abaf 100644
--- a/tests/t06-index.c
+++ b/tests/t06-index.c
@@ -176,7 +176,7 @@ BEGIN_TEST(add0, "add a new file to the index")
must_pass(git_index_entrycount(index) == 0);
/* Create a new file in the working directory */
- must_pass(git_futils_mkpath2file(TEMP_REPO_FOLDER "myrepo/test.txt"));
+ must_pass(git_futils_mkpath2file(TEMP_REPO_FOLDER "myrepo/test.txt", 0777));
must_pass(git_filebuf_open(&file, TEMP_REPO_FOLDER "myrepo/test.txt", 0));
must_pass(git_filebuf_write(&file, "hey there\n", 10));
must_pass(git_filebuf_commit(&file));
diff --git a/tests/t09-tree.c b/tests/t09-tree.c
index 3af06ea67..1f2fe3f02 100644
--- a/tests/t09-tree.c
+++ b/tests/t09-tree.c
@@ -200,6 +200,9 @@ BEGIN_TEST(write3, "write a hierarchical tree from a memory")
// check data is correct
must_pass(git_tree_lookup(&tree, repo, &id_hiearar));
must_be_true(2 == git_tree_entrycount(tree));
+#ifndef GIT_WIN32
+ must_be_true((loose_object_dir_mode(TEMP_REPO_FOLDER, (git_object *)tree) & 0777) == GIT_OBJECT_DIR_MODE);
+#endif
git_tree_close(tree);
close_temp_repo(repo);
diff --git a/tests/t10-refs.c b/tests/t10-refs.c
index aa6735a30..4cb31d5e7 100644
--- a/tests/t10-refs.c
+++ b/tests/t10-refs.c
@@ -431,12 +431,11 @@ END_TEST
BEGIN_TEST(pack0, "create a packfile for an empty folder")
git_repository *repo;
char temp_path[GIT_PATH_MAX];
- const mode_t mode = 0755; /* or 0777 ? */
must_pass(open_temp_repo(&repo, REPOSITORY_FOLDER));
git_path_join_n(temp_path, 3, repo->path_repository, GIT_REFS_HEADS_DIR, "empty_dir");
- must_pass(git_futils_mkdir_r(temp_path, mode));
+ must_pass(git_futils_mkdir_r(temp_path, GIT_REFS_DIR_MODE));
must_pass(git_reference_packall(repo));
diff --git a/tests/t12-repo.c b/tests/t12-repo.c
index 6884188a3..c07150c9c 100644
--- a/tests/t12-repo.c
+++ b/tests/t12-repo.c
@@ -173,7 +173,7 @@ END_TEST
BEGIN_TEST(init2, "Initialize and open a bare repo with a relative path escaping out of the current working directory")
char path_repository[GIT_PATH_MAX];
char current_workdir[GIT_PATH_MAX];
- const mode_t mode = 0755; /* or 0777 ? */
+ const mode_t mode = 0777;
git_repository* repo;
must_pass(p_getcwd(current_workdir, sizeof(current_workdir)));
@@ -232,7 +232,7 @@ BEGIN_TEST(open2, "Open a bare repository with a relative path escaping out of t
char current_workdir[GIT_PATH_MAX];
char path_repository[GIT_PATH_MAX];
- const mode_t mode = 0755; /* or 0777 ? */
+ const mode_t mode = 0777;
git_repository* repo;
/* Setup the repository to open */
@@ -351,7 +351,7 @@ static int write_file(const char *path, const char *content)
return error;
}
- file = git_futils_creat_withpath(path, 0644);
+ file = git_futils_creat_withpath(path, 0777, 0644);
if (file < GIT_SUCCESS)
return file;
@@ -384,7 +384,7 @@ BEGIN_TEST(discover0, "test discover")
char repository_path[GIT_PATH_MAX];
char sub_repository_path[GIT_PATH_MAX];
char found_path[GIT_PATH_MAX];
- mode_t mode = 0755;
+ const mode_t mode = 0777;
git_futils_mkdir_r(DISCOVER_FOLDER, mode);
must_pass(append_ceiling_dir(ceiling_dirs, TEMP_REPO_FOLDER));
diff --git a/tests/test_helpers.c b/tests/test_helpers.c
index 0900430e1..7074e4822 100644
--- a/tests/test_helpers.c
+++ b/tests/test_helpers.c
@@ -42,7 +42,7 @@ int write_object_data(char *file, void *data, size_t len)
int write_object_files(const char *odb_dir, object_data *d)
{
- if (p_mkdir(odb_dir, 0755) < 0) {
+ if (p_mkdir(odb_dir, GIT_OBJECT_DIR_MODE) < 0) {
int err = errno;
fprintf(stderr, "can't make directory \"%s\"", odb_dir);
if (err == EEXIST)
@@ -51,7 +51,7 @@ int write_object_files(const char *odb_dir, object_data *d)
return -1;
}
- if ((p_mkdir(d->dir, 0755) < 0) && (errno != EEXIST)) {
+ if ((p_mkdir(d->dir, GIT_OBJECT_DIR_MODE) < 0) && (errno != EEXIST)) {
fprintf(stderr, "can't make object directory \"%s\"\n", d->dir);
return -1;
}
@@ -82,7 +82,7 @@ int remove_object_files(const char *odb_dir, object_data *d)
return 0;
}
-int remove_loose_object(const char *repository_folder, git_object *object)
+void locate_loose_object(const char *repository_folder, git_object *object, char **out, char **out_folder)
{
static const char *objects_folder = "objects/";
@@ -104,6 +104,40 @@ int remove_loose_object(const char *repository_folder, git_object *object)
ptr += GIT_OID_HEXSZ + 1;
*ptr = 0;
+ *out = full_path;
+
+ if (out_folder)
+ *out_folder = top_folder;
+}
+
+int loose_object_dir_mode(const char *repository_folder, git_object *object)
+{
+ char *object_path;
+ size_t pos;
+ struct stat st;
+
+ locate_loose_object(repository_folder, object, &object_path, NULL);
+
+ pos = strlen(object_path);
+ while (pos--) {
+ if (object_path[pos] == '/') {
+ object_path[pos] = 0;
+ break;
+ }
+ }
+
+ assert(p_stat(object_path, &st) == 0);
+ free(object_path);
+
+ return st.st_mode;
+}
+
+int remove_loose_object(const char *repository_folder, git_object *object)
+{
+ char *full_path, *top_folder;
+
+ locate_loose_object(repository_folder, object, &full_path, &top_folder);
+
if (p_unlink(full_path) < 0) {
fprintf(stderr, "can't delete object file \"%s\"\n", full_path);
return -1;
@@ -141,7 +175,7 @@ int copy_file(const char *src, const char *dst)
if (git_futils_readbuffer(&source_buf, src) < GIT_SUCCESS)
return GIT_ENOTFOUND;
- dst_fd = git_futils_creat_withpath(dst, 0644);
+ dst_fd = git_futils_creat_withpath(dst, 0777, 0644);
if (dst_fd < 0)
goto cleanup;
diff --git a/tests/test_helpers.h b/tests/test_helpers.h
index 53361b7b1..2e5194d7c 100644
--- a/tests/test_helpers.h
+++ b/tests/test_helpers.h
@@ -63,6 +63,10 @@ extern int remove_object_files(const char *odb_dir, object_data *d);
extern int cmp_objects(git_rawobj *o, object_data *d);
+extern void locate_loose_object(const char *odb_dir, git_object *object, char **out, char **out_folder);
+
+extern int loose_object_dir_mode(const char *odb_dir, git_object *object);
+
extern int remove_loose_object(const char *odb_dir, git_object *object);
extern int cmp_files(const char *a, const char *b);
diff --git a/tests/test_main.c b/tests/test_main.c
index c9f8da3a4..9961ffd6b 100644
--- a/tests/test_main.c
+++ b/tests/test_main.c
@@ -26,6 +26,8 @@
#include <string.h>
#include <git2.h>
+#include "posix.h"
+
#include "test_lib.h"
#include "test_helpers.h"
@@ -81,6 +83,8 @@ main(int GIT_UNUSED(argc), char *GIT_UNUSED(argv[]))
GIT_UNUSED_ARG(argc);
GIT_UNUSED_ARG(argv);
+ p_umask(0);
+
failures = 0;
for (i = 0; i < GIT_SUITE_COUNT; ++i)