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 [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html