Linus Torvalds | 9174026 | 2005-04-09 13:00:54 -0700 | [diff] [blame] | 1 | #include "cache.h" |
Junio C Hamano | 3ebfd4a | 2005-04-27 09:21:00 -0700 | [diff] [blame] | 2 | #include "diff.h" |
Linus Torvalds | e3bc7a3 | 2005-06-01 08:34:23 -0700 | [diff] [blame] | 3 | #include "commit.h" |
Linus Torvalds | 9174026 | 2005-04-09 13:00:54 -0700 | [diff] [blame] | 4 | |
Linus Torvalds | dc26bd8 | 2005-05-19 13:44:29 -0700 | [diff] [blame] | 5 | static int show_root_diff = 0; |
Pavel Roskin | 601c978 | 2005-11-10 00:30:12 -0500 | [diff] [blame] | 6 | static int no_commit_id = 0; |
Linus Torvalds | cee99d2 | 2005-05-06 11:42:47 -0700 | [diff] [blame] | 7 | static int verbose_header = 0; |
Linus Torvalds | e0965d8 | 2005-05-06 10:03:17 -0700 | [diff] [blame] | 8 | static int ignore_merges = 1; |
Linus Torvalds | e0965d8 | 2005-05-06 10:03:17 -0700 | [diff] [blame] | 9 | static int read_stdin = 0; |
Junio C Hamano | 6b5ee13 | 2005-09-21 00:00:47 -0700 | [diff] [blame] | 10 | |
Linus Torvalds | f4f21ce | 2005-05-06 10:56:35 -0700 | [diff] [blame] | 11 | static const char *header = NULL; |
Linus Torvalds | cee99d2 | 2005-05-06 11:42:47 -0700 | [diff] [blame] | 12 | static const char *header_prefix = ""; |
Linus Torvalds | 000182e | 2005-06-05 09:02:03 -0700 | [diff] [blame] | 13 | static enum cmit_fmt commit_format = CMIT_FMT_RAW; |
Linus Torvalds | 9174026 | 2005-04-09 13:00:54 -0700 | [diff] [blame] | 14 | |
Linus Torvalds | ac1b3d1 | 2005-10-20 21:05:05 -0700 | [diff] [blame] | 15 | static struct diff_options diff_options; |
Linus Torvalds | 73134b6 | 2005-04-10 14:03:58 -0700 | [diff] [blame] | 16 | |
Linus Torvalds | 09d74b3 | 2005-05-22 14:33:43 -0700 | [diff] [blame] | 17 | static int call_diff_flush(void) |
Junio C Hamano | 38c6f78 | 2005-05-21 19:40:36 -0700 | [diff] [blame] | 18 | { |
Junio C Hamano | 6b5ee13 | 2005-09-21 00:00:47 -0700 | [diff] [blame] | 19 | diffcore_std(&diff_options); |
Linus Torvalds | 9ab55bd | 2005-05-23 16:37:47 -0700 | [diff] [blame] | 20 | if (diff_queue_is_empty()) { |
Junio C Hamano | 6b5ee13 | 2005-09-21 00:00:47 -0700 | [diff] [blame] | 21 | int saved_fmt = diff_options.output_format; |
| 22 | diff_options.output_format = DIFF_FORMAT_NO_OUTPUT; |
| 23 | diff_flush(&diff_options); |
| 24 | diff_options.output_format = saved_fmt; |
Linus Torvalds | 9ab55bd | 2005-05-23 16:37:47 -0700 | [diff] [blame] | 25 | return 0; |
Junio C Hamano | 6b14d7f | 2005-05-22 10:04:37 -0700 | [diff] [blame] | 26 | } |
Junio C Hamano | 6b14d7f | 2005-05-22 10:04:37 -0700 | [diff] [blame] | 27 | if (header) { |
Pavel Roskin | 601c978 | 2005-11-10 00:30:12 -0500 | [diff] [blame] | 28 | if (!no_commit_id) |
| 29 | printf("%s%c", header, diff_options.line_termination); |
Junio C Hamano | 6b14d7f | 2005-05-22 10:04:37 -0700 | [diff] [blame] | 30 | header = NULL; |
| 31 | } |
Junio C Hamano | 6b5ee13 | 2005-09-21 00:00:47 -0700 | [diff] [blame] | 32 | diff_flush(&diff_options); |
Junio C Hamano | 6b14d7f | 2005-05-22 10:04:37 -0700 | [diff] [blame] | 33 | return 1; |
Junio C Hamano | 38c6f78 | 2005-05-21 19:40:36 -0700 | [diff] [blame] | 34 | } |
| 35 | |
Junio C Hamano | 5c97558 | 2005-05-19 03:32:35 -0700 | [diff] [blame] | 36 | static int diff_tree_sha1_top(const unsigned char *old, |
| 37 | const unsigned char *new, const char *base) |
| 38 | { |
| 39 | int ret; |
Junio C Hamano | 57fe64a | 2005-05-19 19:00:36 -0700 | [diff] [blame] | 40 | |
Linus Torvalds | ac1b3d1 | 2005-10-20 21:05:05 -0700 | [diff] [blame] | 41 | ret = diff_tree_sha1(old, new, base, &diff_options); |
Junio C Hamano | 38c6f78 | 2005-05-21 19:40:36 -0700 | [diff] [blame] | 42 | call_diff_flush(); |
Junio C Hamano | 5c97558 | 2005-05-19 03:32:35 -0700 | [diff] [blame] | 43 | return ret; |
| 44 | } |
| 45 | |
Linus Torvalds | dc26bd8 | 2005-05-19 13:44:29 -0700 | [diff] [blame] | 46 | static int diff_root_tree(const unsigned char *new, const char *base) |
| 47 | { |
| 48 | int retval; |
| 49 | void *tree; |
Linus Torvalds | ac1b3d1 | 2005-10-20 21:05:05 -0700 | [diff] [blame] | 50 | struct tree_desc empty, real; |
Linus Torvalds | dc26bd8 | 2005-05-19 13:44:29 -0700 | [diff] [blame] | 51 | |
Linus Torvalds | ac1b3d1 | 2005-10-20 21:05:05 -0700 | [diff] [blame] | 52 | tree = read_object_with_reference(new, "tree", &real.size, NULL); |
Linus Torvalds | dc26bd8 | 2005-05-19 13:44:29 -0700 | [diff] [blame] | 53 | if (!tree) |
| 54 | die("unable to read root tree (%s)", sha1_to_hex(new)); |
Linus Torvalds | ac1b3d1 | 2005-10-20 21:05:05 -0700 | [diff] [blame] | 55 | real.buf = tree; |
| 56 | |
| 57 | empty.buf = ""; |
| 58 | empty.size = 0; |
| 59 | retval = diff_tree(&empty, &real, base, &diff_options); |
Linus Torvalds | dc26bd8 | 2005-05-19 13:44:29 -0700 | [diff] [blame] | 60 | free(tree); |
Junio C Hamano | 38c6f78 | 2005-05-21 19:40:36 -0700 | [diff] [blame] | 61 | call_diff_flush(); |
Linus Torvalds | dc26bd8 | 2005-05-19 13:44:29 -0700 | [diff] [blame] | 62 | return retval; |
| 63 | } |
| 64 | |
Junio C Hamano | 47dd0d5 | 2005-12-13 17:21:41 -0800 | [diff] [blame] | 65 | static const char *generate_header(const unsigned char *commit_sha1, |
| 66 | const unsigned char *parent_sha1, |
| 67 | const char *msg) |
Linus Torvalds | cee99d2 | 2005-05-06 11:42:47 -0700 | [diff] [blame] | 68 | { |
Linus Torvalds | 3258c90 | 2005-05-21 11:04:19 -0700 | [diff] [blame] | 69 | static char this_header[16384]; |
Linus Torvalds | cee99d2 | 2005-05-06 11:42:47 -0700 | [diff] [blame] | 70 | int offset; |
Junio C Hamano | a50b870 | 2005-11-21 21:49:06 -0800 | [diff] [blame] | 71 | unsigned long len; |
Junio C Hamano | 47dd0d5 | 2005-12-13 17:21:41 -0800 | [diff] [blame] | 72 | int abbrev = diff_options.abbrev; |
Linus Torvalds | cee99d2 | 2005-05-06 11:42:47 -0700 | [diff] [blame] | 73 | |
Linus Torvalds | 1809266 | 2005-06-23 13:56:55 -0700 | [diff] [blame] | 74 | if (!verbose_header) |
Junio C Hamano | 47dd0d5 | 2005-12-13 17:21:41 -0800 | [diff] [blame] | 75 | return sha1_to_hex(commit_sha1); |
Linus Torvalds | cee99d2 | 2005-05-06 11:42:47 -0700 | [diff] [blame] | 76 | |
Junio C Hamano | a50b870 | 2005-11-21 21:49:06 -0800 | [diff] [blame] | 77 | len = strlen(msg); |
Junio C Hamano | 47dd0d5 | 2005-12-13 17:21:41 -0800 | [diff] [blame] | 78 | |
| 79 | offset = sprintf(this_header, "%s%s ", |
| 80 | header_prefix, |
| 81 | diff_unique_abbrev(commit_sha1, abbrev)); |
| 82 | offset += sprintf(this_header + offset, "(from %s)\n", |
| 83 | parent_sha1 ? |
| 84 | diff_unique_abbrev(parent_sha1, abbrev) : "root"); |
| 85 | offset += pretty_print_commit(commit_format, msg, len, |
| 86 | this_header + offset, |
| 87 | sizeof(this_header) - offset); |
Linus Torvalds | cee99d2 | 2005-05-06 11:42:47 -0700 | [diff] [blame] | 88 | return this_header; |
| 89 | } |
| 90 | |
Junio C Hamano | a50b870 | 2005-11-21 21:49:06 -0800 | [diff] [blame] | 91 | static int diff_tree_commit(const unsigned char *commit_sha1) |
Linus Torvalds | b11645b | 2005-05-18 13:06:47 -0700 | [diff] [blame] | 92 | { |
Junio C Hamano | a50b870 | 2005-11-21 21:49:06 -0800 | [diff] [blame] | 93 | struct commit *commit; |
| 94 | struct commit_list *parents; |
| 95 | char name[50]; |
| 96 | unsigned char sha1[20]; |
Linus Torvalds | b11645b | 2005-05-18 13:06:47 -0700 | [diff] [blame] | 97 | |
Junio C Hamano | a50b870 | 2005-11-21 21:49:06 -0800 | [diff] [blame] | 98 | sprintf(name, "%s^0", sha1_to_hex(commit_sha1)); |
| 99 | if (get_sha1(name, sha1)) |
Linus Torvalds | b11645b | 2005-05-18 13:06:47 -0700 | [diff] [blame] | 100 | return -1; |
Junio C Hamano | a50b870 | 2005-11-21 21:49:06 -0800 | [diff] [blame] | 101 | name[40] = 0; |
| 102 | commit = lookup_commit(sha1); |
| 103 | |
Linus Torvalds | dc26bd8 | 2005-05-19 13:44:29 -0700 | [diff] [blame] | 104 | /* Root commit? */ |
Junio C Hamano | a50b870 | 2005-11-21 21:49:06 -0800 | [diff] [blame] | 105 | if (show_root_diff && !commit->parents) { |
Junio C Hamano | 47dd0d5 | 2005-12-13 17:21:41 -0800 | [diff] [blame] | 106 | header = generate_header(sha1, NULL, commit->buffer); |
Junio C Hamano | a50b870 | 2005-11-21 21:49:06 -0800 | [diff] [blame] | 107 | diff_root_tree(commit_sha1, ""); |
Linus Torvalds | dc26bd8 | 2005-05-19 13:44:29 -0700 | [diff] [blame] | 108 | } |
| 109 | |
| 110 | /* More than one parent? */ |
Junio C Hamano | a50b870 | 2005-11-21 21:49:06 -0800 | [diff] [blame] | 111 | if (ignore_merges && commit->parents && commit->parents->next) |
Junio C Hamano | 47dd0d5 | 2005-12-13 17:21:41 -0800 | [diff] [blame] | 112 | return 0; |
Linus Torvalds | dc26bd8 | 2005-05-19 13:44:29 -0700 | [diff] [blame] | 113 | |
Junio C Hamano | a50b870 | 2005-11-21 21:49:06 -0800 | [diff] [blame] | 114 | for (parents = commit->parents; parents; parents = parents->next) { |
| 115 | struct commit *parent = parents->item; |
Junio C Hamano | 47dd0d5 | 2005-12-13 17:21:41 -0800 | [diff] [blame] | 116 | header = generate_header(sha1, |
| 117 | parent->object.sha1, |
Junio C Hamano | a50b870 | 2005-11-21 21:49:06 -0800 | [diff] [blame] | 118 | commit->buffer); |
| 119 | diff_tree_sha1_top(parent->object.sha1, commit_sha1, ""); |
Linus Torvalds | d6db010 | 2005-05-21 15:42:53 -0700 | [diff] [blame] | 120 | if (!header && verbose_header) { |
Linus Torvalds | b11645b | 2005-05-18 13:06:47 -0700 | [diff] [blame] | 121 | header_prefix = "\ndiff-tree "; |
Linus Torvalds | d6db010 | 2005-05-21 15:42:53 -0700 | [diff] [blame] | 122 | /* |
| 123 | * Don't print multiple merge entries if we |
| 124 | * don't print the diffs. |
| 125 | */ |
Linus Torvalds | d6db010 | 2005-05-21 15:42:53 -0700 | [diff] [blame] | 126 | } |
Linus Torvalds | b11645b | 2005-05-18 13:06:47 -0700 | [diff] [blame] | 127 | } |
| 128 | return 0; |
| 129 | } |
| 130 | |
Linus Torvalds | e0965d8 | 2005-05-06 10:03:17 -0700 | [diff] [blame] | 131 | static int diff_tree_stdin(char *line) |
| 132 | { |
| 133 | int len = strlen(line); |
| 134 | unsigned char commit[20], parent[20]; |
Linus Torvalds | cee99d2 | 2005-05-06 11:42:47 -0700 | [diff] [blame] | 135 | static char this_header[1000]; |
Junio C Hamano | 47dd0d5 | 2005-12-13 17:21:41 -0800 | [diff] [blame] | 136 | int abbrev = diff_options.abbrev; |
Linus Torvalds | e0965d8 | 2005-05-06 10:03:17 -0700 | [diff] [blame] | 137 | |
| 138 | if (!len || line[len-1] != '\n') |
| 139 | return -1; |
| 140 | line[len-1] = 0; |
| 141 | if (get_sha1_hex(line, commit)) |
| 142 | return -1; |
| 143 | if (isspace(line[40]) && !get_sha1_hex(line+41, parent)) { |
Linus Torvalds | f4f21ce | 2005-05-06 10:56:35 -0700 | [diff] [blame] | 144 | line[40] = 0; |
Linus Torvalds | e0965d8 | 2005-05-06 10:03:17 -0700 | [diff] [blame] | 145 | line[81] = 0; |
Junio C Hamano | 47dd0d5 | 2005-12-13 17:21:41 -0800 | [diff] [blame] | 146 | sprintf(this_header, "%s (from %s)\n", |
| 147 | diff_unique_abbrev(commit, abbrev), |
| 148 | diff_unique_abbrev(parent, abbrev)); |
Linus Torvalds | f4f21ce | 2005-05-06 10:56:35 -0700 | [diff] [blame] | 149 | header = this_header; |
Junio C Hamano | 5c97558 | 2005-05-19 03:32:35 -0700 | [diff] [blame] | 150 | return diff_tree_sha1_top(parent, commit, ""); |
Linus Torvalds | e0965d8 | 2005-05-06 10:03:17 -0700 | [diff] [blame] | 151 | } |
Linus Torvalds | e0965d8 | 2005-05-06 10:03:17 -0700 | [diff] [blame] | 152 | line[40] = 0; |
Junio C Hamano | a50b870 | 2005-11-21 21:49:06 -0800 | [diff] [blame] | 153 | return diff_tree_commit(commit); |
Linus Torvalds | e0965d8 | 2005-05-06 10:03:17 -0700 | [diff] [blame] | 154 | } |
| 155 | |
Petr Baudis | 4d1f119 | 2005-07-29 11:01:26 +0200 | [diff] [blame] | 156 | static const char diff_tree_usage[] = |
Chris Shoemaker | 50b8e35 | 2005-10-28 13:04:49 -0400 | [diff] [blame] | 157 | "git-diff-tree [--stdin] [-m] [-s] [-v] [--pretty] [-t] [-r] [--root] " |
| 158 | "[<common diff options>] <tree-ish> [<tree-ish>] [<path>...]\n" |
| 159 | " -r diff recursively\n" |
| 160 | " --root include the initial commit as diff against /dev/null\n" |
Junio C Hamano | dda2d79 | 2005-07-13 12:52:35 -0700 | [diff] [blame] | 161 | COMMON_DIFF_OPTIONS_HELP; |
Junio C Hamano | a8db165 | 2005-06-12 17:44:21 -0700 | [diff] [blame] | 162 | |
Junio C Hamano | 6b5ee13 | 2005-09-21 00:00:47 -0700 | [diff] [blame] | 163 | int main(int argc, const char **argv) |
Linus Torvalds | 73134b6 | 2005-04-10 14:03:58 -0700 | [diff] [blame] | 164 | { |
Linus Torvalds | 0a8365a | 2005-05-18 13:10:17 -0700 | [diff] [blame] | 165 | int nr_sha1; |
Linus Torvalds | e0965d8 | 2005-05-06 10:03:17 -0700 | [diff] [blame] | 166 | char line[1000]; |
Linus Torvalds | 0a8365a | 2005-05-18 13:10:17 -0700 | [diff] [blame] | 167 | unsigned char sha1[2][20]; |
Linus Torvalds | d288a70 | 2005-08-16 18:06:34 -0700 | [diff] [blame] | 168 | const char *prefix = setup_git_directory(); |
Linus Torvalds | 73134b6 | 2005-04-10 14:03:58 -0700 | [diff] [blame] | 169 | |
Junio C Hamano | 9ce392f | 2005-11-21 22:52:37 -0800 | [diff] [blame] | 170 | git_config(git_diff_config); |
Linus Torvalds | 0a8365a | 2005-05-18 13:10:17 -0700 | [diff] [blame] | 171 | nr_sha1 = 0; |
Junio C Hamano | 6b5ee13 | 2005-09-21 00:00:47 -0700 | [diff] [blame] | 172 | diff_setup(&diff_options); |
| 173 | |
Linus Torvalds | c5b4238 | 2005-04-23 22:08:00 -0700 | [diff] [blame] | 174 | for (;;) { |
Junio C Hamano | 6b5ee13 | 2005-09-21 00:00:47 -0700 | [diff] [blame] | 175 | int diff_opt_cnt; |
Junio C Hamano | 6b14d7f | 2005-05-22 10:04:37 -0700 | [diff] [blame] | 176 | const char *arg; |
Linus Torvalds | c5b4238 | 2005-04-23 22:08:00 -0700 | [diff] [blame] | 177 | |
Linus Torvalds | 73134b6 | 2005-04-10 14:03:58 -0700 | [diff] [blame] | 178 | argv++; |
| 179 | argc--; |
Linus Torvalds | e0965d8 | 2005-05-06 10:03:17 -0700 | [diff] [blame] | 180 | arg = *argv; |
Linus Torvalds | 0a8365a | 2005-05-18 13:10:17 -0700 | [diff] [blame] | 181 | if (!arg) |
Linus Torvalds | e0965d8 | 2005-05-06 10:03:17 -0700 | [diff] [blame] | 182 | break; |
| 183 | |
Linus Torvalds | 0a8365a | 2005-05-18 13:10:17 -0700 | [diff] [blame] | 184 | if (*arg != '-') { |
| 185 | if (nr_sha1 < 2 && !get_sha1(arg, sha1[nr_sha1])) { |
| 186 | nr_sha1++; |
| 187 | continue; |
| 188 | } |
| 189 | break; |
| 190 | } |
| 191 | |
Junio C Hamano | 6b5ee13 | 2005-09-21 00:00:47 -0700 | [diff] [blame] | 192 | diff_opt_cnt = diff_opt_parse(&diff_options, argv, argc); |
| 193 | if (diff_opt_cnt < 0) |
| 194 | usage(diff_tree_usage); |
| 195 | else if (diff_opt_cnt) { |
| 196 | argv += diff_opt_cnt - 1; |
| 197 | argc -= diff_opt_cnt - 1; |
| 198 | continue; |
| 199 | } |
| 200 | |
| 201 | |
Linus Torvalds | 0a8365a | 2005-05-18 13:10:17 -0700 | [diff] [blame] | 202 | if (!strcmp(arg, "--")) { |
Linus Torvalds | e0965d8 | 2005-05-06 10:03:17 -0700 | [diff] [blame] | 203 | argv++; |
| 204 | argc--; |
| 205 | break; |
| 206 | } |
Linus Torvalds | bf16c71 | 2005-04-11 08:37:17 -0700 | [diff] [blame] | 207 | if (!strcmp(arg, "-r")) { |
Linus Torvalds | ac1b3d1 | 2005-10-20 21:05:05 -0700 | [diff] [blame] | 208 | diff_options.recursive = 1; |
Linus Torvalds | 73134b6 | 2005-04-10 14:03:58 -0700 | [diff] [blame] | 209 | continue; |
| 210 | } |
Junio C Hamano | 4cae1a9 | 2005-05-24 23:24:22 -0700 | [diff] [blame] | 211 | if (!strcmp(arg, "-t")) { |
Linus Torvalds | ac1b3d1 | 2005-10-20 21:05:05 -0700 | [diff] [blame] | 212 | diff_options.recursive = 1; |
| 213 | diff_options.tree_in_recursive = 1; |
Junio C Hamano | 4cae1a9 | 2005-05-24 23:24:22 -0700 | [diff] [blame] | 214 | continue; |
| 215 | } |
Linus Torvalds | e0965d8 | 2005-05-06 10:03:17 -0700 | [diff] [blame] | 216 | if (!strcmp(arg, "-m")) { |
| 217 | ignore_merges = 0; |
| 218 | continue; |
| 219 | } |
Linus Torvalds | cee99d2 | 2005-05-06 11:42:47 -0700 | [diff] [blame] | 220 | if (!strcmp(arg, "-v")) { |
| 221 | verbose_header = 1; |
| 222 | header_prefix = "diff-tree "; |
| 223 | continue; |
| 224 | } |
Junio C Hamano | a8db165 | 2005-06-12 17:44:21 -0700 | [diff] [blame] | 225 | if (!strncmp(arg, "--pretty", 8)) { |
| 226 | verbose_header = 1; |
Linus Torvalds | ba88e54 | 2005-06-12 20:34:09 -0700 | [diff] [blame] | 227 | header_prefix = "diff-tree "; |
Junio C Hamano | a8db165 | 2005-06-12 17:44:21 -0700 | [diff] [blame] | 228 | commit_format = get_commit_format(arg+8); |
| 229 | continue; |
| 230 | } |
Linus Torvalds | e0965d8 | 2005-05-06 10:03:17 -0700 | [diff] [blame] | 231 | if (!strcmp(arg, "--stdin")) { |
| 232 | read_stdin = 1; |
| 233 | continue; |
| 234 | } |
Linus Torvalds | dc26bd8 | 2005-05-19 13:44:29 -0700 | [diff] [blame] | 235 | if (!strcmp(arg, "--root")) { |
| 236 | show_root_diff = 1; |
| 237 | continue; |
| 238 | } |
Pavel Roskin | 601c978 | 2005-11-10 00:30:12 -0500 | [diff] [blame] | 239 | if (!strcmp(arg, "--no-commit-id")) { |
| 240 | no_commit_id = 1; |
| 241 | continue; |
| 242 | } |
Junio C Hamano | c5bac17 | 2005-04-20 19:49:16 -0700 | [diff] [blame] | 243 | usage(diff_tree_usage); |
Linus Torvalds | 73134b6 | 2005-04-10 14:03:58 -0700 | [diff] [blame] | 244 | } |
Junio C Hamano | 6b5ee13 | 2005-09-21 00:00:47 -0700 | [diff] [blame] | 245 | if (diff_options.output_format == DIFF_FORMAT_PATCH) |
Linus Torvalds | ac1b3d1 | 2005-10-20 21:05:05 -0700 | [diff] [blame] | 246 | diff_options.recursive = 1; |
Linus Torvalds | 73134b6 | 2005-04-10 14:03:58 -0700 | [diff] [blame] | 247 | |
Linus Torvalds | ac1b3d1 | 2005-10-20 21:05:05 -0700 | [diff] [blame] | 248 | diff_tree_setup_paths(get_pathspec(prefix, argv)); |
Junio C Hamano | 47dd0d5 | 2005-12-13 17:21:41 -0800 | [diff] [blame] | 249 | diff_setup_done(&diff_options); |
Linus Torvalds | c5b4238 | 2005-04-23 22:08:00 -0700 | [diff] [blame] | 250 | |
Linus Torvalds | 0a8365a | 2005-05-18 13:10:17 -0700 | [diff] [blame] | 251 | switch (nr_sha1) { |
| 252 | case 0: |
| 253 | if (!read_stdin) |
| 254 | usage(diff_tree_usage); |
| 255 | break; |
| 256 | case 1: |
Junio C Hamano | a50b870 | 2005-11-21 21:49:06 -0800 | [diff] [blame] | 257 | diff_tree_commit(sha1[0]); |
Linus Torvalds | 0a8365a | 2005-05-18 13:10:17 -0700 | [diff] [blame] | 258 | break; |
| 259 | case 2: |
Junio C Hamano | 5c97558 | 2005-05-19 03:32:35 -0700 | [diff] [blame] | 260 | diff_tree_sha1_top(sha1[0], sha1[1], ""); |
Linus Torvalds | 0a8365a | 2005-05-18 13:10:17 -0700 | [diff] [blame] | 261 | break; |
| 262 | } |
| 263 | |
Linus Torvalds | e0965d8 | 2005-05-06 10:03:17 -0700 | [diff] [blame] | 264 | if (!read_stdin) |
Linus Torvalds | 0a8365a | 2005-05-18 13:10:17 -0700 | [diff] [blame] | 265 | return 0; |
Linus Torvalds | e0965d8 | 2005-05-06 10:03:17 -0700 | [diff] [blame] | 266 | |
Junio C Hamano | 6b5ee13 | 2005-09-21 00:00:47 -0700 | [diff] [blame] | 267 | if (diff_options.detect_rename) |
| 268 | diff_options.setup |= (DIFF_SETUP_USE_SIZE_CACHE | |
| 269 | DIFF_SETUP_USE_CACHE); |
Linus Torvalds | e0965d8 | 2005-05-06 10:03:17 -0700 | [diff] [blame] | 270 | while (fgets(line, sizeof(line), stdin)) |
| 271 | diff_tree_stdin(line); |
| 272 | |
| 273 | return 0; |
Linus Torvalds | 9174026 | 2005-04-09 13:00:54 -0700 | [diff] [blame] | 274 | } |