Anonymous avatar Anonymous committed cdf6e08

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>;

Comments (0)

Files changed (1)

 	pack $w.source -fill both -expand 1 -pady 5 -padx 5
 
 	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/remotes
+	lappend cmd refs/tags
 	set fr_fd [open "| $cmd" r]
 	fconfigure $fr_fd -translation binary
 	while {[gets $fr_fd line] > 0} {
 		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
 
 	set fr_fd [open "| git rev-list --all --not HEAD"]
 	while {[gets $fr_fd line] > 0} {
 		if {[catch {set ref $sha1($line)}]} continue
-		regsub ^refs/(heads|remotes)/ $ref {} ref
+		regsub ^refs/(heads|remotes|tags)/ $ref {} ref
 		lappend to_show $ref
 	}
 	close $fr_fd
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.