Skip to content

Commit 9f8093e

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 b3b8b31 commit 9f8093e

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
@@ -10039,7 +10039,19 @@ proc getallcommits {} {
1003910039
}
1004010040
}
1004110041
if {$ids ne {}} {
10042-
set fd [open [concat $cmd $ids] r]
10042+
set cmd [concat $cmd $ids]
10043+
# The maximum command line length for the CreateProcess function is 32767 characters, see
10044+
# http://blogs.msdn.com/oldnewthing/archive/2003/12/10/56028.aspx
10045+
# Be a little conservative in case Tcl adds some more stuff to the command line we do not
10046+
# know about and truncate the command line at a SHA1-boundary below 32000 characters.
10047+
if {[tk windowingsystem] == "win32" &&
10048+
[string length $cmd] > 32000} {
10049+
set ndx [string last " " $cmd 32000]
10050+
if {$ndx != -1} {
10051+
set cmd [string range $cmd 0 $ndx]
10052+
}
10053+
}
10054+
set fd [open $cmd r]
1004310055
fconfigure $fd -blocking 0
1004410056
incr allcommits
1004510057
nowbusy allcommits

0 commit comments

Comments
 (0)