summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/diff.c14
-rw-r--r--tests-clar/diff/submodules.c7
2 files changed, 8 insertions, 13 deletions
diff --git a/src/diff.c b/src/diff.c
index cc7be451f..2b018188e 100644
--- a/src/diff.c
+++ b/src/diff.c
@@ -13,6 +13,7 @@
#include "pathspec.h"
#include "index.h"
#include "odb.h"
+#include "submodule.h"
#define DIFF_FLAG_IS_SET(DIFF,FLAG) (((DIFF)->opts.flags & (FLAG)) != 0)
#define DIFF_FLAG_ISNT_SET(DIFF,FLAG) (((DIFF)->opts.flags & (FLAG)) == 0)
@@ -595,7 +596,6 @@ static int maybe_modified_submodule(
int error = 0;
git_submodule *sub;
unsigned int sm_status = 0;
- const git_oid *sm_oid;
*status = GIT_DELTA_UNMODIFIED;
@@ -603,7 +603,9 @@ static int maybe_modified_submodule(
!(error = git_submodule_lookup(
&sub, diff->repo, info->nitem->path)) &&
git_submodule_ignore(sub) != GIT_SUBMODULE_IGNORE_ALL &&
- !(error = git_submodule_status(&sm_status, sub)))
+ !(error = git_submodule__status(
+ &sm_status, NULL, NULL, found_oid, sub,
+ GIT_SUBMODULE_IGNORE_DEFAULT)))
{
/* check IS_WD_UNMODIFIED because this case is only used
* when the new side of the diff is the working directory
@@ -611,10 +613,10 @@ static int maybe_modified_submodule(
if (!GIT_SUBMODULE_STATUS_IS_WD_UNMODIFIED(sm_status))
*status = GIT_DELTA_MODIFIED;
- /* grab OID while we are here */
- if (git_oid_iszero(&info->nitem->oid) &&
- (sm_oid = git_submodule_wd_id(sub)) != NULL)
- git_oid_cpy(found_oid, sm_oid);
+ /* now that we have a HEAD OID, check if HEAD moved */
+ if ((sm_status & GIT_SUBMODULE_STATUS_IN_WD) != 0 &&
+ !git_oid_equal(&info->oitem->oid, found_oid))
+ *status = GIT_DELTA_MODIFIED;
}
/* GIT_EEXISTS means a dir with .git in it was found - ignore it */
diff --git a/tests-clar/diff/submodules.c b/tests-clar/diff/submodules.c
index c94fd57c6..4a40affb2 100644
--- a/tests-clar/diff/submodules.c
+++ b/tests-clar/diff/submodules.c
@@ -333,8 +333,6 @@ void test_diff_submodules__invalid_cache(void)
check_diff_patches(diff, expected_unchanged);
git_diff_list_free(diff);
- sleep(2);
-
/* commit changed index of submodule */
{
git_object *parent;
@@ -357,11 +355,6 @@ void test_diff_submodules__invalid_cache(void)
git_signature_free(sig);
}
- /* THIS RELOAD SHOULD NOT BE REQUIRED
- cl_git_pass(git_submodule_reload_all(g_repo));
- cl_git_pass(git_submodule_lookup(&sm, g_repo, smpath));
- */
-
git_submodule_set_ignore(sm, GIT_SUBMODULE_IGNORE_DIRTY);
cl_git_pass(git_diff_index_to_workdir(&diff, g_repo, NULL, &opts));