|
1 | 1 | #include "builtin.h"
|
2 | 2 | #include "cache.h"
|
3 | 3 | #include "dir.h"
|
| 4 | +#include "parse-options.h" |
4 | 5 | #include "string-list.h"
|
5 | 6 | #include "rerere.h"
|
6 | 7 | #include "xdiff/xdiff.h"
|
7 | 8 | #include "xdiff-interface.h"
|
8 | 9 |
|
9 |
| -static const char git_rerere_usage[] = |
10 |
| -"git rerere [clear | status | diff | gc]"; |
| 10 | +static const char * const rerere_usage[] = { |
| 11 | + "git rerere [clear | status | diff | gc]", |
| 12 | + NULL, |
| 13 | +}; |
11 | 14 |
|
12 | 15 | /* these values are days */
|
13 | 16 | static int cutoff_noresolve = 15;
|
@@ -103,52 +106,53 @@ static int diff_two(const char *file1, const char *label1,
|
103 | 106 | int cmd_rerere(int argc, const char **argv, const char *prefix)
|
104 | 107 | {
|
105 | 108 | struct string_list merge_rr = { NULL, 0, 0, 1 };
|
106 |
| - int i, fd, flags = 0; |
107 |
| - |
108 |
| - if (2 < argc) { |
109 |
| - if (!strcmp(argv[1], "-h")) |
110 |
| - usage(git_rerere_usage); |
111 |
| - if (!strcmp(argv[1], "--rerere-autoupdate")) |
112 |
| - flags = RERERE_AUTOUPDATE; |
113 |
| - else if (!strcmp(argv[1], "--no-rerere-autoupdate")) |
114 |
| - flags = RERERE_NOAUTOUPDATE; |
115 |
| - if (flags) { |
116 |
| - argc--; |
117 |
| - argv++; |
118 |
| - } |
119 |
| - } |
120 |
| - if (argc < 2) |
| 109 | + int i, fd, autoupdate = -1, flags = 0; |
| 110 | + |
| 111 | + struct option options[] = { |
| 112 | + OPT_SET_INT(0, "rerere-autoupdate", &autoupdate, |
| 113 | + "register clean resolutions in index", 1), |
| 114 | + OPT_END(), |
| 115 | + }; |
| 116 | + |
| 117 | + argc = parse_options(argc, argv, prefix, options, rerere_usage, 0); |
| 118 | + |
| 119 | + if (autoupdate == 1) |
| 120 | + flags = RERERE_AUTOUPDATE; |
| 121 | + if (autoupdate == 0) |
| 122 | + flags = RERERE_NOAUTOUPDATE; |
| 123 | + |
| 124 | + if (argc < 1) |
121 | 125 | return rerere(flags);
|
122 | 126 |
|
123 |
| - if (!strcmp(argv[1], "forget")) { |
124 |
| - const char **pathspec = get_pathspec(prefix, argv + 2); |
| 127 | + if (!strcmp(argv[0], "forget")) { |
| 128 | + const char **pathspec = get_pathspec(prefix, argv + 1); |
125 | 129 | return rerere_forget(pathspec);
|
126 | 130 | }
|
127 | 131 |
|
128 | 132 | fd = setup_rerere(&merge_rr, flags);
|
129 | 133 | if (fd < 0)
|
130 | 134 | return 0;
|
131 | 135 |
|
132 |
| - if (!strcmp(argv[1], "clear")) { |
| 136 | + if (!strcmp(argv[0], "clear")) { |
133 | 137 | for (i = 0; i < merge_rr.nr; i++) {
|
134 | 138 | const char *name = (const char *)merge_rr.items[i].util;
|
135 | 139 | if (!has_rerere_resolution(name))
|
136 | 140 | unlink_rr_item(name);
|
137 | 141 | }
|
138 | 142 | unlink_or_warn(git_path("rr-cache/MERGE_RR"));
|
139 |
| - } else if (!strcmp(argv[1], "gc")) |
| 143 | + } else if (!strcmp(argv[0], "gc")) |
140 | 144 | garbage_collect(&merge_rr);
|
141 |
| - else if (!strcmp(argv[1], "status")) |
| 145 | + else if (!strcmp(argv[0], "status")) |
142 | 146 | for (i = 0; i < merge_rr.nr; i++)
|
143 | 147 | printf("%s\n", merge_rr.items[i].string);
|
144 |
| - else if (!strcmp(argv[1], "diff")) |
| 148 | + else if (!strcmp(argv[0], "diff")) |
145 | 149 | for (i = 0; i < merge_rr.nr; i++) {
|
146 | 150 | const char *path = merge_rr.items[i].string;
|
147 | 151 | const char *name = (const char *)merge_rr.items[i].util;
|
148 | 152 | diff_two(rerere_path(name, "preimage"), path, path, path);
|
149 | 153 | }
|
150 | 154 | else
|
151 |
| - usage(git_rerere_usage); |
| 155 | + usage_with_options(rerere_usage, options); |
152 | 156 |
|
153 | 157 | string_list_clear(&merge_rr, 1);
|
154 | 158 | return 0;
|
|
0 commit comments