merge(3p/git): Merge git upstream at v2.26.2

This commit is contained in:
Vincent Ambo 2020-05-22 17:46:45 +01:00
commit 5229c9b232
1006 changed files with 149006 additions and 60819 deletions

View file

@ -14,6 +14,7 @@
#include "strbuf.h"
#include "trace.h"
#include "utf8.h"
#include "config.h"
#define TP_IDX_MAX 8
@ -45,6 +46,19 @@ struct progress {
static volatile sig_atomic_t progress_update;
/*
* These are only intended for testing the progress output, i.e. exclusively
* for 'test-tool progress'.
*/
int progress_testing;
uint64_t progress_test_ns = 0;
void progress_test_force_update(void); /* To silence -Wmissing-prototypes */
void progress_test_force_update(void)
{
progress_update = 1;
}
static void progress_interval(int signum)
{
progress_update = 1;
@ -55,6 +69,9 @@ static void set_progress_signal(void)
struct sigaction sa;
struct itimerval v;
if (progress_testing)
return;
progress_update = 0;
memset(&sa, 0, sizeof(sa));
@ -72,6 +89,10 @@ static void set_progress_signal(void)
static void clear_progress_signal(void)
{
struct itimerval v = {{0,},};
if (progress_testing)
return;
setitimer(ITIMER_REAL, &v, NULL);
signal(SIGALRM, SIG_IGN);
progress_update = 0;
@ -88,6 +109,7 @@ static void display(struct progress *progress, uint64_t n, const char *done)
const char *tp;
struct strbuf *counters_sb = &progress->counters_sb;
int show_update = 0;
int last_count_len = counters_sb->len;
if (progress->delay && (!progress_update || --progress->delay))
return;
@ -115,21 +137,27 @@ static void display(struct progress *progress, uint64_t n, const char *done)
if (show_update) {
if (is_foreground_fd(fileno(stderr)) || done) {
const char *eol = done ? done : "\r";
size_t clear_len = counters_sb->len < last_count_len ?
last_count_len - counters_sb->len + 1 :
0;
/* The "+ 2" accounts for the ": ". */
size_t progress_line_len = progress->title_len +
counters_sb->len + 2;
int cols = term_columns();
term_clear_line();
if (progress->split) {
fprintf(stderr, " %s%s", counters_sb->buf,
eol);
} else if (!done &&
/* The "+ 2" accounts for the ": ". */
term_columns() < progress->title_len +
counters_sb->len + 2) {
fprintf(stderr, "%s:\n %s%s",
progress->title, counters_sb->buf, eol);
fprintf(stderr, " %s%*s", counters_sb->buf,
(int) clear_len, eol);
} else if (!done && cols < progress_line_len) {
clear_len = progress->title_len + 1 < cols ?
cols - progress->title_len - 1 : 0;
fprintf(stderr, "%s:%*s\n %s%s",
progress->title, (int) clear_len, "",
counters_sb->buf, eol);
progress->split = 1;
} else {
fprintf(stderr, "%s: %s%s", progress->title,
counters_sb->buf, eol);
fprintf(stderr, "%s: %s%*s", progress->title,
counters_sb->buf, (int) clear_len, eol);
}
fflush(stderr);
}
@ -147,6 +175,14 @@ static void throughput_string(struct strbuf *buf, uint64_t total,
strbuf_humanise_rate(buf, rate * 1024);
}
static uint64_t progress_getnanotime(struct progress *progress)
{
if (progress_testing)
return progress->start_ns + progress_test_ns;
else
return getnanotime();
}
void display_throughput(struct progress *progress, uint64_t total)
{
struct throughput *tp;
@ -157,7 +193,7 @@ void display_throughput(struct progress *progress, uint64_t total)
return;
tp = progress->throughput;
now_ns = getnanotime();
now_ns = progress_getnanotime(progress);
if (!tp) {
progress->throughput = tp = xcalloc(1, sizeof(*tp));
@ -232,9 +268,19 @@ static struct progress *start_progress_delay(const char *title, uint64_t total,
return progress;
}
static int get_default_delay(void)
{
static int delay_in_secs = -1;
if (delay_in_secs < 0)
delay_in_secs = git_env_ulong("GIT_PROGRESS_DELAY", 2);
return delay_in_secs;
}
struct progress *start_delayed_progress(const char *title, uint64_t total)
{
return start_progress_delay(title, total, 2, 0);
return start_progress_delay(title, total, get_default_delay(), 0);
}
struct progress *start_progress(const char *title, uint64_t total)
@ -259,7 +305,7 @@ struct progress *start_sparse_progress(const char *title, uint64_t total)
struct progress *start_delayed_sparse_progress(const char *title,
uint64_t total)
{
return start_progress_delay(title, total, 2, 1);
return start_progress_delay(title, total, get_default_delay(), 1);
}
static void finish_if_sparse(struct progress *progress)
@ -289,7 +335,7 @@ void stop_progress_msg(struct progress **p_progress, const char *msg)
struct throughput *tp = progress->throughput;
if (tp) {
uint64_t now_ns = getnanotime();
uint64_t now_ns = progress_getnanotime(progress);
unsigned int misecs, rate;
misecs = ((now_ns - progress->start_ns) * 4398) >> 32;
rate = tp->curr_total / (misecs ? misecs : 1);