summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthieu Moy <Matthieu.Moy@imag.fr>2010-08-05 12:05:22 +0200
committerPat Thoyts <patthoyts@users.sourceforge.net>2010-08-12 21:35:09 +0100
commit62f9a632c819bd53a5b7dbe40409ab086a4bce10 (patch)
tree6fd7855db671a1f80ff8e9043198ad8604b1de43
parent780777720a1ded770be7653cee0dc9777f14f07f (diff)
downloadgit-62f9a632c819bd53a5b7dbe40409ab086a4bce10.tar.gz
git-gui: use shell to launch textconv filter in "blame"
The textconv filters may include multiple arguments and may make use of unix shell features. To maintain compatibility with 'git blame' ensure these commands are passed through bash. Reported-by: Kirill Smelkov <kirr@landau.phys.spbu.ru> Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr> Signed-off-by: Pat Thoyts <patthoyts@users.sourceforge.net>
-rw-r--r--Makefile1
-rwxr-xr-xgit-gui.sh6
-rw-r--r--lib/blame.tcl4
3 files changed, 10 insertions, 1 deletions
diff --git a/Makefile b/Makefile
index 197b55edf3..e22ba5c321 100644
--- a/Makefile
+++ b/Makefile
@@ -215,6 +215,7 @@ endif
$(GITGUI_MAIN): git-gui.sh GIT-VERSION-FILE GIT-GUI-VARS
$(QUIET_GEN)rm -f $@ $@+ && \
sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
+ -e 's|@@SHELL_PATH@@|$(SHELL_PATH_SQ)|' \
-e '1,30s|^ argv0=$$0| argv0=$(GITGUI_SCRIPT)|' \
-e '1,30s|^ exec wish | exec '\''$(TCLTK_PATH_SED)'\'' |' \
-e 's/@@GITGUI_VERSION@@/$(GITGUI_VERSION)/g' \
diff --git a/git-gui.sh b/git-gui.sh
index 815725d1e1..8ade423eb4 100755
--- a/git-gui.sh
+++ b/git-gui.sh
@@ -128,6 +128,7 @@ set _githtmldir {}
set _reponame {}
set _iscygwin {}
set _search_path {}
+set _shellpath {@@SHELL_PATH@@}
set _trace [lsearch -exact $argv --trace]
if {$_trace >= 0} {
@@ -137,6 +138,11 @@ if {$_trace >= 0} {
set _trace 0
}
+proc shellpath {} {
+ global _shellpath
+ return $_shellpath
+}
+
proc appname {} {
global _appname
return $_appname
diff --git a/lib/blame.tcl b/lib/blame.tcl
index 2137ec9684..77656d3675 100644
--- a/lib/blame.tcl
+++ b/lib/blame.tcl
@@ -460,7 +460,9 @@ method _load {jump} {
}
if {$commit eq {}} {
if {$do_textconv ne 0} {
- set fd [open |[list $textconv $path] r]
+ # Run textconv with sh -c "..." to allow it to
+ # contain command + arguments.
+ set fd [open |[list [shellpath] -c "$textconv \"\$0\"" $path] r]
} else {
set fd [open $path r]
}