Kill the useless progress meter in merge-recursive
The mess known as the progress meter in merge-recursive was my own fault; I put it in thinking that we might be spending a lot of time resolving unmerged entries in the index that were not handled by the simple 3-way index merge code. Turns out we don't really spend that much time there, so the progress meter was pretty much always jumping to "(n/n) 100%" as soon as the program started. That isn't a very good indication of progress. Since I don't have a great solution for how a progress meter should work here, I'm proposing we back it out entirely. Signed-off-by: Shawn O. Pearce <spearce@spearce.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:

committed by
Junio C Hamano

parent
744747ef1d
commit
ad57cbca61
@ -95,11 +95,6 @@ static struct path_list current_directory_set = {NULL, 0, 0, 1};
|
|||||||
static int call_depth = 0;
|
static int call_depth = 0;
|
||||||
static int verbosity = 2;
|
static int verbosity = 2;
|
||||||
static int buffer_output = 1;
|
static int buffer_output = 1;
|
||||||
static int do_progress = 1;
|
|
||||||
static unsigned last_percent;
|
|
||||||
static unsigned merged_cnt;
|
|
||||||
static unsigned total_cnt;
|
|
||||||
static volatile sig_atomic_t progress_update;
|
|
||||||
static struct output_buffer *output_list, *output_end;
|
static struct output_buffer *output_list, *output_end;
|
||||||
|
|
||||||
static int show (int v)
|
static int show (int v)
|
||||||
@ -174,39 +169,6 @@ static void output_commit_title(struct commit *commit)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void progress_interval(int signum)
|
|
||||||
{
|
|
||||||
progress_update = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void setup_progress_signal(void)
|
|
||||||
{
|
|
||||||
struct sigaction sa;
|
|
||||||
struct itimerval v;
|
|
||||||
|
|
||||||
memset(&sa, 0, sizeof(sa));
|
|
||||||
sa.sa_handler = progress_interval;
|
|
||||||
sigemptyset(&sa.sa_mask);
|
|
||||||
sa.sa_flags = SA_RESTART;
|
|
||||||
sigaction(SIGALRM, &sa, NULL);
|
|
||||||
|
|
||||||
v.it_interval.tv_sec = 1;
|
|
||||||
v.it_interval.tv_usec = 0;
|
|
||||||
v.it_value = v.it_interval;
|
|
||||||
setitimer(ITIMER_REAL, &v, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void display_progress()
|
|
||||||
{
|
|
||||||
unsigned percent = total_cnt ? merged_cnt * 100 / total_cnt : 0;
|
|
||||||
if (progress_update || percent != last_percent) {
|
|
||||||
fprintf(stderr, "%4u%% (%u/%u) done\r",
|
|
||||||
percent, merged_cnt, total_cnt);
|
|
||||||
progress_update = 0;
|
|
||||||
last_percent = percent;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct cache_entry *make_cache_entry(unsigned int mode,
|
static struct cache_entry *make_cache_entry(unsigned int mode,
|
||||||
const unsigned char *sha1, const char *path, int stage, int refresh)
|
const unsigned char *sha1, const char *path, int stage, int refresh)
|
||||||
{
|
{
|
||||||
@ -377,14 +339,11 @@ static struct path_list *get_unmerged(void)
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
unmerged->strdup_paths = 1;
|
unmerged->strdup_paths = 1;
|
||||||
total_cnt += active_nr;
|
|
||||||
|
|
||||||
for (i = 0; i < active_nr; i++, merged_cnt++) {
|
for (i = 0; i < active_nr; i++) {
|
||||||
struct path_list_item *item;
|
struct path_list_item *item;
|
||||||
struct stage_data *e;
|
struct stage_data *e;
|
||||||
struct cache_entry *ce = active_cache[i];
|
struct cache_entry *ce = active_cache[i];
|
||||||
if (do_progress)
|
|
||||||
display_progress();
|
|
||||||
if (!ce_stage(ce))
|
if (!ce_stage(ce))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -1218,15 +1177,12 @@ static int merge_trees(struct tree *head,
|
|||||||
re_merge = get_renames(merge, common, head, merge, entries);
|
re_merge = get_renames(merge, common, head, merge, entries);
|
||||||
clean = process_renames(re_head, re_merge,
|
clean = process_renames(re_head, re_merge,
|
||||||
branch1, branch2);
|
branch1, branch2);
|
||||||
total_cnt += entries->nr;
|
for (i = 0; i < entries->nr; i++) {
|
||||||
for (i = 0; i < entries->nr; i++, merged_cnt++) {
|
|
||||||
const char *path = entries->items[i].path;
|
const char *path = entries->items[i].path;
|
||||||
struct stage_data *e = entries->items[i].util;
|
struct stage_data *e = entries->items[i].util;
|
||||||
if (!e->processed
|
if (!e->processed
|
||||||
&& !process_entry(path, e, branch1, branch2))
|
&& !process_entry(path, e, branch1, branch2))
|
||||||
clean = 0;
|
clean = 0;
|
||||||
if (do_progress)
|
|
||||||
display_progress();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
path_list_clear(re_merge, 0);
|
path_list_clear(re_merge, 0);
|
||||||
@ -1334,15 +1290,6 @@ static int merge(struct commit *h1,
|
|||||||
commit_list_insert(h1, &(*result)->parents);
|
commit_list_insert(h1, &(*result)->parents);
|
||||||
commit_list_insert(h2, &(*result)->parents->next);
|
commit_list_insert(h2, &(*result)->parents->next);
|
||||||
}
|
}
|
||||||
if (!call_depth && do_progress) {
|
|
||||||
/* Make sure we end at 100% */
|
|
||||||
if (!total_cnt)
|
|
||||||
total_cnt = 1;
|
|
||||||
merged_cnt = total_cnt;
|
|
||||||
progress_update = 1;
|
|
||||||
display_progress();
|
|
||||||
fputc('\n', stderr);
|
|
||||||
}
|
|
||||||
flush_output();
|
flush_output();
|
||||||
return clean;
|
return clean;
|
||||||
}
|
}
|
||||||
@ -1419,12 +1366,8 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
if (argc - i != 3) /* "--" "<head>" "<remote>" */
|
if (argc - i != 3) /* "--" "<head>" "<remote>" */
|
||||||
die("Not handling anything other than two heads merge.");
|
die("Not handling anything other than two heads merge.");
|
||||||
if (verbosity >= 5) {
|
if (verbosity >= 5)
|
||||||
buffer_output = 0;
|
buffer_output = 0;
|
||||||
do_progress = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
do_progress = isatty(1);
|
|
||||||
|
|
||||||
branch1 = argv[++i];
|
branch1 = argv[++i];
|
||||||
branch2 = argv[++i];
|
branch2 = argv[++i];
|
||||||
@ -1435,8 +1378,6 @@ int main(int argc, char *argv[])
|
|||||||
branch1 = better_branch_name(branch1);
|
branch1 = better_branch_name(branch1);
|
||||||
branch2 = better_branch_name(branch2);
|
branch2 = better_branch_name(branch2);
|
||||||
|
|
||||||
if (do_progress)
|
|
||||||
setup_progress_signal();
|
|
||||||
if (show(3))
|
if (show(3))
|
||||||
printf("Merging %s with %s\n", branch1, branch2);
|
printf("Merging %s with %s\n", branch1, branch2);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user