aboutsummaryrefslogtreecommitdiff
path: root/read-cache.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2008-11-28 19:56:34 -0800
committerJunio C Hamano <gitster@pobox.com>2008-11-30 17:59:19 -0800
commit331fcb598ec0127fd89c992361bc573dcd3a4a63 (patch)
treea6ef30a49739d914475a5c4bba38d98d2b8a6cae /read-cache.c
parent388b2acd6e649145d4368a10cf4df5f5bbbac2c2 (diff)
downloadgit-331fcb598ec0127fd89c992361bc573dcd3a4a63.tar.gz
git-331fcb598ec0127fd89c992361bc573dcd3a4a63.tar.xz
git add --intent-to-add: do not let an empty blob be committed by accident
Writing a tree out of an index with an "intent to add" entry is blocked. This implies that you cannot "git commit" from such a state; however you can still do "git commit -a" or "git commit $that_path". Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'read-cache.c')
-rw-r--r--read-cache.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/read-cache.c b/read-cache.c
index fa30a0f88..8579663ee 100644
--- a/read-cache.c
+++ b/read-cache.c
@@ -257,6 +257,14 @@ int ie_match_stat(const struct index_state *istate,
if (!ignore_valid && (ce->ce_flags & CE_VALID))
return 0;
+ /*
+ * Intent-to-add entries have not been added, so the index entry
+ * by definition never matches what is in the work tree until it
+ * actually gets added.
+ */
+ if (ce->ce_flags & CE_INTENT_TO_ADD)
+ return DATA_CHANGED | TYPE_CHANGED | MODE_CHANGED;
+
changed = ce_match_stat_basic(ce, st);
/*