summaryrefslogtreecommitdiff
path: root/tests/test_helpers.c
diff options
context:
space:
mode:
authorVicent Martí <tanoku@gmail.com>2011-10-28 19:04:23 -0700
committerVicent Martí <tanoku@gmail.com>2011-10-28 19:04:23 -0700
commit89fb8f025a1f72b90f1f9563c85bf43b7f66ba60 (patch)
tree11726793eecf4670d4948a22e276dd3d50d1addb /tests/test_helpers.c
parent3286c408eccb18c525ca123383f3ebf5097441bc (diff)
parent01ad7b3a9ec8f5e465f94c2704e1e96b84f941c7 (diff)
downloadlibgit2-89fb8f025a1f72b90f1f9563c85bf43b7f66ba60.tar.gz
Merge pull request #456 from brodie/perm-fixes
Create objects, indexes, and directories with the right file permissions
Diffstat (limited to 'tests/test_helpers.c')
-rw-r--r--tests/test_helpers.c54
1 files changed, 50 insertions, 4 deletions
diff --git a/tests/test_helpers.c b/tests/test_helpers.c
index d1d7c9ebd..47a0b1b11 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,52 @@ 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_mode(const char *repository_folder, git_object *object)
+{
+ char *object_path;
+ struct stat st;
+
+ locate_loose_object(repository_folder, object, &object_path, NULL);
+ assert(p_stat(object_path, &st) == 0);
+ free(object_path);
+
+ return st.st_mode;
+}
+
+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 +187,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, 0666);
if (dst_fd < 0)
goto cleanup;