diff options
author | Thomas Rast <trast@inf.ethz.ch> | 2013-11-16 18:37:43 +0100 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2013-12-02 09:24:20 +1100 |
commit | 9403bd02dd96a2f8b1a5802d86e1592d0dcf2358 (patch) | |
tree | 679caaf957f8341d6be426d8dc5b71cc3393cb9e | |
parent | b449eb2cb34fbdcb5cab7101a527985013818c9b (diff) | |
download | git-9403bd02dd96a2f8b1a5802d86e1592d0dcf2358.tar.gz |
gitk: Support showing the gathered inline diffs
The previous commit split the diffs into a separate field. Now we
actually want to show them.
To that end we use the stored diff, and
- process it once to build a fake "tree diff", i.e., a list of all
changed files;
- feed it through parseblobdiffline to actually format it into the
$ctext field, like the existing diff machinery would.
Signed-off-by: Thomas Rast <trast@inf.ethz.ch>
Signed-off-by: Paul Mackerras <paulus@samba.org>
-rwxr-xr-x | gitk | 38 |
1 files changed, 38 insertions, 0 deletions
@@ -156,10 +156,12 @@ proc unmerged_files {files} { proc parseviewargs {n arglist} { global vdatemode vmergeonly vflags vdflags vrevs vfiltered vorigargs env + global vinlinediff global worddiff git_version set vdatemode($n) 0 set vmergeonly($n) 0 + set vinlinediff($n) 0 set glflags {} set diffargs {} set nextisval 0 @@ -7131,6 +7133,7 @@ proc selectline {l isnew {desired_loc {}}} { global cmitmode showneartags allcommits global targetrow targetid lastscrollrows global autoselect autosellen jump_to_here + global vinlinediff catch {unset pending_select} $canv delete hover @@ -7272,6 +7275,8 @@ proc selectline {l isnew {desired_loc {}}} { init_flist [mc "Comments"] if {$cmitmode eq "tree"} { gettree $id + } elseif {$vinlinediff($curview) == 1} { + showinlinediff $id } elseif {[llength $olds] <= 1} { startdiff $id } else { @@ -7608,6 +7613,39 @@ proc startdiff {ids} { } } +proc showinlinediff {ids} { + global commitinfo commitdata ctext + global treediffs + + set info $commitinfo($ids) + set diff [lindex $info 7] + set difflines [split $diff "\n"] + + initblobdiffvars + set treediff {} + + set inhdr 0 + foreach line $difflines { + if {![string compare -length 5 "diff " $line]} { + set inhdr 1 + } elseif {$inhdr && ![string compare -length 4 "+++ " $line]} { + # offset also accounts for the b/ prefix + lappend treediff [string range $line 6 end] + set inhdr 0 + } + } + + set treediffs($ids) $treediff + add_flist $treediff + + $ctext conf -state normal + foreach line $difflines { + parseblobdiffline $ids $line + } + maybe_scroll_ctext 1 + $ctext conf -state disabled +} + # If the filename (name) is under any of the passed filter paths # then return true to include the file in the listing. proc path_filter {filter name} { |