summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 4343434)
raw | patch | inline | side by side (parent: 4343434)
author | Shawn O. Pearce <spearce@spearce.org> | |
Sun, 21 Jan 2007 22:22:40 +0000 (17:22 -0500) | ||
committer | Shawn O. Pearce <spearce@spearce.org> | |
Mon, 22 Jan 2007 03:47:59 +0000 (22:47 -0500) |
Up until now git-gui did not support the new wildcard syntax used to
fetch any remote branch into a tracking branch during 'git fetch'. Now
if we identify a tracking branch as ending with the string '/*' then
we use for-each-ref to print out the reference names which may have
been fetched by that pattern. We also now correctly filter any
tracking branches out of refs/heads, if they user has placed any there.
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
fetch any remote branch into a tracking branch during 'git fetch'. Now
if we identify a tracking branch as ending with the string '/*' then
we use for-each-ref to print out the reference names which may have
been fetched by that pattern. We also now correctly filter any
tracking branches out of refs/heads, if they user has placed any there.
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
git-gui.sh | patch | blob | history |
diff --git a/git-gui.sh b/git-gui.sh
index 593e4fd5a2091345431afbb37e6d4da4a8a0efaf..c969db5fa5b0fcc06c4912b1702b164e6de36279 100755 (executable)
--- a/git-gui.sh
+++ b/git-gui.sh
##
## 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]
}