aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRunxi Yu <me@runxiyu.org>2025-04-06 10:07:12 +0800
committerRunxi Yu <me@runxiyu.org>2025-04-06 10:07:12 +0800
commit1ab2843f5542024fcbdaa23341ff723f88be7721 (patch)
treeb17cc75bd8ed93d0fe15efe9d56a61b8d1709420
parentirc: Move everything from lindenii-irc (diff)
downloadforge-1ab2843f5542024fcbdaa23341ff723f88be7721.tar.gz
forge-1ab2843f5542024fcbdaa23341ff723f88be7721.tar.zst
forge-1ab2843f5542024fcbdaa23341ff723f88be7721.zip
Don't use humanize as a dependency
-rw-r--r--forged/internal/humanize/bytes.go35
-rw-r--r--go.mod1
2 files changed, 35 insertions, 1 deletions
diff --git a/forged/internal/humanize/bytes.go b/forged/internal/humanize/bytes.go
new file mode 100644
index 0000000..bea504c
--- /dev/null
+++ b/forged/internal/humanize/bytes.go
@@ -0,0 +1,35 @@
+// SPDX-FileCopyrightText: Copyright (c) 2005-2008 Dustin Sallings <dustin@spy.net>
+// SPDX-FileCopyrightText: Copyright (c) 2025 Runxi Yu <https://runxiyu.org>
+
+// Package humanize provides functions to convert numbers into human-readable formats.
+package humanize
+
+import (
+ "fmt"
+ "math"
+)
+
+// IBytes produces a human readable representation of an IEC size.
+func IBytes(s uint64) string {
+ sizes := []string{"B", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB"}
+ return humanateBytes(s, 1024, sizes)
+}
+
+func humanateBytes(s uint64, base float64, sizes []string) string {
+ if s < 10 {
+ return fmt.Sprintf("%d B", s)
+ }
+ e := math.Floor(logn(float64(s), base))
+ suffix := sizes[int(e)]
+ val := math.Floor(float64(s)/math.Pow(base, e)*10+0.5) / 10
+ f := "%.0f %s"
+ if val < 10 {
+ f = "%.1f %s"
+ }
+
+ return fmt.Sprintf(f, val, suffix)
+}
+
+func logn(n, b float64) float64 {
+ return math.Log(n) / math.Log(b)
+}
diff --git a/go.mod b/go.mod
index b9eeef9..c16c28d 100644
--- a/go.mod
+++ b/go.mod
@@ -7,7 +7,6 @@ require (
github.com/alecthomas/chroma/v2 v2.16.0
github.com/alexedwards/argon2id v1.0.0
github.com/bluekeyes/go-gitdiff v0.8.1
- github.com/dustin/go-humanize v1.0.1
github.com/emersion/go-message v0.18.2
github.com/emersion/go-smtp v0.21.3
github.com/gliderlabs/ssh v0.3.8