Restore default status recursion behavior This gives `git_status_foreach()` back its old behavior of emulating the "--untracked=all" behavior of git. You can get any of the various --untracked options by passing flags to `git_status_foreach_ext()` but the basic version will keep the behavior it has always had.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
diff --git a/src/status.c b/src/status.c
index a0716e9..bec7529 100644
--- a/src/status.c
+++ b/src/status.c
@@ -192,7 +192,8 @@ int git_status_foreach(
opts.show = GIT_STATUS_SHOW_INDEX_AND_WORKDIR;
opts.flags = GIT_STATUS_OPT_INCLUDE_IGNORED |
- GIT_STATUS_OPT_INCLUDE_UNTRACKED;
+ GIT_STATUS_OPT_INCLUDE_UNTRACKED |
+ GIT_STATUS_OPT_RECURSE_UNTRACKED_DIRS;
return git_status_foreach_ext(repo, &opts, callback, payload);
}
diff --git a/tests-clar/status/worktree.c b/tests-clar/status/worktree.c
index dbc2fee..7a0494e 100644
--- a/tests-clar/status/worktree.c
+++ b/tests-clar/status/worktree.c
@@ -143,11 +143,12 @@ void test_status_worktree__purged_worktree(void)
cl_assert(counts.wrong_sorted_path == 0);
}
-/* this test is equivalent to t18-status.c:statuscb3 */
+/* this test is similar to t18-status.c:statuscb3 */
void test_status_worktree__swap_subdir_and_file(void)
{
struct status_entry_counts counts;
git_repository *repo = cl_git_sandbox_init("status");
+ git_status_options opts;
/* first alter the contents of the worktree */
cl_git_pass(p_rename("status/current_file", "status/swap"));
@@ -164,8 +165,12 @@ void test_status_worktree__swap_subdir_and_file(void)
counts.expected_paths = entry_paths3;
counts.expected_statuses = entry_statuses3;
+ memset(&opts, 0, sizeof(opts));
+ opts.flags = GIT_STATUS_OPT_INCLUDE_UNTRACKED |
+ GIT_STATUS_OPT_INCLUDE_IGNORED;
+
cl_git_pass(
- git_status_foreach(repo, cb_status__normal, &counts)
+ git_status_foreach_ext(repo, &opts, cb_status__normal, &counts)
);
cl_assert(counts.entry_count == counts.expected_entry_count);
diff --git a/tests/t18-status.c b/tests/t18-status.c
index 8abff98..bfd6906 100644
--- a/tests/t18-status.c
+++ b/tests/t18-status.c
@@ -261,7 +261,9 @@ static const char *entry_paths3[] = {
"42-is-not-prime.sigh",
"README.md",
"current_file",
- "current_file/",
+ "current_file/current_file",
+ "current_file/modified_file",
+ "current_file/new_file",
"file_deleted",
"ignored_file",
"modified_file",
@@ -286,6 +288,8 @@ static const unsigned int entry_statuses3[] = {
GIT_STATUS_WT_NEW,
GIT_STATUS_WT_DELETED,
GIT_STATUS_WT_NEW,
+ GIT_STATUS_WT_NEW,
+ GIT_STATUS_WT_NEW,
GIT_STATUS_WT_DELETED,
GIT_STATUS_IGNORED,
GIT_STATUS_WT_MODIFIED,
@@ -304,7 +308,7 @@ static const unsigned int entry_statuses3[] = {
GIT_STATUS_WT_DELETED,
};
-#define ENTRY_COUNT3 21
+#define ENTRY_COUNT3 23
BEGIN_TEST(statuscb3, "test retrieving status for a worktree where a file and a subdir have been renamed and some files have been added")
git_repository *repo;