File fix-extracting.patch of Package rpm2docserv

Index: rpm2docserv-20250327.1888603/cmd/rpm2docserv/extractManpages.go
===================================================================
--- rpm2docserv-20250327.1888603.orig/cmd/rpm2docserv/extractManpages.go
+++ rpm2docserv-20250327.1888603/cmd/rpm2docserv/extractManpages.go
@@ -15,7 +15,6 @@
 package main
 
 import (
-	"bytes"
 	"compress/gzip"
 	"errors"
 	"fmt"
@@ -283,34 +282,40 @@ func unpackRPMs(cacheDir string, tmpdir
 		}
 
 		// XXX rpm packge als rpm.Unpack
-		rpm2cpio := exec.Command("rpm2cpio", gv.pkgs[i].Filename)
-		cpio := exec.Command("cpio", "-D", unrpmDir,
-			"--extract",
-			"--unconditional",
-			"--preserve-modification-time",
-			"--no-preserve-owner",
-			"--make-directories")
-
-		cpio.Stdin, _ = rpm2cpio.StdoutPipe()
-		cpio.Stdout = os.Stdout
-		var stderrb bytes.Buffer
-		cpio.Stderr = &stderrb
-		err = cpio.Start()
+		// rpm2cpio := exec.Command("rpm2cpio", gv.pkgs[i].Filename)
+		// cpio := exec.Command("cpio", "-D", unrpmDir,
+		// 	"--extract",
+		// 	"--unconditional",
+		// 	"--preserve-modification-time",
+		// 	"--no-preserve-owner",
+		// 	"--make-directories")
+
+		// cpio.Stdin, _ = rpm2cpio.StdoutPipe()
+		// cpio.Stdout = os.Stdout
+		// var stderrb bytes.Buffer
+		// cpio.Stderr = &stderrb
+		// err = cpio.Start()
+		// if err != nil {
+		// 	return fmt.Errorf("Error invoking cpio (%s): %v, stderr: %s",  filepath.Base(gv.pkgs[i].Filename), err, stderrb.String())
+		// }
+		// err = rpm2cpio.Run()
+		// if err != nil {
+		// 	return fmt.Errorf("Error invoking rpm2cpio: %v", err)
+		// }
+		// err = cpio.Wait()
+		// if err != nil {
+		// 	return fmt.Errorf("Error waiting for cpio (%s): %v, stderr: %s", filepath.Base(gv.pkgs[i].Filename), err, stderrb.String())
+		// }
+		bsdtar := exec.Command("bsdtar", "-C", unrpmDir, "-xf", gv.pkgs[i].Filename)
+		// TODO: investigate if we can just unpack the man dir structure and save a lot of temp space, "usr/share/man")
+		bsdtar_output, bsdtar_err := bsdtar.CombinedOutput()
 		if err != nil {
-			return fmt.Errorf("Error invoking cpio (%s): %v, stderr: %s",  filepath.Base(gv.pkgs[i].Filename), err, stderrb.String())
-		}
-		err = rpm2cpio.Run()
-		if err != nil {
-			return fmt.Errorf("Error invoking rpm2cpio: %v", err)
-		}
-		err = cpio.Wait()
-		if err != nil {
-			return fmt.Errorf("Error waiting for cpio (%s): %v, stderr: %s", filepath.Base(gv.pkgs[i].Filename), err, stderrb.String())
+		  return fmt.Errorf("Error invoking bsdtar: %v Output: %s", bsdtar_err, bsdtar_output)
 		}
 
 		// If run as non root, make all files read-/writable for the user.
 		if os.Getuid() != 0 {
-			chmod := exec.Command("chmod", "u+rw", "-R", unrpmDir)
+			chmod := exec.Command("chmod", "a+rX,u+w", "-R", unrpmDir)
 			if err = chmod.Run(); err != nil {
 				return fmt.Errorf("Error setting u+w permissions: %v", err)
 			}
openSUSE Build Service is sponsored by