git-gui: Show all possible branches for merge
Johannes Sixt pointed out that git-gui was randomly selecting which branch (or tag!) it will show in the merge dialog when more than one ref points at the same commit. This can be a problem for the user if they want to merge a branch, but the ref that git-gui selected to display was actually a tag that points at the commit at the tip of that branch. Since the user is looking for the branch, and not the tag, its confusing to not find it, and worse, merging the tag causes git-merge to generate a different message than if the branch was selected. While I am in here and am messing around I have changed the for-each-ref usage to take advantage of its --tcl formatting, and to fetch the subject line of the commit (or tag) we are looking at. This way we could present the subject line in the UI to the user, given them an even better chance to select the correct branch. Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
This commit is contained in:
parent
a6c9b081b6
commit
349f92e3a2
@ -195,17 +195,22 @@ proc dialog {} {
|
|||||||
pack $w.source.l -side left -fill both -expand 1
|
pack $w.source.l -side left -fill both -expand 1
|
||||||
pack $w.source -fill both -expand 1 -pady 5 -padx 5
|
pack $w.source -fill both -expand 1 -pady 5 -padx 5
|
||||||
|
|
||||||
set cmd [list git for-each-ref]
|
set fmt {list %(objectname) %(*objectname) %(refname) %(subject)}
|
||||||
lappend cmd {--format=%(objectname) %(*objectname) %(refname)}
|
set cmd [list git for-each-ref --tcl --format=$fmt]
|
||||||
lappend cmd refs/heads
|
lappend cmd refs/heads
|
||||||
lappend cmd refs/remotes
|
lappend cmd refs/remotes
|
||||||
lappend cmd refs/tags
|
lappend cmd refs/tags
|
||||||
set fr_fd [open "| $cmd" r]
|
set fr_fd [open "| $cmd" r]
|
||||||
fconfigure $fr_fd -translation binary
|
fconfigure $fr_fd -translation binary
|
||||||
while {[gets $fr_fd line] > 0} {
|
while {[gets $fr_fd line] > 0} {
|
||||||
set line [split $line { }]
|
set line [eval $line]
|
||||||
set sha1([lindex $line 0]) [lindex $line 2]
|
set ref [lindex $line 2]
|
||||||
set sha1([lindex $line 1]) [lindex $line 2]
|
regsub ^refs/(heads|remotes|tags)/ $ref {} ref
|
||||||
|
set subj($ref) [lindex $line 3]
|
||||||
|
lappend sha1([lindex $line 0]) $ref
|
||||||
|
if {[lindex $line 1] ne {}} {
|
||||||
|
lappend sha1([lindex $line 1]) $ref
|
||||||
|
}
|
||||||
}
|
}
|
||||||
close $fr_fd
|
close $fr_fd
|
||||||
|
|
||||||
@ -213,8 +218,9 @@ proc dialog {} {
|
|||||||
set fr_fd [open "| git rev-list --all --not HEAD"]
|
set fr_fd [open "| git rev-list --all --not HEAD"]
|
||||||
while {[gets $fr_fd line] > 0} {
|
while {[gets $fr_fd line] > 0} {
|
||||||
if {[catch {set ref $sha1($line)}]} continue
|
if {[catch {set ref $sha1($line)}]} continue
|
||||||
regsub ^refs/(heads|remotes|tags)/ $ref {} ref
|
foreach n $ref {
|
||||||
lappend to_show $ref
|
lappend to_show $n
|
||||||
|
}
|
||||||
}
|
}
|
||||||
close $fr_fd
|
close $fr_fd
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user