Skip to content

Commit

Permalink
diff-tree: fix and extend argument parsing
Browse files Browse the repository at this point in the history
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).
  • Loading branch information
Linus Torvalds committed May 18, 2005
1 parent b11645b commit 0a8365a
Showing 1 changed file with 27 additions and 11 deletions.
38 changes: 27 additions & 11 deletions diff-tree.c
Original file line number Diff line number Diff line change
Expand Up @@ -397,19 +397,29 @@ static char *diff_tree_usage =

int main(int argc, char **argv)
{
int nr_sha1;
char line[1000];
unsigned char old[20], new[20];
unsigned char sha1[2][20];

nr_sha1 = 0;
for (;;) {
char *arg;

argv++;
argc--;
arg = *argv;
if (!arg || *arg != '-')
if (!arg)
break;

if (!strcmp(arg, "-")) {
if (*arg != '-') {
if (nr_sha1 < 2 && !get_sha1(arg, sha1[nr_sha1])) {
nr_sha1++;
continue;
}
break;
}

if (!strcmp(arg, "--")) {
argv++;
argc--;
break;
Expand Down Expand Up @@ -446,13 +456,6 @@ int main(int argc, char **argv)
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) {
int i;

Expand All @@ -463,8 +466,21 @@ int main(int argc, char **argv)
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)
return diff_tree_sha1(old, new, "");
return 0;

while (fgets(line, sizeof(line), stdin))
diff_tree_stdin(line);
Expand Down

0 comments on commit 0a8365a

Please sign in to comment.