Skip to content

Commit 5675ea7

Browse files
committed
Change byte units to use decimal prefixes
This aligns with both macOS (since 10.6) and Ubuntu (since 10.10) along with standards body recommendations.
1 parent edbfa1b commit 5675ea7

File tree

3 files changed

+22
-21
lines changed

3 files changed

+22
-21
lines changed

Library/Homebrew/download_queue.rb

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -263,16 +263,17 @@ def message_with_progress(downloadable, future, message)
263263
fetched_size = downloadable.fetched_size
264264
return message[0, available_width].to_s if fetched_size.blank?
265265

266+
precision = 1
266267
size_length = 5
267268
unit_length = 2
268-
size_formatting_string = "%<size>#{size_length}.1f%<unit>#{unit_length}s"
269-
size, unit = disk_usage_readable_size_unit(fetched_size, per_thousand: true)
269+
size_formatting_string = "%<size>#{size_length}.#{precision}f%<unit>#{unit_length}s"
270+
size, unit = disk_usage_readable_size_unit(fetched_size, precision:)
270271
formatted_fetched_size = format(size_formatting_string, size:, unit:)
271272

272273
formatted_total_size = if future.fulfilled?
273274
formatted_fetched_size
274275
elsif (total_size = downloadable.total_size)
275-
size, unit = disk_usage_readable_size_unit(total_size, per_thousand: true)
276+
size, unit = disk_usage_readable_size_unit(total_size, precision:)
276277
format(size_formatting_string, size:, unit:)
277278
else
278279
# fill in the missing spaces for the size if we don't have it yet.

Library/Homebrew/extend/kernel.rb

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -204,20 +204,20 @@ def ensure_executable!(name, formula_name = nil, reason: "", latest: false)
204204
Formulary.factory_stub(formula_name).ensure_installed!(reason:, latest:).opt_bin/name
205205
end
206206

207-
sig { params(size_in_bytes: T.any(Integer, Float)).returns([T.any(Integer, Float), String]) }
208-
def disk_usage_readable_size_unit(size_in_bytes)
209-
if size_in_bytes.abs >= 1_048_576_000
210-
size = size_in_bytes.to_f / 1_073_741_824
211-
unit = "GB"
212-
elsif size_in_bytes.abs >= 1_024_000
213-
size = size_in_bytes.to_f / 1_048_576
214-
unit = "MB"
215-
elsif size_in_bytes.abs >= 1_000
216-
size = size_in_bytes.to_f / 1_024
217-
unit = "KB"
218-
else
219-
size = size_in_bytes
220-
unit = "B"
207+
sig {
208+
params(
209+
size_in_bytes: T.any(Integer, Float),
210+
precision: T.nilable(Integer),
211+
).returns([T.any(Integer, Float), String])
212+
}
213+
def disk_usage_readable_size_unit(size_in_bytes, precision: nil)
214+
size = size_in_bytes
215+
unit = "B"
216+
%w[KB MB GB].each do |next_unit|
217+
break if (precision ? size.abs.round(precision) : size.abs) < 1000
218+
219+
size /= 1000.0
220+
unit = next_unit
221221
end
222222
[size, unit]
223223
end

Library/Homebrew/test/extend/kernel_spec.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,11 +71,11 @@
7171

7272
specify "#disk_usage_readable" do
7373
expect(disk_usage_readable(1)).to eq("1B")
74-
expect(disk_usage_readable(1000)).to eq("1000B")
75-
expect(disk_usage_readable(1024)).to eq("1KB")
74+
expect(disk_usage_readable(999)).to eq("999B")
75+
expect(disk_usage_readable(1000)).to eq("1KB")
7676
expect(disk_usage_readable(1025)).to eq("1KB")
77-
expect(disk_usage_readable(4_404_020)).to eq("4.2MB")
78-
expect(disk_usage_readable(4_509_715_660)).to eq("4.2GB")
77+
expect(disk_usage_readable(4_404_020)).to eq("4.4MB")
78+
expect(disk_usage_readable(4_509_715_660)).to eq("4.5GB")
7979
end
8080

8181
describe "#number_readable" do

0 commit comments

Comments
 (0)