##
## branch management
+proc is_tracking_branch {name} {
+ global tracking_branches
+
+ if {![catch {set info $tracking_branches($name)}]} {
+ return 1
+ }
+ foreach t [array names tracking_branches] {
+ if {[string match {*/\*} $t] && [string match $t $name]} {
+ return 1
+ }
+ }
+ return 0
+}
+
proc load_all_heads {} {
- global all_heads tracking_branches
+ global all_heads
set all_heads [list]
- set cmd [list git for-each-ref]
- lappend cmd --format=%(refname)
- lappend cmd refs/heads
- set fd [open "| $cmd" r]
+ set fd [open "| git for-each-ref --format=%(refname) refs/heads" r]
while {[gets $fd line] > 0} {
- if {![catch {set info $tracking_branches($line)}]} continue
+ if {[is_tracking_branch $line]} continue
if {![regsub ^refs/heads/ $line {} name]} continue
lappend all_heads $name
}
proc all_tracking_branches {} {
global tracking_branches
- set all_trackings [list]
- foreach b [array names tracking_branches] {
- regsub ^refs/(heads|remotes)/ $b {} b
- lappend all_trackings $b
+ set all_trackings {}
+ set cmd {}
+ foreach name [array names tracking_branches] {
+ if {[regsub {/\*$} $name {} name]} {
+ lappend cmd $name
+ } else {
+ regsub ^refs/(heads|remotes)/ $name {} name
+ lappend all_trackings $name
+ }
}
+
+ if {$cmd ne {}} {
+ set fd [open "| git for-each-ref --format=%(refname) $cmd" r]
+ while {[gets $fd name] > 0} {
+ regsub ^refs/(heads|remotes)/ $name {} name
+ lappend all_trackings $name
+ }
+ close $fd
+ }
+
return [lsort -unique $all_trackings]
}
}
}
+proc radio_selector {varname value args} {
+ upvar #0 $varname var
+ set var $value
+}
+
+trace add variable create_branch_head write \
+ [list radio_selector create_branch_revtype head]
+trace add variable create_branch_trackinghead write \
+ [list radio_selector create_branch_revtype tracking]
+
+trace add variable delete_branch_head write \
+ [list radio_selector delete_branch_checktype head]
+trace add variable delete_branch_trackinghead write \
+ [list radio_selector delete_branch_checktype tracking]
+
proc do_create_branch {} {
global all_heads current_branch repo_config
global create_branch_checkout create_branch_revtype
global create_branch_head create_branch_trackinghead
- set create_branch_checkout 1
- set create_branch_revtype head
- set create_branch_head $current_branch
- set create_branch_trackinghead {}
-
set w .branch_editor
toplevel $w
wm geometry $w "+[winfo rootx .]+[winfo rooty .]"
-font font_ui
$w.desc.name_t insert 0.0 $repo_config(gui.newbranchtemplate)
grid $w.desc.name_l $w.desc.name_t -stick we -padx {0 5}
- bind $w.desc.name_t <Shift-Key-Tab> "focus $w.postActions.checkout;break"
- bind $w.desc.name_t <Key-Tab> "focus $w.from.exp_t;break"
+ bind $w.desc.name_t <Shift-Key-Tab> {focus [tk_focusPrev %W];break}
+ bind $w.desc.name_t <Key-Tab> {focus [tk_focusNext %W];break}
bind $w.desc.name_t <Key-Return> "do_create_branch_action $w;break"
bind $w.desc.name_t <Key> {
if {{%K} ne {BackSpace}
-width 50 \
-font font_ui
grid $w.from.exp_r $w.from.exp_t -stick we -padx {0 5}
- bind $w.from.exp_t <Shift-Key-Tab> "focus $w.desc.name_t;break"
- bind $w.from.exp_t <Key-Tab> "focus $w.postActions.checkout;break"
+ bind $w.from.exp_t <Shift-Key-Tab> {focus [tk_focusPrev %W];break}
+ bind $w.from.exp_t <Key-Tab> {focus [tk_focusNext %W];break}
bind $w.from.exp_t <Key-Return> "do_create_branch_action $w;break"
+ bind $w.from.exp_t <Key-space> break
+ bind $w.from.exp_t <Key> {set create_branch_revtype expression}
grid columnconfigure $w.from 1 -weight 1
pack $w.from -anchor nw -fill x -pady 5 -padx 5
pack $w.postActions.checkout -anchor nw
pack $w.postActions -anchor nw -fill x -pady 5 -padx 5
+ set create_branch_checkout 1
+ set create_branch_head $current_branch
+ set create_branch_revtype head
+
bind $w <Visibility> "grab $w; focus $w.desc.name_t"
bind $w <Key-Escape> "destroy $w"
bind $w <Key-Return> "do_create_branch_action $w;break"
global all_heads tracking_branches current_branch
global delete_branch_checktype delete_branch_head delete_branch_trackinghead
- set delete_branch_checktype head
- set delete_branch_head $current_branch
- set delete_branch_trackinghead {}
-
set w .branch_editor
toplevel $w
wm geometry $w "+[winfo rootx .]+[winfo rooty .]"
grid columnconfigure $w.validate 1 -weight 1
pack $w.validate -anchor nw -fill x -pady 5 -padx 5
+ set delete_branch_head $current_branch
+ set delete_branch_checktype head
+
bind $w <Visibility> "grab $w; focus $w"
bind $w <Key-Escape> "destroy $w"
wm title $w "[appname] ([reponame]): Delete Branch"
-from 1 -to 99 -increment 1 \
-width 3 \
-font font_ui
+ bind $w.$f.$name.v <FocusIn> {%W selection range 0 end}
pack $w.$f.$name.v -side right -anchor e -padx 5
pack $w.$f.$name -side top -anchor w -fill x
}
-width 20 \
-font font_ui
$w.$f.$name.v insert 0.0 [set ${f}_config_new(gui.$name)]
- bind $w.$f.$name.v <Key-Tab> break
+ bind $w.$f.$name.v <Shift-Key-Tab> {focus [tk_focusPrev %W];break}
+ bind $w.$f.$name.v <Key-Tab> {focus [tk_focusNext %W];break}
bind $w.$f.$name.v <Key-Return> break
+ bind $w.$f.$name.v <FocusIn> "$w.$f.$name.v tag add sel 0.0 end"
bind $w.$f.$name.v <FocusOut> "
set ${f}_config_new(gui.$name) \
\[string trim \[$w.$f.$name.v get 0.0 end\]\]
-from 2 -to 80 -increment 1 \
-width 3 \
-font font_ui
+ bind $w.global.$name.size <FocusIn> {%W selection range 0 end}
pack $w.global.$name.size -side right -anchor e
pack $w.global.$name.family -side right -anchor e
pack $w.global.$name -side top -anchor w -fill x
#
panedwindow .vpane -orient vertical
panedwindow .vpane.files -orient horizontal
-.vpane add .vpane.files -sticky nsew -height 100 -width 400
+.vpane add .vpane.files -sticky nsew -height 100 -width 200
pack .vpane -anchor n -side top -fill both -expand 1
# -- Index File List
#
-frame .vpane.files.index -height 100 -width 400
+frame .vpane.files.index -height 100 -width 200
label .vpane.files.index.title -text {Changes To Be Committed} \
-background green \
-font font_ui
text $ui_index -background white -borderwidth 0 \
- -width 40 -height 10 \
+ -width 20 -height 10 \
-wrap none \
-font font_ui \
-cursor $cursor_ptr \
# -- Working Directory File List
#
-frame .vpane.files.workdir -height 100 -width 100
+frame .vpane.files.workdir -height 100 -width 200
label .vpane.files.workdir.title -text {Changed But Not Updated} \
-background red \
-font font_ui
text $ui_workdir -background white -borderwidth 0 \
- -width 40 -height 10 \
+ -width 20 -height 10 \
-wrap none \
-font font_ui \
-cursor $cursor_ptr \