]> git.ipfire.org Git - thirdparty/git.git/commitdiff
Subject: git-gui: fix syntax error because of missing semicolon
authorAnsgar Röber <ansgar.roeber@rwth-aachen.de>
Thu, 9 Apr 2020 18:03:25 +0000 (18:03 +0000)
committerPratyush Yadav <me@yadavpratyush.com>
Wed, 22 Apr 2020 13:02:44 +0000 (18:32 +0530)
For some asynchronous operations, we build a chain of callbacks to
execute when the operation is done. These callbacks are held in $after,
and a new callback can be added by appending to $after. Once the
operation is done, $after is executed as a script.

But if we don't append a semi-colon after the procedure calls, they will
appear to Tcl as arguments to the previous procedure's arguments. So,
for example, if $after is "foo", and we just append "bar", then $after
becomes "foo bar", and bar will be treated as an argument to foo. If foo
does not accept any optional arguments, it would result in Tcl throwing
an error. If instead we do append a semi-colon, $after will look like
"foo;bar;", and these will be treated as two separate procedure calls.

Before d9c6469 (git-gui: update status bar to track operations,
2019-12-01), this problem was masked because ui_ready/ui_status did
accept an optional argument. In d9c6469, ui_ready stopped accepting an
optional argument, and this error started showing up.

Another instance of this problem is when a call to ui_status without a
trailing semicolon. ui_status never accepted an optional argument to
begin with, but the issue never managed to surface.

So, fix these errors by making sure we always append a semi-colon after
procedure calls when multiple callbacks are involved in $after.

Helped-by: Pratyush Yadav <me@yadavpratyush.com>
Signed-off-by: Ansgar Röber <ansgar.roeber@rwth-aachen.de>
git-gui.sh
lib/index.tcl
lib/mergetool.tcl

index 4610e4ca72a867ff9c51bcbf92cc3b6d6ead10fa..faaf93b431aa171f071479e4fa0ab096a577e803 100755 (executable)
@@ -2600,12 +2600,12 @@ proc toggle_or_diff {mode w args} {
                        update_indexinfo \
                                "Unstaging [short_path $path] from commit" \
                                [list $path] \
-                               [concat $after [list ui_ready]]
+                               [concat $after {ui_ready;}]
                } elseif {$w eq $ui_workdir} {
                        update_index \
                                "Adding [short_path $path]" \
                                [list $path] \
-                               [concat $after [list ui_ready]]
+                               [concat $after {ui_ready;}]
                }
        } else {
                set selected_paths($path) 1
index 1fc5b42300d654a2fe5e60e129d3a9d7fc3df7fe..d2ec24bd80e12af37ca0099b8aca0bc471cb180f 100644 (file)
@@ -60,7 +60,7 @@ proc rescan_on_error {err {after {}}} {
 
        $::main_status stop_all
        unlock_index
-       rescan [concat $after [list ui_ready]] 0
+       rescan [concat $after {ui_ready;}] 0
 }
 
 proc update_indexinfo {msg path_list after} {
@@ -314,7 +314,7 @@ proc unstage_helper {txt paths} {
                update_indexinfo \
                        $txt \
                        $path_list \
-                       [concat $after [list ui_ready]]
+                       [concat $after {ui_ready;}]
        }
 }
 
@@ -366,7 +366,7 @@ proc add_helper {txt paths} {
                update_index \
                        $txt \
                        $path_list \
-                       [concat $after {ui_status [mc "Ready to commit."]}]
+                       [concat $after {ui_status [mc "Ready to commit."];}]
        }
 }
 
index 120bc4064b6f88023fb067a7aedaa67e13802f2c..e688b016ef6c9d38b36f51a0bec7f5a19a802ec2 100644 (file)
@@ -59,7 +59,7 @@ proc merge_add_resolution {path} {
        update_index \
                [mc "Adding resolution for %s" [short_path $path]] \
                [list $path] \
-               [concat $after [list ui_ready]]
+               [concat $after {ui_ready;}]
 }
 
 proc merge_force_stage {stage} {