summaryrefslogtreecommitdiff
path: root/submodule.c
diff options
context:
space:
mode:
authorBrandon Williams <bmwill@google.com>2017-08-02 19:49:20 (GMT)
committerJunio C Hamano <gitster@pobox.com>2017-08-02 21:26:46 (GMT)
commit91b834807b98b620050fe534b6de93e223dbcbcf (patch)
tree6fe6b91d477bae8b1ccbba44eb1b29661bd9efc5 /submodule.c
parent8fa2915971e5032e6a32f5096452db81ab8795eb (diff)
downloadgit-91b834807b98b620050fe534b6de93e223dbcbcf.zip
git-91b834807b98b620050fe534b6de93e223dbcbcf.tar.gz
git-91b834807b98b620050fe534b6de93e223dbcbcf.tar.bz2
submodule: check for unstaged .gitmodules outside of config parsing
Teach 'is_staging_gitmodules_ok()' to be able to determine in the '.gitmodules' file has unstaged changes based on the passed in index instead of relying on a global variable which is set during the submodule-config parsing. Signed-off-by: Brandon Williams <bmwill@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'submodule.c')
-rw-r--r--submodule.c32
1 files changed, 17 insertions, 15 deletions
diff --git a/submodule.c b/submodule.c
index 1d9d2ce..677b5c4 100644
--- a/submodule.c
+++ b/submodule.c
@@ -37,18 +37,25 @@ static struct oid_array ref_tips_after_fetch;
static int gitmodules_is_unmerged;
/*
- * This flag is set if the .gitmodules file had unstaged modifications on
- * startup. This must be checked before allowing modifications to the
- * .gitmodules file with the intention to stage them later, because when
- * continuing we would stage the modifications the user didn't stage herself
- * too. That might change in a future version when we learn to stage the
- * changes we do ourselves without staging any previous modifications.
+ * Check if the .gitmodules file has unstaged modifications. This must be
+ * checked before allowing modifications to the .gitmodules file with the
+ * intention to stage them later, because when continuing we would stage the
+ * modifications the user didn't stage herself too. That might change in a
+ * future version when we learn to stage the changes we do ourselves without
+ * staging any previous modifications.
*/
-static int gitmodules_is_modified;
-
-int is_staging_gitmodules_ok(void)
+int is_staging_gitmodules_ok(const struct index_state *istate)
{
- return !gitmodules_is_modified;
+ int pos = index_name_pos(istate, GITMODULES_FILE, strlen(GITMODULES_FILE));
+
+ if ((pos >= 0) && (pos < istate->cache_nr)) {
+ struct stat st;
+ if (lstat(GITMODULES_FILE, &st) == 0 &&
+ ce_match_stat(istate->cache[pos], &st, 0) & DATA_CHANGED)
+ return 0;
+ }
+
+ return 1;
}
/*
@@ -231,11 +238,6 @@ void gitmodules_config(void)
!memcmp(ce->name, GITMODULES_FILE, 11))
gitmodules_is_unmerged = 1;
}
- } else if (pos < active_nr) {
- struct stat st;
- if (lstat(GITMODULES_FILE, &st) == 0 &&
- ce_match_stat(active_cache[pos], &st, 0) & DATA_CHANGED)
- gitmodules_is_modified = 1;
}
if (!gitmodules_is_unmerged)