]> asedeno.scripts.mit.edu Git - git.git/blobdiff - lib/blame.tcl
git-gui: update po/it.po
[git.git] / lib / blame.tcl
index b5fdad5643e46b09a23ea880f57bbd66af6e6923..b6e42cbc8fe0a49c301335f78cc2941bd9d59870 100644 (file)
@@ -33,13 +33,6 @@ variable group_colors {
        #ececec
 }
 
-# Switches for original location detection
-#
-variable original_options [list -C -C]
-if {[git-version >= 1.5.3]} {
-       lappend original_options -w ; # ignore indentation changes
-}
-
 # Current blame data; cleared/reset on each load
 #
 field commit               ; # input commit to blame
@@ -80,6 +73,7 @@ constructor new {i_commit i_path} {
        label $w.header.commit_l \
                -text [mc "Commit:"] \
                -background gold \
+               -foreground black \
                -anchor w \
                -justify left
        set w_back $w.header.commit_b
@@ -89,6 +83,7 @@ constructor new {i_commit i_path} {
                -relief flat \
                -state disabled \
                -background gold \
+               -foreground black \
                -activebackground gold
        bind $w_back <Button-1> "
                if {\[$w_back cget -state\] eq {normal}} {
@@ -98,16 +93,19 @@ constructor new {i_commit i_path} {
        label $w.header.commit \
                -textvariable @commit \
                -background gold \
+               -foreground black \
                -anchor w \
                -justify left
        label $w.header.path_l \
                -text [mc "File:"] \
                -background gold \
+               -foreground black \
                -anchor w \
                -justify left
        set w_path $w.header.path
        label $w_path \
                -background gold \
+               -foreground black \
                -anchor w \
                -justify left
        pack $w.header.commit_l -side left
@@ -135,7 +133,9 @@ constructor new {i_commit i_path} {
                -takefocus 0 \
                -highlightthickness 0 \
                -padx 0 -pady 0 \
-               -background white -borderwidth 0 \
+               -background white \
+               -foreground black \
+               -borderwidth 0 \
                -state disabled \
                -wrap none \
                -height 40 \
@@ -148,7 +148,9 @@ constructor new {i_commit i_path} {
                -takefocus 0 \
                -highlightthickness 0 \
                -padx 0 -pady 0 \
-               -background white -borderwidth 0 \
+               -background white \
+               -foreground black \
+               -borderwidth 0 \
                -state disabled \
                -wrap none \
                -height 40 \
@@ -166,7 +168,9 @@ constructor new {i_commit i_path} {
                -takefocus 0 \
                -highlightthickness 0 \
                -padx 0 -pady 0 \
-               -background white -borderwidth 0 \
+               -background white \
+               -foreground black \
+               -borderwidth 0 \
                -state disabled \
                -wrap none \
                -height 40 \
@@ -184,7 +188,9 @@ constructor new {i_commit i_path} {
                -takefocus 0 \
                -highlightthickness 0 \
                -padx 0 -pady 0 \
-               -background white -borderwidth 0 \
+               -background white \
+               -foreground black \
+               -borderwidth 0 \
                -state disabled \
                -wrap none \
                -height 40 \
@@ -213,7 +219,9 @@ constructor new {i_commit i_path} {
 
        set w_cviewer $w.file_pane.cm.t
        text $w_cviewer \
-               -background white -borderwidth 0 \
+               -background white \
+               -foreground black \
+               -borderwidth 0 \
                -state disabled \
                -wrap none \
                -height 10 \
@@ -248,6 +256,9 @@ constructor new {i_commit i_path} {
        $w.ctxm add command \
                -label [mc "Copy Commit"] \
                -command [cb _copycommit]
+       $w.ctxm add command \
+               -label [mc "Do Full Copy Detection"] \
+               -command [cb _fullcopyblame]
 
        foreach i $w_columns {
                for {set g 0} {$g < [llength $group_colors]} {incr g} {
@@ -318,19 +329,27 @@ constructor new {i_commit i_path} {
        bind $w.file_pane <Configure> \
        "if {{$w.file_pane} eq {%W}} {[cb _resize %h]}"
 
+       wm protocol $top WM_DELETE_WINDOW "destroy $top"
+       bind $top <Destroy> [cb _kill]
+
        _load $this {}
 }
 
+method _kill {} {
+       if {$current_fd ne {}} {
+               kill_file_process $current_fd
+               catch {close $current_fd}
+               set current_fd {}
+       }
+}
+
 method _load {jump} {
        variable group_colors
 
        _hide_tooltip $this
 
        if {$total_lines != 0 || $current_fd ne {}} {
-               if {$current_fd ne {}} {
-                       catch {close $current_fd}
-                       set current_fd {}
-               }
+               _kill $this
 
                foreach i $w_columns {
                        $i conf -state normal
@@ -470,7 +489,7 @@ method _read_file {fd jump} {
 
                _exec_blame $this $w_asim @asim_data \
                        [list] \
-                       { copy/move tracking}
+                       [mc "Loading copy/move tracking annotations..."]
        }
 } ifdeleted { catch {close $fd} }
 
@@ -489,14 +508,13 @@ method _exec_blame {cur_w cur_d options cur_s} {
        set blame_lines 0
 
        $status start \
-               "Loading$cur_s annotations..." \
-               {lines annotated}
+               $cur_s \
+               [mc "lines annotated"]
 }
 
 method _read_blame {fd cur_w cur_d} {
        upvar #0 $cur_d line_data
        variable group_colors
-       variable original_options
 
        if {$fd ne $current_fd} {
                catch {close $fd}
@@ -669,18 +687,96 @@ method _read_blame {fd cur_w cur_d} {
        if {[eof $fd]} {
                close $fd
                if {$cur_w eq $w_asim} {
+                       # Switches for original location detection
+                       set threshold [get_config gui.copyblamethreshold]
+                       set original_options [list "-C$threshold"]
+
+                       if {![is_config_true gui.fastcopyblame]} {
+                               # thorough copy search; insert before the threshold
+                               set original_options [linsert $original_options 0 -C]
+                       }
+                       if {[git-version >= 1.5.3]} {
+                               lappend original_options -w ; # ignore indentation changes
+                       }
+
                        _exec_blame $this $w_amov @amov_data \
                                $original_options \
-                               { original location}
+                               [mc "Loading original location annotations..."]
                } else {
                        set current_fd {}
-                       $status stop {Annotation complete.}
+                       $status stop [mc "Annotation complete."]
                }
        } else {
                $status update $blame_lines $total_lines
        }
 } ifdeleted { catch {close $fd} }
 
+method _find_commit_bound {data_list start_idx delta} {
+       upvar #0 $data_list line_data
+       set pos $start_idx
+       set limit       [expr {[llength $line_data] - 1}]
+       set base_commit [lindex $line_data $pos 0]
+
+       while {$pos > 0 && $pos < $limit} {
+               set new_pos [expr {$pos + $delta}]
+               if {[lindex $line_data $new_pos 0] ne $base_commit} {
+                       return $pos
+               }
+
+               set pos $new_pos
+       }
+
+       return $pos
+}
+
+method _fullcopyblame {} {
+       if {$current_fd ne {}} {
+               tk_messageBox \
+                       -icon error \
+                       -type ok \
+                       -title [mc "Busy"] \
+                       -message [mc "Annotation process is already running."]
+
+               return
+       }
+
+       # Switches for original location detection
+       set threshold [get_config gui.copyblamethreshold]
+       set original_options [list -C -C "-C$threshold"]
+
+       if {[git-version >= 1.5.3]} {
+               lappend original_options -w ; # ignore indentation changes
+       }
+
+       # Find the line range
+       set pos @$::cursorX,$::cursorY
+       set lno [lindex [split [$::cursorW index $pos] .] 0]
+       set min_amov_lno [_find_commit_bound $this @amov_data $lno -1]
+       set max_amov_lno [_find_commit_bound $this @amov_data $lno 1]
+       set min_asim_lno [_find_commit_bound $this @asim_data $lno -1]
+       set max_asim_lno [_find_commit_bound $this @asim_data $lno 1]
+
+       if {$min_asim_lno < $min_amov_lno} {
+               set min_amov_lno $min_asim_lno
+       }
+
+       if {$max_asim_lno > $max_amov_lno} {
+               set max_amov_lno $max_asim_lno
+       }
+
+       lappend original_options -L "$min_amov_lno,$max_amov_lno"
+
+       # Clear lines
+       for {set i $min_amov_lno} {$i <= $max_amov_lno} {incr i} {
+               lset amov_data $i [list ]
+       }
+
+       # Start the back-end process
+       _exec_blame $this $w_amov @amov_data \
+               $original_options \
+               [mc "Running thorough copy detection..."]
+}
+
 method _click {cur_w pos} {
        set lno [lindex [split [$cur_w index $pos] .] 0]
        _showcommit $this $cur_w $lno
@@ -728,7 +824,7 @@ method _showcommit {cur_w lno} {
 
        if {$dat eq {}} {
                set cmit {}
-               $w_cviewer insert end "Loading annotation..." still_loading
+               $w_cviewer insert end [mc "Loading annotation..."] still_loading
        } else {
                set cmit [lindex $dat 0]
                set file [lindex $dat 1]
@@ -743,20 +839,14 @@ method _showcommit {cur_w lno} {
                set author_time {}
                catch {set author_name $header($cmit,author)}
                catch {set author_email $header($cmit,author-mail)}
-               catch {set author_time [clock format \
-                       $header($cmit,author-time) \
-                       -format {%Y-%m-%d %H:%M:%S}
-               ]}
+               catch {set author_time [format_date $header($cmit,author-time)]}
 
                set committer_name {}
                set committer_email {}
                set committer_time {}
                catch {set committer_name $header($cmit,committer)}
                catch {set committer_email $header($cmit,committer-mail)}
-               catch {set committer_time [clock format \
-                       $header($cmit,committer-time) \
-                       -format {%Y-%m-%d %H:%M:%S}
-               ]}
+               catch {set committer_time [format_date $header($cmit,committer-time)]}
 
                if {[catch {set msg $header($cmit,message)}]} {
                        set msg {}
@@ -790,16 +880,16 @@ method _showcommit {cur_w lno} {
                }
 
                $w_cviewer insert end "commit $cmit\n" header_key
-               $w_cviewer insert end "Author:\t" header_key
+               $w_cviewer insert end [strcat [mc "Author:"] "\t"] header_key
                $w_cviewer insert end "$author_name $author_email" header_val
                $w_cviewer insert end "  $author_time\n" header_val
 
-               $w_cviewer insert end "Committer:\t" header_key
+               $w_cviewer insert end [strcat [mc "Committer:"] "\t"] header_key
                $w_cviewer insert end "$committer_name $committer_email" header_val
                $w_cviewer insert end "  $committer_time\n" header_val
 
                if {$file ne $path} {
-                       $w_cviewer insert end "Original File:\t" header_key
+                       $w_cviewer insert end [strcat [mc "Original File:"] "\t"] header_key
                        $w_cviewer insert end "[escape_path $file]\n" header_val
                }
 
@@ -892,10 +982,7 @@ method _open_tooltip {cur_w} {
        set author_time {}
        catch {set author_name $header($cmit,author)}
        catch {set summary     $header($cmit,summary)}
-       catch {set author_time [clock format \
-               $header($cmit,author-time) \
-               -format {%Y-%m-%d %H:%M:%S}
-       ]}
+       catch {set author_time [format_date $header($cmit,author-time)]}
 
        $tooltip_t insert end "commit $cmit\n"
        $tooltip_t insert end "$author_name  $author_time\n"
@@ -914,23 +1001,20 @@ method _open_tooltip {cur_w} {
                set author_time {}
                catch {set author_name $header($cmit,author)}
                catch {set summary     $header($cmit,summary)}
-               catch {set author_time [clock format \
-                       $header($cmit,author-time) \
-                       -format {%Y-%m-%d %H:%M:%S}
-               ]}
+               catch {set author_time [format_date $header($cmit,author-time)]}
 
-               $tooltip_t insert end "Originally By:\n" section_header
+               $tooltip_t insert end [strcat [mc "Originally By:"] "\n"] section_header
                $tooltip_t insert end "commit $cmit\n"
                $tooltip_t insert end "$author_name  $author_time\n"
                $tooltip_t insert end "$summary\n"
 
                if {$file ne $path} {
-                       $tooltip_t insert end "In File: " section_header
+                       $tooltip_t insert end [strcat [mc "In File:"] " "] section_header
                        $tooltip_t insert end "$file\n"
                }
 
                $tooltip_t insert end "\n"
-               $tooltip_t insert end "Copied Or Moved Here By:\n" section_header
+               $tooltip_t insert end [strcat [mc "Copied Or Moved Here By:"] "\n"] section_header
                $tooltip_t insert end $save
        }