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