summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@microsoft.com>2014-01-20 15:12:06 -0500
committerEdward Thomson <ethomson@microsoft.com>2014-01-20 17:09:31 -0500
commitb554ca5dc1b95234589367eda269a94bdda3d6ae (patch)
treea6c270f95f21d4d42ea4a2543a45f00656e07afe
parentd62bf0bf83df307b81affbf7b576985392203fad (diff)
downloadlibgit2-b554ca5dc1b95234589367eda269a94bdda3d6ae.tar.gz
"Uninitialized" submodules are "unmodified"
Extend the "unmodified" submodule workdir test to include uninitialized submodules, to prevent reporting submodules as modified when they're not in the workdir at all.
-rw-r--r--include/git2/submodule.h3
-rw-r--r--tests/status/submodules.c17
2 files changed, 19 insertions, 1 deletions
diff --git a/include/git2/submodule.h b/include/git2/submodule.h
index 907e5a15f..af08ba6eb 100644
--- a/include/git2/submodule.h
+++ b/include/git2/submodule.h
@@ -97,7 +97,8 @@ typedef enum {
(((S) & GIT_SUBMODULE_STATUS__INDEX_FLAGS) == 0)
#define GIT_SUBMODULE_STATUS_IS_WD_UNMODIFIED(S) \
- (((S) & GIT_SUBMODULE_STATUS__WD_FLAGS) == 0)
+ (((S) & (GIT_SUBMODULE_STATUS__WD_FLAGS & \
+ ~GIT_SUBMODULE_STATUS_WD_UNINITIALIZED)) == 0)
#define GIT_SUBMODULE_STATUS_IS_WD_DIRTY(S) \
(((S) & (GIT_SUBMODULE_STATUS_WD_INDEX_MODIFIED | \
diff --git a/tests/status/submodules.c b/tests/status/submodules.c
index ef2888f7d..dc7990cf1 100644
--- a/tests/status/submodules.c
+++ b/tests/status/submodules.c
@@ -221,3 +221,20 @@ void test_status_submodules__dirty_workdir_only(void)
git_status_foreach_ext(g_repo, &opts, cb_status__match, &counts));
cl_assert_equal_i(6, counts.entry_count);
}
+
+void test_status_submodules__uninitialized(void)
+{
+ git_repository *cloned_repo;
+ git_status_list *statuslist;
+
+ g_repo = cl_git_sandbox_init("submod2");
+
+ cl_git_pass(git_clone(&cloned_repo, "submod2", "submod2-clone", NULL));
+
+ cl_git_pass(git_status_list_new(&statuslist, cloned_repo, NULL));
+ cl_assert_equal_i(0, git_status_list_entrycount(statuslist));
+
+ git_status_list_free(statuslist);
+ git_repository_free(cloned_repo);
+ cl_git_sandbox_cleanup();
+}