summaryrefslogtreecommitdiff
path: root/diff-tree.c
diff options
context:
space:
mode:
authorLibravatar Linus Torvalds <torvalds@ppc970.osdl.org>2005-05-18 13:10:17 -0700
committerLibravatar Linus Torvalds <torvalds@ppc970.osdl.org>2005-05-18 13:10:17 -0700
commit0a8365a179685feecee427075a9c2db8a66c434a (patch)
treeac93c346a870b1d340f108242e23f566d1cd5417 /diff-tree.c
parentdiff-tree: clean up diff_tree_stdin() function (diff)
downloadtgif-0a8365a179685feecee427075a9c2db8a66c434a.tar.xz
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).
Diffstat (limited to 'diff-tree.c')
-rw-r--r--diff-tree.c38
1 files changed, 27 insertions, 11 deletions
diff --git a/diff-tree.c b/diff-tree.c
index 24b24dcfd0..8cfe990023 100644
--- a/diff-tree.c
+++ b/diff-tree.c
@@ -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;
@@ -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;
@@ -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);