Skip to content

Commit 43ac463

Browse files
committed
Work around the command line limit on Windows
On Windows, there are dramatic problems when a command line grows beyond PATH_MAX, which is restricted to 8191 characters on XP and later (according to http://support.microsoft.com/kb/830473). Work around this by just cutting off the command line at that length (actually, at a space boundary) in the hope that only negative refs are chucked: gitk will then do unnecessary work, but that is still better than flashing the gitk window and exiting with exit status 5 (which no Windows user is able to make sense of). The first fix caused Tcl to fail to compile the regexp, see msysGit issue 427. Here is another fix without using regexp, and using a more relaxed command line length limit to fix the original issue 387. Signed-off-by: Sebastian Schuberth <[email protected]> Signed-off-by: Pat Thoyts <[email protected]> Signed-off-by: Johannes Schindelin <[email protected]>
1 parent abf3368 commit 43ac463

File tree

1 file changed

+13
-1
lines changed

1 file changed

+13
-1
lines changed

gitk-git/gitk

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10057,7 +10057,19 @@ proc getallcommits {} {
1005710057
}
1005810058
}
1005910059
if {$ids ne {}} {
10060-
set fd [open [concat $cmd $ids] r]
10060+
set cmd [concat $cmd $ids]
10061+
# The maximum command line length for the CreateProcess function is 32767 characters, see
10062+
# http://blogs.msdn.com/oldnewthing/archive/2003/12/10/56028.aspx
10063+
# Be a little conservative in case Tcl adds some more stuff to the command line we do not
10064+
# know about and truncate the command line at a SHA1-boundary below 32000 characters.
10065+
if {[tk windowingsystem] == "win32" &&
10066+
[string length $cmd] > 32000} {
10067+
set ndx [string last " " $cmd 32000]
10068+
if {$ndx != -1} {
10069+
set cmd [string range $cmd 0 $ndx]
10070+
}
10071+
}
10072+
set fd [open $cmd r]
1006110073
fconfigure $fd -blocking 0
1006210074
incr allcommits
1006310075
nowbusy allcommits

0 commit comments

Comments
 (0)