mirror of
https://github.com/octoleo/syncthing.git
synced 2024-12-22 19:08:58 +00:00
This commit is contained in:
parent
1475c0344a
commit
61b9f7bd55
@ -87,11 +87,26 @@ func CheckFreeSpace(req Size, usage fs.Usage) error {
|
|||||||
if req.Percentage() {
|
if req.Percentage() {
|
||||||
freePct := (float64(usage.Free) / float64(usage.Total)) * 100
|
freePct := (float64(usage.Free) / float64(usage.Total)) * 100
|
||||||
if freePct < val {
|
if freePct < val {
|
||||||
return fmt.Errorf("%f %% < %v", freePct, req)
|
return fmt.Errorf("%.1f %% < %v", freePct, req)
|
||||||
}
|
}
|
||||||
} else if float64(usage.Free) < val {
|
} else if float64(usage.Free) < val {
|
||||||
return fmt.Errorf("%v < %v", usage.Free, req)
|
return fmt.Errorf("%sB < %v", formatSI(usage.Free), req)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func formatSI(b int64) string {
|
||||||
|
switch {
|
||||||
|
case b < 1000:
|
||||||
|
return fmt.Sprintf("%d ", b)
|
||||||
|
case b < 1000*1000:
|
||||||
|
return fmt.Sprintf("%.1f K", float64(b)/1000)
|
||||||
|
case b < 1000*1000*1000:
|
||||||
|
return fmt.Sprintf("%.1f M", float64(b)/(1000*1000))
|
||||||
|
case b < 1000*1000*1000*1000:
|
||||||
|
return fmt.Sprintf("%.1f G", float64(b)/(1000*1000*1000))
|
||||||
|
default:
|
||||||
|
return fmt.Sprintf("%.1f T", float64(b)/(1000*1000*1000*1000))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -91,3 +91,42 @@ func TestParseSize(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestFormatSI(t *testing.T) {
|
||||||
|
cases := []struct {
|
||||||
|
bytes int64
|
||||||
|
result string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
bytes: 0,
|
||||||
|
result: "0 ", // space for unit
|
||||||
|
},
|
||||||
|
{
|
||||||
|
bytes: 999,
|
||||||
|
result: "999 ",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
bytes: 1000,
|
||||||
|
result: "1.0 K",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
bytes: 1023 * 1000,
|
||||||
|
result: "1.0 M",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
bytes: 5 * 1000 * 1000 * 1000,
|
||||||
|
result: "5.0 G",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
bytes: 50000 * 1000 * 1000 * 1000 * 1000,
|
||||||
|
result: "50000.0 T",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tc := range cases {
|
||||||
|
res := formatSI(tc.bytes)
|
||||||
|
if res != tc.result {
|
||||||
|
t.Errorf("formatSI(%d) => %q, expected %q", tc.bytes, res, tc.result)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user