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