Merge branch 'master' into dev
authorPaul Mackerras <paulus@samba.org>
Tue, 23 Oct 2007 12:40:50 +0000 (22:40 +1000)
committerPaul Mackerras <paulus@samba.org>
Tue, 23 Oct 2007 12:40:50 +0000 (22:40 +1000)
1  2 
gitk

diff --cc gitk
index 951d39e21e30006906af61b41ac17ef9fb24e0ad,f41e30207bac7b21ae4305e7e20a0d52abacbd84..135511e9fb3e93a54ebb0301e3d15ddceba4ce38
--- 1/gitk
--- 2/gitk
+++ b/gitk
@@@ -5134,14 -4910,19 +5130,18 @@@ proc getblobline {bf id} 
  }
  
  proc mergediff {id l} {
 -    global diffmergeid diffopts mdifffd
 +    global diffmergeid mdifffd
      global diffids
      global parentlist
+     global limitdiffs viewfiles curview
  
      set diffmergeid $id
      set diffids $id
      # this doesn't seem to actually affect anything...
 -    set env(GIT_DIFF_OPTS) $diffopts
      set cmd [concat | git diff-tree --no-commit-id --cc $id]
+     if {$limitdiffs && $viewfiles($curview) ne {}} {
+       set cmd [concat $cmd -- $viewfiles($curview)]
+     }
      if {[catch {set mdf [open $cmd r]} err]} {
        error_popup "Error getting merge diffs: $err"
        return
@@@ -5347,11 -5148,17 +5369,16 @@@ proc diffcontextchange {n1 n2 op} 
  }
  
  proc getblobdiffs {ids} {
 -    global diffopts blobdifffd diffids env
 +    global blobdifffd diffids env
      global diffinhdr treediffs
      global diffcontext
+     global limitdiffs viewfiles curview
  
-     if {[catch {set bdf [open [diffcmd $ids "-p -C --no-commit-id -U$diffcontext"] r]} err]} {
 -    set env(GIT_DIFF_OPTS) $diffopts
+     set cmd [diffcmd $ids "-p -C --no-commit-id -U$diffcontext"]
+     if {$limitdiffs && $viewfiles($curview) ne {}} {
+       set cmd [concat $cmd -- $viewfiles($curview)]
+     }
+     if {[catch {set bdf [open $cmd r]} err]} {
        puts "error getting diffs: $err"
        return
      }
@@@ -6973,7 -6669,8 +6999,7 @@@ proc addnewchild {id p} 
      global arcnos arcids arctags arcout arcend arcstart archeads growing
      global seeds allcommits
  
-     if {![info exists allcommits]} return
+     if {![info exists allcommits] || ![info exists arcnos($p)]} return
 -    lappend allids $id
      set allparents($id) [list $p]
      set allchildren($id) {}
      set arcnos($id) {}
@@@ -7879,135 -7410,11 +7905,135 @@@ proc doquit {} 
      destroy .
  }
  
 +proc mkfontdisp {font top which} {
 +    global fontattr fontpref $font
 +
 +    set fontpref($font) [set $font]
 +    button $top.${font}but -text $which -font optionfont \
 +      -command [list choosefont $font $which]
 +    label $top.$font -relief flat -font $font \
 +      -text $fontattr($font,family) -justify left
 +    grid x $top.${font}but $top.$font -sticky w
 +}
 +
 +proc choosefont {font which} {
 +    global fontparam fontlist fonttop fontattr
 +
 +    set fontparam(which) $which
 +    set fontparam(font) $font
 +    set fontparam(family) [font actual $font -family]
 +    set fontparam(size) $fontattr($font,size)
 +    set fontparam(weight) $fontattr($font,weight)
 +    set fontparam(slant) $fontattr($font,slant)
 +    set top .gitkfont
 +    set fonttop $top
 +    if {![winfo exists $top]} {
 +      font create sample
 +      eval font config sample [font actual $font]
 +      toplevel $top
 +      wm title $top "Gitk font chooser"
 +      label $top.l -textvariable fontparam(which) -font uifont
 +      pack $top.l -side top
 +      set fontlist [lsort [font families]]
 +      frame $top.f
 +      listbox $top.f.fam -listvariable fontlist \
 +          -yscrollcommand [list $top.f.sb set]
 +      bind $top.f.fam <<ListboxSelect>> selfontfam
 +      scrollbar $top.f.sb -command [list $top.f.fam yview]
 +      pack $top.f.sb -side right -fill y
 +      pack $top.f.fam -side left -fill both -expand 1
 +      pack $top.f -side top -fill both -expand 1
 +      frame $top.g
 +      spinbox $top.g.size -from 4 -to 40 -width 4 \
 +          -textvariable fontparam(size) \
 +          -validatecommand {string is integer -strict %s}
 +      checkbutton $top.g.bold -padx 5 \
 +          -font {{Times New Roman} 12 bold} -text "B" -indicatoron 0 \
 +          -variable fontparam(weight) -onvalue bold -offvalue normal
 +      checkbutton $top.g.ital -padx 5 \
 +          -font {{Times New Roman} 12 italic} -text "I" -indicatoron 0  \
 +          -variable fontparam(slant) -onvalue italic -offvalue roman
 +      pack $top.g.size $top.g.bold $top.g.ital -side left
 +      pack $top.g -side top
 +      canvas $top.c -width 150 -height 50 -border 2 -relief sunk \
 +          -background white
 +      $top.c create text 100 25 -anchor center -text $which -font sample \
 +          -fill black -tags text
 +      bind $top.c <Configure> [list centertext $top.c]
 +      pack $top.c -side top -fill x
 +      frame $top.buts
 +      button $top.buts.ok -text "OK" -command fontok -default active \
 +          -font uifont
 +      button $top.buts.can -text "Cancel" -command fontcan -default normal \
 +          -font uifont
 +      grid $top.buts.ok $top.buts.can
 +      grid columnconfigure $top.buts 0 -weight 1 -uniform a
 +      grid columnconfigure $top.buts 1 -weight 1 -uniform a
 +      pack $top.buts -side bottom -fill x
 +      trace add variable fontparam write chg_fontparam
 +    } else {
 +      raise $top
 +      $top.c itemconf text -text $which
 +    }
 +    set i [lsearch -exact $fontlist $fontparam(family)]
 +    if {$i >= 0} {
 +      $top.f.fam selection set $i
 +      $top.f.fam see $i
 +    }
 +}
 +
 +proc centertext {w} {
 +    $w coords text [expr {[winfo width $w] / 2}] [expr {[winfo height $w] / 2}]
 +}
 +
 +proc fontok {} {
 +    global fontparam fontpref prefstop
 +
 +    set f $fontparam(font)
 +    set fontpref($f) [list $fontparam(family) $fontparam(size)]
 +    if {$fontparam(weight) eq "bold"} {
 +      lappend fontpref($f) "bold"
 +    }
 +    if {$fontparam(slant) eq "italic"} {
 +      lappend fontpref($f) "italic"
 +    }
 +    set w $prefstop.$f
 +    $w conf -text $fontparam(family) -font $fontpref($f)
 +      
 +    fontcan
 +}
 +
 +proc fontcan {} {
 +    global fonttop fontparam
 +
 +    if {[info exists fonttop]} {
 +      catch {destroy $fonttop}
 +      catch {font delete sample}
 +      unset fonttop
 +      unset fontparam
 +    }
 +}
 +
 +proc selfontfam {} {
 +    global fonttop fontparam
 +
 +    set i [$fonttop.f.fam curselection]
 +    if {$i ne {}} {
 +      set fontparam(family) [$fonttop.f.fam get $i]
 +    }
 +}
 +
 +proc chg_fontparam {v sub op} {
 +    global fontparam
 +
 +    font config sample -$sub $fontparam($sub)
 +}
 +
  proc doprefs {} {
 -    global maxwidth maxgraphpct diffopts
 +    global maxwidth maxgraphpct
      global oldprefs prefstop showneartags showlocalchanges
      global bgcolor fgcolor ctext diffcolors selectbgcolor
-     global uifont tabstop
+     global uifont tabstop limitdiffs
  
      set top .gitkprefs
      set prefstop $top
        raise $top
        return
      }
-     foreach v {maxwidth maxgraphpct showneartags showlocalchanges} {
 -    foreach v {maxwidth maxgraphpct diffopts showneartags showlocalchanges \
++    foreach v {maxwidth maxgraphpct showneartags showlocalchanges \
+                  limitdiffs tabstop} {
        set oldprefs($v) [set $v]
      }
      toplevel $top
      grid x $top.showlocal -sticky w
  
      label $top.ddisp -text "Diff display options"
 -    $top.ddisp configure -font $uifont
 +    $top.ddisp configure -font uifont
      grid $top.ddisp - -sticky w -pady 10
 -    label $top.diffoptl -text "Options for diff program" \
 -      -font optionfont
 -    entry $top.diffopt -width 20 -textvariable diffopts
 -    grid x $top.diffoptl $top.diffopt -sticky w
+     label $top.tabstopl -text "Tab spacing" -font optionfont
+     spinbox $top.tabstop -from 1 -to 20 -width 4 -textvariable tabstop
+     grid x $top.tabstopl $top.tabstop -sticky w
      frame $top.ntag
      label $top.ntag.l -text "Display nearby tags" -font optionfont
      checkbutton $top.ntag.b -variable showneartags
      pack $top.ntag.b $top.ntag.l -side left
      grid x $top.ntag -sticky w
-     label $top.tabstopl -text "tabstop" -font optionfont
-     spinbox $top.tabstop -from 1 -to 20 -width 4 -textvariable tabstop
-     grid x $top.tabstopl $top.tabstop -sticky w
+     frame $top.ldiff
+     label $top.ldiff.l -text "Limit diffs to listed paths" -font optionfont
+     checkbutton $top.ldiff.b -variable limitdiffs
+     pack $top.ldiff.b $top.ldiff.l -side left
+     grid x $top.ldiff -sticky w
  
      label $top.cdisp -text "Colors: press to choose"
 -    $top.cdisp configure -font $uifont
 +    $top.cdisp configure -font uifont
      grid $top.cdisp - -sticky w -pady 10
      label $top.bg -padx 40 -relief sunk -background $bgcolor
      button $top.bgbut -text "Background" -font optionfont \
@@@ -8141,10 -7551,11 +8173,11 @@@ proc setfg {c} 
  }
  
  proc prefscan {} {
-     global maxwidth maxgraphpct
-     global oldprefs prefstop showneartags showlocalchanges
+     global oldprefs prefstop
  
-     foreach v {maxwidth maxgraphpct showneartags showlocalchanges} {
 -    foreach v {maxwidth maxgraphpct diffopts showneartags showlocalchanges \
++    foreach v {maxwidth maxgraphpct showneartags showlocalchanges \
+                  limitdiffs tabstop} {
+       global $v
        set $v $oldprefs($v)
      }
      catch {destroy $prefstop}
  proc prefsok {} {
      global maxwidth maxgraphpct
      global oldprefs prefstop showneartags showlocalchanges
 -    global charspc ctext tabstop limitdiffs
 +    global fontpref mainfont textfont uifont
++    global limitdiffs
  
      catch {destroy $prefstop}
      unset prefstop
            dohidelocalchanges
        }
      }
 -    if {$maxwidth != $oldprefs(maxwidth)
 +    if {$fontchanged || $maxwidth != $oldprefs(maxwidth)
        || $maxgraphpct != $oldprefs(maxgraphpct)} {
        redisplay
-     } elseif {$showneartags != $oldprefs(showneartags)} {
+     } elseif {$showneartags != $oldprefs(showneartags) ||
+         $limitdiffs != $oldprefs(limitdiffs)} {
        reselectline
      }
  }
@@@ -8477,8 -7867,16 +8512,15 @@@ proc tcl_encoding {enc} 
      return {}
  }
  
+ # First check that Tcl/Tk is recent enough
+ if {[catch {package require Tk 8.4} err]} {
+     show_error {} . "Sorry, gitk cannot run with this version of Tcl/Tk.\n\
+                    Gitk requires at least Tcl/Tk 8.4."
+     exit 1
+ }
  # defaults...
  set datemode 0
 -set diffopts "-U 5 -p"
  set wrcomcmd "git diff-tree --stdin -p --pretty"
  
  set gitencoding {}