aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarin Ivanov <[email protected]>2024-04-06 19:55:50 +0300
committerMarin Ivanov <[email protected]>2024-04-06 19:55:50 +0300
commitfae24c8056d5a97dd906238cd7d8c7e407094b3c (patch)
tree41a7a69e32d839c60d0745d6940ba2b6e1c3fd1d
parentd08ac6d01bd0adba84f9227e83b288e36eebccc1 (diff)
first useful version
-rw-r--r--.gitignore1
-rw-r--r--Makefile9
-rw-r--r--bin/.gitkeep0
-rw-r--r--main.go46
4 files changed, 56 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..7447f89
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+/bin \ No newline at end of file
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..3b0a306
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,9 @@
+rwildcard=$(foreach d,$(wildcard $(1:=/*)),$(call rwildcard,$d,$2) $(filter $(subst *,%,$2),$d))
+
+.PHONY: all
+
+bin/retaart: Makefile $(call rwildcard,.,*.go)
+ CGO_ENABLED=0 go build -ldflags="-extldflags=-static" -o bin/retaart .
+
+install: bin/retaart
+ cp bin/retaart ~/bin/
diff --git a/bin/.gitkeep b/bin/.gitkeep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/bin/.gitkeep
diff --git a/main.go b/main.go
index 95de8b9..d880612 100644
--- a/main.go
+++ b/main.go
@@ -1,9 +1,55 @@
package main
import (
+ "archive/tar"
+ "io"
+ "log"
+ "os"
+
flag "github.com/spf13/pflag"
)
func main() {
+ var prefix string
+ var verbose int
+ flag.CountVarP(&verbose, "verbose", "v", "add verbosity")
+ flag.StringVarP(&prefix, "prefix", "p", "", "adds prefix to filenames")
flag.Parse()
+
+ if err := process(prefix, verbose); err != nil {
+ log.Fatal(err)
+ }
+
+}
+
+func process(prefix string, verbose int) error {
+ tr := tar.NewReader(os.Stdin)
+ tw := tar.NewWriter(os.Stdout)
+ defer tw.Close()
+ for {
+ hdr, err := tr.Next()
+ if err == io.EOF {
+ break
+ } else if err != nil {
+ return err
+ }
+
+ if verbose >= 1 {
+ log.Printf("file: %s", hdr.Name)
+ }
+
+ hdr.Name = prefix + hdr.Name
+
+ if err = tw.WriteHeader(hdr); err != nil {
+ return err
+ }
+ if _, err := io.Copy(tw, tr); err != nil {
+ return err
+ }
+ }
+ if err := tw.Flush(); err != nil {
+ return err
+ }
+
+ return nil
}