16 GetOptions
("help|?" => \
$help,
18 "tagpoint=s" => \
$tagPoint,
20 "dir=s" => \
$outDir) or pod2usage
(2);
22 pod2usage
(1) if $help;
23 pod2usage
(-exitstatus
=> 0, -verbose
=> 2) if $man;
28 pod2usage
(2) if !defined($tagName);
33 system ("git tag -s $tagName $tagPoint") == 0
34 or die "git tag failed with : $!";
36 # Push the tag upstream
37 system ("git push ssh://gerrit.openafs.org:29418/openafs tag $tagName") == 0
38 or die "git push failed with : $!";
41 $version = `git describe --abbrev=4 $tagName`;
43 $version=~s/openafs-[^-]*-//;
46 # Grab the tagged code into a temporary directory
48 my $name = "openafs-".$version;
50 my $tempDir = File
::Temp
::tempdir
();
51 system ("git archive --format=tar --prefix=$name/ $tagName ".
52 " | tar -C $tempDir -x") == 0
53 or die "Git archive failed with: $?";
55 # Construct the ChangeLog
57 system("git log $last..$tagName > $outDir/ChangeLog");
59 system("git log $tagName > $outDir/ChangeLog");
63 system("git describe --abbrev=4 $tagName > $tempDir/$name/.version");
65 # Run regen.sh to create the rest of the tree
66 system ("cd $tempDir/$name && ./regen.sh") == 0
69 # A list of files to compress
72 # Create the documentation tarball
73 system("tar -cf $outDir/$name-doc.tar -C $tempDir $name/doc") == 0
74 or die "Unable to create documentation tarball : $!";
75 push @toCompress, "$outDir/$name-doc.tar";
77 # Remove the docs directory (we've already build a tarball for it)
78 File
::Path
::rmtree
("$tempDir/$name/doc");
80 # Create the source tarball (both .gz and .bz2)
81 system("tar -cf $outDir/$name-src.tar -C $tempDir $name") == 0
82 or die "Unable to create source code tarball : $!";
83 push @toCompress, "$outDir/$name-src.tar";
85 # Construct the diffs, and zip them
87 system("git diff $last..$tagName > $outDir/$name.diff") == 0
88 or die "Unable to create diff : $!";
89 push @toCompress, "$outDir/$name.diff";
94 # Compress everything that needs squashing,
95 # and also set up a list for md5 checksumming.
96 foreach my $file (@toCompress) {
97 system("gzip < $file > $file.gz") == 0
98 or die "Unable to create gzip file of '$file' : $!";
99 push @toMD5, "$file.gz";
101 system("bzip2 < $file > $file.bz2") == 0
102 or die "Unable to create bzip file of '$file' : $!";
103 push @toMD5, "$file.bz2";
105 # Delete the uncompressed tar files.
106 if ($file =~ /\.tar$/) {
109 # Otherwise, queue this file for md5 checksumming.
114 foreach my $file (@toMD5) {
115 if (-x
"/sbin/md5") {
116 system("/sbin/md5 -q $file > $file.md5");
117 } elsif (-x
"/usr/bin/md5sum") {
118 system("/usr/bin/md5sum $file > $file.md5");
120 print STDERR
"No md5 utiltiy found. Not producing checksums\n";
129 make_release - Make an OpenAFS release from git
133 make_release [options] <tag> [<version>]
136 --help brief help message
137 --man full documentation
138 --tagpoint <object> create new tag
139 --last <object> generate changelog and diffs from this point
140 --dir <dir> output results into this directory
144 make_release constructs an OpenAFS release from a local git clone. If run
145 with just the standard arguments, it will extract the contents of the
146 specified tag into the current directory, creating src and doc tarballs,
147 gziping and bziping them, and generating md5 hashes. It will also create a
148 ChangeLog file, listing all of the changes in that release.
150 This standard behaviour may be modified by the following options
156 =item B<--last> I<object>
158 Generate the ChangeLog starting from I<object>. Also generate a
159 openafs-$version.diff file in the output directory containing all of the
160 changes between I<object> and the current tag
162 =item B<--dir> I<directory>
164 Instead of generating all of the output in the current directory, place it
165 in <directory>, which must already exist.
167 =item B<--tagpoint> I<commit|branch>
169 Rather than using an existing tag, create a new one on the specified commit,
170 or on the tip of the specified branch. This will GPG sign the new tag, and