If a file changes type and a porcelain updates the index, we will print "M file". Instead, let's be more specific and print "T file", which matches actual diff and status output. The plumbing version remains "needs update" for historical compatibility. Signed-off-by: Jeff King <peff@xxxxxxxx> --- The "changed" flag comes from refresh_cache_ent, which in turn gets it from ie_modified_stat. The one hesitation I have is that intent-to-add entries get the TYPE_CHANGED flag set, which means they will get a "T" output. Whereas I actually think "M" is a little more sensible. For "git reset", I'm not sure if it matters, since resetting the index will always drop such an entry anyway. But you can see it with: git add -N file git add --refresh -v other read-cache.c | 6 +++++- 1 files changed, 5 insertions(+), 1 deletions(-) diff --git a/read-cache.c b/read-cache.c index 83fb19c..0e17add 100644 --- a/read-cache.c +++ b/read-cache.c @@ -1107,14 +1107,17 @@ int refresh_index(struct index_state *istate, unsigned int flags, const char **p unsigned int options = really ? CE_MATCH_IGNORE_VALID : 0; const char *modified_fmt; const char *deleted_fmt; + const char *typechange_fmt; const char *unmerged_fmt; modified_fmt = (in_porcelain ? "M\t%s\n" : "%s: needs update\n"); deleted_fmt = (in_porcelain ? "D\t%s\n" : "%s: needs update\n"); + typechange_fmt = (in_porcelain ? "T\t%s\n" : "%s needs update\n"); unmerged_fmt = (in_porcelain ? "U\t%s\n" : "%s: needs merge\n"); for (i = 0; i < istate->cache_nr; i++) { struct cache_entry *ce, *new; int cache_errno = 0; + int changed = 0; ce = istate->cache[i]; if (ignore_submodules && S_ISGITLINK(ce->ce_mode)) @@ -1135,7 +1138,7 @@ int refresh_index(struct index_state *istate, unsigned int flags, const char **p if (pathspec && !match_pathspec(pathspec, ce->name, strlen(ce->name), 0, seen)) continue; - new = refresh_cache_ent(istate, ce, options, &cache_errno, NULL); + new = refresh_cache_ent(istate, ce, options, &cache_errno, &changed); if (new == ce) continue; if (!new) { @@ -1151,6 +1154,7 @@ int refresh_index(struct index_state *istate, unsigned int flags, const char **p if (quiet) continue; show_file((cache_errno == ENOENT ? deleted_fmt : + changed & TYPE_CHANGED ? typechange_fmt : modified_fmt), ce->name, in_porcelain, &first, header_msg); has_errors = 1; -- 1.7.7.3.8.g38efa -- 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