Skip to content

Commit

Permalink
Add ready_to_release script.
Browse files Browse the repository at this point in the history
  • Loading branch information
gwsw committed Feb 8, 2023
1 parent 6eeaa3f commit 750ae5e
Show file tree
Hide file tree
Showing 3 changed files with 96 additions and 2 deletions.
2 changes: 1 addition & 1 deletion Makefile.aut
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ DISTFILES = \
all: help.c funcs.h $(UNICODE_FILES) ${srcdir}/configure

release: .FORCE
@if grep -s 'Major changes between .*${REL}' NEWS ; then :; else echo '*** NEWS is not updated for ${REL}'; exit 1; fi
@if ${SRC}/ready_for_release -d ${SRC} then :; else exit 1; fi
${MAKE} -f Makefile.aut tagall
${MAKE} -f Makefile.aut all
${MAKE} -f Makefile.aut clean
Expand Down
94 changes: 94 additions & 0 deletions ready_to_release
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
#!/usr/bin/env perl
use strict;
use Getopt::Std;

# Check whether all manually managed files have been updated
# prior to making a release (make -f Makefile.aut release).
my $usage = "usage: ready_to_release [-d dir] [-n NEWS] [-v version.c] [-V version]\n";

my $errors = 0;
check_files();
exit(($errors > 0) ? 1 : 0);

sub check_files {
my %opt;
die $usage if not getopts("d:n:v:V:", \%opt);
my $dir = $opt{d} ? "$opt{d}/" : "";
my $version_c = $dir . ($opt{v} ? $opt{v} : "version.c");
my $news_file = $dir . ($opt{n} ? $opt{n} : "NEWS");
my $uversion = $opt{V};

my ($ver_version, $hi_version, $exper, $month, $day, $year) = read_version_c($version_c);
my $news_version = read_news($news_file);

if (not $hi_version) {
error("$version_c: no version comments");
}
if (not $ver_version) {
error("$version_c: no version number declared");
}
if (not $month or not $day or not $year) {
error("$version_c: version comment for v$hi_version has no date");
}
if (not $news_version) {
error("$news_file: no version comparisons");
}
if ($uversion and $uversion ne $ver_version) {
error("$version_c: declared version is $ver_version not $uversion");
}
if ($exper) {
error("$version_c: declared version number $ver_version$exper is experimental");
}
if ($hi_version ne $ver_version) {
error("$version_c: inconsistent versions: commented $hi_version, declared $ver_version");
}
if ($ver_version ne $news_version) {
error("$news_file: latest version comparision is for $news_version not $ver_version");
}
if ($errors == 0) {
print "$ver_version ready for release\n";
} else {
print "*** NOT READY FOR RELEASE ***\n";
}
}

sub read_version_c {
my ($version_c) = @_;
my ($ver_version, $hi_version, $exper, $month, $day, $year) = (0,0,'',0,0,0);
my $fd;
open $fd, '<', $version_c or die "cannot open $version_c: $!";
while (<$fd>) {
if (m|^\s*v([\d.]+)(\s.*)?|) {
$hi_version = $1;
$2 =~ m|^\s*(\d+)\s*/\s*(\d+)\s*/\s*(\d+)\s|;
($month, $day, $year) = ($1,$2,$3);
}
if (m|^\s*char\s+version[^\w=]*=\s*"([\d.]+)(x)?"|) {
$ver_version = $1;
$exper = $2;
}
}
close $fd;
return ($ver_version, $hi_version, $exper, $month, $day, $year);
}

sub read_news {
my ($news_file) = @_;
my $version;
my $fd;
open $fd, '<', $news_file or die "cannot open $news_file: $!";
while (<$fd>) {
if (m|changes between .* versions [\d.]+ and ([\d.]+)|) {
$version = $1;
last;
}
}
close $fd;
return $version;
}

sub error {
my ($msg) = @_;
print "*** $msg\n";
++$errors;
}
2 changes: 1 addition & 1 deletion version.c
Original file line number Diff line number Diff line change
Expand Up @@ -971,7 +971,7 @@ v620 1/12/23 Add --modelines option; add --intr option;
add subpattern coloring.
v621 1/15/23 Add --wordwrap option; add LESS_LINES & LESS_COLUMNS.
v622 1/27/23 Add --show-preproc-errors option.
v623 Add # command; add ^S search modifier.
v623 2/2/23 Add # command; add ^S search modifier.
v624
*/

Expand Down

0 comments on commit 750ae5e

Please sign in to comment.