diff-tree: fix and extend argument parsing

We use "--" to mark end of command line switches, not "-". Also,
allow more flexibility in the passed-in sha1 names, in that a
single sha1 uses the "commit-diff" logic that compares against
its parent(s).
This commit is contained in:
Linus Torvalds 2005-05-18 13:10:17 -07:00
Родитель b11645be01
Коммит 0a8365a179
1 изменённых файлов: 27 добавлений и 11 удалений

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

@ -397,19 +397,29 @@ static char *diff_tree_usage =
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
int nr_sha1;
char line[1000]; char line[1000];
unsigned char old[20], new[20]; unsigned char sha1[2][20];
nr_sha1 = 0;
for (;;) { for (;;) {
char *arg; char *arg;
argv++; argv++;
argc--; argc--;
arg = *argv; arg = *argv;
if (!arg || *arg != '-') if (!arg)
break; break;
if (!strcmp(arg, "-")) { if (*arg != '-') {
if (nr_sha1 < 2 && !get_sha1(arg, sha1[nr_sha1])) {
nr_sha1++;
continue;
}
break;
}
if (!strcmp(arg, "--")) {
argv++; argv++;
argc--; argc--;
break; break;
@ -446,13 +456,6 @@ int main(int argc, char **argv)
usage(diff_tree_usage); usage(diff_tree_usage);
} }
if (!read_stdin) {
if (argc < 2 || get_sha1(argv[0], old) || get_sha1(argv[1], new))
usage(diff_tree_usage);
argv += 2;
argc -= 2;
}
if (argc > 0) { if (argc > 0) {
int i; int i;
@ -463,8 +466,21 @@ int main(int argc, char **argv)
pathlens[i] = strlen(paths[i]); pathlens[i] = strlen(paths[i]);
} }
switch (nr_sha1) {
case 0:
if (!read_stdin)
usage(diff_tree_usage);
break;
case 1:
diff_tree_commit(sha1[0], sha1_to_hex(sha1[0]));
break;
case 2:
diff_tree_sha1(sha1[0], sha1[1], "");
break;
}
if (!read_stdin) if (!read_stdin)
return diff_tree_sha1(old, new, ""); return 0;
while (fgets(line, sizeof(line), stdin)) while (fgets(line, sizeof(line), stdin))
diff_tree_stdin(line); diff_tree_stdin(line);