X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=maint%2Frelease.pm;h=33f64d7e6886365db4830e26d5bb4b21601a7947;hb=52097446c2dcac123f4ff040a15a07acdbe2b11f;hp=a3c88ec389d8ba7ffe23862a3d826f5d4e3ff2ea;hpb=ab12277ebc10a443b4aeba834c2e05481d1bb78a;p=pciutils.git diff --git a/maint/release.pm b/maint/release.pm index a3c88ec..33f64d7 100644 --- a/maint/release.pm +++ b/maint/release.pm @@ -1,6 +1,6 @@ #!/usr/bin/perl # A simple system for making software releases -# (c) 2003 Martin Mares +# (c) 2003--2011 Martin Mares package UCW::Release; use strict; @@ -15,24 +15,28 @@ sub new($$) { "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'`, "LSMDATE" => `date '+%y%m%d' | tr -d '\n'`, "distfiles" => [ ], - "archivedir" => "/home/mj/tmp/archives/$basename", + "archivedir" => $ENV{HOME} . "/archives/sw/$basename", "uploads" => [ ], # Options "do_test" => 1, "do_patch" => 1, "diff_against" => "", - "do_upload" => 1 + "do_upload" => 1, + "do_sign" => 1, }; bless $s; return $s; @@ -145,21 +149,23 @@ sub CopyFile($$$$) { $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`) { @@ -180,22 +186,33 @@ sub GenPackage($) { $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; } @@ -216,8 +233,9 @@ sub ParseOptions($) { "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=] [--noupload]"; + "upload!" => \$s->{"do_upload"}, + "sign!" => \$s->{"do_sign"}, + ) || die "Syntax: release [--verbose] [--test] [--nopatch] [--diff-against=] [--noupload] [--nosign]"; } sub Test($) { @@ -244,7 +262,8 @@ sub MakePatch($) { } 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; @@ -275,7 +294,11 @@ sub Upload($) { print " "; ; if ($url =~ m@^scp://([^/]+)(.*)@) { $, = " "; - my $cmd = "scp @files $1:$2\n"; + my $host = $1; + my $dir = $2; + $dir =~ s@^/~@~@; + $dir =~ s@^/\./@@; + my $cmd = "scp @files $host:$dir\n"; `$cmd`; die if $?; } elsif ($url =~ m@ftp://([^/]+)(.*)@) { my $host = $1;