I am again requesting the addition of options to tools/git_changelog so
I can more easily produce the release notes.  I asked for this during
9.1 development and it was rejected.  I am currently using my own
custom version of the tool, but have to merge community improvements
into the tool every year before I use it.

The attached patch gives you an idea of what I want to add.  New options
are:

    --details-after Show branch and author info after the commit description
    --master-only   Show commits made exclusively to the master branch
    --oldest-first  Show oldest commits first

I know of now to do this with a post-processing script.
 
-- 
  Bruce Momjian  <br...@momjian.us>        http://momjian.us
  EnterpriseDB                             http://enterprisedb.com

  + It's impossible for everything to be true. +
*** /pgdev/git_changelog	2011-03-15 13:47:30.000000000 -0400
--- /rtmp/pggitlog	2012-04-25 15:45:16.000000000 -0400
***************
*** 43,52 ****
  # Might want to make this parameter user-settable.
  my $timestamp_slop = 600;
  
  my $post_date = 0;
  my $since;
! Getopt::Long::GetOptions('post-date' => \$post_date,
                           'since=s' => \$since) || usage();
  usage() if @ARGV;
  
  my @git = qw(git log --date=iso);
--- 43,62 ----
  # Might want to make this parameter user-settable.
  my $timestamp_slop = 600;
  
+ my $details_after = 0;
  my $post_date = 0;
+ my $master_only = 0;
+ my $oldest_first = 0;
  my $since;
! my @output_buffer;
! 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;
  
  my @git = qw(git log --date=iso);
***************
*** 193,211 ****
  	last if !defined $best_branch;
  	my $winner =
  		$all_commits_by_branch{$best_branch}->[$position{$best_branch}];
! 	printf "Author: %s\n", $winner->{'author'};
! 	foreach my $c (@{$winner->{'commits'}}) {
! 	    printf "Branch: %s", $c->{'branch'};
! 	    if (defined $c->{'last_tag'}) {
! 		printf " Release: %s", $c->{'last_tag'};
! 	    }
! 	    printf " [%s] %s\n", substr($c->{'commit'}, 0, 9), $c->{'date'};
  	}
! 	print "Commit-Order-Inversions: $best_inversions\n"
! 		if $best_inversions != 0;
! 	print "\n";
! 	print $winner->{'message'};
! 	print "\n";
  	$winner->{'done'} = 1;
  	for my $branch (@BRANCHES) {
  		my $leader = $all_commits_by_branch{$branch}->[$position{$branch}];
--- 203,223 ----
  	last if !defined $best_branch;
  	my $winner =
  		$all_commits_by_branch{$best_branch}->[$position{$best_branch}];
! 
! 	# check for master-only
! 	if (! $master_only || ($winner->{'commits'}[0]->{'branch'} eq 'master' &&
! 	    @{$winner->{'commits'}} == 1)) {
! 		output_details($winner) if (! $details_after);
! 		output_entry("Commit-Order-Inversions: $best_inversions\n")
! 			if $best_inversions != 0;
! 		output_entry("\n") if (! $details_after);
! 		output_entry("%s", $winner->{'message'});
! 		output_details($winner) if ($details_after);
! 		output_entry("\n");
! 		unshift(@output_buffer, $output_line) if ($oldest_first);
! 		$output_line = '';
  	}
! 
  	$winner->{'done'} = 1;
  	for my $branch (@BRANCHES) {
  		my $leader = $all_commits_by_branch{$branch}->[$position{$branch}];
***************
*** 216,221 ****
--- 228,235 ----
  	}
  }
  
+ print @output_buffer if ($oldest_first);
+ 
  sub push_commit {
  	my ($c) = @_;
  	my $ht = hash_commit($c);
***************
*** 274,284 ****
  	return $gm - $tzoffset;
  }
  
  sub usage {
  	print STDERR <<EOM;
! Usage: git_changelog [--post-date/-p] [--since=SINCE]
!     --post-date Show branches made after a commit occurred
!     --since     Print only commits dated since SINCE
  EOM
  	exit 1;
  }
--- 288,323 ----
  	return $gm - $tzoffset;
  }
  
+ sub output_entry {
+ 	($oldest_first) ? ($output_line .= sprintf(shift, @_)) : printf(@_);
+ }
+ 
+ sub output_details {
+ 	my $item = shift;
+ 
+ 	if ($details_after) {
+ 		$item->{'author'} =~ m{^(.*?)\s*<[^>]*>$};
+ 		output_entry("(%s)\n", $1);
+ 	} else {
+ 		output_entry("Author: %s\n", $item->{'author'});
+ 	}
+ 	foreach my $c (@{$item->{'commits'}}) {
+ 	    output_entry("Branch: %s ", $c->{'branch'}) if (! $master_only);
+ 	    if (defined $c->{'last_tag'}) {
+ 		output_entry("Release: %s ", $c->{'last_tag'});
+ 	    }
+ 	    output_entry("[%s] %s\n", substr($c->{'commit'}, 0, 9), $c->{'date'});
+ 	}
+ }
+ 
  sub usage {
  	print STDERR <<EOM;
! Usage: git_changelog [--details-after/-d] [--master-only/-m] [--oldest-first/-o] [--post-date/-p] [--since=SINCE]
!     --details-after Show branch and author info after the commit description
!     --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
  	exit 1;
  }
-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to