Most of the updates are in commit message (see the old thread [1]). I give up on adding new tests for git-apply, finally admitting I don't know that command that well. Code change from 'pu' version is entirely in 5/6: diff --git a/builtin/checkout-index.c b/builtin/checkout-index.c index 687c82e..d9fe8f4 100644 --- a/builtin/checkout-index.c +++ b/builtin/checkout-index.c @@ -48,6 +48,7 @@ static int checkout_file(const char *name, const char *prefix) int pos = cache_name_pos(name, namelen); int has_same_name = 0; int did_checkout = 0; + int has_intent_to_add = 0; int errs = 0; if (pos < 0) @@ -56,9 +57,11 @@ static int checkout_file(const char *name, const char *prefix) while (pos < active_nr) { struct cache_entry *ce = active_cache[pos]; if (ce_namelen(ce) != namelen || - memcmp(ce->name, name, namelen) || - ce_intent_to_add(ce)) + memcmp(ce->name, name, namelen)) { + if (ce_intent_to_add(ce)) + has_intent_to_add = 1; break; + } has_same_name = 1; pos++; if (ce_stage(ce) != checkout_stage @@ -78,7 +81,9 @@ static int checkout_file(const char *name, const char *prefix) if (!state.quiet) { fprintf(stderr, "git checkout-index: %s ", name); - if (!has_same_name) + if (has_intent_to_add) + fprintf(stderr, "is not yet in the cache"); + else if (!has_same_name) fprintf(stderr, "is not in the cache"); else if (checkout_stage) fprintf(stderr, "does not exist at stage %d", diff --git a/builtin/checkout.c b/builtin/checkout.c index 6d198b3..ac37d92 100644 --- a/builtin/checkout.c +++ b/builtin/checkout.c @@ -300,8 +300,6 @@ static int checkout_paths(const struct checkout_opts *opts, * anything to this entry at all. */ continue; - if (ce_intent_to_add(ce)) - continue; /* * Either this entry came from the tree-ish we are * checking the paths out of, or we are checking out @@ -330,12 +328,15 @@ static int checkout_paths(const struct checkout_opts *opts, if (opts->merge) unmerge_marked_index(&the_index); - /* Any unmerged paths? */ for (pos = 0; pos < active_nr; pos++) { - const struct cache_entry *ce = active_cache[pos]; + struct cache_entry *ce = active_cache[pos]; if (ce->ce_flags & CE_MATCHED) { - if (!ce_stage(ce)) + if (!ce_stage(ce)) { + if (ce_intent_to_add(ce)) + ce->ce_flags &= ~CE_MATCHED; continue; + } + /* Unmerged paths */ if (opts->force) { warning(_("path '%s' is unmerged"), ce->name); } else if (opts->writeout_stage) { diff --git a/t/t2203-add-intent.sh b/t/t2203-add-intent.sh index d0f36a4..52e9f7f 100755 --- a/t/t2203-add-intent.sh +++ b/t/t2203-add-intent.sh @@ -117,7 +117,7 @@ test_expect_success 'checkout ignores i-t-a' ' cd checkout && echo data >file && git add -N file && - test_must_fail git checkout -- file && + git checkout -- file && echo data >expected && test_cmp expected file ) [1] http://thread.gmane.org/gmane.comp.version-control.git/272363/focus=276352 Nguyễn Thái Ngọc Duy (6): blame: remove obsolete comment Add and use convenient macro ce_intent_to_add() apply: fix adding new files on i-t-a entries apply: make sure check_preimage() does not leave empty file on error checkout(-index): do not checkout i-t-a entries grep: make it clear i-t-a entries are ignored builtin/apply.c | 13 +++++----- builtin/blame.c | 5 ---- builtin/checkout-index.c | 12 +++++++-- builtin/checkout.c | 9 ++++--- builtin/grep.c | 2 +- builtin/rm.c | 2 +- cache-tree.c | 2 +- cache.h | 1 + read-cache.c | 4 +-- t/t2203-add-intent.sh | 63 ++++++++++++++++++++++++++++++++++++++++++++++++ 10 files changed, 92 insertions(+), 21 deletions(-) -- 2.3.0.rc1.137.g477eb31 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html