[nagiosplug] git-notify: Distinguish between tag types

"Holger Weiss" <[email protected]>
Newsgroups gmane.network.nagios.plugins.cvs
Message-ID <[email protected]>
 Module: nagiosplug
 Branch: master
 Commit: ecdb5aa53f8e6988c1b013e7fc0725edcac17e2b
 Author: Holger Weiss <[email protected]>
   Date: Sat Nov  7 10:40:22 2009 +0100
    URL: http://nagiosplug.git.sf.net/git/gitweb.cgi?p=nagiosplug/nagiosplug;a=commit;h=ecdb5aa

git-notify: Distinguish between tag types

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).

---

 tools/git-notify |   29 ++++++++++++++++++++++++-----
 1 files changed, 24 insertions(+), 5 deletions(-)

diff --git a/tools/git-notify b/tools/git-notify
index e64754c..dc843ef 100755
--- a/tools/git-notify
+++ b/tools/git-notify
@@ -352,6 +352,18 @@ sub get_repos_name()
     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($)
 {
@@ -362,10 +374,7 @@ 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>)
@@ -572,13 +581,18 @@ sub send_global_notice($$$)
 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";
@@ -586,6 +600,11 @@ sub send_all_notices($$$)
     }
     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" );
     }


------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.