提交 682853e6 编写于 作者: J Junio C Hamano

request-pull: really favor a matching tag

After tagging the tip of "dev" branch with a "for-linus" tag and
pushing both out, running

	$ git request-pull $url $last_release dev

would produce an output asking the 'dev' branch of $url to be
pulled, because that is what the user asked the message to say.

We already detect this situation locally and include the contents of
the tag in the output; if the $url has that tag, favor that tag
(i.e. "for-linus") in the generated message over the branch name the
user gave us (i.e. "dev") from the command line, to make the output
look more consistent.
Signed-off-by: NJunio C Hamano <gitster@pobox.com>
上级 26e5c5d0
...@@ -57,9 +57,13 @@ headrev=$(git rev-parse --verify "$head"^0) || exit ...@@ -57,9 +57,13 @@ headrev=$(git rev-parse --verify "$head"^0) || exit
merge_base=$(git merge-base $baserev $headrev) || merge_base=$(git merge-base $baserev $headrev) ||
die "fatal: No commits in common between $base and $head" die "fatal: No commits in common between $base and $head"
# $head is the token given from the command line. If a ref with that # $head is the token given from the command line, and $tag_name, if
# name exists at the remote and their values match, we should use it. # exists, is the tag we are going to show the commit information for.
# Otherwise find a ref that matches $headrev. # If that tag exists at the remote and it points at the commit, use it.
# Otherwise, if a branch with the same name as $head exists at the remote
# and their values match, use that instead.
#
# Otherwise find a random ref that matches $headrev.
find_matching_ref=' find_matching_ref='
sub abbr { sub abbr {
my $ref = shift; my $ref = shift;
...@@ -70,24 +74,29 @@ find_matching_ref=' ...@@ -70,24 +74,29 @@ find_matching_ref='
} }
} }
my ($exact, $found); my ($tagged, $branch, $found);
while (<STDIN>) { while (<STDIN>) {
my ($sha1, $ref, $deref) = /^(\S+)\s+(\S+?)(\^\{\})?$/; my ($sha1, $ref, $deref) = /^(\S+)\s+(\S+?)(\^\{\})?$/;
next unless ($sha1 eq $ARGV[1]); next unless ($sha1 eq $ARGV[1]);
$found = abbr($ref); $found = abbr($ref);
if ($deref && $ref eq "tags/$ARGV[2]") {
$tagged = $found;
last;
}
if ($ref =~ m|/\Q$ARGV[0]\E$|) { if ($ref =~ m|/\Q$ARGV[0]\E$|) {
$exact = $found; $exact = $found;
last;
} }
} }
if ($exact) { if ($tagged) {
print "$tagged\n";
} elsif ($exact) {
print "$exact\n"; print "$exact\n";
} elsif ($found) { } elsif ($found) {
print "$found\n"; print "$found\n";
} }
' '
ref=$(git ls-remote "$url" | perl -e "$find_matching_ref" "$head" "$headrev") ref=$(git ls-remote "$url" | perl -e "$find_matching_ref" "$head" "$headrev" "$tag_name")
url=$(git ls-remote --get-url "$url") url=$(git ls-remote --get-url "$url")
...@@ -114,6 +123,12 @@ fi && ...@@ -114,6 +123,12 @@ fi &&
if test -n "$tag_name" if test -n "$tag_name"
then then
if test -z "$ref" || test "$ref" != "tags/$tag_name"
then
echo >&2 "warn: You locally have $tag_name but it does not (yet)"
echo >&2 "warn: appear to be at $url"
echo >&2 "warn: Do you want to push it there, perhaps?"
fi
git cat-file tag "$tag_name" | git cat-file tag "$tag_name" |
sed -n -e '1,/^$/d' -e '/^-----BEGIN PGP /q' -e p sed -n -e '1,/^$/d' -e '/^-----BEGIN PGP /q' -e p
echo echo
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册