On Saturday 25 October 2008 15:57:23 Paul Mackerras wrote: > > + # Now scan the lines to determine offset within the hunk > > + set parent {} > > + set dline 0 > > + set s_lno [lindex [split $s_lix "."] 0] > > + > > + for {set i $line} {$i > $s_lno} {incr i -1} { > > + set c_line [$ctext get $i.0 "$i.0 + 1 lines"] > > + # Determine if the line is removed > > + set chunk [string range $c_line 0 [llength $base_lines]-2] > > You need an [expr]: > > set chunk [string range $c_line 0 [expr {[llength $base_lines] - 2}]] Ugh. I guess I'll have to install docs from Tcl 8.4... > > + set removed_idx [string first "-" $chunk] > > + # Choose a parent index > > + if {$parent eq {}} { > > + if {$removed_idx >= 0} { > > + set parent $removed_idx > > + incr parent > > + } else { > > + set unchanged_idx [string first " " $chunk] > > + if {$unchanged_idx >= 0} { > > + set parent $unchanged_idx > > + incr parent > > + } else { > > + # blame the current commit > > + set parent 0 > > + } > > + } > > + } > > I like this better than the previous version, but it would turn out a > bit simpler if you use parent = -1 to indicate that we're blaming the > current commit, and then increment it right at the end. Yes, it's probably better to apply the following fixup. Alexander diff --git a/gitk b/gitk index 6fbd6bb..68f07c2 100755 --- a/gitk +++ b/gitk @@ -3160,33 +3160,32 @@ proc find_hunk_blamespec {base line} { # Now scan the lines to determine offset within the hunk set parent {} + set max_parent [expr {[llength $base_lines]-2}] set dline 0 set s_lno [lindex [split $s_lix "."] 0] for {set i $line} {$i > $s_lno} {incr i -1} { set c_line [$ctext get $i.0 "$i.0 + 1 lines"] # Determine if the line is removed - set chunk [string range $c_line 0 [llength $base_lines]-2] + set chunk [string range $c_line 0 $max_parent] set removed_idx [string first "-" $chunk] # Choose a parent index if {$parent eq {}} { if {$removed_idx >= 0} { set parent $removed_idx - incr parent } else { set unchanged_idx [string first " " $chunk] if {$unchanged_idx >= 0} { set parent $unchanged_idx - incr parent } else { # blame the current commit - set parent 0 + set parent -1 } } } # then count other lines that belong to it - if {$parent > 0} { - set code [string index $c_line $parent-1] + if {$parent >= 0} { + set code [string index $c_line $parent] if {$code eq "-" || ($removed_idx < 0 && $code ne "+")} { incr dline } @@ -3197,7 +3196,8 @@ proc find_hunk_blamespec {base line} { } } - if {$parent eq {}} { set parent 0 } + if {$parent eq {}} { set parent -1 } + incr parent incr dline [lindex $base_lines $parent] return [list $parent $dline] } -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html