From 0594076323b1f2863b79057820179c9cc57c8429 Mon Sep 17 00:00:00 2001 From: Felicitas Pojtinger Date: Fri, 19 Nov 2021 01:17:19 +0100 Subject: [PATCH] refactor: Use standard CLI flags and cmd naming scheme --- cmd/{stfs-archive => stbak-archive}/main.go | 16 +++--- cmd/{stfs-list => stbak-list}/main.go | 8 +-- cmd/{stfs-restore => stbak-restore}/main.go | 21 +++++--- cmd/stbak-seek/main.go | 35 +++++++++++++ cmd/{stfs-tell => stbak-tell}/main.go | 4 +- cmd/stfs-seek/main.go | 55 --------------------- 6 files changed, 62 insertions(+), 77 deletions(-) rename cmd/{stfs-archive => stbak-archive}/main.go (83%) rename cmd/{stfs-list => stbak-list}/main.go (94%) rename cmd/{stfs-restore => stbak-restore}/main.go (69%) create mode 100644 cmd/stbak-seek/main.go rename cmd/{stfs-tell => stbak-tell}/main.go (67%) delete mode 100644 cmd/stfs-seek/main.go diff --git a/cmd/stfs-archive/main.go b/cmd/stbak-archive/main.go similarity index 83% rename from cmd/stfs-archive/main.go rename to cmd/stbak-archive/main.go index 243c153..df76897 100644 --- a/cmd/stfs-archive/main.go +++ b/cmd/stbak-archive/main.go @@ -32,15 +32,15 @@ const ( ) func main() { - file := flag.String("file", "/dev/nst0", "File (tape drive or tar file) to open") - dir := flag.String("dir", ".", "Directory to add to the file") + drive := flag.String("drive", "/dev/nst0", "Tape or tar file to write to") recordSize := flag.Int("recordSize", 20, "Amount of 512-bit blocks per record") - overwrite := flag.Bool("overwrite", false, "Whether to start writing from the current position instead of from the end of the tape") + src := flag.String("src", ".", "Directory to archive") + overwrite := flag.Bool("overwrite", false, "Start writing from the current position instead of from the end of the tape/file") flag.Parse() isRegular := true - stat, err := os.Stat(*file) + stat, err := os.Stat(*drive) if err == nil { isRegular = stat.Mode().IsRegular() } else { @@ -54,12 +54,12 @@ func main() { var f *os.File if isRegular { if *overwrite { - f, err = os.OpenFile(*file, os.O_WRONLY|os.O_CREATE, 0600) + f, err = os.OpenFile(*drive, os.O_WRONLY|os.O_CREATE, 0600) if err != nil { panic(err) } } else { - f, err = os.OpenFile(*file, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0600) + f, err = os.OpenFile(*drive, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0600) if err != nil { panic(err) } @@ -67,7 +67,7 @@ func main() { // No need to go to end manually due to `os.O_APPEND` } else { - f, err = os.OpenFile(*file, os.O_APPEND|os.O_WRONLY, os.ModeCharDevice) + f, err = os.OpenFile(*drive, os.O_APPEND|os.O_WRONLY, os.ModeCharDevice) if err != nil { panic(err) } @@ -90,7 +90,7 @@ func main() { } defer tw.Close() - if err := filepath.Walk(*dir, func(path string, info fs.FileInfo, err error) error { + if err := filepath.Walk(*src, func(path string, info fs.FileInfo, err error) error { if err != nil { return err } diff --git a/cmd/stfs-list/main.go b/cmd/stbak-list/main.go similarity index 94% rename from cmd/stfs-list/main.go rename to cmd/stbak-list/main.go index dfce201..ad30278 100644 --- a/cmd/stfs-list/main.go +++ b/cmd/stbak-list/main.go @@ -13,24 +13,24 @@ import ( ) func main() { - file := flag.String("file", "/dev/nst0", "File (tape drive or tar file) to open") + drive := flag.String("drive", "/dev/nst0", "Tape or tar file to read from") recordSize := flag.Int("recordSize", 20, "Amount of 512-bit blocks per record") flag.Parse() - fileDescription, err := os.Stat(*file) + fileDescription, err := os.Stat(*drive) if err != nil { panic(err) } var f *os.File if fileDescription.Mode().IsRegular() { - f, err = os.Open(*file) + f, err = os.Open(*drive) if err != nil { panic(err) } } else { - f, err = os.OpenFile(*file, os.O_RDONLY, os.ModeCharDevice) + f, err = os.OpenFile(*drive, os.O_RDONLY, os.ModeCharDevice) if err != nil { panic(err) } diff --git a/cmd/stfs-restore/main.go b/cmd/stbak-restore/main.go similarity index 69% rename from cmd/stfs-restore/main.go rename to cmd/stbak-restore/main.go index 96b4635..226d5ad 100644 --- a/cmd/stfs-restore/main.go +++ b/cmd/stbak-restore/main.go @@ -13,27 +13,28 @@ import ( ) func main() { - file := flag.String("file", "/dev/nst0", "File (tape drive or tar file) to open") + drive := flag.String("drive", "/dev/nst0", "Tape or tar file to read from") recordSize := flag.Int("recordSize", 20, "Amount of 512-bit blocks per record") record := flag.Int("record", 0, "Record to seek too") block := flag.Int("block", 0, "Block in record to seek too") - headerOnly := flag.Bool("headerOnly", false, "Only read the header") + dst := flag.String("dst", "", "File to restore to (archived name by default)") + preview := flag.Bool("preview", false, "Only read the header") flag.Parse() - fileDescription, err := os.Stat(*file) + fileDescription, err := os.Stat(*drive) if err != nil { panic(err) } var f *os.File if fileDescription.Mode().IsRegular() { - f, err = os.Open(*file) + f, err = os.Open(*drive) if err != nil { panic(err) } } else { - f, err = os.OpenFile(*file, os.O_RDONLY, os.ModeCharDevice) + f, err = os.OpenFile(*drive, os.O_RDONLY, os.ModeCharDevice) if err != nil { panic(err) } @@ -70,13 +71,17 @@ func main() { log.Println(hdr) - if !*headerOnly { - dst, err := os.OpenFile(filepath.Base(hdr.Name), os.O_WRONLY|os.O_CREATE, hdr.FileInfo().Mode()) + if !*preview { + if *dst == "" { + *dst = filepath.Base(hdr.Name) + } + + dstFile, err := os.OpenFile(*dst, os.O_WRONLY|os.O_CREATE, hdr.FileInfo().Mode()) if err != nil { panic(err) } - if _, err := io.Copy(dst, tr); err != nil { + if _, err := io.Copy(dstFile, tr); err != nil { panic(err) } } diff --git a/cmd/stbak-seek/main.go b/cmd/stbak-seek/main.go new file mode 100644 index 0000000..0c0701b --- /dev/null +++ b/cmd/stbak-seek/main.go @@ -0,0 +1,35 @@ +package main + +import ( + "bufio" + "flag" + "os" + + "github.com/pojntfx/stfs/pkg/controllers" +) + +func main() { + drive := flag.String("drive", "/dev/nst0", "Tape drive to seek on") + recordSize := flag.Int("recordSize", 20, "Amount of 512-bit blocks per record") + record := flag.Int("record", 0, "Record to seek too") + block := flag.Int("block", 0, "Block in record to seek too") + + flag.Parse() + + f, err := os.OpenFile(*drive, os.O_RDONLY, os.ModeCharDevice) + if err != nil { + panic(err) + } + defer f.Close() + + // Seek to record + if err := controllers.SeekToRecordOnTape(f, int32(*record)); err != nil { + panic(err) + } + + // Seek to block + br := bufio.NewReaderSize(f, controllers.BlockSize**recordSize) + if _, err := br.Read(make([]byte, *block*controllers.BlockSize)); err != nil { + panic(err) + } +} diff --git a/cmd/stfs-tell/main.go b/cmd/stbak-tell/main.go similarity index 67% rename from cmd/stfs-tell/main.go rename to cmd/stbak-tell/main.go index 7db9e39..476f0ca 100644 --- a/cmd/stfs-tell/main.go +++ b/cmd/stbak-tell/main.go @@ -9,11 +9,11 @@ import ( ) func main() { - file := flag.String("file", "/dev/nst0", "File of tape drive to open") + drive := flag.String("drive", "/dev/nst0", "Tape drive to get position from") flag.Parse() - f, err := os.OpenFile(*file, os.O_RDONLY, os.ModeCharDevice) + f, err := os.OpenFile(*drive, os.O_RDONLY, os.ModeCharDevice) if err != nil { panic(err) } diff --git a/cmd/stfs-seek/main.go b/cmd/stfs-seek/main.go deleted file mode 100644 index 6ed2143..0000000 --- a/cmd/stfs-seek/main.go +++ /dev/null @@ -1,55 +0,0 @@ -package main - -import ( - "bufio" - "flag" - "os" - - "github.com/pojntfx/stfs/pkg/controllers" -) - -func main() { - file := flag.String("file", "/dev/nst0", "File (tape drive or tar file) to open") - recordSize := flag.Int("recordSize", 20, "Amount of 512-bit blocks per record") - record := flag.Int("record", 0, "Record to seek too") - block := flag.Int("block", 0, "Block in record to seek too") - - flag.Parse() - - fileDescription, err := os.Stat(*file) - if err != nil { - panic(err) - } - - var f *os.File - if fileDescription.Mode().IsRegular() { - f, err = os.Open(*file) - if err != nil { - panic(err) - } - } else { - f, err = os.OpenFile(*file, os.O_RDONLY, os.ModeCharDevice) - if err != nil { - panic(err) - } - } - defer f.Close() - - if fileDescription.Mode().IsRegular() { - // Seek to record and block - if _, err := f.Seek(int64((*recordSize*controllers.BlockSize**record)+*block*controllers.BlockSize), 0); err != nil { - panic(err) - } - } else { - // Seek to record - if err := controllers.SeekToRecordOnTape(f, int32(*record)); err != nil { - panic(err) - } - - // Seek to block - br := bufio.NewReaderSize(f, controllers.BlockSize**recordSize) - if _, err := br.Read(make([]byte, *block*controllers.BlockSize)); err != nil { - panic(err) - } - } -}