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