- fix arch pkg handling in rpmlist, reset SIGPIPE before execing lzmadec
authorMichael Schroeder <mls@suse.de>
Tue, 3 Apr 2012 15:53:57 +0000 (17:53 +0200)
committerMichael Schroeder <mls@suse.de>
Tue, 3 Apr 2012 15:53:57 +0000 (17:53 +0200)
Build/Arch.pm
init_buildsystem

index 6387509..5c1139f 100644 (file)
@@ -73,15 +73,26 @@ sub islzma {
   return $h eq "\3757zXZ";
 }
 
+sub lzmadec {
+  my ($fn) = @_;
+  my $nh;
+  my $pid = open($nh, '-|');
+  return undef unless defined $pid;
+  if (!$pid) {
+    $SIG{'PIPE'} = 'DEFAULT';
+    exec('xzdec', '-dc', $fn);
+    die("xzdec: $!\n");
+  }
+  return $nh;
+}
+
 sub query {
   my ($handle, %opts) = @_;
   if (ref($handle)) {
     die("arch pkg query not implemented for file handles\n");
   }
   if ($handle =~ /\.xz$/ || islzma($handle)) {
-    my $nh;
-    open($nh, '-|', 'xzdec', '-dc', $handle) || die("$handle: $!\n");
-    $handle = $nh;
+    $handle = lzmadec($handle);
   }
   my $tar = Archive::Tar->new;
   my @read = $tar->read($handle, 1, {'filter' => '^\.PKGINFO$', 'limit' => 1});
@@ -130,9 +141,7 @@ sub queryhdrmd5 {
     die("arch pkg query not implemented for file handles\n");
   }
   if ($handle =~ /\.xz$/ || islzma($handle)) {
-    my $nh;
-    open($nh, '-|', 'xzdec', '-dc', $handle) || die("$handle: $!\n");
-    $handle = $nh;
+    $handle = lzmadec($handle);
   }
   my $tar = Archive::Tar->new;
   my @read = $tar->read($handle, 1, {'filter' => '^\.PKGINFO$', 'limit' => 1});
index 9fae7c5..180ce37 100755 (executable)
@@ -471,7 +471,7 @@ downloadpkg()
     elif [ "${url:0:7}" == "http://" -o "${url:0:8}" == "https://" -o "${url:0:6}" == "ftp://" -o "${url:0:7}" == "ftps://" ] ; then
        cachedir="$(getcachedir "$url")"
        local name="$(basename "$url")"
-       name=${name/%pkg.tar.?z/arch}
+       name=${name/%.pkg.tar.?z/.arch}
        SRC="$cachedir/$name"
     else
        echo "Invalid url: $url"
@@ -709,9 +709,10 @@ else
                    cleanup_and_exit 1
                    ;;
            esac
+           # downloadpkg modified $SRC, so it has a right name for use
        fi
-       # downloadpkg modified $SRC, so it has a right name for use
-       ln -s "$SRC" "$BUILD_ROOT/.init_b_cache/rpms/$PKG.${SRC##*.}"
+       SRCSUF=${SRC/%.pkg.tar.?z/.arch}
+       ln -s "$SRC" "$BUILD_ROOT/.init_b_cache/rpms/$PKG.${SRCSUF##*.}"
        PACKAGES_TO_INSTALL="$PACKAGES_TO_INSTALL $PKG"
     done < $RPMLIST