X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;ds=sidebyside;f=builtin-read-tree.c;h=21361dff42e441a93b83000996a91a3a77bc1bd1;hb=b0d6e64629aeba96e837972c0fda5e61eebb7ab1;hp=716f7925142bca11cf7ab5438ce5908e55285463;hpb=bf41bf2db71ac4bb03248bb0fe18cbb718af497a;p=git.git diff --git a/builtin-read-tree.c b/builtin-read-tree.c index 716f7925..21361dff 100644 --- a/builtin-read-tree.c +++ b/builtin-read-tree.c @@ -751,25 +751,26 @@ static int oneway_merge(struct cache_entry **src) static int read_cache_unmerged(void) { - int i, deleted; + int i; struct cache_entry **dst; + struct cache_entry *last = NULL; read_cache(); dst = active_cache; - deleted = 0; for (i = 0; i < active_nr; i++) { struct cache_entry *ce = active_cache[i]; if (ce_stage(ce)) { - deleted++; + if (last && !strcmp(ce->name, last->name)) + continue; invalidate_ce_path(ce); - continue; + last = ce; + ce->ce_mode = 0; + ce->ce_flags &= ~htons(CE_STAGEMASK); } - if (deleted) - *dst = ce; - dst++; + *dst++ = ce; } - active_nr -= deleted; - return deleted; + active_nr = dst - active_cache; + return !!last; } static void prime_cache_tree_rec(struct cache_tree *it, struct tree *tree) @@ -850,7 +851,10 @@ int cmd_read_tree(int argc, const char **argv, char **envp) continue; } - /* This differs from "-m" in that we'll silently ignore unmerged entries */ + /* This differs from "-m" in that we'll silently ignore + * unmerged entries and overwrite working tree files that + * correspond to them. + */ if (!strcmp(arg, "--reset")) { if (stage || merge) usage(read_tree_usage);