summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorVicent Marti <vicent@github.com>2014-07-23 07:57:20 +0200
committerVicent Marti <vicent@github.com>2014-07-23 07:57:20 +0200
commit243db06ce3ab5ac984e24867815add6251819561 (patch)
treee37b398094d86c27e13c2d9369743f76d393cff8 /tests
parentbf9a7e0607b21bb09c4b69913b84fe295d4f5b18 (diff)
parent85b7268e387eafce2e5cf53a671e6658ae82d6f0 (diff)
downloadlibgit2-243db06ce3ab5ac984e24867815add6251819561.tar.gz
Merge pull request #2484 from libgit2/fix-git-status-list-new-unreadable-folder
Fix git status list new unreadable folder
Diffstat (limited to 'tests')
-rw-r--r--tests/status/status_helpers.c3
-rw-r--r--tests/status/worktree.c99
2 files changed, 102 insertions, 0 deletions
diff --git a/tests/status/status_helpers.c b/tests/status/status_helpers.c
index 088279252..5d13caa9a 100644
--- a/tests/status/status_helpers.c
+++ b/tests/status/status_helpers.c
@@ -82,6 +82,9 @@ int cb_status__print(
if (status_flags & GIT_STATUS_IGNORED) {
wstatus = 'I'; wcount++;
}
+ if (status_flags & GIT_STATUS_WT_UNREADABLE) {
+ wstatus = 'X'; wcount++;
+ }
fprintf(stderr, "%c%c %s (%d/%d%s)\n",
istatus, wstatus, path, icount, wcount,
diff --git a/tests/status/worktree.c b/tests/status/worktree.c
index ca9068aba..2e86c03b0 100644
--- a/tests/status/worktree.c
+++ b/tests/status/worktree.c
@@ -935,3 +935,102 @@ void test_status_worktree__update_stat_cache_0(void)
git_status_list_free(status);
}
+
+void test_status_worktree__unreadable(void)
+{
+ const char *expected_paths[] = { "no_permission/foo" };
+ const unsigned int expected_statuses[] = {GIT_STATUS_WT_UNREADABLE};
+
+ git_repository *repo = cl_git_sandbox_init("empty_standard_repo");
+ git_status_options opts = GIT_STATUS_OPTIONS_INIT;
+ status_entry_counts counts = {0};
+
+ /* Create directory with no read permission */
+ cl_git_pass(git_futils_mkdir_r("empty_standard_repo/no_permission", NULL, 0777));
+ cl_git_mkfile("empty_standard_repo/no_permission/foo", "dummy");
+ p_chmod("empty_standard_repo/no_permission", 0644);
+
+ counts.expected_entry_count = 1;
+ counts.expected_paths = expected_paths;
+ counts.expected_statuses = expected_statuses;
+
+ opts.show = GIT_STATUS_SHOW_WORKDIR_ONLY;
+ opts.flags = GIT_STATUS_OPT_DEFAULTS | GIT_STATUS_OPT_INCLUDE_UNREADABLE;
+
+ cl_git_pass(
+ git_status_foreach_ext(repo, &opts, cb_status__normal, &counts) );
+
+ /* Restore permissions so we can cleanup :) */
+ p_chmod("empty_standard_repo/no_permission", 0777);
+
+ cl_assert_equal_i(counts.expected_entry_count, counts.entry_count);
+ cl_assert_equal_i(0, counts.wrong_status_flags_count);
+ cl_assert_equal_i(0, counts.wrong_sorted_path);
+}
+
+void test_status_worktree__unreadable_not_included(void)
+{
+ const char *expected_paths[] = { "no_permission/" };
+ const unsigned int expected_statuses[] = {GIT_STATUS_WT_NEW};
+
+ git_repository *repo = cl_git_sandbox_init("empty_standard_repo");
+ git_status_options opts = GIT_STATUS_OPTIONS_INIT;
+ status_entry_counts counts = {0};
+
+ /* Create directory with no read permission */
+ cl_git_pass(git_futils_mkdir_r("empty_standard_repo/no_permission", NULL, 0777));
+ cl_git_mkfile("empty_standard_repo/no_permission/foo", "dummy");
+ p_chmod("empty_standard_repo/no_permission", 0644);
+
+ counts.expected_entry_count = 1;
+ counts.expected_paths = expected_paths;
+ counts.expected_statuses = expected_statuses;
+
+ opts.show = GIT_STATUS_SHOW_WORKDIR_ONLY;
+ opts.flags = (GIT_STATUS_OPT_INCLUDE_IGNORED | GIT_STATUS_OPT_INCLUDE_UNTRACKED);
+
+ cl_git_pass(
+ git_status_foreach_ext(repo, &opts, cb_status__normal, &counts) );
+
+ /* Restore permissions so we can cleanup :) */
+ p_chmod("empty_standard_repo/no_permission", 0777);
+
+ cl_assert_equal_i(counts.expected_entry_count, counts.entry_count);
+ cl_assert_equal_i(0, counts.wrong_status_flags_count);
+ cl_assert_equal_i(0, counts.wrong_sorted_path);
+}
+
+void test_status_worktree__unreadable_as_untracked(void)
+{
+ const char *expected_paths[] = { "no_permission/foo" };
+ const unsigned int expected_statuses[] = {GIT_STATUS_WT_NEW};
+
+ git_repository *repo = cl_git_sandbox_init("empty_standard_repo");
+ git_status_options opts = GIT_STATUS_OPTIONS_INIT;
+ status_entry_counts counts = {0};
+
+ /* Create directory with no read permission */
+ cl_git_pass(git_futils_mkdir_r("empty_standard_repo/no_permission", NULL, 0777));
+ cl_git_mkfile("empty_standard_repo/no_permission/foo", "dummy");
+ p_chmod("empty_standard_repo/no_permission", 0644);
+
+ counts.expected_entry_count = 1;
+ counts.expected_paths = expected_paths;
+ counts.expected_statuses = expected_statuses;
+
+ opts.show = GIT_STATUS_SHOW_WORKDIR_ONLY;
+ opts.flags = GIT_STATUS_OPT_DEFAULTS |
+ GIT_STATUS_OPT_INCLUDE_UNREADABLE |
+ GIT_STATUS_OPT_INCLUDE_UNREADABLE_AS_UNTRACKED;
+
+ cl_git_pass(
+ git_status_foreach_ext(repo, &opts, cb_status__normal, &counts) );
+
+ /* Restore permissions so we can cleanup :) */
+ p_chmod("empty_standard_repo/no_permission", 0777);
+
+ cl_assert_equal_i(counts.expected_entry_count, counts.entry_count);
+ cl_assert_equal_i(0, counts.wrong_status_flags_count);
+ cl_assert_equal_i(0, counts.wrong_sorted_path);
+}
+