[Nagiosplug-checkins] SF.net SVN: nagiosplug:[2271] nagiosplug/trunk/tools/git-notify

dermoth at users.sourceforge.net dermoth at users.sourceforge.net
Sat Oct 24 23:01:24 CEST 2009


Revision: 2271
          http://nagiosplug.svn.sourceforge.net/nagiosplug/?rev=2271&view=rev
Author:   dermoth
Date:     2009-10-24 21:01:24 +0000 (Sat, 24 Oct 2009)

Log Message:
-----------
git-notify: Handle non-UTF-8 commits

Make sure that commit messages which use an encoding other than US-ASCII
or UTF-8 are handled correctly.  Also, assume that the diff contents use
the same encoding as the commit message.  This assumption may well be
wrong, but that's the best we can do.

From: Holger Weiss <holger at zedat.fu-berlin.de>

Modified Paths:
--------------
    nagiosplug/trunk/tools/git-notify

Modified: nagiosplug/trunk/tools/git-notify
===================================================================
--- nagiosplug/trunk/tools/git-notify	2009-10-24 21:01:16 UTC (rev 2270)
+++ nagiosplug/trunk/tools/git-notify	2009-10-24 21:01:24 UTC (rev 2271)
@@ -28,14 +28,10 @@
 #
 
 use strict;
-use open ':utf8';
 use Fcntl ':flock';
-use Encode 'encode';
+use Encode qw(encode decode);
 use Cwd 'realpath';
 
-binmode STDIN, ':utf8';
-binmode STDOUT, ':utf8';
-
 sub git_config($);
 sub get_repos_name();
 
@@ -296,6 +292,7 @@
     $subject = encode("MIME-Q",$subject);
     if ($debug)
     {
+        binmode STDOUT, ":utf8";
         print "---------------------\n";
         print "To: $name\n";
         print "Subject: $subject\n";
@@ -310,6 +307,7 @@
         {
             exec $mailer, "-s", $subject, "-a", "Content-Type: $content_type", $name or die "Cannot exec $mailer";
         }
+        binmode MAIL, ":utf8";
         print MAIL join("\n", @text), "\n";
         close MAIL;
     }
@@ -334,12 +332,15 @@
     my @log = ();
     my $do_log = 0;
 
+    $info{"encoding"} = "utf-8";
+
     open OBJ, "-|" or exec "git", "cat-file", "commit", $obj or die "cannot run git-cat-file";
     while (<OBJ>)
     {
         chomp;
         if ($do_log) { push @log, $_; }
         elsif (/^$/) { $do_log = 1; }
+        elsif (/^encoding (.+)/) { $info{"encoding"} = $1; }
         elsif (/^(author|committer) ((.*) (<.*>)) (\d+) ([+-]\d+)$/)
         {
             $info{$1} = $2;
@@ -429,6 +430,8 @@
         push @notice, "Diff:   $gitweb_url/?a=commitdiff;h=$obj" if $gitweb_url;
     }
 
+    $_ = decode($info{"encoding"}, $_) for @notice;
+
     mail_notification($commitlist_address,
         $info{"author_name"} . ": " . truncate_str(${$info{"log"}}[0], 50),
         "text/plain; charset=UTF-8", @notice);


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Commits mailing list