gitk: Add a row context-menu item for creating a new branch
Signed-off-by: Paul Mackerras <paulus@samba.org>
This commit is contained in:
parent
cec7bece83
commit
d6ac1a86e9
80
gitk
80
gitk
@ -711,6 +711,7 @@ proc makewindow {} {
|
||||
$rowctxmenu add command -label "Make patch" -command mkpatch
|
||||
$rowctxmenu add command -label "Create tag" -command mktag
|
||||
$rowctxmenu add command -label "Write commit to file" -command writecommit
|
||||
$rowctxmenu add command -label "Create new branch" -command mkbranch
|
||||
}
|
||||
|
||||
# mouse-2 makes all windows scan vertically, but only the one
|
||||
@ -5018,6 +5019,61 @@ proc wrcomcan {} {
|
||||
unset wrcomtop
|
||||
}
|
||||
|
||||
proc mkbranch {} {
|
||||
global rowmenuid mkbrtop
|
||||
|
||||
set top .makebranch
|
||||
catch {destroy $top}
|
||||
toplevel $top
|
||||
label $top.title -text "Create new branch"
|
||||
grid $top.title - -pady 10
|
||||
label $top.id -text "ID:"
|
||||
entry $top.sha1 -width 40 -relief flat
|
||||
$top.sha1 insert 0 $rowmenuid
|
||||
$top.sha1 conf -state readonly
|
||||
grid $top.id $top.sha1 -sticky w
|
||||
label $top.nlab -text "Name:"
|
||||
entry $top.name -width 40
|
||||
grid $top.nlab $top.name -sticky w
|
||||
frame $top.buts
|
||||
button $top.buts.go -text "Create" -command [list mkbrgo $top]
|
||||
button $top.buts.can -text "Cancel" -command "catch {destroy $top}"
|
||||
grid $top.buts.go $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.name
|
||||
}
|
||||
|
||||
proc mkbrgo {top} {
|
||||
global headids idheads
|
||||
|
||||
set name [$top.name get]
|
||||
set id [$top.sha1 get]
|
||||
if {$name eq {}} {
|
||||
error_popup "Please specify a name for the new branch"
|
||||
return
|
||||
}
|
||||
catch {destroy $top}
|
||||
nowbusy newbranch
|
||||
update
|
||||
if {[catch {
|
||||
exec git branch $name $id
|
||||
} err]} {
|
||||
notbusy newbranch
|
||||
error_popup $err
|
||||
} else {
|
||||
set headids($name) $id
|
||||
if {![info exists idheads($id)]} {
|
||||
addedhead $id
|
||||
}
|
||||
lappend idheads($id) $name
|
||||
# XXX should update list of heads displayed for selected commit
|
||||
notbusy newbranch
|
||||
redrawtags $id
|
||||
}
|
||||
}
|
||||
|
||||
# Stuff for finding nearby tags
|
||||
proc getallcommits {} {
|
||||
global allcstart allcommits allcfd allids
|
||||
@ -5218,6 +5274,30 @@ proc restartatags {} {
|
||||
dispneartags
|
||||
}
|
||||
|
||||
# update the desc_heads array for a new head just added
|
||||
proc addedhead {hid} {
|
||||
global desc_heads allparents
|
||||
|
||||
set todo [list $hid]
|
||||
while {$todo ne {}} {
|
||||
set do [lindex $todo 0]
|
||||
set todo [lrange $todo 1 end]
|
||||
if {![info exists desc_heads($do)] ||
|
||||
[lsearch -exact $desc_heads($do) $hid] >= 0} continue
|
||||
set oldheads $desc_heads($do)
|
||||
lappend desc_heads($do) $hid
|
||||
set heads $desc_heads($do)
|
||||
while {1} {
|
||||
set p $allparents($do)
|
||||
if {[llength $p] != 1 || ![info exists desc_heads($p)] ||
|
||||
$desc_heads($p) ne $oldheads} break
|
||||
set do $p
|
||||
set desc_heads($do) $heads
|
||||
}
|
||||
set todo [concat $todo $p]
|
||||
}
|
||||
}
|
||||
|
||||
proc changedrefs {} {
|
||||
global desc_heads desc_tags anc_tags allcommits allids
|
||||
global allchildren allparents idtags travindex
|
||||
|
Loading…
Reference in New Issue
Block a user