index 0e95d9d71107a6385cbb570c98ebee38e3c41ee7..ff4d6f847914bd62581022a7a949b54f054bdca7 100755 (executable)
--- a/gitk
+++ b/gitk
while 1 {
set i [string first "\0" $stuff $start]
if {$i < 0} {
while 1 {
set i [string first "\0" $stuff $start]
if {$i < 0} {
- set leftover [string range $stuff $start end]
+ append leftover [string range $stuff $start end]
return
}
set cmit [string range $stuff $start [expr {$i - 1}]]
if {$start == 0} {
set cmit "$leftover$cmit"
return
}
set cmit [string range $stuff $start [expr {$i - 1}]]
if {$start == 0} {
set cmit "$leftover$cmit"
+ set leftover {}
}
set start [expr {$i + 1}]
if {![regexp {^([0-9a-f]{40})\n} $cmit match id]} {
}
set start [expr {$i + 1}]
if {![regexp {^([0-9a-f]{40})\n} $cmit match id]} {
- error_popup "Can't parse git-rev-list output: {$cmit}"
+ set shortcmit $cmit
+ if {[string length $shortcmit] > 80} {
+ set shortcmit "[string range $shortcmit 0 80]..."
+ }
+ error_popup "Can't parse git-rev-list output: {$shortcmit}"
exit 1
}
set cmit [string range $cmit 41 end]
exit 1
}
set cmit [string range $cmit 41 end]
$rowctxmenu add command -label "Diff selected -> this" \
-command {diffvssel 1}
$rowctxmenu add command -label "Make patch" -command mkpatch
$rowctxmenu add command -label "Diff selected -> this" \
-command {diffvssel 1}
$rowctxmenu add command -label "Make patch" -command mkpatch
+ $rowctxmenu add command -label "Create tag" -command mktag
}
# when we make a key binding for the toplevel, make sure
}
# when we make a key binding for the toplevel, make sure
global oldlevel oldnlines oldtodo
global idtags idline idheads
global lineno lthickness mainline sidelines
global oldlevel oldnlines oldtodo
global idtags idline idheads
global lineno lthickness mainline sidelines
- global commitlisted rowtextx
+ global commitlisted rowtextx idpos
incr numcommits
incr lineno
incr numcommits
incr lineno
set xt [expr {$xt + ([llength $currentparents] - 2) * $linespc}]
}
set rowtextx($lineno) $xt
set xt [expr {$xt + ([llength $currentparents] - 2) * $linespc}]
}
set rowtextx($lineno) $xt
- set marks {}
- set ntags 0
- if {[info exists idtags($id)]} {
- set marks $idtags($id)
- set ntags [llength $marks]
- }
- if {[info exists idheads($id)]} {
- set marks [concat $marks $idheads($id)]
- }
- if {$marks != {}} {
- set delta [expr {int(0.5 * ($linespc - $lthickness))}]
- set yt [expr $y1 - 0.5 * $linespc]
- set yb [expr $yt + $linespc - 1]
- set xvals {}
- set wvals {}
- foreach tag $marks {
- set wid [font measure $mainfont $tag]
- lappend xvals $xt
- lappend wvals $wid
- set xt [expr {$xt + $delta + $wid + $lthickness + $linespc}]
- }
- set t [$canv create line $x $y1 [lindex $xvals end] $y1 \
- -width $lthickness -fill black]
- $canv lower $t
- foreach tag $marks x $xvals wid $wvals {
- set xl [expr $x + $delta]
- set xr [expr $x + $delta + $wid + $lthickness]
- if {[incr ntags -1] >= 0} {
- # draw a tag
- $canv create polygon $x [expr $yt + $delta] $xl $yt\
- $xr $yt $xr $yb $xl $yb $x [expr $yb - $delta] \
- -width 1 -outline black -fill yellow
- } else {
- # draw a head
- set xl [expr $xl - $delta/2]
- $canv create polygon $x $yt $xr $yt $xr $yb $x $yb \
- -width 1 -outline black -fill green
- }
- $canv create text $xl $y1 -anchor w -text $tag \
- -font $mainfont
- }
+ set idpos($id) [list $x $xt $y1]
+ if {[info exists idtags($id)] || [info exists idheads($id)]} {
+ set xt [drawtags $id $x $xt $y1]
}
set headline [lindex $commitinfo($id) 0]
set name [lindex $commitinfo($id) 1]
}
set headline [lindex $commitinfo($id) 0]
set name [lindex $commitinfo($id) 1]
-text $date -font $mainfont]
}
-text $date -font $mainfont]
}
+proc drawtags {id x xt y1} {
+ global idtags idheads
+ global linespc lthickness
+ global canv mainfont
+
+ set marks {}
+ set ntags 0
+ if {[info exists idtags($id)]} {
+ set marks $idtags($id)
+ set ntags [llength $marks]
+ }
+ if {[info exists idheads($id)]} {
+ set marks [concat $marks $idheads($id)]
+ }
+ if {$marks eq {}} {
+ return $xt
+ }
+
+ set delta [expr {int(0.5 * ($linespc - $lthickness))}]
+ set yt [expr $y1 - 0.5 * $linespc]
+ set yb [expr $yt + $linespc - 1]
+ set xvals {}
+ set wvals {}
+ foreach tag $marks {
+ set wid [font measure $mainfont $tag]
+ lappend xvals $xt
+ lappend wvals $wid
+ set xt [expr {$xt + $delta + $wid + $lthickness + $linespc}]
+ }
+ set t [$canv create line $x $y1 [lindex $xvals end] $y1 \
+ -width $lthickness -fill black -tags tag.$id]
+ $canv lower $t
+ foreach tag $marks x $xvals wid $wvals {
+ set xl [expr $x + $delta]
+ set xr [expr $x + $delta + $wid + $lthickness]
+ if {[incr ntags -1] >= 0} {
+ # draw a tag
+ $canv create polygon $x [expr $yt + $delta] $xl $yt\
+ $xr $yt $xr $yb $xl $yb $x [expr $yb - $delta] \
+ -width 1 -outline black -fill yellow -tags tag.$id
+ } else {
+ # draw a head
+ set xl [expr $xl - $delta/2]
+ $canv create polygon $x $yt $xr $yt $xr $yb $x $yb \
+ -width 1 -outline black -fill green -tags tag.$id
+ }
+ $canv create text $xl $y1 -anchor w -text $tag \
+ -font $mainfont -tags tag.$id
+ }
+ return $xt
+}
+
proc updatetodo {level noshortcut} {
global currentparents ncleft todo
global mainline oldlevel oldtodo oldnlines
proc updatetodo {level noshortcut} {
global currentparents ncleft todo
global mainline oldlevel oldtodo oldnlines
entry $top.fname -width 60
$top.fname insert 0 [file normalize "patch$patchnum.patch"]
incr patchnum
entry $top.fname -width 60
$top.fname insert 0 [file normalize "patch$patchnum.patch"]
incr patchnum
- grid $top.flab $top.fname
+ grid $top.flab $top.fname -sticky w
frame $top.buts
button $top.buts.gen -text "Generate" -command mkpatchgo
button $top.buts.can -text "Cancel" -command mkpatchcan
frame $top.buts
button $top.buts.gen -text "Generate" -command mkpatchgo
button $top.buts.can -text "Cancel" -command mkpatchcan
grid columnconfigure $top.buts 0 -weight 1 -uniform a
grid columnconfigure $top.buts 1 -weight 1 -uniform a
grid $top.buts - -pady 10 -sticky ew
grid columnconfigure $top.buts 0 -weight 1 -uniform a
grid columnconfigure $top.buts 1 -weight 1 -uniform a
grid $top.buts - -pady 10 -sticky ew
+ focus $top.fname
}
proc mkpatchrev {} {
}
proc mkpatchrev {} {
unset patchtop
}
unset patchtop
}
+proc mktag {} {
+ global rowmenuid mktagtop commitinfo
+
+ set top .maketag
+ set mktagtop $top
+ catch {destroy $top}
+ toplevel $top
+ label $top.title -text "Create tag"
+ grid $top.title -
+ label $top.id -text "ID:"
+ entry $top.sha1 -width 40
+ $top.sha1 insert 0 $rowmenuid
+ $top.sha1 conf -state readonly
+ grid $top.id $top.sha1 -sticky w
+ entry $top.head -width 40
+ $top.head insert 0 [lindex $commitinfo($rowmenuid) 0]
+ $top.head conf -state readonly
+ grid x $top.head -sticky w
+ label $top.tlab -text "Tag name:"
+ entry $top.tag -width 40
+ grid $top.tlab $top.tag -sticky w
+ frame $top.buts
+ button $top.buts.gen -text "Create" -command mktaggo
+ button $top.buts.can -text "Cancel" -command mktagcan
+ grid $top.buts.gen $top.buts.can
+ grid columnconfigure $top.buts 0 -weight 1 -uniform a
+ grid columnconfigure $top.buts 1 -weight 1 -uniform a
+ grid $top.buts - -pady 10 -sticky ew
+ focus $top.tag
+}
+
+proc domktag {} {
+ global mktagtop env tagids idtags
+ global idpos idline linehtag canv selectedline
+
+ set id [$mktagtop.sha1 get]
+ set tag [$mktagtop.tag get]
+ if {$tag == {}} {
+ error_popup "No tag name specified"
+ return
+ }
+ if {[info exists tagids($tag)]} {
+ error_popup "Tag \"$tag\" already exists"
+ return
+ }
+ if {[catch {
+ set dir ".git"
+ if {[info exists env(GIT_DIR)]} {
+ set dir $env(GIT_DIR)
+ }
+ set fname [file join $dir "refs/tags" $tag]
+ set f [open $fname w]
+ puts $f $id
+ close $f
+ } err]} {
+ error_popup "Error creating tag: $err"
+ return
+ }
+
+ set tagids($tag) $id
+ lappend idtags($id) $tag
+ $canv delete tag.$id
+ set xt [eval drawtags $id $idpos($id)]
+ $canv coords $linehtag($idline($id)) $xt [lindex $idpos($id) 2]
+ if {[info exists selectedline] && $selectedline == $idline($id)} {
+ selectline $selectedline
+ }
+}
+
+proc mktagcan {} {
+ global mktagtop
+
+ catch {destroy $mktagtop}
+ unset mktagtop
+}
+
+proc mktaggo {} {
+ domktag
+ mktagcan
+}
+
proc doquit {} {
global stopped
set stopped 100
proc doquit {} {
global stopped
set stopped 100