Browse Source

Add a menu item for creating tags.

maint
Paul Mackerras 20 years ago
parent
commit
bdbfbe3dc9
  1. 133
      gitk

133
gitk

@ -425,6 +425,7 @@ proc makewindow {} { @@ -425,6 +425,7 @@ proc makewindow {} {
$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
@ -671,7 +672,7 @@ proc drawcommitline {level} { @@ -671,7 +672,7 @@ proc drawcommitline {level} {
global oldlevel oldnlines oldtodo
global idtags idline idheads
global lineno lthickness mainline sidelines
global commitlisted rowtextx
global commitlisted rowtextx idpos

incr numcommits
incr lineno
@ -732,6 +733,27 @@ proc drawcommitline {level} { @@ -732,6 +733,27 @@ proc drawcommitline {level} {
set xt [expr {$xt + ([llength $currentparents] - 2) * $linespc}]
}
set rowtextx($lineno) $xt
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 date [lindex $commitinfo($id) 2]
set linehtag($lineno) [$canv create text $xt $y1 -anchor w \
-text $headline -font $mainfont ]
$canv bind $linehtag($lineno) <Button-3> "rowmenu %X %Y $id"
set linentag($lineno) [$canv2 create text 3 $y1 -anchor w \
-text $name -font $namefont]
set linedtag($lineno) [$canv3 create text 3 $y1 -anchor w \
-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)]} {
@ -741,7 +763,10 @@ proc drawcommitline {level} { @@ -741,7 +763,10 @@ proc drawcommitline {level} {
if {[info exists idheads($id)]} {
set marks [concat $marks $idheads($id)]
}
if {$marks != {}} {
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]
@ -754,7 +779,7 @@ proc drawcommitline {level} { @@ -754,7 +779,7 @@ proc drawcommitline {level} {
set xt [expr {$xt + $delta + $wid + $lthickness + $linespc}]
}
set t [$canv create line $x $y1 [lindex $xvals end] $y1 \
-width $lthickness -fill black]
-width $lthickness -fill black -tags tag.$id]
$canv lower $t
foreach tag $marks x $xvals wid $wvals {
set xl [expr $x + $delta]
@ -763,27 +788,17 @@ proc drawcommitline {level} { @@ -763,27 +788,17 @@ proc drawcommitline {level} {
# 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
-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
-width 1 -outline black -fill green -tags tag.$id
}
$canv create text $xl $y1 -anchor w -text $tag \
-font $mainfont
}
-font $mainfont -tags tag.$id
}
set headline [lindex $commitinfo($id) 0]
set name [lindex $commitinfo($id) 1]
set date [lindex $commitinfo($id) 2]
set linehtag($lineno) [$canv create text $xt $y1 -anchor w \
-text $headline -font $mainfont ]
$canv bind $linehtag($lineno) <Button-3> "rowmenu %X %Y $id"
set linentag($lineno) [$canv2 create text 3 $y1 -anchor w \
-text $name -font $namefont]
set linedtag($lineno) [$canv3 create text 3 $y1 -anchor w \
-text $date -font $mainfont]
return $xt
}

proc updatetodo {level noshortcut} {
@ -1831,7 +1846,7 @@ proc mkpatch {} { @@ -1831,7 +1846,7 @@ proc mkpatch {} {
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
@ -1839,6 +1854,7 @@ proc mkpatch {} { @@ -1839,6 +1854,7 @@ proc mkpatch {} {
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 {} {
@ -1877,6 +1893,87 @@ proc mkpatchcan {} { @@ -1877,6 +1893,87 @@ proc mkpatchcan {} {
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

Loading…
Cancel
Save