#!/usr/bin/perl
# A simple system for making software releases
-# (c) 2003 Martin Mares <mj@ucw.cz>
+# (c) 2003--2011 Martin Mares <mj@ucw.cz>
package UCW::Release;
use strict;
"PACKAGE" => $basename,
"rules" => [
# p=preprocess, s=subst, -=discard
- '(^|/)(CVS|\.arch-ids|{arch}|tmp)/' => '-',
+ '(^|/)(CVS|\.arch-ids|{arch}|\.git|tmp)/' => '-',
+ '\.sw[a-z]$' => '-',
'\.(lsm|spec)$' => 'ps',
'(^|/)README$' => 's'
],
+ "directories" => [
+ ],
"conditions" => {
},
"DATE" => `date '+%Y-%m-%d' | tr -d '\n'`,
"do_test" => 1,
"do_patch" => 1,
"diff_against" => "",
- "do_upload" => 1
+ "do_upload" => 1,
+ "do_sign" => 1,
};
bless $s;
return $s;
$empty && next;
$empty = 1;
} else { $empty = 0; }
- }
+ }
print O;
}
close O;
close I;
! -x $f or chmod(0755, "$dir/$f") or die "chmod($dir/$f): $!";
} else {
- `cp -a $f $dir/$f`; die if $?;
+ `cp -a "$f" "$dir/$f"`; die if $?;
}
}
sub GenPackage($) {
my ($s) = @_;
$s->{"PKG"} = $s->{"PACKAGE"} . "-" . $s->{"VERSION"};
- my $dir = $s->{"DISTDIR"} . "/" . $s->{"PKG"};
+ my $dd = $s->{"DISTDIR"};
+ my $pkg = $s->{"PKG"};
+ my $dir = "$dd/$pkg";
print "Generating $dir\n";
FILES: foreach my $f (`find . -type f`) {
$s->CopyFile($f, $dir, $action);
}
+ foreach my $d (@{$s->{"directories"}}) {
+ `mkdir -p $dir/$d`; die if $?;
+ }
+
if (-f "$dir/Makefile") {
print "Cleaning up\n";
`cd $dir && make distclean >&2`; die if $?;
}
- my $arch = "$dir.tar.gz";
- print "Creating $arch\n";
+ print "Creating $dd/$pkg.tar.gz\n";
my $tarvv = $verbose ? "vv" : "";
- `tar cz${tarvv}f $arch $dir >&2`; die if $?;
- push @{$s->{"distfiles"}}, $arch;
+ `cd $dd && tar cz${tarvv}f $pkg.tar.gz $pkg >&2`; die if $?;
+ push @{$s->{"distfiles"}}, "$dd/$pkg.tar.gz";
+
+ if ($s->{'do_sign'}) {
+ print "Signing package\n";
+ system "gpg", "--armor", "--detach-sig", "$dd/$pkg.tar.gz";
+ die if $?;
+ rename "$dd/$pkg.tar.gz.asc", "$dd/$pkg.tar.gz.sign" or die "No signature produced!?\n";
+ push @{$s->{"distfiles"}}, "$dd/$pkg.tar.gz.sign";
+ }
my $adir = $s->{"archivedir"};
- my $afile = $adir . "/" . $s->{"PKG"} . ".tar.gz";
- print "Archiving $arch in $afile\n";
+ my $afile = "$adir/$pkg.tar.gz";
+ print "Archiving to $afile\n";
-d $adir or `mkdir -p $adir`;
- `cp $arch $afile`; die if $?;
+ `cp $dd/$pkg.tar.gz $afile`; die if $?;
return $dir;
}
"test!" => \$s->{"do_test"},
"patch!" => \$s->{"do_patch"},
"diff-against=s" => \$s->{"diff_against"},
- "upload!" => \$s->{"do_upload"}
- ) || die "Syntax: release [--verbose] [--test] [--nopatch] [--diff-against=<version>] [--noupload]";
+ "upload!" => \$s->{"do_upload"},
+ "sign!" => \$s->{"do_sign"},
+ ) || die "Syntax: release [--verbose] [--test] [--nopatch] [--diff-against=<version>] [--noupload] [--nosign]";
}
sub Test($) {
} elsif (defined $s->{"OLDVERSION"}) {
$oldver = $s->{"OLDVERSION"};
} else {
- die "MakePatch: Don't know which is the previous version";
+ print "WARNING: No previous version known. No patch generated.\n";
+ return;
}
my $pkg0 = $s->{"PACKAGE"} . "-" . $oldver;