]>
Commit | Line | Data |
---|---|---|
a801a7cf | 1 | #include "test-tool.h" |
88c7b4c3 | 2 | #include "date.h" |
74ea5c95 | 3 | #include "trace.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 | ||
9720d23e | 55 | printf("%s -> %s\n", *argv, show_date(t, tz, mode)); |
36d67921 | 56 | } |
974c919d ÆAB |
57 | |
58 | date_mode_release(&mode); | |
36d67921 JK |
59 | } |
60 | ||
04c4c766 | 61 | static void parse_dates(const char **argv) |
4f6552ea | 62 | { |
c33ddc2e JK |
63 | struct strbuf result = STRBUF_INIT; |
64 | ||
4f6552ea | 65 | for (; *argv; argv++) { |
dddbad72 | 66 | timestamp_t t; |
6b097788 | 67 | int tz; |
89967023 | 68 | |
c33ddc2e JK |
69 | strbuf_reset(&result); |
70 | parse_date(*argv, &result); | |
cb71f8bd | 71 | if (sscanf(result.buf, "%"PRItime" %d", &t, &tz) == 2) |
6b097788 | 72 | printf("%s -> %s\n", |
a5481a6c | 73 | *argv, show_date(t, tz, DATE_MODE(ISO8601))); |
6b097788 JK |
74 | else |
75 | printf("%s -> bad\n", *argv); | |
4f6552ea | 76 | } |
c33ddc2e | 77 | strbuf_release(&result); |
4f6552ea | 78 | } |
f30c95dd | 79 | |
29f4332e | 80 | static void parse_approxidate(const char **argv) |
4f6552ea JK |
81 | { |
82 | for (; *argv; argv++) { | |
dddbad72 | 83 | timestamp_t t; |
8a7f0b66 | 84 | t = approxidate(*argv); |
a5481a6c | 85 | printf("%s -> %s\n", *argv, show_date(t, 0, DATE_MODE(ISO8601))); |
4f6552ea JK |
86 | } |
87 | } | |
88 | ||
29f4332e | 89 | static void parse_approx_timestamp(const char **argv) |
5f967424 HM |
90 | { |
91 | for (; *argv; argv++) { | |
92 | timestamp_t t; | |
8a7f0b66 | 93 | t = approxidate(*argv); |
5f967424 HM |
94 | printf("%s -> %"PRItime"\n", *argv, t); |
95 | } | |
96 | } | |
97 | ||
ba285a71 | 98 | static void getnanos(const char **argv) |
4419de91 JS |
99 | { |
100 | double seconds = getnanotime() / 1.0e9; | |
101 | ||
102 | if (*argv) | |
103 | seconds -= strtod(*argv, NULL); | |
104 | printf("%lf\n", seconds); | |
105 | } | |
106 | ||
126e3b3d | 107 | int cmd__date(int argc UNUSED, const char **argv) |
4f6552ea | 108 | { |
4f6552ea | 109 | const char *x; |
4f6552ea JK |
110 | |
111 | argv++; | |
112 | if (!*argv) | |
113 | usage(usage_msg); | |
fdba2cde | 114 | if (!strcmp(*argv, "relative")) |
29f4332e | 115 | show_relative_dates(argv+1); |
b841d4ff SS |
116 | else if (!strcmp(*argv, "human")) |
117 | show_human_dates(argv+1); | |
36d67921 JK |
118 | else if (skip_prefix(*argv, "show:", &x)) |
119 | show_dates(argv+1, x); | |
4f6552ea | 120 | else if (!strcmp(*argv, "parse")) |
04c4c766 | 121 | parse_dates(argv+1); |
4f6552ea | 122 | else if (!strcmp(*argv, "approxidate")) |
29f4332e | 123 | parse_approxidate(argv+1); |
5f967424 | 124 | else if (!strcmp(*argv, "timestamp")) |
29f4332e | 125 | parse_approx_timestamp(argv+1); |
4419de91 | 126 | else if (!strcmp(*argv, "getnanos")) |
ba285a71 | 127 | getnanos(argv+1); |
a07fb050 | 128 | else if (!strcmp(*argv, "is64bit")) |
dddbad72 | 129 | return sizeof(timestamp_t) == 8 ? 0 : 1; |
efac8ac8 JS |
130 | else if (!strcmp(*argv, "time_t-is64bit")) |
131 | return sizeof(time_t) == 8 ? 0 : 1; | |
4f6552ea JK |
132 | else |
133 | usage(usage_msg); | |
89967023 LT |
134 | return 0; |
135 | } |