]>
Commit | Line | Data |
---|---|---|
a801a7cf | 1 | #include "test-tool.h" |
89967023 | 2 | #include "cache.h" |
88c7b4c3 | 3 | #include "date.h" |
89967023 | 4 | |
4f6552ea | 5 | static const char *usage_msg = "\n" |
a801a7cf | 6 | " test-tool date relative [time_t]...\n" |
b841d4ff | 7 | " test-tool date human [time_t]...\n" |
a801a7cf NTND |
8 | " test-tool date show:<format> [time_t]...\n" |
9 | " test-tool date parse [date]...\n" | |
10 | " test-tool date approxidate [date]...\n" | |
11 | " test-tool date timestamp [date]...\n" | |
4419de91 | 12 | " test-tool date getnanos [start-nanos]\n" |
a801a7cf NTND |
13 | " test-tool date is64bit\n" |
14 | " test-tool date time_t-is64bit\n"; | |
4f6552ea | 15 | |
29f4332e | 16 | static void show_relative_dates(const char **argv) |
89967023 | 17 | { |
7d29afd4 | 18 | struct strbuf buf = STRBUF_INIT; |
4f6552ea JK |
19 | |
20 | for (; *argv; argv++) { | |
21 | time_t t = atoi(*argv); | |
29f4332e | 22 | show_date_relative(t, &buf); |
7d29afd4 | 23 | printf("%s -> %s\n", *argv, buf.buf); |
4f6552ea | 24 | } |
7d29afd4 | 25 | strbuf_release(&buf); |
4f6552ea | 26 | } |
89967023 | 27 | |
b841d4ff SS |
28 | static void show_human_dates(const char **argv) |
29 | { | |
30 | for (; *argv; argv++) { | |
31 | time_t t = atoi(*argv); | |
32 | printf("%s -> %s\n", *argv, show_date(t, 0, DATE_MODE(HUMAN))); | |
33 | } | |
34 | } | |
35 | ||
d4c6375f | 36 | static void show_dates(const char **argv, const char *format) |
36d67921 | 37 | { |
f1842898 | 38 | struct date_mode mode = DATE_MODE_INIT; |
36d67921 JK |
39 | |
40 | parse_date_format(format, &mode); | |
41 | for (; *argv; argv++) { | |
d4c6375f | 42 | char *arg; |
dddbad72 | 43 | timestamp_t t; |
36d67921 JK |
44 | int tz; |
45 | ||
46 | /* | |
47 | * Do not use our normal timestamp parsing here, as the point | |
48 | * is to test the formatting code in isolation. | |
49 | */ | |
1aeb7e75 | 50 | t = parse_timestamp(*argv, &arg, 10); |
36d67921 JK |
51 | while (*arg == ' ') |
52 | arg++; | |
53 | tz = atoi(arg); | |
54 | ||
55 | printf("%s -> %s\n", *argv, show_date(t, tz, &mode)); | |
56 | } | |
57 | } | |
58 | ||
04c4c766 | 59 | static void parse_dates(const char **argv) |
4f6552ea | 60 | { |
c33ddc2e JK |
61 | struct strbuf result = STRBUF_INIT; |
62 | ||
4f6552ea | 63 | for (; *argv; argv++) { |
dddbad72 | 64 | timestamp_t t; |
6b097788 | 65 | int tz; |
89967023 | 66 | |
c33ddc2e JK |
67 | strbuf_reset(&result); |
68 | parse_date(*argv, &result); | |
cb71f8bd | 69 | if (sscanf(result.buf, "%"PRItime" %d", &t, &tz) == 2) |
6b097788 | 70 | printf("%s -> %s\n", |
a5481a6c | 71 | *argv, show_date(t, tz, DATE_MODE(ISO8601))); |
6b097788 JK |
72 | else |
73 | printf("%s -> bad\n", *argv); | |
4f6552ea | 74 | } |
c33ddc2e | 75 | strbuf_release(&result); |
4f6552ea | 76 | } |
f30c95dd | 77 | |
29f4332e | 78 | static void parse_approxidate(const char **argv) |
4f6552ea JK |
79 | { |
80 | for (; *argv; argv++) { | |
dddbad72 | 81 | timestamp_t t; |
29f4332e | 82 | t = approxidate_relative(*argv); |
a5481a6c | 83 | printf("%s -> %s\n", *argv, show_date(t, 0, DATE_MODE(ISO8601))); |
4f6552ea JK |
84 | } |
85 | } | |
86 | ||
29f4332e | 87 | static void parse_approx_timestamp(const char **argv) |
5f967424 HM |
88 | { |
89 | for (; *argv; argv++) { | |
90 | timestamp_t t; | |
29f4332e | 91 | t = approxidate_relative(*argv); |
5f967424 HM |
92 | printf("%s -> %"PRItime"\n", *argv, t); |
93 | } | |
94 | } | |
95 | ||
ba285a71 | 96 | static void getnanos(const char **argv) |
4419de91 JS |
97 | { |
98 | double seconds = getnanotime() / 1.0e9; | |
99 | ||
100 | if (*argv) | |
101 | seconds -= strtod(*argv, NULL); | |
102 | printf("%lf\n", seconds); | |
103 | } | |
104 | ||
a801a7cf | 105 | int cmd__date(int argc, const char **argv) |
4f6552ea | 106 | { |
4f6552ea | 107 | const char *x; |
4f6552ea JK |
108 | |
109 | argv++; | |
110 | if (!*argv) | |
111 | usage(usage_msg); | |
fdba2cde | 112 | if (!strcmp(*argv, "relative")) |
29f4332e | 113 | show_relative_dates(argv+1); |
b841d4ff SS |
114 | else if (!strcmp(*argv, "human")) |
115 | show_human_dates(argv+1); | |
36d67921 JK |
116 | else if (skip_prefix(*argv, "show:", &x)) |
117 | show_dates(argv+1, x); | |
4f6552ea | 118 | else if (!strcmp(*argv, "parse")) |
04c4c766 | 119 | parse_dates(argv+1); |
4f6552ea | 120 | else if (!strcmp(*argv, "approxidate")) |
29f4332e | 121 | parse_approxidate(argv+1); |
5f967424 | 122 | else if (!strcmp(*argv, "timestamp")) |
29f4332e | 123 | parse_approx_timestamp(argv+1); |
4419de91 | 124 | else if (!strcmp(*argv, "getnanos")) |
ba285a71 | 125 | getnanos(argv+1); |
a07fb050 | 126 | else if (!strcmp(*argv, "is64bit")) |
dddbad72 | 127 | return sizeof(timestamp_t) == 8 ? 0 : 1; |
efac8ac8 JS |
128 | else if (!strcmp(*argv, "time_t-is64bit")) |
129 | return sizeof(time_t) == 8 ? 0 : 1; | |
4f6552ea JK |
130 | else |
131 | usage(usage_msg); | |
89967023 LT |
132 | return 0; |
133 | } |