Add `human` format to test-tool

Add the human format support to the test tool so that
GIT_TEST_DATE_NOW can be used to specify the current time.

The get_time() helper function was created and and checks the
GIT_TEST_DATE_NOW environment variable.  If GIT_TEST_DATE_NOW is set,
then that date is used instead of the date returned by by
gettimeofday().

All calls to gettimeofday() were replaced by calls to get_time().

Renamed occurances of TEST_DATE_NOW to GIT_TEST_DATE_NOW since the
variable is now used in the get binary and not just in the test-tool.

Signed-off-by: Stephen P. Smith <ischis2@cox.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Stephen P. Smith 2019-01-28 20:50:15 -07:00 коммит произвёл Junio C Hamano
Родитель 038a878810
Коммит b841d4ff43
4 изменённых файлов: 33 добавлений и 7 удалений

Просмотреть файл

@ -1453,6 +1453,8 @@ struct date_mode *date_mode_from_type(enum date_mode_type type);
const char *show_date(timestamp_t time, int timezone, const struct date_mode *mode);
void show_date_relative(timestamp_t time, int tz, const struct timeval *now,
struct strbuf *timebuf);
void show_date_human(timestamp_t time, int tz, const struct timeval *now,
struct strbuf *timebuf);
int parse_date(const char *date, struct strbuf *out);
int parse_date_basic(const char *date, timestamp_t *timestamp, int *offset);
int parse_expiry_date(const char *date, timestamp_t *timestamp);

21
date.c
Просмотреть файл

@ -115,6 +115,19 @@ static int local_tzoffset(timestamp_t time)
return local_time_tzoffset((time_t)time, &tm);
}
static void get_time(struct timeval *now)
{
const char *x;
x = getenv("GIT_TEST_DATE_NOW");
if (x) {
now->tv_sec = atoi(x);
now->tv_usec = 0;
}
else
gettimeofday(now, NULL);
}
void show_date_relative(timestamp_t time, int tz,
const struct timeval *now,
struct strbuf *timebuf)
@ -228,7 +241,7 @@ static void show_date_normal(struct strbuf *buf, timestamp_t time, struct tm *tm
/* Show "today" times as just relative times */
if (hide.wday) {
struct timeval now;
gettimeofday(&now, NULL);
get_time(&now);
show_date_relative(time, tz, &now, buf);
return;
}
@ -284,7 +297,7 @@ const char *show_date(timestamp_t time, int tz, const struct date_mode *mode)
if (mode->type == DATE_HUMAN) {
struct timeval now;
gettimeofday(&now, NULL);
get_time(&now);
/* Fill in the data for "current time" in human_tz and human_tm */
human_tz = local_time_tzoffset(now.tv_sec, &human_tm);
@ -303,7 +316,7 @@ const char *show_date(timestamp_t time, int tz, const struct date_mode *mode)
struct timeval now;
strbuf_reset(&timebuf);
gettimeofday(&now, NULL);
get_time(&now);
show_date_relative(time, tz, &now, &timebuf);
return timebuf.buf;
}
@ -1290,7 +1303,7 @@ timestamp_t approxidate_careful(const char *date, int *error_ret)
return timestamp;
}
gettimeofday(&tv, NULL);
get_time(&tv);
return approxidate_str(date, &tv, error_ret);
}

Просмотреть файл

@ -3,6 +3,7 @@
static const char *usage_msg = "\n"
" test-tool date relative [time_t]...\n"
" test-tool date human [time_t]...\n"
" test-tool date show:<format> [time_t]...\n"
" test-tool date parse [date]...\n"
" test-tool date approxidate [date]...\n"
@ -22,6 +23,14 @@ static void show_relative_dates(const char **argv, struct timeval *now)
strbuf_release(&buf);
}
static void show_human_dates(const char **argv)
{
for (; *argv; argv++) {
time_t t = atoi(*argv);
printf("%s -> %s\n", *argv, show_date(t, 0, DATE_MODE(HUMAN)));
}
}
static void show_dates(const char **argv, const char *format)
{
struct date_mode mode;
@ -87,7 +96,7 @@ int cmd__date(int argc, const char **argv)
struct timeval now;
const char *x;
x = getenv("TEST_DATE_NOW");
x = getenv("GIT_TEST_DATE_NOW");
if (x) {
now.tv_sec = atoi(x);
now.tv_usec = 0;
@ -100,6 +109,8 @@ int cmd__date(int argc, const char **argv)
usage(usage_msg);
if (!strcmp(*argv, "relative"))
show_relative_dates(argv+1, &now);
else if (!strcmp(*argv, "human"))
show_human_dates(argv+1);
else if (skip_prefix(*argv, "show:", &x))
show_dates(argv+1, x);
else if (!strcmp(*argv, "parse"))

Просмотреть файл

@ -4,10 +4,10 @@ test_description='test date parsing and printing'
. ./test-lib.sh
# arbitrary reference time: 2009-08-30 19:20:00
TEST_DATE_NOW=1251660000; export TEST_DATE_NOW
GIT_TEST_DATE_NOW=1251660000; export GIT_TEST_DATE_NOW
check_relative() {
t=$(($TEST_DATE_NOW - $1))
t=$(($GIT_TEST_DATE_NOW - $1))
echo "$t -> $2" >expect
test_expect_${3:-success} "relative date ($2)" "
test-tool date relative $t >actual &&