diff --git a/lib/choose_rev.tcl b/lib/choose_rev.tcl
index 04f77c009296c88093db5eed5ca0b8647440e0c9..b3b615ee42d6e54058c5140fc3cb89d000ebcf2e 100644 (file)
--- a/lib/choose_rev.tcl
+++ b/lib/choose_rev.tcl
field c_tag {}; # selected tag
field c_expr {}; # current revision expression
+field trck_spec ; # array of specifications
+
constructor new {path {title {}}} {
global all_heads current_branch
trace add variable @c_head write [cb _select head]
}
- set all_trackings [all_tracking_branches]
- if {$all_trackings ne {}} {
- set c_trck [lindex $all_trackings 0]
+ set trck_list [all_tracking_branches]
+ if {$trck_list ne {}} {
+ set nam [list]
+ foreach spec $trck_list {
+ set txt [lindex $spec 0]
+ regsub ^refs/(heads/|remotes/)? $txt {} txt
+ set trck_spec($txt) $spec
+ lappend nam $txt
+ }
+ set nam [lsort -unique $nam]
+
radiobutton $w.trck_r \
-text {Tracking Branch:} \
-value trck \
-variable @revtype
- eval tk_optionMenu $w.trck_m @c_trck $all_trackings
+ eval tk_optionMenu $w.trck_m @c_trck $nam
grid $w.trck_r $w.trck_m -sticky w
+
+ set c_trck [lindex $nam 0]
if {$revtype eq {}} {
set revtype trck
}
trace add variable @c_trck write [cb _select trck]
+ unset nam spec txt
}
set all_tags [load_all_tags]
return $this
}
+method none {text} {
+ if {[winfo exists $w.none_r]} {
+ $w.none_r configure -text $text
+ return
+ }
+
+ radiobutton $w.none_r \
+ -anchor w \
+ -text $text \
+ -value none \
+ -variable @revtype
+ grid $w.none_r -sticky we -padx {0 5} -columnspan 2
+ if {$revtype eq {}} {
+ set revtype none
+ }
+}
+
method get {} {
switch -- $revtype {
head { return $c_head }
trck { return $c_trck }
tag { return $c_tag }
expr { return $c_expr }
+ none { return {} }
default { error "unknown type of revision" }
}
}
+method get_expr {} {
+ switch -- $revtype {
+ head { return refs/heads/$c_head }
+ trck { return [lindex $trck_spec($c_trck) 0] }
+ tag { return refs/tags/$c_tag }
+ expr { return $c_expr }
+ none { return {} }
+ default { error "unknown type of revision" }
+ }
+}
+
method get_commit {} {
- set rev [get $this]
- return [git rev-parse --verify "${rev}^0"]
+ if {$revtype eq {none}} {
+ return {}
+ }
+ return [git rev-parse --verify "[get_expr $this]^0"]
}
method _validate {d S} {