diff options
Diffstat (limited to 'tools')
-rwxr-xr-x | tools/generate-change-log | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/tools/generate-change-log b/tools/generate-change-log new file mode 100755 index 0000000..03321fd --- /dev/null +++ b/tools/generate-change-log | |||
@@ -0,0 +1,67 @@ | |||
1 | #!/usr/bin/env perl | ||
2 | # | ||
3 | # Copyright (c) 2013 Nagios Plugins Development Team | ||
4 | # | ||
5 | # Originally written by Holger Weiss <holger@zedat.fu-berlin.de>. | ||
6 | # | ||
7 | # This file is free software; the Nagios Plugins Development Team gives | ||
8 | # unlimited permission to copy and/or distribute it, with or without | ||
9 | # modifications, as long as this notice is preserved. | ||
10 | # | ||
11 | # This program is distributed in the hope that it will be useful, but WITHOUT | ||
12 | # ANY WARRANTY, to the extent permitted by law; without even the implied | ||
13 | # warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | ||
14 | # | ||
15 | |||
16 | use warnings; | ||
17 | use strict; | ||
18 | use Text::Wrap; | ||
19 | |||
20 | # The lines will have a length of no more than $columns - 1. | ||
21 | $Text::Wrap::columns = 81; | ||
22 | |||
23 | if (system('git rev-parse --git-dir >/dev/null 2>&1') != 0) { | ||
24 | print "Not a Git repository, so I won't update the ChangeLog.\n"; | ||
25 | exit 0; | ||
26 | } | ||
27 | |||
28 | my $regex = | ||
29 | '^commit [0-9a-f]+\n' . | ||
30 | '^Author: (?<name>.+) <(?<email>.*)>\n' . | ||
31 | '^Date: (?<date>\d{4}-\d{2}-\d{2})\n' . | ||
32 | '^\n' . | ||
33 | '(?<message>(^ .*\n)+)' . | ||
34 | '^\n' . | ||
35 | '(?<files>(^.+\n)+)'; | ||
36 | |||
37 | my $git_log = qx'git log -M -C --stat --name-only --date=short'; | ||
38 | die "Cannot get `git log' output\n" if $? != 0; | ||
39 | |||
40 | my ($prev_date, $prev_name, $prev_email); | ||
41 | |||
42 | while ($git_log =~ /$regex/gm) { | ||
43 | my %commit = %+; | ||
44 | |||
45 | if (not defined $prev_date | ||
46 | or $commit{date} ne $prev_date | ||
47 | or $commit{name} ne $prev_name | ||
48 | or $commit{email} ne $prev_email) { | ||
49 | print "$commit{date} $commit{name} <$commit{email}>\n\n"; | ||
50 | } | ||
51 | $prev_date = $commit{date}; | ||
52 | $prev_name = $commit{name}; | ||
53 | $prev_email = $commit{email}; | ||
54 | |||
55 | my @files = split(/\n/, $commit{files}); | ||
56 | my @message = map { s/^ {4}//; $_ } split(/\n/, $commit{message}); | ||
57 | my $first_line = shift(@message); | ||
58 | $first_line =~ s/^$files[-1]: //; | ||
59 | my $intro = sprintf('* %s: %s', join(', ', @files), $first_line); | ||
60 | |||
61 | print fill("\t", "\t", $intro), "\n"; | ||
62 | foreach my $line (@message) { | ||
63 | print "\t$line" if length($line) > 0; | ||
64 | print "\n"; | ||
65 | } | ||
66 | print "\n"; | ||
67 | } | ||