"rpmx"+"unzipx" replaced by the general "exx" (.rpm/.zip += .a/.deb)
authorshort <>
Thu, 13 Jun 2002 22:26:49 +0000 (22:26 +0000)
committershort <>
Thu, 13 Jun 2002 22:26:49 +0000 (22:26 +0000)
bin/exx [new file with mode: 0755]
bin/rpmx [deleted file]
bin/unzipx [deleted file]

diff --git a/bin/exx b/bin/exx
new file mode 100755 (executable)
index 0000000..df78524
--- /dev/null
+++ b/bin/exx
@@ -0,0 +1,43 @@
+#! /usr/bin/perl
+#
+#      $Id$
+
+use strict;
+use warnings;
+
+use IO::Handle;
+use Cwd qw(chdir fastgetcwd);
+
+use constant FORMATS=>{
+       "rpm"=>'rpm2cpio !|cpio -id --quiet',   #-v #FIXME: --sparse doesn't work, why?
+       "zip"=>'unzip -Lq !',
+       "a"  =>'ar x !',
+       "deb"=>'ar x !;for i in *.tar.gz;do j=`basename $i .tar.gz`;mkdir -p $j;cd $j;tar xzf ../$i;cd ..;rm -f $i;done',
+       };
+
+die "Syntax: $0 <pathname((".join("|",map(".$_",sort keys %{+FORMATS})).")|=<ext>)>..."
+               if !@ARGV;
+
+my $origdir=fastgetcwd;
+for my $fname (@ARGV) {
+       $fname=~m#([^/]+)([.=])(\L[^./]+\E)$# or die "Extension not found for archive: $fname";
+       my($path,$base,$ext)=($`,$1,$3);
+       my($pathname)=($2 eq "=" ? "$path$base" : $fname);
+       my $cmd=FORMATS->{$ext} or die "Extension \"$ext\" not known for archive: $fname";
+       -r $pathname && !-d $pathname or die "Archive not readable: $pathname";
+       my($extdir)=(-e $base && !-d $base ? "$base.dir" : $base);
+       -d $extdir or mkdir $extdir or die "Unable to create directory \"$extdir\": $!";
+       chdir $extdir or die "Unable to chdir to \"$extdir\": $!";
+       $pathname="../$pathname" if $pathname!~m#^/#;
+       $pathname=~s/'/'\\''/g;
+       $pathname="'$pathname'";
+       $cmd=~s/!/$pathname/g;
+       $cmd="set -ex;$cmd";
+       print "\t$extdir/:\n"; STDOUT->flush();
+       my $rc;
+       $rc=system $cmd and die "$cmd (rc=".($rc>>8)."): $!";
+       }
+       continue {
+               chdir $origdir;
+               }
+exit 0;
diff --git a/bin/rpmx b/bin/rpmx
deleted file mode 100755 (executable)
index 65d3b54..0000000
--- a/bin/rpmx
+++ /dev/null
@@ -1,21 +0,0 @@
-#! /bin/sh
-if [ $# = 0 ];then
-       echo 'Syntax: $0 <file.rpm>'
-       exit 1
-       fi
-while [ $# -gt 0 ];do
-       d=`basename "$1" .rpm`
-       if [ -f "$d" ];then
-               d="$d.dir"
-               fi
-       mkdir "$d" 2>/dev/null
-       r="$1"
-       if [ "${r#/}" = "$r" ];then
-               r="../$r"
-               fi
-       (if cd "$d";then
-               rpm2cpio "$r"|cpio -id --quiet #-v #FIXME: --sparse doesn't work, why?
-               fi
-        )
-       shift
-       done
diff --git a/bin/unzipx b/bin/unzipx
deleted file mode 100755 (executable)
index 506c57c..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-#! /bin/sh
-if [ $# = 0 ];then
-       echo 'Syntax: $0 <file.zip>...'
-       exit 1
-       fi
-while [ $# -gt 0 ];do
-       d="$1"
-       d=`basename "$d" .zip`
-       d=`basename "$d" .ZIP`
-       if [ -f "$d" ];then
-               d="$d.dir"
-               fi
-       mkdir "$d" 2>/dev/null
-       r="$1"
-       if [ "${r#/}" = "$r" ];then
-               r="../$r"
-               fi
-       (if cd "$d";then
-               unzip -L "$r"
-               fi
-        )
-       shift
-       done