aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xrpmbuildupdate133
1 files changed, 100 insertions, 33 deletions
diff --git a/rpmbuildupdate b/rpmbuildupdate
index 057cb61..f162197 100755
--- a/rpmbuildupdate
+++ b/rpmbuildupdate
@@ -15,47 +15,68 @@
use strict;
use AppConfig;
-my $mount_point = "/mnt/BIG/distrib/cooker/SRPMS/";
my $defaultrelease = "1mdk";
my %config;
+
+sub build_from_src
+{
+ $_ = shift;
+ my $nv = shift;
+ my $b = qx[basename $_];
+ if($b =~ m|^(.*)-([^-]+)-([^-]+)\.[^\.]+\.rpm|)
+ { &build($1, $nv, $_); }
+}
+
sub build
{
my $pkg = shift;
my $newversion = shift;
+ my $pkgrpm = shift;
my $found = 0;
- my ($pkge, $pkgrpm, $version, $release);
+ my ($pkge, $version, $release, $email);
my ($spec, @url, $basename);
my (@rpms, %specvars);
print "===> Building $pkg $newversion\n";
- opendir(MP, $mount_point) or die "$mount_point is not a directory";
- @rpms = readdir(MP);
-
$pkge = $pkg;
$pkge =~ s/\+/\\\+/;
- foreach (@rpms)
+ # Search for file if we do not use --src
+ if(!$config{src})
{
- if(m|^($pkge)-([^-]+)-([^-]+)\.[^\.]+\.rpm|)
- { $pkgrpm = $_; $version = $2; $release = $3; $found = 1;}
+ opendir(MP, $config{mountpoint}) or die "$config{mountpoint} is not a directory";
+ @rpms = readdir(MP);
+
+ foreach (@rpms)
+ {
+ if(m|^($pkge)-([^-]+)-([^-]+)\.[^\.]+\.rpm|)
+ { $pkgrpm = $_; $version = $2; $release = $3; $found = 1;}
+ }
+
+ closedir(MP);
+
+ if($found == 0) { print "Package $pkg has no source, skipping.\n\n"; return; }
+ }
+ else
+ {
+ my $pkgrpm_basename = qx[basename $pkgrpm];
+ if($pkgrpm_basename =~ m|^($pkge)-([^-]+)-([^-]+)\.[^\.]+\.rpm|)
+ { $version = $2; $release = $3; $found = 1;}
}
- closedir(MP);
-
- if($found == 0) { print "Package $pkg has no source, skipping.\n\n"; return; }
-
- if (0) {
- system("rpm -i $pkgrpm");
+ if ($config{src}) {
+ system("rpm -ivh $pkgrpm");
+ wait;
} else {
- system("/usr/sbin/urpmi --auto --force ".$mount_point.$pkgrpm);
+ system("sudo /usr/sbin/urpmi --auto --force ".$config{mountpoint}."/".$pkgrpm);
#{ print "Error while urpmi $pkgrpm\n"; return; };
wait;
- system("/usr/sbin/urpmi --install-src --force ".$mount_point.$pkgrpm);
+ system("/usr/sbin/urpmi --install-src --force ".$config{mountpoint}."/".$pkgrpm);
#{ print "Error while urpmi --install-src $pkgrpm\n"; return; }
wait;
}
@@ -74,15 +95,27 @@ sub build
while(<SPECFILE>)
{
- s/$version/$newversion/g if($_ !~ /Patch/i);
+ # s/// version
+ s/\%define\s+version\s+$version/\%define version $newversion/g;
+ s/Version:\s+$version/Version: $newversion/g;
+
$spec .= $_;
- $spec =~ s/\%define release (.*)/\%define release $defaultrelease/;
+ $spec =~ s/\%define(\s+)release(\s+)(.*)/\%define release $defaultrelease/;
push(@url, $2) if(/(Source|Url|Source0):\s+(\S+)/i);
# For %vars !
$specvars{$1} = $2 if(/\%define\s+(.+?)\s+(.+)/g);
$specvars{version} = $1 if(!$specvars{version} && /Version:\s+(.+)/gi);
$specvars{name} = $1 if(!$specvars{name} && /Name:\s+(.+)/gi);
+
+ if(/\%changelog/)
+ {
+ $email = $ENV{EMAIL} ||
+ qx[awk -F: '/$ENV{USER}/{print \$5}' /etc/passwd|tr -d '\n']." <$ENV{USER}\@mandrakesoft.com> ";
+ $spec .= "* ".qx[LC_TIME=C date '+%a %b %d %Y'|tr -d '\n']." ".$email.
+ " ".$newversion."-".$defaultrelease."\n";
+ $spec .= "- New release $newversion\n\n";
+ }
}
close(SPECFILE);
@@ -127,21 +160,26 @@ sub build
# If gz was downloaded, recompressing it in bz2
if(-f $basename)
{
- print "Bzipping $basename... ";
system("bzme ".$basename);
- print "done\n";
$basename =~ s/bz2/gz/;
}
}
-
+
$found = 1 if(-e $basename);
$basename =~ s/bz2/gz/;
$found = 1 if(-e $basename);
}
- if(!$found) { print "Unable to download file: URL is not valid ! :-/\n\n"; return; }
+ if(!$found)
+ { print "Unable to download file: URL is not valid ! :-/\n\n"; return; }
- system("rpm -ba ../SPECS/".$pkg.".spec");
+ if(system("rpm -ba ../SPECS/".$pkg.".spec"))
+ {
+ wait;
+ print "Build fails: building source only\n";
+ exit;
+ system("rpm -bs ../SPECS/".$pkg.".spec");
+ }
wait;
}
@@ -156,28 +194,52 @@ sub parse_argv
my $conf = AppConfig->new({ CASE => 1 });
$conf->define("rpmmon",
- { ARGS => "!", DEFAULT => 0, ARGCOUNT => AppConfig::ARGCOUNT_NONE }
+ { ARGS => "=s",
+ ALIAS => "r",
+ ARGCOUNT => AppConfig::ARGCOUNT_NONE }
+ );
+
+ $conf->define("mountpoint",
+ { ARGS => "=s",
+ ALIAS => "m",
+ DEFAULT => "/mnt/BIG/distrib/cooker/SRPMS/",
+ ARGCOUNT => AppConfig::ARGCOUNT_ONE }
+ );
+
+ $conf->define("src",
+ { ARGS => "=s",
+ ALIAS => "s",
+ ARGCOUNT => AppConfig::ARGCOUNT_ONE }
);
+
$conf->args();
$config{rpmmon} = $conf->get("rpmmon");
+ $config{mountpoint} = $conf->get("mountpoint");
+ $config{src} = $conf->get("src");
+
}
sub usage
{
- print "rpmbuildupdate v0.1 helps you build up to date RPMs.\n\n";
+ print "rpmbuildupdate v0.2 helps you build up to date RPMs.\n\n";
print "By Julien Danjou <jdanjou\@mandrakesoft.com>\n";
print "Copyright (c) 2003 by MandrakeSoft.\n";
print "This is free software under the GPL License.\n";
print "Usage: rpmbuildupdate [options] [pkg] [newversion]\n\n";
- print " --rpmmon <file>: Parse output of rpmmon from file\n\n";
+ print " --rpmmon <file>: Parse output of rpmmon from file\n";
+ print " -m <mount point>: Specify mount point of \n";
+ print " --src <src.rpm file> <new version>: Build new version from this source RPM\n";
exit 0;
}
sub parse_rpmmon
{
- open(RPMMON, shift());
+ my $f;
+ ($f = shift());
+ -f $f or die "Error: $f is not a file.\n";
+ open(RPMMON, $f);
while(<RPMMON>)
{ &build($1, $3) if(/^\s+(\S+)\s+(\S+)\s+(\S+)$/ && ! /Package/);
&build($2, $4) if(/^(\S+)\s+(\S+)\s+(\S+)\s+(\S+)$/ && ! /Package/); }
@@ -187,18 +249,23 @@ sub parse_rpmmon
sub main
{
&parse_argv;
-
&wget_check;
- if(!$config{rpmmon})
+ if($config{rpmmon})
+ {
+ -d $config{mountpoint} or die $config{mountpoint}." is not a directory.\n";
+ &parse_rpmmon($config{rpmmon});
+ }
+ elsif($config{src} && $ARGV[0]) { &build_from_src($config{src}, $ARGV[0]); }
+ elsif($ARGV[0] && $ARGV[1])
{
- my $pkg = shift @ARGV or &usage;
- my $version = shift @ARGV or &usage;
- &build($pkg, $version);
+ -d $config{mountpoint} or die $config{mountpoint}." is not a directory.\n";
+ &build($ARGV[0], $ARGV[1]);
}
else
- { &parse_rpmmon($ARGV[0]); }
+ { &usage; }
+
}
&main;