diff options
| author | Marin Ivanov <[email protected]> | 2024-04-06 19:55:50 +0300 |
|---|---|---|
| committer | Marin Ivanov <[email protected]> | 2024-04-06 19:55:50 +0300 |
| commit | fae24c8056d5a97dd906238cd7d8c7e407094b3c (patch) | |
| tree | 41a7a69e32d839c60d0745d6940ba2b6e1c3fd1d | |
| parent | d08ac6d01bd0adba84f9227e83b288e36eebccc1 (diff) | |
first useful version
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | Makefile | 9 | ||||
| -rw-r--r-- | bin/.gitkeep | 0 | ||||
| -rw-r--r-- | main.go | 46 |
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 @@ -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 } |
