OpenPKG CVS Repository http://cvs.openpkg.org/ ____________________________________________________________________________
Server: cvs.openpkg.org Name: Michael van Elst Root: /e/openpkg/cvs Email: [EMAIL PROTECTED] Module: openpkg-re Date: 12-Nov-2002 09:42:49 Branch: HEAD Handle: 2002111208424800 Modified files: openpkg-re openpkg-build Log: -r option selects source repository (and index path). -f option selects index path (url or file path) -R option determines path to RPM binary (environment $RPM is no longer used) the file $HOME/.openpkg-build.rc is read to set command line options. Summary: Revision Changes Path 1.3 +53 -25 openpkg-re/openpkg-build ____________________________________________________________________________ Index: openpkg-re/openpkg-build ============================================================ $ cvs diff -u -r1.2 -r1.3 openpkg-build --- openpkg-re/openpkg-build 12 Nov 2002 08:15:36 -0000 1.2 +++ openpkg-re/openpkg-build 12 Nov 2002 08:42:48 -0000 1.3 @@ -31,13 +31,29 @@ use strict; +########################################################################## + use Getopt::Std; -use vars qw/$opt_f $opt_u/; -getopts('f:u'); +use vars qw/$opt_R $opt_r $opt_f $opt_u/; + +if (open(FH, "< $ENV{'HOME'}/.openpkg-build.rc")) { + while (<FH>) { + my($opt,$val) = /^\-([Rfru])\s*(.*?)\s*$/; + $val = 1 unless defined $val; + eval "\$opt_$opt = '$val';"; + } + close(FH); +} + +getopts('R:r:f:u'); +die "usage: $0 [-R rpm] [-r repository] [-f index.rdf] [-u] package\n" + unless $ARGV[0] =~ /^\S+$/; + +########################################################################## my($RPM,$PROG); -$RPM = $ENV{'RPM'} || 'rpm'; +$RPM = $opt_R || 'rpm'; $RPM = (`which $RPM` =~ m{^(/.*)})[0]; die "FATAL: cannot locate rpm in path\n" unless $RPM =~ m{^/}; ($PROG) = $0 =~ /(?:.*\/)?(.*)/; @@ -122,8 +138,8 @@ return \%map; } -sub bunzip ($) { - my($source) = @_; +sub spawn ($@) { + my($source,@argv) = @_; my($pid); pipe RFH, WFH @@ -141,10 +157,10 @@ if (ref $source) { # filehandle open STDIN,'<&='.fileno($source) or die; - exec 'bzip2','-dc'; + exec @argv; } else { # buffer - open FH, '| bzip2 -dc' or die; + open FH, '| '.join(' ',@argv) or die; print FH $source or die; close FH or die; } @@ -161,21 +177,10 @@ my($pid); my(%map); - $url .= '00INDEX.rdf.bz2'; + $url = $fn if defined $fn; + $url .= '00INDEX.rdf.bz2' if $url =~ /\/$/; - if (defined $fn) { - print "# reading index file $fn\n"; - - if ($fn =~ /\.bz2$/) { - open(FH, "< $fn") or - die "FATAL: cannot read file '$fn' ($!)\n"; - $pid = bunzip(\*FH); - close(FH); - } else { - open(RFH, "< $fn") or - die "FATAL: cannot read file '$fn' ($!)\n"; - } - } else { + if ($url =~ /^\w+:/) { # looks like URL scheme print "# fetching index $url\n"; eval { @@ -191,7 +196,23 @@ die "FATAL: cannot read build index\n" unless $res->is_success; - $pid = bunzip($res->content); + if ($url =~ /\.bz2$/) { + $pid = spawn($res->content,'bzip2','-dc'); + } else { + $pid = cat($res->content,'cat'); + } + } else { + print "# reading index file $fn\n"; + + if ($url =~ /\.bz2$/) { + open(FH, "< $url") or + die "FATAL: cannot read file '$url' ($!)\n"; + $pid = spawn(\*FH,'bzip2','-dc'); + close(FH); + } else { + open(RFH, "< $url") or + die "FATAL: cannot read file '$url' ($!)\n"; + } } eval { @@ -565,6 +586,8 @@ my($list,$c,$url,$uncond) = @_; my($spkg,$bpkg); + $url .= '/' unless $url =~ m{/$}s; + foreach (@$list) { $spkg = $_->{href}; $bpkg = target2rpm($_, $c); @@ -589,10 +612,15 @@ my($config,$url,$repository,$installed,$list,$bonly); -die "usage: $0 [-f index.rdf] [-u] package\n" unless $ARGV[0] =~ /^\S+$/; - $config = get_config(); -$url = get_release(); + +if (defined $opt_r) { + $url = $opt_r; + $url .= '/' unless $url =~ /\/$/; +} else { + $url = get_release(); +} + $installed = get_installed(); $repository = get_index($url,$opt_f); ______________________________________________________________________ The OpenPKG Project www.openpkg.org CVS Repository Commit List [EMAIL PROTECTED]