From 10637b84d91cf8870d1db8609a10dc5e58722378 Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Tue, 29 Nov 2005 21:06:10 -0800 Subject: diff-files: -1/-2/-3 to diff against unmerged stage. While resolving conflicted merge, it was not easy to compare the working tree file with unmerged index entries. This commit introduces new options -1/-2/-3 (with synonyms --base, --ours, and --theirs) to compare working tree files with specified stages. When none of these options are given, the command defaults to -2 if the index file is unmerged, otherwise it acts as before. [jc: majorly butchered from the version Linus originally posted.] Signed-off-by: Junio C Hamano --- Documentation/git-diff-files.txt | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'Documentation/git-diff-files.txt') diff --git a/Documentation/git-diff-files.txt b/Documentation/git-diff-files.txt index 3b04bfeec6..b45d1e69da 100644 --- a/Documentation/git-diff-files.txt +++ b/Documentation/git-diff-files.txt @@ -21,6 +21,16 @@ OPTIONS ------- include::diff-options.txt[] +-1 -2 -3 or --base --ours --theirs, and -0:: + Diff against the "base" version, "our branch" or "their + branch" respectively. With these options, diffs for + merged entries are not shown. ++ +The default is to diff against our branch (-2) if there +is an unmerged path, and show diff for unmerged entries +otherwise. The option -0 can be given to force diff for +unmerged entries even when the index is unmerged. + -q:: Remain silent even on nonexisting files -- cgit v1.3 From 15bf57a18aaf10c038e2026dfe54281edbb6080a Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Wed, 30 Nov 2005 02:16:36 -0800 Subject: diff-files: show diffs with stage0 and unmerged stage at the same time. After thinking about it more, I realized that much of the change I did on top of Linus' version does not make much sense. This commit reverts it so that it by default shows diffs with stage0 paths or stage2 paths with working tree; the unmerged stage to use can be overridden with -1/-2/-3 option (-2 is the default so essentially is a no-op). When the index file is unmerged, we are by definition in the middle of a conflicting merge, and we should show the diff with stage 2 by default. More importantly, paths without conflicts are updated in the working tree and collapsed to stage0 in the index, so showing diff with stage0 at the same time does not hurt. In normal cases, stage0 entries should be in sync with the working tree files and does not clutter the output. It even helps the user to realize that the working tree has local changes unrelated to the merge and remember to be careful not to do a "git-commit -a" after resolving the conflicts. When there is no unmerged entries, giving diff_unmerged_stage a default value of 2 does not cause any harm, because it would not be used anyway. So in all, always showing diff between stage0 paths and unmerged entries from a stage (defaulting to 2) is the right thing to do, as Linus originally did. Signed-off-by: Junio C Hamano --- Documentation/git-diff-files.txt | 7 +++---- diff-files.c | 21 ++------------------- 2 files changed, 5 insertions(+), 23 deletions(-) (limited to 'Documentation/git-diff-files.txt') diff --git a/Documentation/git-diff-files.txt b/Documentation/git-diff-files.txt index b45d1e69da..67f51265e6 100644 --- a/Documentation/git-diff-files.txt +++ b/Documentation/git-diff-files.txt @@ -26,10 +26,9 @@ include::diff-options.txt[] branch" respectively. With these options, diffs for merged entries are not shown. + -The default is to diff against our branch (-2) if there -is an unmerged path, and show diff for unmerged entries -otherwise. The option -0 can be given to force diff for -unmerged entries even when the index is unmerged. +The default is to diff against our branch (-2) and the +cleanly resolved paths. The option -0 can be given to +omit diff output for unmerged entries and just show "Unmerged". -q:: Remain silent even on nonexisting files diff --git a/diff-files.c b/diff-files.c index bbeeea7988..6c0696c34f 100644 --- a/diff-files.c +++ b/diff-files.c @@ -12,7 +12,7 @@ COMMON_DIFF_OPTIONS_HELP; static struct diff_options diff_options; static int silent = 0; -static int diff_unmerged_stage = -1; +static int diff_unmerged_stage = 2; static void show_unmerge(const char *path) { @@ -87,20 +87,6 @@ int main(int argc, const char **argv) pathspec = get_pathspec(prefix, argv + 1); entries = read_cache(); - if (diff_unmerged_stage < 0) { - /* default to "ours" if unmerged index, otherwise 0 */ - for (i = 0; i < entries; i++) { - struct cache_entry *ce = active_cache[i]; - if (ce_stage(ce)) { - diff_unmerged_stage = 2; - break; - } - } - if (diff_unmerged_stage < 0) - diff_unmerged_stage = 0; - } - - if (diff_setup_done(&diff_options) < 0) usage(diff_files_usage); @@ -122,8 +108,7 @@ int main(int argc, const char **argv) continue; if (ce_stage(ce)) { - if (!diff_unmerged_stage) - show_unmerge(ce->name); + show_unmerge(ce->name); while (i < entries) { struct cache_entry *nce = active_cache[i]; @@ -145,8 +130,6 @@ int main(int argc, const char **argv) if (ce_stage(ce) != diff_unmerged_stage) continue; } - else if (diff_unmerged_stage) - continue; if (lstat(ce->name, &st) < 0) { if (errno != ENOENT && errno != ENOTDIR) { -- cgit v1.3