Linus Torvalds | e74f8f6 | 2005-04-19 21:00:09 -0700 | [diff] [blame] | 1 | #include "cache.h" |
Junio C Hamano | f92a446 | 2005-04-27 09:21:00 -0700 | [diff] [blame] | 2 | #include "diff.h" |
Junio C Hamano | e09ad6e | 2006-04-22 02:43:00 -0700 | [diff] [blame] | 3 | #include "commit.h" |
| 4 | #include "revision.h" |
Peter Eriksen | e8cc9cd | 2006-05-23 14:15:36 +0200 | [diff] [blame] | 5 | #include "builtin.h" |
Linus Torvalds | b5af910 | 2005-04-22 17:15:28 -0700 | [diff] [blame] | 6 | |
Petr Baudis | 4d1f119 | 2005-07-29 11:01:26 +0200 | [diff] [blame] | 7 | static const char diff_cache_usage[] = |
Stephan Beyer | 1b1dd23 | 2008-07-13 15:36:15 +0200 | [diff] [blame] | 8 | "git diff-index [-m] [--cached] " |
Junio C Hamano | dda2d79 | 2005-07-13 12:52:35 -0700 | [diff] [blame] | 9 | "[<common diff options>] <tree-ish> [<path>...]" |
| 10 | COMMON_DIFF_OPTIONS_HELP; |
Junio C Hamano | c5bac17 | 2005-04-20 19:49:16 -0700 | [diff] [blame] | 11 | |
Linus Torvalds | a633fca | 2006-07-28 22:44:25 -0700 | [diff] [blame] | 12 | int cmd_diff_index(int argc, const char **argv, const char *prefix) |
Linus Torvalds | e74f8f6 | 2005-04-19 21:00:09 -0700 | [diff] [blame] | 13 | { |
Junio C Hamano | e09ad6e | 2006-04-22 02:43:00 -0700 | [diff] [blame] | 14 | struct rev_info rev; |
Junio C Hamano | e09ad6e | 2006-04-22 02:43:00 -0700 | [diff] [blame] | 15 | int cached = 0; |
Linus Torvalds | 6c56c53 | 2005-05-24 18:10:11 -0700 | [diff] [blame] | 16 | int i; |
Alex Riesen | 41bbf9d | 2007-03-14 01:17:04 +0100 | [diff] [blame] | 17 | int result; |
Linus Torvalds | e74f8f6 | 2005-04-19 21:00:09 -0700 | [diff] [blame] | 18 | |
Linus Torvalds | a633fca | 2006-07-28 22:44:25 -0700 | [diff] [blame] | 19 | init_revisions(&rev, prefix); |
Johannes Schindelin | ef90d6d | 2008-05-14 18:46:53 +0100 | [diff] [blame] | 20 | git_config(git_diff_basic_config, NULL); /* no "diff" UI options */ |
Junio C Hamano | e09ad6e | 2006-04-22 02:43:00 -0700 | [diff] [blame] | 21 | rev.abbrev = 0; |
| 22 | |
| 23 | argc = setup_revisions(argc, argv, &rev, NULL); |
Linus Torvalds | 6c56c53 | 2005-05-24 18:10:11 -0700 | [diff] [blame] | 24 | for (i = 1; i < argc; i++) { |
| 25 | const char *arg = argv[i]; |
Junio C Hamano | a6080a0 | 2007-06-07 00:04:01 -0700 | [diff] [blame] | 26 | |
Junio C Hamano | 5c21ac0 | 2006-04-22 03:58:04 -0700 | [diff] [blame] | 27 | if (!strcmp(arg, "--cached")) |
Junio C Hamano | e09ad6e | 2006-04-22 02:43:00 -0700 | [diff] [blame] | 28 | cached = 1; |
| 29 | else |
Junio C Hamano | 6b5ee13 | 2005-09-21 00:00:47 -0700 | [diff] [blame] | 30 | usage(diff_cache_usage); |
Linus Torvalds | e74f8f6 | 2005-04-19 21:00:09 -0700 | [diff] [blame] | 31 | } |
Timo Hirvonen | c9b5ef9 | 2006-06-24 20:24:14 +0300 | [diff] [blame] | 32 | if (!rev.diffopt.output_format) |
| 33 | rev.diffopt.output_format = DIFF_FORMAT_RAW; |
| 34 | |
Junio C Hamano | e09ad6e | 2006-04-22 02:43:00 -0700 | [diff] [blame] | 35 | /* |
| 36 | * Make sure there is one revision (i.e. pending object), |
| 37 | * and there is no revision filtering parameters. |
| 38 | */ |
Linus Torvalds | 1f1e895 | 2006-06-19 17:42:35 -0700 | [diff] [blame] | 39 | if (rev.pending.nr != 1 || |
Junio C Hamano | e09ad6e | 2006-04-22 02:43:00 -0700 | [diff] [blame] | 40 | rev.max_count != -1 || rev.min_age != -1 || rev.max_age != -1) |
Junio C Hamano | 4727f64 | 2005-06-19 13:14:05 -0700 | [diff] [blame] | 41 | usage(diff_cache_usage); |
Nguyễn Thái Ngọc Duy | 4f38f6b | 2008-08-28 20:02:12 +0700 | [diff] [blame] | 42 | if (!cached) |
| 43 | setup_work_tree(); |
Junio C Hamano | b4e1e4a | 2007-02-09 18:51:40 -0800 | [diff] [blame] | 44 | if (read_cache() < 0) { |
| 45 | perror("read_cache"); |
| 46 | return -1; |
| 47 | } |
Alex Riesen | 41bbf9d | 2007-03-14 01:17:04 +0100 | [diff] [blame] | 48 | result = run_diff_index(&rev, cached); |
Junio C Hamano | da31b35 | 2007-12-13 23:40:27 -0800 | [diff] [blame] | 49 | return diff_result_code(&rev.diffopt, result); |
Linus Torvalds | e74f8f6 | 2005-04-19 21:00:09 -0700 | [diff] [blame] | 50 | } |