git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: diff-index --cc no longer permitted, gitk is now broken (slightly)

From
Johannes Sixt <j6t@kdbg.org>
Date
Sep 7, 2021, 20:32 UTC
Message-ID
<efcba5ef-d79d-ebc0-3bbb-f86eee08db05@kdbg.org>
In-Reply-To
<87h7f4tf0b.fsf@osv.gnss.ru>
Am 01.09.21 um 18:52 schrieb Sergey Organov:
Show 33 quoted lines
> Johannes Sixt <j6t@kdbg.org> writes:
> 
>> Since 19b2517f95a0 (diff-merges: move specific diff-index "-m" handling
>> to diff-index, 2021-05-21) git diff-index no longer accepts --cc. This
>> breaks gitk: it invokes
>>
>>    git diff-index --cached -p -C --cc --no-commit-id -U3 HEAD
>>
>> to show the staged changes (when the line "Local changes checked in to
>> index but not committed" is selected).
>>
>> The man page of git diff-index does not mention --cc as an option. I
>> haven't fully grokked the meaning of --cc, so I cannot tell whether this
>> absence has any significance (is deliberate or an omission).
>>
>> Is gitk wrong to add --cc unconditionally? Should it do so only when
>> there are conflicts? Or not at all?
>>
> 
> Here is a patch that fixes diff-index to accept --cc again:
> 
> Subject: [PATCH] diff-index: restore -c/--cc options handling
> 
> This fixes git:19b2517f95a0a908a8ada7417cf0717299e7e1aa
> "diff-merges: move specific diff-index "-m" handling to diff-index"
> 
> That commit disabled handling of all diff for merges options in
> diff-index on an assumption that they are unused. However, it later
> appeared that -c and --cc, even though undocumented and not being
> covered by tests, happen to have had particular effect on diff-index
> output.
> 
> Restore original -c/--cc options handling by diff-index.
Thank you! I can confirm that gitk works again as expected with this patch.
-- Hannes
Show 87 quoted lines
> 
> Signed-off-by: Sergey Organov <sorganov@gmail.com>
> ---
>  builtin/diff-index.c |  6 +++---
>  diff-merges.c        | 14 ++++----------
>  diff-merges.h        |  2 +-
>  3 files changed, 8 insertions(+), 14 deletions(-)
> 
> diff --git a/builtin/diff-index.c b/builtin/diff-index.c
> index cf09559e422d..5fd23ab5b6c5 100644
> --- a/builtin/diff-index.c
> +++ b/builtin/diff-index.c
> @@ -29,10 +29,10 @@ int cmd_diff_index(int argc, const char **argv, const char *prefix)
>  	prefix = precompose_argv_prefix(argc, argv, prefix);
>  
>  	/*
> -	 * We need no diff for merges options, and we need to avoid conflict
> -	 * with our own meaning of "-m".
> +	 * We need (some of) diff for merges options (e.g., --cc), and we need
> +	 * to avoid conflict with our own meaning of "-m".
>  	 */
> -	diff_merges_suppress_options_parsing();
> +	diff_merges_suppress_m_parsing();
>  
>  	argc = setup_revisions(argc, argv, &rev, NULL);
>  	for (i = 1; i < argc; i++) {
> diff --git a/diff-merges.c b/diff-merges.c
> index d897fd8a2933..5060ccd890bd 100644
> --- a/diff-merges.c
> +++ b/diff-merges.c
> @@ -6,7 +6,7 @@ typedef void (*diff_merges_setup_func_t)(struct rev_info *);
>  static void set_separate(struct rev_info *revs);
>  
>  static diff_merges_setup_func_t set_to_default = set_separate;
> -static int suppress_parsing;
> +static int suppress_m_parsing;
>  
>  static void suppress(struct rev_info *revs)
>  {
> @@ -91,9 +91,9 @@ int diff_merges_config(const char *value)
>  	return 0;
>  }
>  
> -void diff_merges_suppress_options_parsing(void)
> +void diff_merges_suppress_m_parsing(void)
>  {
> -	suppress_parsing = 1;
> +	suppress_m_parsing = 1;
>  }
>  
>  int diff_merges_parse_opts(struct rev_info *revs, const char **argv)
> @@ -102,10 +102,7 @@ int diff_merges_parse_opts(struct rev_info *revs, const char **argv)
>  	const char *optarg;
>  	const char *arg = argv[0];
>  
> -	if (suppress_parsing)
> -		return 0;
> -
> -	if (!strcmp(arg, "-m")) {
> +	if (!suppress_m_parsing && !strcmp(arg, "-m")) {
>  		set_to_default(revs);
>  	} else if (!strcmp(arg, "-c")) {
>  		set_combined(revs);
> @@ -153,9 +150,6 @@ void diff_merges_set_dense_combined_if_unset(struct rev_info *revs)
>  
>  void diff_merges_setup_revs(struct rev_info *revs)
>  {
> -	if (suppress_parsing)
> -		return;
> -
>  	if (revs->combine_merges == 0)
>  		revs->dense_combined_merges = 0;
>  	if (revs->separate_merges == 0)
> diff --git a/diff-merges.h b/diff-merges.h
> index b5d57f6563e3..19639689bb05 100644
> --- a/diff-merges.h
> +++ b/diff-merges.h
> @@ -11,7 +11,7 @@ struct rev_info;
>  
>  int diff_merges_config(const char *value);
>  
> -void diff_merges_suppress_options_parsing(void);
> +void diff_merges_suppress_m_parsing(void);
>  
>  int diff_merges_parse_opts(struct rev_info *revs, const char **argv);
>  
> 
Previous: Sergey Organov
Message 29 of 29 in “diff-index --cc no longer permitted, gitk is now broken (slightly)”
  1. Johannes SixtAug 30, 2021
  2. Sergey OrganovAug 30, 2021
  3. Jeff KingAug 30, 2021
  4. Sergey OrganovAug 30, 2021
  5. Johannes SixtAug 30, 2021
  6. Sergey OrganovAug 30, 2021
  7. Junio C HamanoAug 30, 2021
  8. Sergey OrganovAug 30, 2021
  9. Junio C HamanoAug 30, 2021
  10. Sergey OrganovAug 30, 2021
  11. Sergey OrganovSep 1, 2021
  12. Junio C HamanoSep 7, 2021
  13. Sergey OrganovSep 7, 2021
  14. Sergey OrganovSep 8, 2021
  15. Johannes SixtSep 8, 2021
  16. Sergey OrganovSep 8, 2021
  17. Junio C HamanoSep 9, 2021
  18. Sergey OrganovSep 9, 2021
  19. Sergey OrganovSep 16, 2021
  20. Junio C HamanoSep 16, 2021
  21. Sergey OrganovSep 16, 2021
  22. Junio C HamanoSep 16, 2021
  23. Sergey OrganovSep 17, 2021
  24. Junio C HamanoSep 17, 2021
  25. Sergey OrganovSep 17, 2021
  26. Philip OakleySep 17, 2021
  27. Sergey OrganovSep 17, 2021
  28. Sergey OrganovSep 18, 2021
  29. Johannes SixtSep 7, 2021

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.