зеркало из https://github.com/microsoft/git.git
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:
Родитель
b11645be01
Коммит
0a8365a179
38
diff-tree.c
38
diff-tree.c
|
@ -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);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче