summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 73141bf)
raw | patch | inline | side by side (parent: 73141bf)
author | Holger Weiss <holger@zedat.fu-berlin.de> | |
Sat, 7 Nov 2009 09:40:22 +0000 (10:40 +0100) | ||
committer | Holger Weiss <holger@zedat.fu-berlin.de> | |
Sat, 7 Nov 2009 09:40:22 +0000 (10:40 +0100) |
Distinguish between annotated tags and lightweight tags. In the former
case, send an annotated "tag notification", in the latter case, send a
"ref change notification" (as we did in both cases before).
case, send an annotated "tag notification", in the latter case, send a
"ref change notification" (as we did in both cases before).
tools/git-notify | patch | blob | history |
diff --git a/tools/git-notify b/tools/git-notify
index e64754c3e1defd78657a40685d7a68b328b2a9b3..dc843efd88d8ccacec5edc53e6eb6d77f5c1c294 100755 (executable)
--- a/tools/git-notify
+++ b/tools/git-notify
return $repos;
}
+# return the type of the given object
+sub get_object_type($)
+{
+ my $obj = shift;
+
+ open TYPE, "-|" or exec "git", "cat-file", "-t", $obj or die "cannot run git-cat-file";
+ my $type = <TYPE>;
+ chomp $type;
+ close TYPE or die $! ? "Cannot execute cat-file: $!" : "cat-file exited with status: $?";
+ return $type;
+}
+
# extract the information from a commit or tag object and return a hash containing the various fields
sub get_object_info($)
{
$info{"encoding"} = "utf-8";
- open TYPE, "-|" or exec "git", "cat-file", "-t", $obj or die "cannot run git-cat-file";
- my $type = <TYPE>;
- chomp $type;
- close TYPE or die $! ? "Cannot execute cat-file: $!" : "cat-file exited with status: $?";
+ my $type = get_object_type($obj);
open OBJ, "-|" or exec "git", "cat-file", $type, $obj or die "cannot run git-cat-file";
while (<OBJ>)
sub send_all_notices($$$)
{
my ($old_sha1, $new_sha1, $ref) = @_;
- my ($reftype, $refname, $action, @notice);
+ my ($reftype, $refname, $tagtype, $action, @notice);
return if ($ref =~ /^refs\/remotes\//
or (@include_list && !grep {$_ eq $ref} @include_list));
die "The name \"$ref\" doesn't sound like a local branch or tag"
if not (($reftype, $refname) = ($ref =~ /^refs\/(head|tag)s\/(.+)/));
+ if ($reftype eq "tag")
+ {
+ $tagtype = get_object_type($ref) eq "tag" ? "annotated" : "lightweight";
+ }
+
if ($new_sha1 eq '0' x 40)
{
$action = "removed";
}
elsif ($old_sha1 eq '0' x 40)
{
+ if ($reftype eq "tag" and $tagtype eq "annotated")
+ {
+ send_commit_notice( $refname, $new_sha1 ) if $commitlist_address;
+ return;
+ }
$action = "created";
@notice = ( "SHA1: $new_sha1" );
}