зеркало из https://github.com/microsoft/git.git
git-gui: Automatically skip tracking branches in branch menu.
Since the user should not work on a tracking branch we automatically hide any branch which is used as a tracking branch by either a remote.<name>.fetch config entry or by a Pull: line in a remotes file. Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
This commit is contained in:
Родитель
2171bf4b44
Коммит
359ca42a4b
46
git-gui
46
git-gui
|
@ -1610,7 +1610,7 @@ proc write_checkout_index {fd pathList totalCnt batch msg after} {
|
||||||
## branch management
|
## branch management
|
||||||
|
|
||||||
proc load_all_branches {} {
|
proc load_all_branches {} {
|
||||||
global all_branches
|
global all_branches tracking_branches
|
||||||
|
|
||||||
set all_branches [list]
|
set all_branches [list]
|
||||||
set cmd [list git for-each-ref]
|
set cmd [list git for-each-ref]
|
||||||
|
@ -1618,9 +1618,9 @@ proc load_all_branches {} {
|
||||||
lappend cmd refs/heads
|
lappend cmd refs/heads
|
||||||
set fd [open "| $cmd" r]
|
set fd [open "| $cmd" r]
|
||||||
while {[gets $fd line] > 0} {
|
while {[gets $fd line] > 0} {
|
||||||
if {[regsub ^refs/heads/ $line {} line]} {
|
if {![catch {set info $tracking_branches($line)}]} continue
|
||||||
lappend all_branches $line
|
if {![regsub ^refs/heads/ $line {} name]} continue
|
||||||
}
|
lappend all_branches $name
|
||||||
}
|
}
|
||||||
close $fd
|
close $fd
|
||||||
|
|
||||||
|
@ -1652,21 +1652,49 @@ proc switch_branch {b} {
|
||||||
## remote management
|
## remote management
|
||||||
|
|
||||||
proc load_all_remotes {} {
|
proc load_all_remotes {} {
|
||||||
global gitdir all_remotes repo_config
|
global gitdir repo_config
|
||||||
|
global all_remotes tracking_branches
|
||||||
|
|
||||||
set all_remotes [list]
|
set all_remotes [list]
|
||||||
|
array unset tracking_branches
|
||||||
|
|
||||||
set rm_dir [file join $gitdir remotes]
|
set rm_dir [file join $gitdir remotes]
|
||||||
if {[file isdirectory $rm_dir]} {
|
if {[file isdirectory $rm_dir]} {
|
||||||
set all_remotes [concat $all_remotes [glob \
|
set all_remotes [glob \
|
||||||
-types f \
|
-types f \
|
||||||
-tails \
|
-tails \
|
||||||
-nocomplain \
|
-nocomplain \
|
||||||
-directory $rm_dir *]]
|
-directory $rm_dir *]
|
||||||
|
|
||||||
|
foreach name $all_remotes {
|
||||||
|
catch {
|
||||||
|
set fd [open [file join $rm_dir $name] r]
|
||||||
|
while {[gets $fd line] >= 0} {
|
||||||
|
if {![regexp {^Pull:[ ]*([^:]+):(.+)$} \
|
||||||
|
$line line src dst]} continue
|
||||||
|
if {![regexp ^refs/ $dst]} {
|
||||||
|
set dst "refs/heads/$dst"
|
||||||
|
}
|
||||||
|
set tracking_branches($dst) [list $name $src]
|
||||||
|
}
|
||||||
|
close $fd
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach line [array names repo_config remote.*.url] {
|
foreach line [array names repo_config remote.*.url] {
|
||||||
if {[regexp ^remote\.(.*)\.url\$ $line line name]} {
|
if {![regexp ^remote\.(.*)\.url\$ $line line name]} continue
|
||||||
lappend all_remotes $name
|
lappend all_remotes $name
|
||||||
|
|
||||||
|
if {[catch {set fl $repo_config(remote.$name.fetch)}]} {
|
||||||
|
set fl {}
|
||||||
|
}
|
||||||
|
foreach line $fl {
|
||||||
|
if {![regexp {^([^:]+):(.+)$} $line line src dst]} continue
|
||||||
|
if {![regexp ^refs/ $dst]} {
|
||||||
|
set dst "refs/heads/$dst"
|
||||||
|
}
|
||||||
|
set tracking_branches($dst) [list $name $src]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче