Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package tkdiff for openSUSE:Factory checked in at 2024-08-01 22:05:09 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/tkdiff (Old) and /work/SRC/openSUSE:Factory/.tkdiff.new.7232 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "tkdiff" Thu Aug 1 22:05:09 2024 rev:25 rq:1190848 version:5.7 Changes: -------- --- /work/SRC/openSUSE:Factory/tkdiff/tkdiff.changes 2022-11-14 14:29:22.431078053 +0100 +++ /work/SRC/openSUSE:Factory/.tkdiff.new.7232/tkdiff.changes 2024-08-01 22:05:46.551798637 +0200 @@ -1,0 +2,9 @@ +Wed Jul 31 08:53:17 UTC 2024 - ming li <m...@suse.com> + +- Update to 5.7 + * Allows implied "null content" files (eg. UNIX /dev/null) as valid Filespecs + * Inline hilites now respond immediately after a OFF to ON request + * Bookmark annotation prompt now relates current hunk ID on 2nd and more usage + * Inline hilites no longer randomly ignores the last possible line of hunk + +------------------------------------------------------------------- Old: ---- tkdiff-5-6.zip New: ---- tkdiff-5-7.zip ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ tkdiff.spec ++++++ --- /var/tmp/diff_new_pack.xPoca8/_old 2024-08-01 22:05:47.167824044 +0200 +++ /var/tmp/diff_new_pack.xPoca8/_new 2024-08-01 22:05:47.167824044 +0200 @@ -1,7 +1,7 @@ # # spec file for package tkdiff # -# Copyright (c) 2022 SUSE LLC +# Copyright (c) 2024 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,8 +17,8 @@ Name: tkdiff -Version: 5.6 -%define _version 5-6 +Version: 5.7 +%define _version 5-7 Release: 0 Summary: 2 and 3-way diff/merge tool License: GPL-2.0-or-later ++++++ tkdiff-5-6.zip -> tkdiff-5-7.zip ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tkdiff-5-6/CHANGELOG.txt new/tkdiff-5-7/CHANGELOG.txt --- old/tkdiff-5-6/CHANGELOG.txt 2022-11-09 01:21:58.000000000 +0100 +++ new/tkdiff-5-7/CHANGELOG.txt 2024-05-08 21:00:23.000000000 +0200 @@ -1,3 +1,9 @@ +5.7 (05/11/2024) + * Allows implied "null content" files (eg. UNIX /dev/null) as valid Filespecs + * Inline hilites now respond immediately after a OFF to ON request + * Bookmark annotation prompt now relates current hunk ID on 2nd and more usage + * Inline hilites no longer randomly ignores the last possible line of hunk + 5.6 (11/08/2022) * Added recursion ability into directory searching for the 1-FSpec case: allows file trees as input. Recommended primarily for the VPATH Scm. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tkdiff-5-6/tkdiff new/tkdiff-5-7/tkdiff --- old/tkdiff-5-6/tkdiff 2022-11-09 01:21:58.000000000 +0100 +++ new/tkdiff-5-7/tkdiff 2024-05-08 21:52:01.000000000 +0200 @@ -35,7 +35,7 @@ # N.B> version must be roughly formatted as Maj.Minor[.patch][anythingelse] # It is parsed to PROMOTE old Preference data when required set g(name) "TkDiff" -set g(version) "5.6" +set g(version) "5.7" set g(debug) 0 ;# Master setting - Initialized (by default) to false # get this out of the way -- we want to draw the whole user interface @@ -111,7 +111,7 @@ } # Determine the name of the temporary directory, the rc file name, -# and possible VPATH EnvVar, all of which are platform dependent. +# NULLdev, and possible VPATH EnvVar, all of which are platform dependent. # # Much MAY likely be overridden by a preference in .tkdiffrc, # EXCEPT (obviously) when no such file actually exists yet @@ -126,6 +126,9 @@ set opts(tmpdir) C:/temp } + # Reserved filename which is actually a NULL device + set opts(NULLdev) "nul" + # Split up and store a VPATH if it exists if {[info exists ::env(VPATH)]} { set finfo(Vpath) [split $::env(VPATH) ";"] @@ -145,6 +148,9 @@ set opts(tmpdir) $::env(TMPDIR) } {set opts(tmpdir) /tmp } + # Reserved filename which is actually a NULL device (Unix-like platforms) + set opts(NULLdev) "/dev/null" + # Split up and store a VPATH if it exists if {[info exists ::env(VPATH)]} { set finfo(Vpath) [split $::env(VPATH) ":"] @@ -253,7 +259,7 @@ statusMrgR 0 statusInfo "" tempfiles "" - thumbMinHeight 10 + thumbMinHeight 8 thumbDeltaY 0 } @@ -778,6 +784,8 @@ pack $b.cancel -side right bind $f.entry <Return> "$b.ok invoke ; break" bind $f.entry <Escape> "$b.cancel invoke ; break" + } else { + $f.msg config -text $msg ;# Simply change the prompt msg on reuse } # Initialize, run, and dismiss if {[set w(val$f) $preload] != {}} { $f.entry selection range 0 end } @@ -2106,7 +2114,7 @@ # 1 Failed (PLUS a 'pushed' HARD-error message to the caller) ############################################################################### proc get-file {fn ndx {probe 0}} { - global g finfo + global g opts finfo # Ancestor files are stored into a slightly adjusted array element name # N.B> 'ndx' AS PASSED *can* be an EXPRESSION (not just a number): resolve! @@ -2121,7 +2129,7 @@ } elseif {!$tildechk} { # DO NOT REPORT non-existence if this attempt was ONLY a probe if {$probe} { return 1 } { set MSG "File '$fn' does not exist" } - } elseif {[file isfile $fn]} { + } elseif {[file isfile $fn] || $fn == $opts(NULLdev)} { set finfo(${A}lbl,$ndx) [shortNm [set finfo(${A}pth,$ndx) "$fn"]] } else { set MSG "'$fn' exists, but is not a file" } @@ -2857,7 +2865,7 @@ # Align various label decorations to the CURRENT input file pairing ############################################################################### proc alignDecor {pairnum} { - global g w finfo + global g w opts finfo # Establish if 3way mode is NOW active and what file indices are in use set g(is3way) [info exists finfo(albl,$pairnum)] @@ -2874,7 +2882,8 @@ set finfo(lbl,$LR) $finfo(ulbl,$ndx($n)) ;# Override lbl display } else {set finfo(lbl,$LR) $finfo(lbl,$ndx($n))} - if {![info exists finfo(tmp,$ndx($n))]} { + if {![info exists finfo(tmp,$ndx($n))] \ + && $finfo(pth,$ndx($n)) != $opts(NULLdev)} { # (N.B> Tip data will ALSO be used by report generation heading) set g(tooltip,${LR}Label) "{$finfo(pth,$ndx($n))\n" append g(tooltip,${LR}Label) \ @@ -3656,7 +3665,7 @@ $w(popupMenu) entryconfigure "Edit*" -state normal # Ensure w(acTxWdg) is proper for USE by above entry - if {[string match {.client.left.*} $win]} { + if {[string match {.client.left*} $win]} { set w(mPopW) [set w(acTxWdg) $w(LeftText)] } else { set w(mPopW) [set w(acTxWdg) $w(RightText)] @@ -4538,7 +4547,7 @@ # # N.B> Ratcliff has become too compute-intensive to do ALL AT ONE time # (once we added semantic suppression categories). - # Just leave them uncomputed and let '$w(acTxWdg) scroll' do AS NEEDED. + # Just leave them uncomputed and let $w(acTxWdg) scrolling do AS NEEDED. if {$optNam != "showinline2"} { foreach hID $g(diff) { # Remember: only chg-type hunks can EVER have inline diffs @@ -4550,7 +4559,8 @@ } } } - } + # But KICK scroll to *LOOK* for Ratcliff (when ON); otherwise is a NOOP + } { $w(acTxWdg) SEE @1,1 } } ############################################################################### @@ -4570,77 +4580,86 @@ # Otherwise establish default initial values if {![info exists g(scrInf,$hID)] || ([lindex $args end] && ![info exists g(inline,$hID)])} { - Dbg " Inline ABORTED" $D ; return } { - set heuristic 5 ;# <-- tune this value for GUI responsiveness - } - - # Next determine last UN-padded Lnum, to process L/R pairs UP-TO that point - # Presumption is do ALL calcs (First->Last), displaying when 'Lim' reached - lassign $g(scrInf,$hID) Ls Le P(1) na na P(2) - set Last [set Dsply [set Lim [expr {$P(1) ? $Le-$P(1) : $Le-$P(2)}]]] - - # HOWEVER - Ratcliff CAN require CHAINED processing to maintain UI response - # Adjust calcs to a NEXT (or final) HUERISTIC-sized SEGMENT of the data - # N.B> But also try to get VISIBLE tagging done BEFORE the OFFSCREEN ones - # (makes us look faster than we really are) + Dbg " Inline ABORTED" $D ; return + } { + # Default calcs ALL lines (First->Lim), displaying when 'Lim' reached + # (AFTER getting last UN-padded Lnum, to assess active size of hunk) + lassign $g(scrInf,$hID) Ls Le P(1) na na P(2) + set Lim [set Last [expr {$P(1) ? $Le-$P(1) : $Le-$P(2)}]] + lassign "0 $Ls 0 5" First Dsply Wrap heuristic + # N.B.> 'First': remains as an INDEX until calcs begin; a LNUM after + # 'heuristic': must be MANUALLY tuned for GUI responsiveness + } + + # Ratcliff algorithm CAN require CHAINED processing to maintain UI response + # So limit calcs to a NEXT (or final) HUERISTIC-based PORTION of the data + # N.B> But arrange to get VISIBLE tagging done BEFORE most OFFSCREEN ones + # by MAYBE splitting hunk into two BLOCKS (tail-first, then head) + # (makes us look more responsive than we really are) # # Key items being juggled below are: - # Cmd - which PORTION of the hunk we are working our way thru - # Lim - the hard endpoint LNUM where the given PORTION terminates - # Wrap - LNUM where we STARTED the 'tail' portion (if was done first) + # Cmd - which BLOCK (head/tail) we are processing per chained iteration + # Wrap - OFFSET where we STARTED the 'tail' portion (IFF was done first) # Dsply - LNUM where we should begin Tagging (endpt is heuristic based) - # First - Where CURRENT calculations should begin - # Note that 'First' is an INDEX until calcs begin; a LNUM after - # Basically this "programs" the values acheiving a visual illusion of speed - # Sequenced as: sched -> tail* -> (wrap to) head* -> done - # OR sched -> head* -> done - # Where (*) is REPETITIVE (and DERIVES batching Tag RESULTS heuristically) + # First - OFFSET into hunk where CURRENT calculations should begin + # Lim - endpoint (inclusive) LNUM of current PORTION + # Last - hard endpoint (inclusive) LNUM where current 'Cmd' terminates + # This basically "orients" the data to acheive a visual speed illusion + # Will sequence as: sched -> tail* -> (wrap to) head* -> done + # OR sched -> head* -> done + # Where '*' means distinct (REPEATING) heuristic-derived Calcs + Tagging + # + # RECOVER the 6 values from PRIOR chained-portion and adjust as necessary if {$style == "ratcliff"} { switch [lindex $args 0] { - sched { lassign $args Wmin Wmax - # Choose the strategy for which end gets displayed first + sched { lassign $args Cmd Wmin Wmax + # N.B> 'sched' is the PRIMARY entry point (from scroll tracking) + # Derive which strategy for the BLOCK that gets displayed first if {$Ls < $Wmin && $Le <= $Wmax && $Le >= $Wmin} { - set First [expr $Wmin-$Ls] - lassign "tail $Lim $First $Wmin" Cmd Lim Wrap Dsply - } { lassign "head $Lim 0 $Ls 0" Cmd Lim Wrap Dsply First } - } - tail { lassign $args Cmd Lim Wrap Dsply First - # Only need to watch for when to "wrap" to the 'head' approach + set First [expr $Wmin-$Ls] ;# reset to begin @1st visible line + # ALSO notes where to stop AFTER 'wrapping' back to beginning + lassign "tail $First $Lim $Wmin $Last" Cmd Wrap Lim Dsply Last + } { lassign "head 0 $Lim $Ls $Last 0" Cmd Wrap Lim Dsply Last First + }} + tail { lassign $args Cmd Wrap Lim Dsply Last First + # Watch for when to "wrap" to the 'head' approach (and cancel Wrap) if {$First + $Ls > $Lim} { - lassign "head $Wrap 0 $Ls 0" Cmd Lim Wrap Dsply First - } - } - head { lassign $args Cmd Lim Wrap Dsply First - # Simply keep USING the values we were passed till done + lassign "head 0 [expr $Wrap+$Ls-1] $Ls [incr Wrap -1] 0" \ + Cmd Wrap Lim Dsply Last First + Dbg {REwritten as $Cmd $Wrap $Lim $Dsply $Last $First} $D + }} + head { lassign $args Cmd Wrap Lim Dsply Last First + # Just keep USING values which were passed till done }} # Finally, APPLY the heuristic to keep the UI responsive throughout if {$First + $Ls + $heuristic < $Lim} { - set Last [expr $First - 1 + $Ls + $heuristic] + set Lim [expr $First + $Ls - 1 + $heuristic] } } # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Perform the CURRENT inline difference calculation (for EITHER style) - # N.B> Note subtle transform of 'First' from offset into LineNum - # Further: each ALg-STYLE has its OWN RetCod MEANING (just ISNT used) - for {set i [incr First $Ls]} {$i <= $Last} {incr i} { + # N.B> Note subtle transform of 'First' from Hunk offset into LineNum + for {set i [incr First $Ls]} {$i <= $Lim} {incr i} { inline-$style $hID [expr $i - $Ls] \ [$w(LeftText) get $i.0 $i.end] [$w(RightText) get $i.0 $i.end] + Dbg {Calc'd Lnum $i (Ofst [expr $i-$Ls]) until Lim ($Lim)} $D } # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # if {$style=="ratcliff"} { # Place an EARLY SUBSET of tags onscreen NOW ? - if {$i > $Dsply + ($heuristic * 2)} { + if {$i < $Last && $i > $Dsply + ($heuristic * 2)} { remark-inline $hID $Dsply [incr Dsply [expr ($heuristic * 3) - 1]] - incr Dsply ; # Further-adjust this as FUTURE display start position + incr Dsply ; # Further-adjust for a FUTURE display start position # Otherwise just flush whatever remains when endpoint is hit - } elseif {$i > $Lim} { remark-inline $hID $Dsply $Lim } + } elseif {$i > $Last} { remark-inline $hID $Dsply $Last } - # Reschedule any REMAINING segment into a CHAINED timeslot (if needed) - if {$i <= $Lim || $Wrap} { after 25 inline-hunk $style \ - $hID $Cmd $Lim $Wrap $Dsply [expr $i-$Ls] + # Reschedule any REMAINING portion into a CHAINED timeslot (as needed) + # N.B> Send EXISTING (except First) values (adjust in NEXT iteration) + if {$i <= $Last || $Wrap} { after 25 inline-hunk $style $hID \ + $Cmd $Wrap $Last $Dsply $Last [expr $i-$Ls] } { Dbg " Inline completed" $D } } { remark-inline $hID } } @@ -5730,34 +5749,34 @@ global g w # Scale the thumb height (subject to a minumum size big enough to 'grab') - set thumbheight [max [expr {($y2-$y1) * $g(mapheight)}] $g(thumbMinHeight)] + set thumbheight [max $g(thumbMinHeight) \ + [expr {round(($y2-$y1) * $g(mapheight))}]] # L/R edge positions (-3 so right edge remains INSIDE our border) - set x1 1 + set x1 0 if {[info exists g(mapwidth)]} { set x2 [expr {$g(mapwidth) - 3}] } {set x2 0} # B/T edge positions (-2 so bottom edge remains INSIDE our border) # but ensure top edge wont exceed the top of the map itself - set y1 [max [expr {int(($y1 * $g(mapheight)) - 2)}] 0] + # N.B> Computationally, we want to POSITION the thumb by its CENTER + # such that when the thumbheight hits minimum, the EXCESS spreads to + # BOTH edges (unless either edge encroaches its window limit). + set y1 [max 0 [expr {int((($y1 + $y2)/2)*$g(mapheight))-($thumbheight/2)}]] set y2 [expr {$y1 + $thumbheight}] if {$y2 > $g(mapheight)} { - set y2 $g(mapheight) + set y2 [expr {$g(mapheight) - 2 }] set y1 [expr {$y2 - $thumbheight}] } # extra offset values for upcomming drawing trick set dx1 [expr {$x1 + 1}] - set dx2 [expr {$x2 - 1}] set dy1 [expr {$y1 + 1}] - set dy2 [expr {$y2 - 1}] # Draw two L-shapes (1 light, 1 dark) aligned for a 3d appearance - $w(mapCanvas) coords thumbUL $x1 $y2 $x1 $y1 $x2 $y1 $dx2 $dy1 $dx1 $dy1 \ - $dx1 $dy2 - $w(mapCanvas) coords thumbLR $dx1 $y2 $x2 $y2 $x2 $dy1 $dx2 $dy1 $dx2 \ - $dy2 $dx1 $dy2 + $w(mapCanvas) coords thumbUL $x1 $y2 $x1 $y1 $x2 $y1 + $w(mapCanvas) coords thumbLR $dx1 $y2 $x2 $y2 $x2 $dy1 # Record bounding box (for use in event handler, eg., dragging, etc) set g(thumbBbox) [list $x1 $y1 $x2 $y2] @@ -6177,6 +6196,7 @@ proc customize {} { global g w pref opts tmpopts + # FIXME: It takes 2 tries to map this dialog on the Mac if {![Dialog NONMODAL $w(prefs)]} { wm title $w(prefs) "$g(name) Preferences ([file tail $g(rcfile)])" wm transient $w(prefs) . @@ -6274,6 +6294,8 @@ incr row } + # Some of these labels are long, we'll need font measure + set Fnt [$frame.l[expr {$row-1}] cget -font] # this is just for filler... label $frame.filler -text {} @@ -6306,6 +6328,8 @@ # Hmm, annoying - we need two of these, but want to # treat the value as the list of BOTH - # this'll take some work + # FIXME: the spinbox widget is cut off on the Mac, + # even with -width increased foreach {val} {0 1} { # set it to reassemble values when EITHER changes spinbox $f.s$val -width 7 -repeatinterval 400 \ @@ -6472,7 +6496,7 @@ if {$key=="fLMmax"} { scale $frame.c${row}$col -orient horizontal -tick 0 \ -from 1 -to 25 -var tmpopts($key) \ - -label $pref($key) -length 2i + -label $pref($key) -length [font measure $Fnt " $pref($key) "] # N.B> '-length' mitigates stupid label truncation! } elseif {$key=="inlSuprs"} { # We need several buttons COMBINING into a single value @@ -9826,8 +9850,8 @@ # N.B> note subtle oscillation between NDX and Lnum as loop proceeds foreach {side lndx Scol Ecol} $g(inline,$hID) { - if {[incr lndx $S] >= $BgnL} { - if {$lndx > $EndL} { break } { + if {[incr lndx $S] <= $EndL} { + if {$lndx >= $BgnL} { add-tag $w($wdg($side)) inlinetag $lndx $Scol $Ecol } } @@ -10788,17 +10812,12 @@ Dbg "x11 fallback options" set hlbg "#4a6984" set hlfg "#ffffff" - #set w(selcolor) $hlbg - if {$tk_version >= 8.5} { - option add *Menu.selectColor $w(fgnd) - option add *Checkbutton.selectColor "" - option add *Radiobutton.selectColor "" - } else { - option add *selectColor $hlbg - } + option add *Menu.selectColor $w(fgnd) + option add *Checkbutton.selectColor "" + option add *Radiobutton.selectColor "" } } - if {$w(wSys) == "aqua"} { get_aqua_params } + if {($w(wSys) == "aqua") && ($tk_version < 8.6)} { get_aqua_params } # Ordinarily the CWD points at/under the TOPMOST Vpath node (IFF they exist) # But *IFF* located deeper, use that position to TOP-prune the lead elements @@ -17950,6 +17969,7 @@ return } + if {![info exists g(tooltip_id)]} {set g(tooltip_id) "Initialized"} bind $widget <Enter> " catch { after 500 { iTT_PopUp %W $tiptxt } } g(tooltip_id) " @@ -18055,6 +18075,11 @@ [winfo width $win] [winfo height $win] 0 0 [winfo screenw $win] [winfo screenh $win]" vx vy x y w h X Y W H +# DBG shows everything known; PROVING TK cant tell us where the edges are of any +# ONE monitor is when the Display is configured in a multi-monitor arrangement !! +# Dbg "vx($vx) vy($vy) x($x) y($y) w($w) h($h) X($X) Y($Y) W($W) H($H)\ + .WxH([winfo screenw .] [winfo screenh .])" + # If the LOCATION of the exemplar window is WITHIN the TK-provided screen # width/height, then use IT; otherwise fallback to using the Toplevel it # belongs to (best option - lousy though it is)! @@ -18071,7 +18096,7 @@ } proc get_gtk_params { } { - global w tk_version + global w if {! [llength [auto_execok xrdb]]} { return 0 } set pipe [open "|xrdb -q" r] @@ -18103,18 +18128,15 @@ option add *Text.selectBackground $hlbg option add *Text.selectForeground $hlfg # Menu checkboxes - if {$tk_version >= 8.5} { - option add *Menu.selectColor $fg - option add *Checkbutton.selectColor "" - option add *Radiobutton.selectColor "" - - } { option add *selectColor $w(selcolor) } + option add *Menu.selectColor $fg + option add *Checkbutton.selectColor "" + option add *Radiobutton.selectColor "" return 1 } proc get_cde_params {} { - global w tk_version + global w # Set defaults for all the necessary things set bg [option get . background background] @@ -18244,15 +18266,13 @@ option add *Text.highlightBackground $bg # Menu checkboxes - if {$tk_version >= 8.5} { - # This makes it look like the native CDE checkbox - option add *Menu.selectColor $fg - option add *Checkbutton.offRelief sunken - option add *Checkbutton.selectColor "" - option add *Radiobutton.selectColor "" - option add *Checkbutton.activeBackground $bg - option add *Checkbutton.activeForeground $fg - } { option add *selectColor $w(selcolor) } + # This makes it look like the native CDE checkbox + option add *Menu.selectColor $fg + option add *Checkbutton.offRelief sunken + option add *Checkbutton.selectColor "" + option add *Radiobutton.selectColor "" + option add *Checkbutton.activeBackground $bg + option add *Checkbutton.activeForeground $fg # Suppress the border option add *HighlightThickness 0 userDefault @@ -18266,6 +18286,9 @@ proc get_aqua_params {} { global w + # No longer invoked as of Tk8.6 + # since it now uses the OS's lignt/dark themes appropriately + # Keep everything from being blinding white option add *Frame.background #ebebeb userDefault option add *Label.background #ebebeb userDefault