nicolas vigier <[email protected]> writes:
> I was also thinking about doing a script to automate creating tarballs
> from svn/git repository for Mageia software (and can be extended to
> other software maybe). Instead of adding rules in all makefiles to
> generate tarballs. So you could retrieve mgarepo with this command :
> $ get-tarball mgarepo 1.9.8
> And it creates mgarepo-1.9.8.tar.bz2
>
> And we could use it to automate sending of tarballs on the mirror.
I used the attached script to create tarballs of Mandriva projects from
/soft SVN
It's pretty simple for now, but we could extend it to support git.
#!/usr/bin/perl
use Getopt::Long;
use Pod::Usage;
my %options;
GetOptions(
"l" => sub { $options{local} = 1 },
) or pod2usage(1);
my ($action, @args) = @ARGV;
my $mdvsoft = MDV::Soft->new(%options);
if ($mdvsoft->can($action)) {
$mdvsoft->$action(@args);
} else {
pod2usage(1);
}
exit(0);
package MDV::Soft;
use SVN::Client;
use File::Temp qw(tempdir);
use MDK::Common;
sub new {
my ($class, %options) = @_;
bless {
svn => SVN::Client->new,
branch => 'trunk',
root => 'svn+ssh://svn.mandriva.com/svn/soft',
opts => \%options,
}, $class;
}
sub export {
my ($self, $name, $o_destdir) = @_;
unless ($name) {
warn "Can't export without a module name";
return;
}
my $module_url = $self->{opts}{local} ? $ENV{PWD} : $self->{root} . '/' .
$name . '/' . $self->{branch};
my $tmp_dir = tempdir(CLEANUP => 1);
my $export_dir = $tmp_dir . '/' . $name;
$self->{svn}->export($module_url, $export_dir, undef, undef)
or die "Can't checkout $module_url";
my $config = read_config($export_dir);
my $distname = $config->{NAME} . '-' . $config->{VERSION};
$distname .= '-' . $config->{RELEASE} if $config->{RELEASE} > 1;
rename($export_dir, $tmp_dir . '/' . $distname);
my $tarball = $distname . '.tar.bz2';
$tarball = $o_destdir . '/' . $tarball if -d $o_destdir;
system('tar', '-C', $tmp_dir, '-cjf', $tarball, $distname) == 0
or die "Can't compress $distname";
print "Exported $tarball\n";
1;
}
sub read_config {
my ($config_dir) = @_;
my $config = {};
my @mandatory_vars = qw(NAME VERSION);
my @config_vars = (@mandatory_vars, qw(RELEASE));
my $config_name = 'Makefile';
foreach my $line (cat_($config_dir . '/' . $config_name)) {
foreach my $var (@config_vars) {
$line =~ /^$var\s*:?=\s*([^#]+)/ and $config->{$var} = chomp_($1);
}
}
foreach (@mandatory_vars) {
$config->{$_} or die "Can't find config variable $_ in $config_name";
}
$config;
}
1;
--
Olivier Blin - blino