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
Sergey Organov <sorganov@gmail.com>
Date
Sep 8, 2021, 19:04 UTC
Message-ID
<87pmtiopm9.fsf@osv.gnss.ru>
In-Reply-To
<cbd0d173-ef17-576b-ab7a-465d42c82265@kdbg.org>
Johannes Sixt <j6t@kdbg.org> writes:
Show 17 quoted lines
> Am 08.09.21 um 15:43 schrieb Sergey Organov:
>> Besides, nobody yet told us why gitk uses --cc option in invocation of
>> 'diff-index' in the first place. Does it actually *rely* on particular
>> undocumented behavior of "diff-index --cc", or is it just a copy-paste
>> *leftover*?
>
> No, it is not a left-over. The thing is,
>
> - there is one point in the code where gitk adds options -p -C --cc (and
> more) to the command line (around line 8034),
>
> - and there is a totally different point in the code where it is decided
> whether diff-index, diff-tree, or diff-files is invoked (proc diffcmd
> around line 7871).
>
> IOW, Gitk expects that these option combinations can always be passed to
> all three commands.

I see, but the problem here is that while diff-files and diff-tree both accept --cc according to their documentation, diff-index does not. This means that, strictly speaking, gitk makes a mistake treating all 3 commands universally with respect to command-line arguments when it uses --cc.

Show 5 quoted lines
>
> Gitk does not want to look at a commit and then decide which incarnation
> of the command it wants to use (--cc vs. -p) depending on whether it is
> a merge commit or not. This decision is delegated to command that is
> invoked.

The problem is not in the kind of commit, the problem is in the command being invoked. diff-index doesn't support --cc according to its documentation, and thus gitk relies on undocumented behavior of diff-index. It might well be the case that it just happened to be "working", thus nobody cared.

> Therefore, silent fall-back from --cc to -p in case of non-merge
> commits or non-conflicted index is absolutely necessary.

I didn't change semantics of --cc, so this thing was not broken at all. I just disabled the --cc option in diff-index command, to match the documentation.

As a side note, in fact Git does no "silent fall-back from --cc to -p in case of non-merge commits", even though the behavior could be indeed seen like this. Instead, --cc implies -p, and, as --cc does not otherwise affect treating of non-merge commits, only -p is left active for them. Once again, this has not been recently changed, so does not need to be fixed.

Thanks, -- Sergey Organov

Previous: Johannes SixtNext: Junio C Hamano
Message 16 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.