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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to