git-commit-vandalism/t/t4013
Jack Bates 43d1948b7b diff: handle --no-abbrev in no-index case
There are two different places where the --no-abbrev option is parsed,
and two different places where SHA-1s are abbreviated. We normally parse
--no-abbrev with setup_revisions(), but in the no-index case, "git diff"
calls diff_opt_parse() directly, and diff_opt_parse() didn't handle
--no-abbrev until now. (It did handle --abbrev, however.) We normally
abbreviate SHA-1s with find_unique_abbrev(), but commit 4f03666 ("diff:
handle sha1 abbreviations outside of repository, 2016-10-20) recently
introduced a special case when you run "git diff" outside of a
repository.

setup_revisions() does also call diff_opt_parse(), but not for --abbrev
or --no-abbrev, which it handles itself. setup_revisions() sets
rev_info->abbrev, and later copies that to diff_options->abbrev. It
handles --no-abbrev by setting abbrev to zero. (This change doesn't
touch that.)

Setting abbrev to zero was broken in the outside-of-a-repository special
case, which until now resulted in a truly zero-length SHA-1, rather than
taking zero to mean do not abbreviate. The only way to trigger this bug,
however, was by running "git diff --raw" without either the --abbrev or
--no-abbrev options, because 1) without --raw it doesn't respect abbrev
(which is bizarre, but has been that way forever), 2) we silently clamp
--abbrev=0 to MINIMUM_ABBREV, and 3) --no-abbrev wasn't handled until
now.

The outside-of-a-repository case is one of three no-index cases. The
other two are when one of the files you're comparing is outside of the
repository you're in, and the --no-index option.

Signed-off-by: Jack Bates <jack@nottheoilrig.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2016-12-08 14:40:30 -08:00
..
diff.config_format.subjectprefix_DIFFERENT_PREFIX
diff.diff_--abbrev_initial..side
diff.diff_--cached
diff.diff_--cached_--_file0
diff.diff_--dirstat_initial_rearrange
diff.diff_--dirstat_master~1_master~2
diff.diff_--dirstat-by-file_initial_rearrange --dirstat-by-file: Make it faster and more correct 2011-04-11 10:12:24 -07:00
diff.diff_--line-prefix_--cached_--_file0
diff.diff_--line-prefix=abc_master_master^_side
diff.diff_--name-status_dir2_dir
diff.diff_--no-index_--name-status_--_dir2_dir
diff.diff_--no-index_--name-status_dir2_dir
diff.diff_--no-index_--raw_--abbrev=4_dir2_dir
diff.diff_--no-index_--raw_--no-abbrev_dir2_dir
diff.diff_--no-index_--raw_dir2_dir
diff.diff_--no-index_dir_dir3
diff.diff_--patch-with-raw_-r_initial..side
diff.diff_--patch-with-raw_initial..side
diff.diff_--patch-with-stat_-r_initial..side
diff.diff_--patch-with-stat_initial..side
diff.diff_--raw_--abbrev=4_initial
diff.diff_--raw_--no-abbrev_initial
diff.diff_--raw_initial
diff.diff_--stat_initial..side
diff.diff_-r_--stat_initial..side
diff.diff_-r_initial..side
diff.diff_initial..side
diff.diff_master_master^_side
diff.diff-tree_--cc_--patch-with-stat_--summary_master
diff.diff-tree_--cc_--patch-with-stat_--summary_side
diff.diff-tree_--cc_--patch-with-stat_master
diff.diff-tree_--cc_--stat_--summary_master
diff.diff-tree_--cc_--stat_--summary_side
diff.diff-tree_--cc_--stat_master
diff.diff-tree_--cc_master
diff.diff-tree_--patch-with-raw_initial
diff.diff-tree_--patch-with-stat_initial
diff.diff-tree_--pretty_--patch-with-raw_initial
diff.diff-tree_--pretty_--patch-with-stat_initial
diff.diff-tree_--pretty_--patch-with-stat_side
diff.diff-tree_--pretty_--root_--patch-with-raw_initial t4013: add tests for diff/log family output options. 2006-06-26 14:36:40 -07:00
diff.diff-tree_--pretty_--root_--patch-with-stat_initial
diff.diff-tree_--pretty_--root_--stat_--summary_initial
diff.diff-tree_--pretty_--root_--stat_initial
diff.diff-tree_--pretty_--root_--summary_-r_initial
diff.diff-tree_--pretty_--root_--summary_initial
diff.diff-tree_--pretty_--root_-p_initial
diff.diff-tree_--pretty_--root_initial
diff.diff-tree_--pretty_--stat_--summary_initial
diff.diff-tree_--pretty_--stat_initial
diff.diff-tree_--pretty_--summary_initial
diff.diff-tree_--pretty_-p_initial
diff.diff-tree_--pretty_-p_side
diff.diff-tree_--pretty_initial
diff.diff-tree_--pretty_side
diff.diff-tree_--pretty=oneline_--patch-with-raw_initial
diff.diff-tree_--pretty=oneline_--patch-with-stat_initial
diff.diff-tree_--pretty=oneline_--root_--patch-with-raw_initial
diff.diff-tree_--pretty=oneline_--root_--patch-with-stat_initial
diff.diff-tree_--pretty=oneline_--root_-p_initial
diff.diff-tree_--pretty=oneline_--root_initial
diff.diff-tree_--pretty=oneline_-p_initial
diff.diff-tree_--pretty=oneline_initial
diff.diff-tree_--root_--abbrev_initial
diff.diff-tree_--root_--patch-with-raw_initial
diff.diff-tree_--root_--patch-with-stat_initial
diff.diff-tree_--root_-p_initial
diff.diff-tree_--root_-r_--abbrev_initial
diff.diff-tree_--root_-r_--abbrev=4_initial
diff.diff-tree_--root_-r_initial
diff.diff-tree_--root_initial
diff.diff-tree_-c_--abbrev_master
diff.diff-tree_-c_--stat_--summary_master
diff.diff-tree_-c_--stat_--summary_side
diff.diff-tree_-c_--stat_master
diff.diff-tree_-c_master
diff.diff-tree_-p_-m_master
diff.diff-tree_-p_initial
diff.diff-tree_-p_master
diff.diff-tree_-r_--abbrev_initial
diff.diff-tree_-r_--abbrev=4_initial
diff.diff-tree_-r_initial
diff.diff-tree_initial
diff.diff-tree_master
diff.format-patch_--attach_--stdout_--suffix=.diff_initial..side
diff.format-patch_--attach_--stdout_initial..master
diff.format-patch_--attach_--stdout_initial..master^
diff.format-patch_--attach_--stdout_initial..side diff --stat: use less columns for change counts 2012-04-30 14:17:26 -07:00
diff.format-patch_--inline_--stdout_--numbered-files_initial..master
diff.format-patch_--inline_--stdout_--subject-prefix=TESTCASE_initial..master
diff.format-patch_--inline_--stdout_initial..master
diff.format-patch_--inline_--stdout_initial..master^
diff.format-patch_--inline_--stdout_initial..master^^
diff.format-patch_--inline_--stdout_initial..side
diff.format-patch_--stdout_--cover-letter_-n_initial..master^
diff.format-patch_--stdout_--no-numbered_initial..master
diff.format-patch_--stdout_--numbered_initial..master
diff.format-patch_--stdout_initial..master
diff.format-patch_--stdout_initial..master^
diff.format-patch_--stdout_initial..side
diff.log_--decorate_--all
diff.log_--decorate=full_--all
diff.log_--patch-with-stat_--summary_master_--_dir_
diff.log_--patch-with-stat_master
diff.log_--patch-with-stat_master_--_dir_
diff.log_--root_--cc_--patch-with-stat_--summary_master
diff.log_--root_--patch-with-stat_--summary_master
diff.log_--root_--patch-with-stat_master
diff.log_--root_-c_--patch-with-stat_--summary_master
diff.log_--root_-p_master
diff.log_--root_master
diff.log_-GF_-p_--pickaxe-all_master
diff.log_-GF_-p_master diff/log -G<pattern>: tests 2010-08-31 14:30:29 -07:00
diff.log_-GF_master
diff.log_-m_-p_--first-parent_master
diff.log_-m_-p_master
diff.log_-p_--first-parent_master
diff.log_-p_master
diff.log_-S_F_master
diff.log_-SF_-p_master
diff.log_-SF_master
diff.log_-SF_master_--max-count=0
diff.log_-SF_master_--max-count=1
diff.log_-SF_master_--max-count=2
diff.log_master
diff.rev-list_--children_HEAD
diff.rev-list_--parents_HEAD
diff.show_--first-parent_master
diff.show_--patch-with-raw_side
diff.show_--patch-with-stat_--summary_side
diff.show_--patch-with-stat_side
diff.show_--root_initial
diff.show_--stat_--summary_side
diff.show_--stat_side
diff.show_-c_master
diff.show_-m_master
diff.show_initial
diff.show_master
diff.show_side
diff.whatchanged_--patch-with-stat_--summary_master_--_dir_
diff.whatchanged_--patch-with-stat_master
diff.whatchanged_--patch-with-stat_master_--_dir_
diff.whatchanged_--root_--cc_--patch-with-stat_--summary_master
diff.whatchanged_--root_--patch-with-stat_--summary_master
diff.whatchanged_--root_--patch-with-stat_master
diff.whatchanged_--root_-c_--patch-with-stat_--summary_master
diff.whatchanged_--root_-p_master
diff.whatchanged_--root_master
diff.whatchanged_-p_master
diff.whatchanged_-SF_-p_master
diff.whatchanged_-SF_master
diff.whatchanged_master