git-gui: Permit merging tags into the current branch.
It was pointed out on the git mailing list by Martin Koegler that we did not show tags as possible things to merge into the current branch. They actually are, and core Git's Grand Unified Merge Driver will accept them just like any other commit. So our merge dialog now requests all refs/heads, refs/remotes and refs/tags named refs and attempts to match them against the commits not in HEAD. One complicating factor here is that we must use the %(*objectname) field when talking about an annotated tag, as they will not appear in the output of rev-list. Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
This commit is contained in:
parent
54acdd95b8
commit
cdf6e08880
@ -2916,14 +2916,16 @@ proc do_local_merge {} {
|
|||||||
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 cmd [list git for-each-ref]
|
||||||
lappend cmd {--format=%(objectname) %(refname)}
|
lappend cmd {--format=%(objectname) %(*objectname) %(refname)}
|
||||||
lappend cmd refs/heads
|
lappend cmd refs/heads
|
||||||
lappend cmd refs/remotes
|
lappend cmd refs/remotes
|
||||||
|
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 [split $line { }]
|
||||||
set sha1([lindex $line 0]) [lindex $line 1]
|
set sha1([lindex $line 0]) [lindex $line 2]
|
||||||
|
set sha1([lindex $line 1]) [lindex $line 2]
|
||||||
}
|
}
|
||||||
close $fr_fd
|
close $fr_fd
|
||||||
|
|
||||||
@ -2931,7 +2933,7 @@ proc do_local_merge {} {
|
|||||||
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)/ $ref {} ref
|
regsub ^refs/(heads|remotes|tags)/ $ref {} ref
|
||||||
lappend to_show $ref
|
lappend to_show $ref
|
||||||
}
|
}
|
||||||
close $fr_fd
|
close $fr_fd
|
||||||
|
Loading…
Reference in New Issue
Block a user