Merge branch 'master' into new

Conflicts:

	gitk
This commit is contained in:
Paul Mackerras 2006-05-30 21:35:07 +10:00
commit 96535e615d

84
gitk
View File

@ -34,10 +34,10 @@ proc start_rev_list {view} {
set order "--date-order" set order "--date-order"
} }
if {[catch { if {[catch {
set fd [open [concat | git-rev-list --header $order \ set fd [open [concat | git rev-list --header $order \
--parents --boundary --default HEAD $args] r] --parents --boundary --default HEAD $args] r]
} err]} { } err]} {
puts stderr "Error executing git-rev-list: $err" puts stderr "Error executing git rev-list: $err"
exit 1 exit 1
} }
set commfd($view) $fd set commfd($view) $fd
@ -94,10 +94,10 @@ proc getcommitlines {fd view} {
} }
if {[string range $err 0 4] == "usage"} { if {[string range $err 0 4] == "usage"} {
set err "Gitk: error reading commits$fv:\ set err "Gitk: error reading commits$fv:\
bad arguments to git-rev-list." bad arguments to git rev-list."
if {$viewname($view) eq "Command line"} { if {$viewname($view) eq "Command line"} {
append err \ append err \
" (Note: arguments to gitk are passed to git-rev-list\ " (Note: arguments to gitk are passed to git rev-list\
to allow selection of commits to be displayed.)" to allow selection of commits to be displayed.)"
} }
} else { } else {
@ -148,7 +148,7 @@ proc getcommitlines {fd view} {
if {[string length $shortcmit] > 80} { if {[string length $shortcmit] > 80} {
set shortcmit "[string range $shortcmit 0 80]..." set shortcmit "[string range $shortcmit 0 80]..."
} }
error_popup "Can't parse git-rev-list output: {$shortcmit}" error_popup "Can't parse git rev-list output: {$shortcmit}"
exit 1 exit 1
} }
set id [lindex $ids 0] set id [lindex $ids 0]
@ -217,7 +217,7 @@ proc doupdate {} {
} }
proc readcommit {id} { proc readcommit {id} {
if {[catch {set contents [exec git-cat-file commit $id]}]} return if {[catch {set contents [exec git cat-file commit $id]}]} return
parsecommit $id $contents 0 parsecommit $id $contents 0
} }
@ -278,8 +278,8 @@ proc parsecommit {id contents listed} {
set headline $comment set headline $comment
} }
if {!$listed} { if {!$listed} {
# git-rev-list indents the comment by 4 spaces; # git rev-list indents the comment by 4 spaces;
# if we got this via git-cat-file, add the indentation # if we got this via git cat-file, add the indentation
set newcomment {} set newcomment {}
foreach line [split $comment "\n"] { foreach line [split $comment "\n"] {
append newcomment " " append newcomment " "
@ -339,14 +339,14 @@ proc readrefs {} {
set type {} set type {}
set tag {} set tag {}
catch { catch {
set commit [exec git-rev-parse "$id^0"] set commit [exec git rev-parse "$id^0"]
if {"$commit" != "$id"} { if {"$commit" != "$id"} {
set tagids($name) $commit set tagids($name) $commit
lappend idtags($commit) $name lappend idtags($commit) $name
} }
} }
catch { catch {
set tagcontents($name) [exec git-cat-file tag "$id"] set tagcontents($name) [exec git cat-file tag "$id"]
} }
} elseif { $type == "heads" } { } elseif { $type == "heads" } {
set headids($name) $id set headids($name) $id
@ -359,21 +359,21 @@ proc readrefs {} {
close $refd close $refd
} }
proc show_error {w msg} { proc show_error {w top msg} {
message $w.m -text $msg -justify center -aspect 400 message $w.m -text $msg -justify center -aspect 400
pack $w.m -side top -fill x -padx 20 -pady 20 pack $w.m -side top -fill x -padx 20 -pady 20
button $w.ok -text OK -command "destroy $w" button $w.ok -text OK -command "destroy $top"
pack $w.ok -side bottom -fill x pack $w.ok -side bottom -fill x
bind $w <Visibility> "grab $w; focus $w" bind $top <Visibility> "grab $top; focus $top"
bind $w <Key-Return> "destroy $w" bind $top <Key-Return> "destroy $top"
tkwait window $w tkwait window $top
} }
proc error_popup msg { proc error_popup msg {
set w .error set w .error
toplevel $w toplevel $w
wm transient $w . wm transient $w .
show_error $w $msg show_error $w $w $msg
} }
proc makewindow {} { proc makewindow {} {
@ -382,7 +382,7 @@ proc makewindow {} {
global findtype findtypemenu findloc findstring fstring geometry global findtype findtypemenu findloc findstring fstring geometry
global entries sha1entry sha1string sha1but global entries sha1entry sha1string sha1but
global maincursor textcursor curtextcursor global maincursor textcursor curtextcursor
global rowctxmenu mergemax global rowctxmenu mergemax wrapcomment
global highlight_files gdttype global highlight_files gdttype
global searchstring sstring global searchstring sstring
@ -570,6 +570,7 @@ proc makewindow {} {
pack $ctext -side left -fill both -expand 1 pack $ctext -side left -fill both -expand 1
.ctop.cdet add .ctop.cdet.left .ctop.cdet add .ctop.cdet.left
$ctext tag conf comment -wrap $wrapcomment
$ctext tag conf filesep -font [concat $textfont bold] -back "#aaaaaa" $ctext tag conf filesep -font [concat $textfont bold] -back "#aaaaaa"
$ctext tag conf hunksep -fore blue $ctext tag conf hunksep -fore blue
$ctext tag conf d0 -fore red $ctext tag conf d0 -fore red
@ -744,7 +745,7 @@ proc savestuff {w} {
global stuffsaved findmergefiles maxgraphpct global stuffsaved findmergefiles maxgraphpct
global maxwidth global maxwidth
global viewname viewfiles viewargs viewperm nextviewnum global viewname viewfiles viewargs viewperm nextviewnum
global cmitmode global cmitmode wrapcomment
if {$stuffsaved} return if {$stuffsaved} return
if {![winfo viewable .]} return if {![winfo viewable .]} return
@ -757,6 +758,7 @@ proc savestuff {w} {
puts $f [list set maxgraphpct $maxgraphpct] puts $f [list set maxgraphpct $maxgraphpct]
puts $f [list set maxwidth $maxwidth] puts $f [list set maxwidth $maxwidth]
puts $f [list set cmitmode $cmitmode] puts $f [list set cmitmode $cmitmode]
puts $f [list set wrapcomment $wrapcomment]
puts $f "set geometry(width) [winfo width .ctop]" puts $f "set geometry(width) [winfo width .ctop]"
puts $f "set geometry(height) [winfo height .ctop]" puts $f "set geometry(height) [winfo height .ctop]"
puts $f "set geometry(canv1) [expr {[winfo width $canv]-2}]" puts $f "set geometry(canv1) [expr {[winfo width $canv]-2}]"
@ -1388,7 +1390,7 @@ proc vieweditor {top n title} {
checkbutton $top.perm -text "Remember this view" -variable newviewperm($n) checkbutton $top.perm -text "Remember this view" -variable newviewperm($n)
grid $top.perm - -pady 5 -sticky w grid $top.perm - -pady 5 -sticky w
message $top.al -aspect 1000 -font $uifont \ message $top.al -aspect 1000 -font $uifont \
-text "Commits to include (arguments to git-rev-list):" -text "Commits to include (arguments to git rev-list):"
grid $top.al - -sticky w -pady 5 grid $top.al - -sticky w -pady 5
entry $top.args -width 50 -textvariable newviewargs($n) \ entry $top.args -width 50 -textvariable newviewargs($n) \
-background white -background white
@ -3526,11 +3528,11 @@ proc commit_descriptor {p} {
# append some text to the ctext widget, and make any SHA1 ID # append some text to the ctext widget, and make any SHA1 ID
# that we know about be a clickable link. # that we know about be a clickable link.
proc appendwithlinks {text} { proc appendwithlinks {text tags} {
global ctext commitrow linknum curview global ctext commitrow linknum curview
set start [$ctext index "end - 1c"] set start [$ctext index "end - 1c"]
$ctext insert end $text $ctext insert end $text $tags
$ctext insert end "\n" $ctext insert end "\n"
set links [regexp -indices -all -inline {[0-9a-f]{40}} $text] set links [regexp -indices -all -inline {[0-9a-f]{40}} $text]
foreach l $links { foreach l $links {
@ -3660,7 +3662,7 @@ proc selectline {l isnew} {
$ctext insert end "\n" $ctext insert end "\n"
} }
set comment {} set headers {}
set olds [lindex $parentlist $l] set olds [lindex $parentlist $l]
if {[llength $olds] > 1} { if {[llength $olds] > 1} {
set np 0 set np 0
@ -3671,23 +3673,22 @@ proc selectline {l isnew} {
set tag m$np set tag m$np
} }
$ctext insert end "Parent: " $tag $ctext insert end "Parent: " $tag
appendwithlinks [commit_descriptor $p] appendwithlinks [commit_descriptor $p] {}
incr np incr np
} }
} else { } else {
foreach p $olds { foreach p $olds {
append comment "Parent: [commit_descriptor $p]\n" append headers "Parent: [commit_descriptor $p]\n"
} }
} }
foreach c [lindex $childlist $l] { foreach c [lindex $childlist $l] {
append comment "Child: [commit_descriptor $c]\n" append headers "Child: [commit_descriptor $c]\n"
} }
append comment "\n"
append comment [lindex $info 5]
# make anything that looks like a SHA1 ID be a clickable link # make anything that looks like a SHA1 ID be a clickable link
appendwithlinks $comment appendwithlinks $headers {}
appendwithlinks [lindex $info 5] {comment}
$ctext tag delete Comments $ctext tag delete Comments
$ctext tag remove found 1.0 end $ctext tag remove found 1.0 end
@ -3830,7 +3831,7 @@ proc gettree {id} {
catch {unset diffmergeid} catch {unset diffmergeid}
if {![info exists treefilelist($id)]} { if {![info exists treefilelist($id)]} {
if {![info exists treepending]} { if {![info exists treepending]} {
if {[catch {set gtf [open [concat | git-ls-tree -r $id] r]}]} { if {[catch {set gtf [open [concat | git ls-tree -r $id] r]}]} {
return return
} }
set treepending $id set treepending $id
@ -3878,7 +3879,7 @@ proc showfile {f} {
return return
} }
set blob [lindex $treeidlist($diffids) $i] set blob [lindex $treeidlist($diffids) $i]
if {[catch {set bf [open [concat | git-cat-file blob $blob] r]} err]} { if {[catch {set bf [open [concat | git cat-file blob $blob] r]} err]} {
puts "oops, error reading blob $blob: $err" puts "oops, error reading blob $blob: $err"
return return
} }
@ -3920,7 +3921,7 @@ proc mergediff {id l} {
set diffids $id set diffids $id
# this doesn't seem to actually affect anything... # this doesn't seem to actually affect anything...
set env(GIT_DIFF_OPTS) $diffopts set env(GIT_DIFF_OPTS) $diffopts
set cmd [concat | git-diff-tree --no-commit-id --cc $id] set cmd [concat | git diff-tree --no-commit-id --cc $id]
if {[catch {set mdf [open $cmd r]} err]} { if {[catch {set mdf [open $cmd r]} err]} {
error_popup "Error getting merge diffs: $err" error_popup "Error getting merge diffs: $err"
return return
@ -4032,7 +4033,7 @@ proc gettreediffs {ids} {
set treepending $ids set treepending $ids
set treediff {} set treediff {}
if {[catch \ if {[catch \
{set gdtf [open [concat | git-diff-tree --no-commit-id -r $ids] r]} \ {set gdtf [open [concat | git diff-tree --no-commit-id -r $ids] r]} \
]} return ]} return
fconfigure $gdtf -blocking 0 fconfigure $gdtf -blocking 0
fileevent $gdtf readable [list gettreediffline $gdtf $ids] fileevent $gdtf readable [list gettreediffline $gdtf $ids]
@ -4068,7 +4069,7 @@ proc getblobdiffs {ids} {
global nextupdate diffinhdr treediffs global nextupdate diffinhdr treediffs
set env(GIT_DIFF_OPTS) $diffopts set env(GIT_DIFF_OPTS) $diffopts
set cmd [concat | git-diff-tree --no-commit-id -r -p -C $ids] set cmd [concat | git diff-tree --no-commit-id -r -p -C $ids]
if {[catch {set bdf [open $cmd r]} err]} { if {[catch {set bdf [open $cmd r]} err]} {
puts "error getting diffs: $err" puts "error getting diffs: $err"
return return
@ -4737,7 +4738,7 @@ proc mkpatchgo {} {
set oldid [$patchtop.fromsha1 get] set oldid [$patchtop.fromsha1 get]
set newid [$patchtop.tosha1 get] set newid [$patchtop.tosha1 get]
set fname [$patchtop.fname get] set fname [$patchtop.fname get]
if {[catch {exec git-diff-tree -p $oldid $newid >$fname &} err]} { if {[catch {exec git diff-tree -p $oldid $newid >$fname &} err]} {
error_popup "Error creating patch: $err" error_popup "Error creating patch: $err"
} }
catch {destroy $patchtop} catch {destroy $patchtop}
@ -4945,7 +4946,7 @@ proc showtag {tag isnew} {
} else { } else {
set text "Tag: $tag\nId: $tagids($tag)" set text "Tag: $tag\nId: $tagids($tag)"
} }
appendwithlinks $text appendwithlinks $text {}
$ctext conf -state disabled $ctext conf -state disabled
init_flist {} init_flist {}
} }
@ -5300,11 +5301,11 @@ proc tcl_encoding {enc} {
# defaults... # defaults...
set datemode 0 set datemode 0
set diffopts "-U 5 -p" set diffopts "-U 5 -p"
set wrcomcmd "git-diff-tree --stdin -p --pretty" set wrcomcmd "git diff-tree --stdin -p --pretty"
set gitencoding {} set gitencoding {}
catch { catch {
set gitencoding [exec git-repo-config --get i18n.commitencoding] set gitencoding [exec git repo-config --get i18n.commitencoding]
} }
if {$gitencoding == ""} { if {$gitencoding == ""} {
set gitencoding "utf-8" set gitencoding "utf-8"
@ -5326,6 +5327,7 @@ set uparrowlen 7
set downarrowlen 7 set downarrowlen 7
set mingaplen 30 set mingaplen 30
set cmitmode "patch" set cmitmode "patch"
set wrapcomment "none"
set colors {green red blue magenta darkgrey brown orange} set colors {green red blue magenta darkgrey brown orange}
@ -5347,7 +5349,7 @@ foreach arg $argv {
# check that we can find a .git directory somewhere... # check that we can find a .git directory somewhere...
set gitdir [gitdir] set gitdir [gitdir]
if {![file isdirectory $gitdir]} { if {![file isdirectory $gitdir]} {
show_error . "Cannot find the git directory \"$gitdir\"." show_error {} . "Cannot find the git directory \"$gitdir\"."
exit 1 exit 1
} }
@ -5358,7 +5360,7 @@ if {$i >= 0} {
set revtreeargs [lrange $revtreeargs 0 [expr {$i - 1}]] set revtreeargs [lrange $revtreeargs 0 [expr {$i - 1}]]
} elseif {$revtreeargs ne {}} { } elseif {$revtreeargs ne {}} {
if {[catch { if {[catch {
set f [eval exec git-rev-parse --no-revs --no-flags $revtreeargs] set f [eval exec git rev-parse --no-revs --no-flags $revtreeargs]
set cmdline_files [split $f "\n"] set cmdline_files [split $f "\n"]
set n [llength $cmdline_files] set n [llength $cmdline_files]
set revtreeargs [lrange $revtreeargs 0 end-$n] set revtreeargs [lrange $revtreeargs 0 end-$n]
@ -5367,9 +5369,9 @@ if {$i >= 0} {
# so look for "fatal:". # so look for "fatal:".
set i [string first "fatal:" $err] set i [string first "fatal:" $err]
if {$i > 0} { if {$i > 0} {
set err [string range [expr {$i + 6}] end] set err [string range $err [expr {$i + 6}] end]
} }
show_error . "Bad arguments to gitk:\n$err" show_error {} . "Bad arguments to gitk:\n$err"
exit 1 exit 1
} }
} }