X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=diff-tree.c;h=acd15243435742fdeb3bbdc29c1ff7ffa27cbb2f;hb=73848892adeaa421825672bce929b9cc16043fa9;hp=24b24dcfd0551405587c7cf4238f5ccae1297cd7;hpb=b11645be0139f907488b17ca4267e593ee58dd30;p=git.git diff --git a/diff-tree.c b/diff-tree.c index 24b24dcf..acd15243 100644 --- a/diff-tree.c +++ b/diff-tree.c @@ -356,6 +356,12 @@ static int diff_tree_commit(const unsigned char *commit, const char *name) return 0; } + if (!name) { + static char commit_name[60]; + strcpy(commit_name, sha1_to_hex(commit)); + name = commit_name; + } + offset = 46; while (offset + 48 < size && !memcmp(buf + offset, "parent ", 7)) { unsigned char parent[20]; @@ -397,19 +403,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 +462,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 +472,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], NULL); + 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);