aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/io/github/jshipit
diff options
context:
space:
mode:
authoraxtloss <axtlos@getcryst.al>2023-05-25 20:24:13 +0200
committeraxtloss <axtlos@getcryst.al>2023-05-25 20:24:13 +0200
commit88ff8a69891ad8193876bd6fcad7524a57151e80 (patch)
treedce89539afc6ca1e23c5ebbe7fc39e4bf1b5ea27 /src/main/java/io/github/jshipit
parent9c7f48af6e8b43960e0f51a9d1bca249421be685 (diff)
downloadjshipit-88ff8a69891ad8193876bd6fcad7524a57151e80.tar.gz
jshipit-88ff8a69891ad8193876bd6fcad7524a57151e80.tar.bz2
Change tar extract method
Diffstat (limited to 'src/main/java/io/github/jshipit')
-rw-r--r--src/main/java/io/github/jshipit/BlobDownloader.java9
-rw-r--r--src/main/java/io/github/jshipit/SysUtils.java29
-rw-r--r--src/main/java/io/github/jshipit/TarManager.java74
3 files changed, 24 insertions, 88 deletions
diff --git a/src/main/java/io/github/jshipit/BlobDownloader.java b/src/main/java/io/github/jshipit/BlobDownloader.java
index 7303cd3..ea8b09c 100644
--- a/src/main/java/io/github/jshipit/BlobDownloader.java
+++ b/src/main/java/io/github/jshipit/BlobDownloader.java
@@ -98,13 +98,8 @@ public class BlobDownloader extends Thread {
if (extracted.exists()) {
extracted.delete();
}
- TarManager tarManager = new TarManager();
- try {
- tarManager.untar(tmpdir + "/" + digest.replace("sha256:", "") + ".tar.gz", extracted);
- } catch (IOException e) {
- System.out.println("Failed to extract blob "+digest);
- e.printStackTrace();
- }
+ SysUtils tarManager = new SysUtils();
+ tarManager.untar(tmpdir + "/" + digest.replace("sha256:", "") + ".tar.gz", tmpdir + "/" + digest.replace("sha256:", ""));
File tar = new File(tmpdir + "/" + digest.replace("sha256:", "") + ".tar.gz");
if (tar.exists()) {
tar.delete();
diff --git a/src/main/java/io/github/jshipit/SysUtils.java b/src/main/java/io/github/jshipit/SysUtils.java
index 3ea48fb..877b61e 100644
--- a/src/main/java/io/github/jshipit/SysUtils.java
+++ b/src/main/java/io/github/jshipit/SysUtils.java
@@ -1,19 +1,34 @@
package io.github.jshipit;
-import com.sun.jna.Library;
-import com.sun.jna.Native;
import com.sun.jna.Platform;
+import java.io.File;
+
public class SysUtils {
- interface CLibrary extends Library {
- public int chmod(String path, int mode);
+ public void chmod(String path, int mode) {
+ ProcessBuilder pb = new ProcessBuilder("chmod", Integer.toString(mode), path);
+ pb.inheritIO();
+ try {
+ Process p = pb.start();
+ p.waitFor();
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
}
- public void chmod(String path, int mode) {
- CLibrary libc = (CLibrary) Native.load("c", CLibrary.class);
- libc.chmod(path, mode);
+ public void untar(String in, String out) {
+ new File(out).mkdirs();
+ ProcessBuilder pb = new ProcessBuilder("tar", "-xf", in, "-C", out);
+ pb.inheritIO();
+ try {
+ Process p = pb.start();
+ p.waitFor();
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
}
+
public void overlayMount(String[] lower, String upper, String target, String work) {
if (Platform.isLinux()) {
diff --git a/src/main/java/io/github/jshipit/TarManager.java b/src/main/java/io/github/jshipit/TarManager.java
deleted file mode 100644
index 41577a9..0000000
--- a/src/main/java/io/github/jshipit/TarManager.java
+++ /dev/null
@@ -1,74 +0,0 @@
-package io.github.jshipit;
-
-import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
-import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
-import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream;
-import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream;
-import org.apache.commons.compress.utils.IOUtils;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-
-public class TarManager {
-
- public TarManager() {
-
- }
-
- public void tar(String name, File... files) throws IOException {
- try (TarArchiveOutputStream out = getTarArchiveOutputStream(name)){
- for (File file : files){
- addToArchive(out, file, ".");
- }
- }
- }
-
- public void untar(String in, File out) throws IOException {
- SysUtils chmod = new SysUtils();
- try (TarArchiveInputStream fin = new TarArchiveInputStream(new GzipCompressorInputStream(new FileInputStream(in)))){
- TarArchiveEntry entry;
- while ((entry = fin.getNextTarEntry()) != null) {
- if (entry.isDirectory()) {
- continue;
- }
- File curfile = new File(out, entry.getName());
- File parent = curfile.getParentFile();
- if (!parent.exists()) {
- parent.mkdirs();
- }
- chmod.chmod(curfile.getPath(), entry.getMode());
- IOUtils.copy(fin, new FileOutputStream(curfile));
- }
- }
- }
-
- private TarArchiveOutputStream getTarArchiveOutputStream(String name) throws IOException {
- TarArchiveOutputStream taos = new TarArchiveOutputStream(new FileOutputStream(name));
- taos.setBigNumberMode(TarArchiveOutputStream.BIGNUMBER_STAR);
- taos.setLongFileMode(TarArchiveOutputStream.LONGFILE_GNU);
- taos.setAddPaxHeadersForNonAsciiNames(true);
- return taos;
- }
-
- private void addToArchive(TarArchiveOutputStream out, File file, String dir) throws IOException {
- String entry = dir + File.separator + file.getName();
- if (file.isFile()){
- out.putArchiveEntry(new TarArchiveEntry(file, entry));
- try (FileInputStream in = new FileInputStream(file)){
- IOUtils.copy(in, out);
- }
- out.closeArchiveEntry();
- } else if (file.isDirectory()) {
- File[] children = file.listFiles();
- if (children != null){
- for (File child : children){
- addToArchive(out, child, entry);
- }
- }
- } else {
- System.out.println(file.getName() + " is not supported");
- }
- }
-} \ No newline at end of file