]> git.proxmox.com Git - libgit2.git/commitdiff
Add GIT_STATUS_OPT_INCLUDE_UNREADABLE_AS_UNTRACKED
authorAlan Rogers <alan@github.com>
Wed, 4 Jun 2014 00:42:52 +0000 (17:42 -0700)
committerAlan Rogers <alan@github.com>
Wed, 4 Jun 2014 00:42:52 +0000 (17:42 -0700)
and a (failing) test for it.

include/git2/status.h
tests/status/worktree.c

index 858f68841e71dd723a1e20cd639363cadaee79d7..76ffab66357828bbe2ea15980ca1256b6bfdabd6 100644 (file)
@@ -134,28 +134,28 @@ typedef enum {
  * together as `GIT_STATUS_OPT_DEFAULTS` if you want them as a baseline.
  */
 typedef enum {
-       GIT_STATUS_OPT_INCLUDE_UNTRACKED        = (1u << 0),
-       GIT_STATUS_OPT_INCLUDE_IGNORED          = (1u << 1),
-       GIT_STATUS_OPT_INCLUDE_UNMODIFIED       = (1u << 2),
-       GIT_STATUS_OPT_EXCLUDE_SUBMODULES       = (1u << 3),
-       GIT_STATUS_OPT_RECURSE_UNTRACKED_DIRS   = (1u << 4),
-       GIT_STATUS_OPT_DISABLE_PATHSPEC_MATCH   = (1u << 5),
-       GIT_STATUS_OPT_RECURSE_IGNORED_DIRS     = (1u << 6),
-       GIT_STATUS_OPT_RENAMES_HEAD_TO_INDEX    = (1u << 7),
-       GIT_STATUS_OPT_RENAMES_INDEX_TO_WORKDIR = (1u << 8),
-       GIT_STATUS_OPT_SORT_CASE_SENSITIVELY    = (1u << 9),
-       GIT_STATUS_OPT_SORT_CASE_INSENSITIVELY  = (1u << 10),
-       GIT_STATUS_OPT_RENAMES_FROM_REWRITES    = (1u << 11),
-       GIT_STATUS_OPT_NO_REFRESH               = (1u << 12),
-       GIT_STATUS_OPT_UPDATE_INDEX             = (1u << 13),
-       GIT_STATUS_OPT_INCLUDE_UNREADABLE       = (1u << 14),
+       GIT_STATUS_OPT_INCLUDE_UNTRACKED                = (1u << 0),
+       GIT_STATUS_OPT_INCLUDE_IGNORED                  = (1u << 1),
+       GIT_STATUS_OPT_INCLUDE_UNMODIFIED               = (1u << 2),
+       GIT_STATUS_OPT_EXCLUDE_SUBMODULES               = (1u << 3),
+       GIT_STATUS_OPT_RECURSE_UNTRACKED_DIRS           = (1u << 4),
+       GIT_STATUS_OPT_DISABLE_PATHSPEC_MATCH           = (1u << 5),
+       GIT_STATUS_OPT_RECURSE_IGNORED_DIRS             = (1u << 6),
+       GIT_STATUS_OPT_RENAMES_HEAD_TO_INDEX            = (1u << 7),
+       GIT_STATUS_OPT_RENAMES_INDEX_TO_WORKDIR         = (1u << 8),
+       GIT_STATUS_OPT_SORT_CASE_SENSITIVELY            = (1u << 9),
+       GIT_STATUS_OPT_SORT_CASE_INSENSITIVELY          = (1u << 10),
+       GIT_STATUS_OPT_RENAMES_FROM_REWRITES            = (1u << 11),
+       GIT_STATUS_OPT_NO_REFRESH                       = (1u << 12),
+       GIT_STATUS_OPT_UPDATE_INDEX                     = (1u << 13),
+       GIT_STATUS_OPT_INCLUDE_UNREADABLE               = (1u << 14),
+       GIT_STATUS_OPT_INCLUDE_UNREADABLE_AS_UNTRACKED  = (1u << 15),
 } git_status_opt_t;
 
 #define GIT_STATUS_OPT_DEFAULTS \
        (GIT_STATUS_OPT_INCLUDE_IGNORED | \
        GIT_STATUS_OPT_INCLUDE_UNTRACKED | \
        GIT_STATUS_OPT_RECURSE_UNTRACKED_DIRS)
-
 /**
  * Options to control how `git_status_foreach_ext()` will issue callbacks.
  *
index 5e1399b8a1bf5c115b00748bb6bfa0b1344e236e..e3af0e5a3fd5e8941ea4e5b43a462f2b4b3f269f 100644 (file)
@@ -936,7 +936,7 @@ void test_status_worktree__update_stat_cache_0(void)
        git_status_list_free(status);
 }
 
-void test_status_worktree__nopermissions(void)
+void test_status_worktree__unreadable(void)
 {
        const char *expected_paths[] = { "no_permission/foo" };
        const unsigned int expected_statuses[] = {GIT_STATUS_WT_UNREADABLE};
@@ -967,3 +967,38 @@ void test_status_worktree__nopermissions(void)
        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);
+}
+