aboutsummaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorGravatar Holger Weiss <holger@zedat.fu-berlin.de> 2013-09-28 00:58:02 +0200
committerGravatar Holger Weiss <holger@zedat.fu-berlin.de> 2013-09-28 00:58:02 +0200
commit4ad0f80ec3a136d1c45ee7a9957a8acdef6d4afc (patch)
tree4e57aa36762fe168b57e32bffb6115f8cdb57eb2 /tools
parent9ae1cd8f91aa6b53404e66588679d852d3972bcd (diff)
downloadmonitoring-plugins-4ad0f80ec3a136d1c45ee7a9957a8acdef6d4afc.tar.gz
Add tools/generate-change-log
Add the tools/generate-change-log script for auto-generating the ChangeLog file from the Git history when running "make dist".
Diffstat (limited to 'tools')
-rwxr-xr-xtools/generate-change-log67
1 files changed, 67 insertions, 0 deletions
diff --git a/tools/generate-change-log b/tools/generate-change-log
new file mode 100755
index 00000000..03321fd8
--- /dev/null
+++ b/tools/generate-change-log
@@ -0,0 +1,67 @@
+#!/usr/bin/env perl
+#
+# Copyright (c) 2013 Nagios Plugins Development Team
+#
+# Originally written by Holger Weiss <holger@zedat.fu-berlin.de>.
+#
+# This file is free software; the Nagios Plugins Development Team gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY, to the extent permitted by law; without even the implied
+# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+#
+
+use warnings;
+use strict;
+use Text::Wrap;
+
+# The lines will have a length of no more than $columns - 1.
+$Text::Wrap::columns = 81;
+
+if (system('git rev-parse --git-dir >/dev/null 2>&1') != 0) {
+ print "Not a Git repository, so I won't update the ChangeLog.\n";
+ exit 0;
+}
+
+my $regex =
+ '^commit [0-9a-f]+\n' .
+ '^Author: (?<name>.+) <(?<email>.*)>\n' .
+ '^Date: (?<date>\d{4}-\d{2}-\d{2})\n' .
+ '^\n' .
+ '(?<message>(^ .*\n)+)' .
+ '^\n' .
+ '(?<files>(^.+\n)+)';
+
+my $git_log = qx'git log -M -C --stat --name-only --date=short';
+die "Cannot get `git log' output\n" if $? != 0;
+
+my ($prev_date, $prev_name, $prev_email);
+
+while ($git_log =~ /$regex/gm) {
+ my %commit = %+;
+
+ if (not defined $prev_date
+ or $commit{date} ne $prev_date
+ or $commit{name} ne $prev_name
+ or $commit{email} ne $prev_email) {
+ print "$commit{date} $commit{name} <$commit{email}>\n\n";
+ }
+ $prev_date = $commit{date};
+ $prev_name = $commit{name};
+ $prev_email = $commit{email};
+
+ my @files = split(/\n/, $commit{files});
+ my @message = map { s/^ {4}//; $_ } split(/\n/, $commit{message});
+ my $first_line = shift(@message);
+ $first_line =~ s/^$files[-1]: //;
+ my $intro = sprintf('* %s: %s', join(', ', @files), $first_line);
+
+ print fill("\t", "\t", $intro), "\n";
+ foreach my $line (@message) {
+ print "\t$line" if length($line) > 0;
+ print "\n";
+ }
+ print "\n";
+}