git-gui: Correctly handle files containing LF in their name.
[gitweb.git] / git-gui
diff --git a/git-gui b/git-gui
index f36594eea0f8a85a5abb75f51fff7123cf6b04b0..ab64684c91e0b9fdcc661e15f8142d10d8a54624 100755 (executable)
--- a/git-gui
+++ b/git-gui
@@ -385,9 +385,9 @@ proc show_diff {path {w {}} {lno {}}} {
        set m [lindex $s 0]
        set diff_3way 0
        set diff_active 1
-       set ui_fname_value $path
+       set ui_fname_value [escape_path $path]
        set ui_fstatus_value [mapdesc $m $path]
-       set ui_status_value "Loading diff of $path..."
+       set ui_status_value "Loading diff of [escape_path $path]..."
 
        set cmd [list | git diff-index -p $PARENT -- $path]
        switch $m {
@@ -404,7 +404,7 @@ proc show_diff {path {w {}} {lno {}}} {
                        } err ]} {
                        set diff_active 0
                        unlock_index
-                       set ui_status_value "Unable to display $path"
+                       set ui_status_value "Unable to display [escape_path $path]"
                        error_popup "Error loading file:\n$err"
                        return
                }
@@ -421,7 +421,7 @@ proc show_diff {path {w {}} {lno {}}} {
        if {[catch {set fd [open $cmd r]} err]} {
                set diff_active 0
                unlock_index
-               set ui_status_value "Unable to display $path"
+               set ui_status_value "Unable to display [escape_path $path]"
                error_popup "Error loading diff:\n$err"
                return
        }
@@ -569,7 +569,7 @@ before committing.
                U* {
                        error_popup "Unmerged files cannot be committed.
 
-File $path has merge conflicts.
+File [escape_path $path] has merge conflicts.
 You must resolve them and include the file before committing.
 "
                        unlock_index
@@ -578,7 +578,7 @@ You must resolve them and include the file before committing.
                default {
                        error_popup "Unknown file state [lindex $s 0] detected.
 
-File $path cannot be committed by this program.
+File [escape_path $path] cannot be committed by this program.
 "
                }
                }
@@ -842,6 +842,11 @@ proc mapdesc {state path} {
        return $r
 }
 
+proc escape_path {path} {
+       regsub -all "\n" $path "\\n" path
+       return $path
+}
+
 set next_icon_id 0
 
 proc merge_state {path new_state} {
@@ -905,7 +910,7 @@ proc display_file {path state} {
                        -align center -padx 5 -pady 1 \
                        -name [lindex $s 1] \
                        -image $new_icon
-               $new_w insert $lno.1 "$path\n"
+               $new_w insert $lno.1 "[escape_path $path]\n"
                $new_w conf -state disabled
        } elseif {$new_icon != [mapicon $old_m $path]} {
                $new_w conf -state normal
@@ -929,7 +934,7 @@ proc display_all_files {} {
                        -align center -padx 5 -pady 1 \
                        -name [lindex $s 1] \
                        -image [mapicon $m $path]
-               $w insert end "$path\n"
+               $w insert end "[escape_path $path]\n"
        }
 
        $ui_index conf -state disabled