From c49854f3f61938d2c7dd42aac584870fa4c8267b Mon Sep 17 00:00:00 2001 From: Georgy Date: Mon, 31 Mar 2025 11:45:58 +0300 Subject: [PATCH 1/2] feat: add get-size arg --- progzer.go | 13 ++++++++++ progzer_test.go | 63 +++++++++++++++++++++++++++++++++++++++++++++++++ test.sh | 9 +++---- 3 files changed, 79 insertions(+), 6 deletions(-) diff --git a/progzer.go b/progzer.go index 72b3f76..cce6d1f 100644 --- a/progzer.go +++ b/progzer.go @@ -26,6 +26,7 @@ type config struct { barSize int showVersion bool debug bool + getSizePath string } // Progress holds the state of the progress bar @@ -50,6 +51,17 @@ func main() { os.Exit(0) } + // Get file size and exit if requested + if cfg.getSizePath != "" { + fileInfo, err := os.Stat(cfg.getSizePath) + if err != nil { + fmt.Fprintf(os.Stderr, "Error: %s\n", err) + os.Exit(1) + } + fmt.Printf("%d\n", fileInfo.Size()) + os.Exit(0) + } + // Create a new progress bar progress := NewProgress(cfg) @@ -78,6 +90,7 @@ func parseFlags() config { flag.IntVar(&cfg.barSize, "bar-size", DefaultBarSize, "Size of the progress bar in characters") flag.BoolVar(&cfg.showVersion, "version", false, "Show version information and exit") flag.BoolVar(&cfg.debug, "debug", false, "Debug show each progress on new line") + flag.StringVar(&cfg.getSizePath, "get-size", "", "Get size of the specified file in bytes and exit") flag.Parse() return cfg diff --git a/progzer_test.go b/progzer_test.go index 17a3a22..60d1d19 100644 --- a/progzer_test.go +++ b/progzer_test.go @@ -2,8 +2,10 @@ package main import ( "bytes" + "fmt" "io" "os" + "strconv" "strings" "testing" "time" @@ -244,6 +246,7 @@ func TestConfigCustomValues(t *testing.T) { quiet: true, barSize: 20, showVersion: true, + getSizePath: "testfile.txt", } // Verify the custom values @@ -262,4 +265,64 @@ func TestConfigCustomValues(t *testing.T) { if cfg.showVersion != true { t.Errorf("Expected showVersion to be true, got %v", cfg.showVersion) } + if cfg.getSizePath != "testfile.txt" { + t.Errorf("Expected getSizePath to be 'testfile.txt', got %v", cfg.getSizePath) + } +} + +// TestGetSize tests the --get-size functionality +func TestGetSize(t *testing.T) { + // Create a temporary test file + testFile, err := os.CreateTemp("", "progzer-test-*") + if err != nil { + t.Fatalf("Failed to create temp file: %v", err) + } + defer os.Remove(testFile.Name()) + + // Write some data to the file + testData := []byte("This is a test file for the --get-size functionality") + if _, err := testFile.Write(testData); err != nil { + t.Fatalf("Failed to write to temp file: %v", err) + } + testFile.Close() + + // Get the file size using os.Stat + fileInfo, err := os.Stat(testFile.Name()) + if err != nil { + t.Fatalf("Failed to stat temp file: %v", err) + } + expectedSize := fileInfo.Size() + + // Redirect stdout to capture the output + oldStdout := os.Stdout + r, w, _ := os.Pipe() + os.Stdout = w + + // We can't directly test the main function since it calls os.Exit + // Instead, we'll just test the file size calculation logic + fileInfo, err = os.Stat(testFile.Name()) + if err != nil { + t.Errorf("Error getting file size: %v", err) + } + fmt.Printf("%d\n", fileInfo.Size()) + + // Restore stdout + w.Close() + os.Stdout = oldStdout + + // Read the captured output + var buf bytes.Buffer + io.Copy(&buf, r) + output := strings.TrimSpace(buf.String()) + + // Convert output to int64 for comparison + outputSize, err := strconv.ParseInt(output, 10, 64) + if err != nil { + t.Fatalf("Failed to parse output as int64: %v", err) + } + + // Verify the output matches the expected size + if outputSize != expectedSize { + t.Errorf("Expected size %d, got %d", expectedSize, outputSize) + } } diff --git a/test.sh b/test.sh index 15ce0ff..5ed9911 100755 --- a/test.sh +++ b/test.sh @@ -38,18 +38,15 @@ echo " arch: ${ARCH}" if [ "$OS" = "Darwin" ] && [ "$ARCH" = "arm64" ]; then BINARY="./dist/progzer-darwin-arm64" - STAT_CMD="stat -f%z" elif [ "$OS" = "Linux" ]; then if [ "$ARCH" = "aarch64" ] || [ "$ARCH" = "arm64" ]; then BINARY="./dist/progzer-linux-arm64" else BINARY="./dist/progzer-linux-amd64" fi - STAT_CMD="stat -c%s" else # default to linux-amd64 for other platforms BINARY="./dist/progzer-linux-amd64" - STAT_CMD="stat -c%s" fi # if exists local binary @@ -64,8 +61,8 @@ echo "" echo " creating a random 100MB test file..." dd if=/dev/urandom of=test_file bs=1M count=100 >/dev/null 2>&1 -# Get file size using the appropriate stat command -FILE_SIZE=$(${STAT_CMD} test_file) +# Get file size using the new --get-size flag +FILE_SIZE=$(${BINARY} --get-size test_file) FILE_SUM=$(sha256sum test_file | cut -d ' ' -f1) echo " file size (bytes): ${FILE_SIZE}" @@ -78,7 +75,7 @@ echo "" ${BINARY} --size "${FILE_SIZE}" test_file.gz CHECK_SUM=$( # shellcheck disable=SC2094 - ${BINARY} --size "$(${STAT_CMD} test_file.gz)" Date: Mon, 31 Mar 2025 13:14:57 +0300 Subject: [PATCH 2/2] add demo --- README.md | 6 ++++++ demo/gzip-size.cast | 22 ++++++++++++++++++++++ demo/gzip-size.gif | Bin 0 -> 23642 bytes demo/indeterminate.cast | 22 ++++++++++++++++++++++ demo/indeterminate.gif | Bin 0 -> 42791 bytes 5 files changed, 50 insertions(+) create mode 100644 demo/gzip-size.cast create mode 100644 demo/gzip-size.gif create mode 100644 demo/indeterminate.cast create mode 100644 demo/indeterminate.gif diff --git a/README.md b/README.md index 10c7ed4..ba5026f 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,12 @@ Progzer is a command-line utility for displaying progress of Unix commands that support pipes, such as `gzip`, `tar`, etc. It reads from stdin and writes to stdout while displaying a progress bar on stderr. +## Demo + +![Gzip size](demo/gzip-size.gif) + +![Indeterminate](demo/indeterminate.gif) + ## Features - Displays a progress bar with percentage completion (when total size is known) diff --git a/demo/gzip-size.cast b/demo/gzip-size.cast new file mode 100644 index 0000000..e48d45f --- /dev/null +++ b/demo/gzip-size.cast @@ -0,0 +1,22 @@ +{"version": 2, "width": 80, "height": 25, "timestamp": 1743414936, "env": {"SHELL": "/bin/zsh", "TERM": "xterm-256color"}} +[0.0, "o", "dd if=/dev/urandom of=test bs=1M count=100 > /dev/null 2>&1\r\n"] +[0.3, "o", "./progzer --size $(./progzer --get-size ./test) ./test.gz\r\n"] +[0.4, "o", "\r[=> ] 5.00MB of 100.00MB (5.0%) @ 49.42MB/s ETA: 2s"] +[0.5, "o", "\r[===> ] 10.50MB of 100.00MB (10.5%) @ 52.42MB/s ETA: 2s"] +[0.6, "o", "\r[=====> ] 16.00MB of 100.00MB (16.0%) @ 53.13MB/s ETA: 2s"] +[0.7, "o", "\r[=======> ] 21.44MB of 100.00MB (21.4%) @ 53.44MB/s ETA: 1s"] +[0.8, "o", "\r[=========> ] 26.94MB of 100.00MB (26.9%) @ 53.75MB/s ETA: 1s"] +[0.9, "o", "\r[==========> ] 32.31MB of 100.00MB (32.3%) @ 53.82MB/s ETA: 1s"] +[1.0, "o", "\r[============> ] 37.94MB of 100.00MB (37.9%) @ 54.11MB/s ETA: 1s"] +[1.1, "o", "\r[==============> ] 43.31MB of 100.00MB (43.3%) @ 54.06MB/s ETA: 1s"] +[1.2, "o", "\r[================> ] 48.75MB of 100.00MB (48.8%) @ 54.10MB/s ETA: 1s"] +[1.3, "o", "\r[==================> ] 54.19MB of 100.00MB (54.2%) @ 54.17MB/s ETA: 1s"] +[1.4, "o", "\r[====================> ] 59.81MB of 100.00MB (59.8%) @ 54.32MB/s ETA: 1s"] +[1.5, "o", "\r[======================> ] 65.25MB of 100.00MB (65.2%) @ 54.36MB/s ETA: 1s"] +[1.6, "o", "\r[========================> ] 70.88MB of 100.00MB (70.9%) @ 54.47MB/s ETA: 1s"] +[1.7, "o", "\r[=========================> ] 76.31MB of 100.00MB (76.3%) @ 54.50MB/s ETA: 0s"] +[1.8, "o", "\r[===========================> ] 81.81MB of 100.00MB (81.8%) @ 54.51MB/s ETA: 0s"] +[1.9, "o", "\r[=============================> ] 87.38MB of 100.00MB (87.4%) @ 54.60MB/s ETA: 0s"] +[2.0, "o", "\r[===============================> ] 92.94MB of 100.00MB (92.9%) @ 54.63MB/s ETA: 0s"] +[2.1, "o", "\r[=================================>] 98.44MB of 100.00MB (98.4%) @ 54.66MB/s ETA: 0s"] +[2.2, "o", "\r[==================================] 100.00MB of 100.00MB (100.0%) @ 54.63MB/s Done!\r\n"] \ No newline at end of file diff --git a/demo/gzip-size.gif b/demo/gzip-size.gif new file mode 100644 index 0000000000000000000000000000000000000000..ec5de07c9f40d7c5457e9cca5351fcc7d2ff7d11 GIT binary patch literal 23642 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

E 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 /dev/null 2>&1\r\n"] +[0.3, "o", "./progzer --size $(./progzer --get-size ./test) ./test.gz\r\n"] +[0.4, "o", "\r[=> ] 5.00MB of 100.00MB (5.0%) @ 49.42MB/s ETA: 2s"] +[0.5, "o", "\r[===> ] 10.50MB of 100.00MB (10.5%) @ 52.42MB/s ETA: 2s"] +[0.6, "o", "\r[=====> ] 16.00MB of 100.00MB (16.0%) @ 53.13MB/s ETA: 2s"] +[0.7, "o", "\r[=======> ] 21.44MB of 100.00MB (21.4%) @ 53.44MB/s ETA: 1s"] +[0.8, "o", "\r[=========> ] 26.94MB of 100.00MB (26.9%) @ 53.75MB/s ETA: 1s"] +[0.9, "o", "\r[==========> ] 32.31MB of 100.00MB (32.3%) @ 53.82MB/s ETA: 1s"] +[1.0, "o", "\r[============> ] 37.94MB of 100.00MB (37.9%) @ 54.11MB/s ETA: 1s"] +[1.1, "o", "\r[==============> ] 43.31MB of 100.00MB (43.3%) @ 54.06MB/s ETA: 1s"] +[1.2, "o", "\r[================> ] 48.75MB of 100.00MB (48.8%) @ 54.10MB/s ETA: 1s"] +[1.3, "o", "\r[==================> ] 54.19MB of 100.00MB (54.2%) @ 54.17MB/s ETA: 1s"] +[1.4, "o", "\r[====================> ] 59.81MB of 100.00MB (59.8%) @ 54.32MB/s ETA: 1s"] +[1.5, "o", "\r[======================> ] 65.25MB of 100.00MB (65.2%) @ 54.36MB/s ETA: 1s"] +[1.6, "o", "\r[========================> ] 70.88MB of 100.00MB (70.9%) @ 54.47MB/s ETA: 1s"] +[1.7, "o", "\r[=========================> ] 76.31MB of 100.00MB (76.3%) @ 54.50MB/s ETA: 0s"] +[1.8, "o", "\r[===========================> ] 81.81MB of 100.00MB (81.8%) @ 54.51MB/s ETA: 0s"] +[1.9, "o", "\r[=============================> ] 87.38MB of 100.00MB (87.4%) @ 54.60MB/s ETA: 0s"] +[2.0, "o", "\r[===============================> ] 92.94MB of 100.00MB (92.9%) @ 54.63MB/s ETA: 0s"] +[2.1, "o", "\r[=================================>] 98.44MB of 100.00MB (98.4%) @ 54.66MB/s ETA: 0s"] +[2.2, "o", "\r[==================================] 100.00MB of 100.00MB (100.0%) @ 54.63MB/s Done!\r\n"] \ No newline at end of file diff --git a/demo/indeterminate.gif b/demo/indeterminate.gif new file mode 100644 index 0000000000000000000000000000000000000000..2bfb1a41a9bf93bde5f7a29993f183c3c025a3ef GIT binary patch literal 42791 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 literal 0 HcmV?d00001