proc all_tracking_branches {} {
global tracking_branches
- set all_trackings {}
- set cmd {}
+ set all [list]
+ set pat [list]
+ set cmd [list]
+
foreach spec $tracking_branches {
- set name [lindex $spec 0]
- if {[string range $name end-1 end] eq {/*}} {
- lappend cmd [string range $name 0 end-2]
+ set dst [lindex $spec 0]
+ if {[string range $dst end-1 end] eq {/*}} {
+ lappend pat $spec
+ lappend cmd [string range $dst 0 end-2]
} else {
- regsub ^refs/(heads|remotes)/ $name {} name
- lappend all_trackings $name
+ lappend all $spec
}
}
- 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
+ if {$pat ne {}} {
+ set fd [eval git_read for-each-ref --format=%(refname) $cmd]
+ while {[gets $fd n] > 0} {
+ foreach spec $pat {
+ set dst [string range [lindex $spec 0] 0 end-2]
+ set len [string length $dst]
+ if {[string equal -length $len $dst $n]} {
+ set src [string range [lindex $spec 2] 0 end-2]
+ set spec [list \
+ $n \
+ [lindex $spec 1] \
+ $src[string range $n $len end] \
+ ]
+ lappend all $spec
+ }
+ }
}
close $fd
}
- return [lsort -unique $all_trackings]
+ return [lsort -index 0 -unique $all]
}
proc load_all_remotes {} {
global repo_config
global all_remotes tracking_branches some_heads_tracking
+ global remote_url
set some_heads_tracking 0
set all_remotes [list]
catch {
set fd [open [file join $rm_dir $name] r]
while {[gets $fd line] >= 0} {
+ if {[regexp {^URL:[ ]*(.+)$} $line line url]} {
+ set remote_url($name) $url
+ continue
+ }
if {![regexp {^Pull:[ ]*([^:]+):(.+)$} \
$line line src dst]} continue
+ if {[string index $src 0] eq {+}} {
+ set src [string range $src 1 end]
+ }
if {![string equal -length 5 refs/ $src]} {
set src $rh_str$src
}
foreach line [array names repo_config remote.*.url] {
if {![regexp ^remote\.(.*)\.url\$ $line line name]} continue
lappend all_remotes $name
+ set remote_url($name) $repo_config(remote.$name.url)
if {[catch {set fl $repo_config(remote.$name.fetch)}]} {
set fl {}
}
foreach line $fl {
if {![regexp {^([^:]+):(.+)$} $line line src dst]} continue
+ if {[string index $src 0] eq {+}} {
+ set src [string range $src 1 end]
+ }
if {![string equal -length 5 refs/ $src]} {
set src $rh_str$src
}
if {$enable} {
lappend prune_list $r
$m add command \
- -label "Fetch from $r..." \
+ -label [mc "Fetch from %s..." $r] \
-command [list fetch_from $r]
}
}
}
foreach r $prune_list {
$m add command \
- -label "Prune from $r..." \
+ -label [mc "Prune from %s..." $r] \
-command [list prune_from $r]
}
}
$m add separator
}
$m add command \
- -label "Push to $r..." \
+ -label [mc "Push to %s..." $r] \
-command [list push_to $r]
incr fast_count
}