X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=read-cache.c;h=a50a851125db765f06f3869873623bf7592de405;hb=35eeef47220c68c92d0f377f5678c42da2232c20;hp=f83de8c4158e08bab3e0445c4d15caf2d4d105aa;hpb=8e69d78be3f315ea8c7b96400c0c65763b3e8f00;p=git.git diff --git a/read-cache.c b/read-cache.c index f83de8c41..a50a85112 100644 --- a/read-cache.c +++ b/read-cache.c @@ -528,7 +528,7 @@ int add_to_index(struct index_state *istate, const char *path, struct stat *st, ce = create_alias_ce(ce, alias); ce->ce_flags |= CE_ADDED; - /* It was suspected to be recily clean, but it turns out to be Ok */ + /* It was suspected to be racily clean, but it turns out to be Ok */ was_same = (alias && !ce_stage(alias) && !hashcmp(alias->sha1, ce->sha1) && @@ -980,7 +980,10 @@ int refresh_index(struct index_state *istate, unsigned int flags, const char **p int not_new = (flags & REFRESH_IGNORE_MISSING) != 0; int ignore_submodules = (flags & REFRESH_IGNORE_SUBMODULES) != 0; unsigned int options = really ? CE_MATCH_IGNORE_VALID : 0; + const char *needs_update_message; + needs_update_message = ((flags & REFRESH_SAY_CHANGED) + ? "locally modified" : "needs update"); for (i = 0; i < istate->cache_nr; i++) { struct cache_entry *ce, *new; int cache_errno = 0; @@ -1019,7 +1022,7 @@ int refresh_index(struct index_state *istate, unsigned int flags, const char **p } if (quiet) continue; - printf("%s: needs update\n", ce->name); + printf("%s: %s\n", ce->name, needs_update_message); has_errors = 1; continue; } @@ -1410,3 +1413,34 @@ int write_index(const struct index_state *istate, int newfd) } return ce_flush(&c, newfd); } + +/* + * Read the index file that is potentially unmerged into given + * index_state, dropping any unmerged entries. Returns true is + * the index is unmerged. Callers who want to refuse to work + * from an unmerged state can call this and check its return value, + * instead of calling read_cache(). + */ +int read_index_unmerged(struct index_state *istate) +{ + int i; + struct cache_entry **dst; + struct cache_entry *last = NULL; + + read_index(istate); + dst = istate->cache; + for (i = 0; i < istate->cache_nr; i++) { + struct cache_entry *ce = istate->cache[i]; + if (ce_stage(ce)) { + remove_name_hash(ce); + if (last && !strcmp(ce->name, last->name)) + continue; + cache_tree_invalidate_path(istate->cache_tree, ce->name); + last = ce; + continue; + } + *dst++ = ce; + } + istate->cache_nr = dst - istate->cache; + return !!last; +}