diff options
| author | Brodie Rao <brodie@bitheap.org> | 2011-09-06 15:48:45 -0700 |
|---|---|---|
| committer | Brodie Rao <brodie@bitheap.org> | 2011-10-14 16:07:47 -0700 |
| commit | 01ad7b3a9ec8f5e465f94c2704e1e96b84f941c7 (patch) | |
| tree | c44520dc0f23ceb24463ab6a2d0b754cd0b55cbb /tests | |
| parent | ce8cd006ce3adcd012a38401b8a7555ba3307b3f (diff) | |
| download | libgit2-01ad7b3a9ec8f5e465f94c2704e1e96b84f941c7.tar.gz | |
*: correct and codify various file permissions
The following files now have 0444 permissions:
- loose objects
- pack indexes
- pack files
- packs downloaded by fetch
- packs downloaded by the HTTP transport
And the following files now have 0666 permissions:
- config files
- repository indexes
- reflogs
- refs
This brings libgit2 more in line with Git.
Note that git_filebuf_commit() and git_filebuf_commit_at() have both
gained a new mode parameter.
The latter change fixes an important issue where filebufs created with
GIT_FILEBUF_TEMPORARY received 0600 permissions (due to mkstemp(3)
usage). Now we chmod() the file before renaming it into place.
Tests have been added to confirm that new commit, tag, and tree
objects are created with the right permissions. I don't have access to
Windows, so for now I've guarded the tests with "#ifndef GIT_WIN32".
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/t00-core.c | 8 | ||||
| -rw-r--r-- | tests/t04-commit.c | 4 | ||||
| -rw-r--r-- | tests/t06-index.c | 2 | ||||
| -rw-r--r-- | tests/t08-tag.c | 3 | ||||
| -rw-r--r-- | tests/t09-tree.c | 1 | ||||
| -rw-r--r-- | tests/t12-repo.c | 2 | ||||
| -rw-r--r-- | tests/t15-config.c | 2 | ||||
| -rw-r--r-- | tests/t18-status.c | 4 | ||||
| -rw-r--r-- | tests/test_helpers.c | 14 | ||||
| -rw-r--r-- | tests/test_helpers.h | 1 |
10 files changed, 31 insertions, 10 deletions
diff --git a/tests/t00-core.c b/tests/t00-core.c index 185681562..dbc80670f 100644 --- a/tests/t00-core.c +++ b/tests/t00-core.c @@ -264,7 +264,7 @@ static int setup(walk_data *d) state_loc = d; for (n = d->names; n->name; n++) { - git_file fd = p_creat(n->name, 0600); + git_file fd = p_creat(n->name, 0666); if (fd < 0) return GIT_ERROR; p_close(fd); @@ -479,14 +479,14 @@ BEGIN_TEST(filebuf1, "make sure GIT_FILEBUF_APPEND works as expected") int fd; char test[] = "test"; - fd = p_creat(test, 0644); + fd = p_creat(test, 0666); must_pass(fd); must_pass(p_write(fd, "libgit2 rocks\n", 14)); must_pass(p_close(fd)); must_pass(git_filebuf_open(&file, test, GIT_FILEBUF_APPEND)); must_pass(git_filebuf_printf(&file, "%s\n", "libgit2 rocks")); - must_pass(git_filebuf_commit(&file)); + must_pass(git_filebuf_commit(&file, 0666)); must_pass(p_unlink(test)); END_TEST @@ -499,7 +499,7 @@ BEGIN_TEST(filebuf2, "make sure git_filebuf_write writes large buffer correctly" memset(buf, 0xfe, sizeof(buf)); must_pass(git_filebuf_open(&file, test, 0)); must_pass(git_filebuf_write(&file, buf, sizeof(buf))); - must_pass(git_filebuf_commit(&file)); + must_pass(git_filebuf_commit(&file, 0666)); must_pass(p_unlink(test)); END_TEST diff --git a/tests/t04-commit.c b/tests/t04-commit.c index 3fb4d370c..4abbf01c2 100644 --- a/tests/t04-commit.c +++ b/tests/t04-commit.c @@ -690,6 +690,10 @@ BEGIN_TEST(write0, "write a new commit object from memory to disk") must_be_true(strcmp(git_commit_message(commit), COMMIT_MESSAGE) == 0); +#ifndef GIT_WIN32 + must_be_true((loose_object_mode(REPOSITORY_FOLDER, (git_object *)commit) & 0777) == GIT_OBJECT_FILE_MODE); +#endif + must_pass(remove_loose_object(REPOSITORY_FOLDER, (git_object *)commit)); git_commit_close(commit); diff --git a/tests/t06-index.c b/tests/t06-index.c index dde98abaf..44562d004 100644 --- a/tests/t06-index.c +++ b/tests/t06-index.c @@ -179,7 +179,7 @@ BEGIN_TEST(add0, "add a new file to the index") 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)); + must_pass(git_filebuf_commit(&file, 0666)); /* Store the expected hash of the file/blob * This has been generated by executing the following diff --git a/tests/t08-tag.c b/tests/t08-tag.c index 216fb9dfc..85ef9225e 100644 --- a/tests/t08-tag.c +++ b/tests/t08-tag.c @@ -189,6 +189,9 @@ BEGIN_TEST(write0, "write a tag to the repository and read it again") must_pass(git_reference_lookup(&ref_tag, repo, "refs/tags/the-tag")); must_be_true(git_oid_cmp(git_reference_oid(ref_tag), &tag_id) == 0); must_pass(git_reference_delete(ref_tag)); +#ifndef GIT_WIN32 + must_be_true((loose_object_mode(REPOSITORY_FOLDER, (git_object *)tag) & 0777) == GIT_OBJECT_FILE_MODE); +#endif must_pass(remove_loose_object(REPOSITORY_FOLDER, (git_object *)tag)); diff --git a/tests/t09-tree.c b/tests/t09-tree.c index 1f2fe3f02..2341a1ca4 100644 --- a/tests/t09-tree.c +++ b/tests/t09-tree.c @@ -202,6 +202,7 @@ BEGIN_TEST(write3, "write a hierarchical tree from a memory") 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); + must_be_true((loose_object_mode(TEMP_REPO_FOLDER, (git_object *)tree) & 0777) == GIT_OBJECT_FILE_MODE); #endif git_tree_close(tree); diff --git a/tests/t12-repo.c b/tests/t12-repo.c index c07150c9c..6197cdd00 100644 --- a/tests/t12-repo.c +++ b/tests/t12-repo.c @@ -351,7 +351,7 @@ static int write_file(const char *path, const char *content) return error; } - file = git_futils_creat_withpath(path, 0777, 0644); + file = git_futils_creat_withpath(path, 0777, 0666); if (file < GIT_SUCCESS) return file; diff --git a/tests/t15-config.c b/tests/t15-config.c index c4cb590f5..a97f82067 100644 --- a/tests/t15-config.c +++ b/tests/t15-config.c @@ -319,7 +319,7 @@ BEGIN_TEST(config16, "add a variable in a new section") /* As the section wasn't removed, owerwrite the file */ must_pass(git_filebuf_open(&buf, CONFIG_BASE "/config10", 0)); must_pass(git_filebuf_write(&buf, "[empty]\n", strlen("[empty]\n"))); - must_pass(git_filebuf_commit(&buf)); + must_pass(git_filebuf_commit(&buf, 0666)); END_TEST BEGIN_TEST(config17, "prefixes aren't broken") diff --git a/tests/t18-status.c b/tests/t18-status.c index bd205a438..d836fb9a9 100644 --- a/tests/t18-status.c +++ b/tests/t18-status.c @@ -37,7 +37,7 @@ static int file_create(const char *filename, const char *content) { int fd; - fd = p_creat(filename, 0644); + fd = p_creat(filename, 0666); if (fd == 0) return GIT_ERROR; if (p_write(fd, content, strlen(content)) != 0) @@ -400,7 +400,7 @@ BEGIN_TEST(singlestatus3, "test retrieving status for a new file in an empty rep must_pass(remove_placeholders(TEST_STD_REPO_FOLDER, "dummy-marker.txt")); git_path_join(file_path, TEMP_REPO_FOLDER, filename); - fd = p_creat(file_path, 0644); + fd = p_creat(file_path, 0666); must_pass(fd); must_pass(p_write(fd, "new_file\n", 9)); must_pass(p_close(fd)); diff --git a/tests/test_helpers.c b/tests/test_helpers.c index 7074e4822..7bba2e1d2 100644 --- a/tests/test_helpers.c +++ b/tests/test_helpers.c @@ -110,6 +110,18 @@ void locate_loose_object(const char *repository_folder, git_object *object, char *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; @@ -175,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, 0777, 0644); + dst_fd = git_futils_creat_withpath(dst, 0777, 0666); if (dst_fd < 0) goto cleanup; diff --git a/tests/test_helpers.h b/tests/test_helpers.h index 2e5194d7c..16a3a2ced 100644 --- a/tests/test_helpers.h +++ b/tests/test_helpers.h @@ -65,6 +65,7 @@ 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_mode(const char *odb_dir, git_object *object); 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); |
