git-gui: add support for filenames starting with tilde
PATCH 1/1 git-gui: add support for filenames starting with tilde
From: =?UTF-8?q?Matthias=20A=C3=9Fhauer?= <[email protected]>
When git-gui encounters a file name starting with a tilde character (~), TCL "helpfully" expands that tilde into a (probably non-existing) users home directory. But in git-gui we're often not dealing with user supplied paths, where such an expansion might be expected, but actual names of files.
Prevent TCL from doing tilde expansion on these literal filenames.
This fixes https://github.com/git-for-windows/git/issues/4349
---
git-gui: add support for filenames starting with tilde
I've originally submitted this patch as a pull request to Pratyush's git-gui repository [1] on March 23rd, but that hasn't received any feedback in almost seven months, so I'm resubmitting it on the mailing list, with an improved patch description.
[1] https://github.com/prati0100/git-gui/pull/96
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1599%2Frimrul%2Fgit-gui-tilde-filenames-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1599/rimrul/git-gui-tilde-filenames-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/1599
git-gui/git-gui.sh | 1 + git-gui/lib/diff.tcl | 1 + git-gui/lib/index.tcl | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-)
git-gui/git-gui.sh +1 -0
@@ -2273,6 +2273,7 @@ proc do_explore {} { # Open file relative to the working tree by the default associated app. proc do_file_open {file} { global _gitworktree + if {[string index $file 0] eq {~}} {set file ./$file} set explorer [get_explorer] set full_file_path [file join $_gitworktree $file] exec $explorer [file nativename $full_file_path] &
git-gui/lib/diff.tcl +1 -0
@@ -190,6 +190,7 @@ proc show_other_diff {path w m cont_info} { set max_sz 100000 set type unknown if {[catch { + if {[string index $path 0] eq {~}} {set path ./$path} set type [file type $path] switch -- $type { directory {
git-gui/lib/index.tcl +1 -1
@@ -617,7 +617,7 @@ proc delete_helper {path_list path_index deletion_errors batch_size \ set path [lindex $path_list $path_index] - set deletion_failed [catch {file delete -- $path} deletion_error] + set deletion_failed [catch {file delete -- ./$path} deletion_error] if {$deletion_failed} { lappend deletion_errors [list "$deletion_error"]
base-commit: a9ecda2788e229afc9b611acaa26d0d9d4da53ed
Signature · 1 line
gitgitgadget
Quoted 8 lines · Matthias Aßhauer via GitGitGadget
From: =?UTF-8?q?Matthias=20A=C3=9Fhauer?= <[email protected]>
When git-gui encounters a file name starting with a tilde character (~), TCL "helpfully" expands that tilde into a (probably non-existing) users home directory. But in git-gui we're often not dealing with user supplied paths, where such an expansion might be expected, but actual names of files.
Prevent TCL from doing tilde expansion on these literal filenames.
I do not have stake in git-gui (or gitk) and take the changes the subsystem owners have decided to take from them, but I have to wonder if this is merely robbing Peter to pay Paul?
If the above description were not "we're often not" but "the only paths we use are repository relative, and a path that begin with a tilde NEVER refers to somebody's home directory", then I would buy into the change (but again, I am not even a user of git-gui, so take this with a moderate grains of salt).
Thanks.