X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=builtin-read-tree.c;h=8d1a22d3739b8f9aaac41b99df4805fc4306dc79;hb=dd8239f997962d94162790039b008acb6068a242;hp=10afd469683184219d62ec15b9a62430d44b73db;hpb=4c068a983150b740c3fcf6a33f342ac923abd3f4;p=git.git diff --git a/builtin-read-tree.c b/builtin-read-tree.c index 10afd469..8d1a22d3 100644 --- a/builtin-read-tree.c +++ b/builtin-read-tree.c @@ -376,6 +376,7 @@ static void check_updates(struct cache_entry **src, int nr) fprintf(stderr, "%4u%% (%u/%u) done\r", percent, cnt, total); last_percent = percent; + progress_update = 0; } } } @@ -791,25 +792,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) @@ -894,7 +896,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);