Add options to git_changelog for use in major release note creation:
--details-after --master-only --oldest-first
This commit is contained in:
parent
537b266953
commit
993ce4e6c9
@ -40,10 +40,19 @@ my @BRANCHES = qw(master
|
|||||||
# Might want to make this parameter user-settable.
|
# Might want to make this parameter user-settable.
|
||||||
my $timestamp_slop = 600;
|
my $timestamp_slop = 600;
|
||||||
|
|
||||||
|
my $details_after = 0;
|
||||||
my $post_date = 0;
|
my $post_date = 0;
|
||||||
|
my $master_only = 0;
|
||||||
|
my $oldest_first = 0;
|
||||||
my $since;
|
my $since;
|
||||||
Getopt::Long::GetOptions('post-date' => \$post_date,
|
my @output_buffer;
|
||||||
'since=s' => \$since) || usage();
|
my $output_line = '';
|
||||||
|
|
||||||
|
Getopt::Long::GetOptions('details-after' => \$details_after,
|
||||||
|
'master-only' => \$master_only,
|
||||||
|
'post-date' => \$post_date,
|
||||||
|
'oldest-first' => \$oldest_first,
|
||||||
|
'since=s' => \$since) || usage();
|
||||||
usage() if @ARGV;
|
usage() if @ARGV;
|
||||||
|
|
||||||
my @git = qw(git log --format=fuller --date=iso);
|
my @git = qw(git log --format=fuller --date=iso);
|
||||||
@ -179,17 +188,17 @@ while (1) {
|
|||||||
last if !defined $best_branch;
|
last if !defined $best_branch;
|
||||||
my $winner =
|
my $winner =
|
||||||
$all_commits_by_branch{$best_branch}->[$position{$best_branch}];
|
$all_commits_by_branch{$best_branch}->[$position{$best_branch}];
|
||||||
printf "Author: %s\n", $winner->{'author'};
|
|
||||||
foreach my $c (@{$winner->{'commits'}}) {
|
# check for master-only
|
||||||
printf "Branch: %s", $c->{'branch'};
|
if (! $master_only || ($winner->{'commits'}[0]->{'branch'} eq 'master' &&
|
||||||
if (defined $c->{'last_tag'}) {
|
@{$winner->{'commits'}} == 1)) {
|
||||||
printf " Release: %s", $c->{'last_tag'};
|
output_details($winner) if (! $details_after);
|
||||||
}
|
output_str("%s", $winner->{'message'} . "\n");
|
||||||
printf " [%s] %s\n", substr($c->{'commit'}, 0, 9), $c->{'date'};
|
output_details($winner) if ($details_after);
|
||||||
|
unshift(@output_buffer, $output_line) if ($oldest_first);
|
||||||
|
$output_line = '';
|
||||||
}
|
}
|
||||||
print "\n";
|
|
||||||
print $winner->{'message'};
|
|
||||||
print "\n";
|
|
||||||
$winner->{'done'} = 1;
|
$winner->{'done'} = 1;
|
||||||
for my $branch (@BRANCHES) {
|
for my $branch (@BRANCHES) {
|
||||||
my $leader = $all_commits_by_branch{$branch}->[$position{$branch}];
|
my $leader = $all_commits_by_branch{$branch}->[$position{$branch}];
|
||||||
@ -200,6 +209,8 @@ while (1) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
print @output_buffer if ($oldest_first);
|
||||||
|
|
||||||
sub push_commit {
|
sub push_commit {
|
||||||
my ($c) = @_;
|
my ($c) = @_;
|
||||||
my $ht = hash_commit($c);
|
my $ht = hash_commit($c);
|
||||||
@ -258,11 +269,38 @@ sub parse_datetime {
|
|||||||
return $gm - $tzoffset;
|
return $gm - $tzoffset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub output_str {
|
||||||
|
($oldest_first) ? ($output_line .= sprintf(shift, @_)) : printf(@_);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub output_details {
|
||||||
|
my $item = shift;
|
||||||
|
|
||||||
|
if ($details_after) {
|
||||||
|
$item->{'author'} =~ m{^(.*?)\s*<[^>]*>$};
|
||||||
|
# output only author name, not email address
|
||||||
|
output_str("(%s)\n", $1);
|
||||||
|
} else {
|
||||||
|
output_str("Author: %s\n", $item->{'author'});
|
||||||
|
}
|
||||||
|
foreach my $c (@{$item->{'commits'}}) {
|
||||||
|
output_str("Branch: %s ", $c->{'branch'}) if (! $master_only);
|
||||||
|
if (defined $c->{'last_tag'}) {
|
||||||
|
output_str("Release: %s ", $c->{'last_tag'});
|
||||||
|
}
|
||||||
|
output_str("[%s] %s\n", substr($c->{'commit'}, 0, 9), $c->{'date'});
|
||||||
|
}
|
||||||
|
output_str("\n");
|
||||||
|
}
|
||||||
|
|
||||||
sub usage {
|
sub usage {
|
||||||
print STDERR <<EOM;
|
print STDERR <<EOM;
|
||||||
Usage: git_changelog [--post-date/-p] [--since=SINCE]
|
Usage: git_changelog [--details-after/-d] [--master-only/-m] [--oldest-first/-o] [--post-date/-p] [--since=SINCE]
|
||||||
--post-date Show branches made after a commit occurred
|
--details-after Show branch and author info after the commit description
|
||||||
--since Print only commits dated since SINCE
|
--master-only Show commits made exclusively to the master branch
|
||||||
|
--oldest-first Show oldest commits first
|
||||||
|
--post-date Show branches made after a commit occurred
|
||||||
|
--since Print only commits dated since SINCE
|
||||||
EOM
|
EOM
|
||||||
exit 1;
|
exit 1;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user