my $last;
my $outDir = ".";
-GetOptions("help|?" => \$help,
- "man" => \$man,
- "tagpoint=s" => \$tagPoint,
- "last=s" => \$last,
- "dir=s" => \$outDir) or pod2usage(2);
+GetOptions(
+ "help|?" => \$help,
+ "man" => \$man,
+ "tagpoint=s" => \$tagPoint,
+ "last=s" => \$last,
+ "dir=s" => \$outDir,
+) or pod2usage(2);
pod2usage(1) if $help;
pod2usage(-exitstatus => 0, -verbose => 2) if $man;
my $tagName = shift;
-my $version = shift;
+my $notused = shift; # Used to be "version".
pod2usage(2) if !defined($tagName);
+if (defined $notused) {
+ warn "Warning: argument '$notused' is ignored.\n";
+}
# Tag the repository
# Push the tag upstream
system ("git push ssh://gerrit.openafs.org:29418/openafs tag $tagName") == 0
- or die "git push failed with : $!";
+ or die "git push failed with : $!";
}
-$version = `git describe --abbrev=4 $tagName`;
+my $version = `git describe --abbrev=4 $tagName`;
chomp $version;
-$version=~s/openafs-[^-]*-//;
-$version=~s/_/./g;
+if (!$version) {
+ die "Failed to describe $tagName.\n";
+}
+my $suffix = $version;
+$suffix =~ s/openafs-[^-]*-//;
+$suffix =~ s/_/./g;
+my $name = "openafs-$suffix";
# Grab the tagged code into a temporary directory
-my $name = "openafs-".$version;
-
my $tempDir = File::Temp::tempdir();
system ("git archive --format=tar --prefix=$name/ $tagName ".
- " | tar -C $tempDir -x") == 0
+ " | tar -C $tempDir -x") == 0
or die "Git archive failed with: $?";
+# Make the output path, if not already present.
+File::Path::mkpath($outDir);
+
# Construct the ChangeLog
if ($last) {
system("git log $last..$tagName > $outDir/ChangeLog");
}
# Describe the tree
-system("git describe --abbrev=4 $tagName > $tempDir/$name/.version");
+open(my $fh, ">", "$tempDir/$name/.version") or
+ die "Failed to open $tempDir/$name/.version: $!\n";
+print $fh "$version\n";
+close($fh);
# Run regen.sh to create the rest of the tree
system ("cd $tempDir/$name && ./regen.sh") == 0
# Create the source tarball (both .gz and .bz2)
system("tar -cf $outDir/$name-src.tar -C $tempDir $name") == 0
- or die "Unable to create documentation tarball : $!";
+ or die "Unable to create source code tarball : $!";
push @toCompress, "$outDir/$name-src.tar";
# Construct the diffs, and zip them
# and also set up a list for md5 checksumming.
foreach my $file (@toCompress) {
system("gzip < $file > $file.gz") == 0
- or die "Unable to create gzip file of '$file' : $!";
+ or die "Unable to create gzip file of '$file' : $!";
push @toMD5, "$file.gz";
system("bzip2 < $file > $file.bz2") == 0
- or die "Unable to create bzip file of '$file' : $!";
+ or die "Unable to create bzip file of '$file' : $!";
push @toMD5, "$file.bz2";
# Delete the uncompressed tar files.
foreach my $file (@toMD5) {
if (-x "/sbin/md5") {
- system("/sbin/md5 -q $file > $file.md5");
+ system("/sbin/md5 -q $file > $file.md5");
} elsif (-x "/usr/bin/md5sum") {
- system("/usr/bin/md5sum $file > $file.md5");
+ system("/usr/bin/md5sum $file > $file.md5");
} else {
- print STDERR "No md5 utiltiy found. Not producing checksums\n";
+ print STDERR "No md5 utility found. Not producing checksums\n";
}
}
-
+
__END__
=head1 NAME
-make_release - Make an OpenAFS release from git
+make-release - Make an OpenAFS release from git
=head1 SYNOPSIS
-make_release [options] <tag> [<version>]
+make-release [options] <tag>
Options:
- --help brief help message
- --man full documentation
+ --help brief help message
+ --man full documentation
--tagpoint <object> create new tag
--last <object> generate changelog and diffs from this point
--dir <dir> output results into this directory
=head1 DESCRIPTION
-make_release constructs an OpenAFS release from a local git clone. If run
+make-release constructs an OpenAFS release from a local git clone. If run
with just the standard arguments, it will extract the contents of the
specified tag into the current directory, creating src and doc tarballs,
-gziping and bziping them, and generating md5 hashes. It will also create a
+gzipping and bzipping them, and generating md5 hashes. It will also create a
ChangeLog file, listing all of the changes in that release.
This standard behaviour may be modified by the following options
=item B<--last> I<object>
-Generate the ChangeLog starting from I<object>. Also generate a
+Generate the ChangeLog starting from I<object>. Also generate a
openafs-$version.diff file in the output directory containing all of the
changes between I<object> and the current tag
=item B<--dir> I<directory>
Instead of generating all of the output in the current directory, place it
-in <directory>, which must already exist.
+in <directory>, which is created if it does not already exist.
=item B<--tagpoint> I<commit|branch>
or on the tip of the specified branch. This will GPG sign the new tag, and
push it into gerrit.
+=back
+
=cut