]> git.ipfire.org Git - thirdparty/git.git/commit
gitk: prevent overly long command lines
authorJohannes Schindelin <johannes.schindelin@gmx.de>
Tue, 24 Jan 2023 11:23:16 +0000 (11:23 +0000)
committerJunio C Hamano <gitster@pobox.com>
Mon, 8 May 2023 16:15:24 +0000 (09:15 -0700)
commitbb5cb23daf751790950ff9f761f8884e21c88d00
tree14c0750a76f132d6d4e830a8738bade5ace510fb
parent465f03869ae11acd04abfa1b83c67879c867410c
gitk: prevent overly long command lines

To avoid running into command line limitations, some of Git's commands
support the `--stdin` option.

Let's use exactly this option in the three rev-list/log invocations in
gitk that would otherwise possibly run the danger of trying to invoke a
too-long command line.

While it is easy to redirect either stdin or stdout in Tcl/Tk scripts,
what we need here is both. We need to capture the output, yet we also
need to pipe in the revs/files arguments via stdin (because stdin does
not have any limit, unlike the command line). To help this, we use the
neat Tcl feature where you can capture stdout and at the same time feed
a fixed string as stdin to the spawned process.

One non-obvious aspect about this change is that the `--stdin` option
allows to specify revs, the double-dash, and files, but *no* other
options such as `--not`. This is addressed by prefixing the "negative"
revs with `^` explicitly rather than relying on the `--not` option
(thanks for coming up with that idea, Max!).

This fixes https://github.com/git-for-windows/git/issues/1987

Analysis-and-initial-patch-by: Max Kirillov <max@max630.net>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
gitk