Add display of the change in closure disk size (issue #8).

This commit is contained in:
Bryan Gardiner 2022-10-02 14:29:58 -07:00
parent f735e17038
commit 082958c205
No known key found for this signature in database
GPG key ID: 53EFBCA063E6183C
3 changed files with 68 additions and 5 deletions

View file

@ -2,6 +2,8 @@
## 0.1.3 (unreleased) ## 0.1.3 (unreleased)
- Add display of the change in closure disk size (issue #8).
## 0.1.2 (2021-11-05) ## 0.1.2 (2021-11-05)
- Added a flake.nix, thanks @dadada_. - Added a flake.nix, thanks @dadada_.

63
src/nvd
View file

@ -428,6 +428,55 @@ def print_package_list(
)) ))
count += 1 count += 1
def query_closure_disk_usage_bytes(target: Path) -> Optional[int]:
# If we don't add "./" to relative paths, then newer nix will interpret the
# argument as something related to flakes instead.
target_str = str(target)
if not target_str.startswith("/"):
target_str = "./" + target_str
try:
stdout = subprocess.run(
["nix", "path-info", "--extra-experimental-features", "nix-command", "--closure-size", target_str],
stdout=PIPE,
text=True
).stdout
except FileNotFoundError:
sys.stderr.write("nvd: Couldn't run 'nix path-info --closure-size'.\n")
return None
lines = stdout.rstrip("\n").split("\n")
if len(lines) != 1:
return None
words = lines[0].split()
return int(words[-1])
BYTES_UNITS = ["KiB", "MiB", "GiB", "TiB", "PiB", "EiB"]
def render_bytes(bytes_size: int) -> str:
scaled_size: Union[int, float] = bytes_size
scaled_suffix = "B"
neg = scaled_size < 0
if neg:
scaled_size = -scaled_size
for suffix in BYTES_UNITS:
if scaled_size >= 1024:
scaled_size /= 1024
scaled_suffix = suffix
else:
break
if neg:
scaled_size = -scaled_size
if isinstance(scaled_size, int):
return f"{scaled_size:+,d}{scaled_suffix}" # B (bytes).
else:
return f"{scaled_size:+,.1f}{scaled_suffix}" # KiB or higher.
def run_list(*, root, only_selected, name_patterns): def run_list(*, root, only_selected, name_patterns):
path = Path(root) path = Path(root)
@ -581,10 +630,22 @@ def run_diff(*, root1, root2):
left_only_paths_count = len(left_closure_paths_set - right_closure_paths_set) left_only_paths_count = len(left_closure_paths_set - right_closure_paths_set)
right_only_paths_count = len(right_closure_paths_set - left_closure_paths_set) right_only_paths_count = len(right_closure_paths_set - left_closure_paths_set)
left_closure_disk_usage_bytes: Optional[int] = \
query_closure_disk_usage_bytes(left_path)
right_closure_disk_usage_bytes: Optional[int] = \
query_closure_disk_usage_bytes(right_path)
if left_closure_disk_usage_bytes is None or right_closure_disk_usage_bytes is None:
diff_closure_disk_usage_str = ""
else:
diff_closure_disk_usage_str = ", disk usage " + \
render_bytes(right_closure_disk_usage_bytes - left_closure_disk_usage_bytes)
print( print(
f"Closure size: {len(left_closure_paths)} -> {len(right_closure_paths)} " f"Closure size: {len(left_closure_paths)} -> {len(right_closure_paths)} "
f"({right_only_paths_count} paths added, {left_only_paths_count} paths removed, " f"({right_only_paths_count} paths added, {left_only_paths_count} paths removed, "
f"delta {right_only_paths_count - left_only_paths_count:+d})." f"delta {right_only_paths_count - left_only_paths_count:+d}"
f"{diff_closure_disk_usage_str})."
) )
def parse_args(): def parse_args():

View file

@ -275,7 +275,7 @@ Added packages:
[A+] #5 neverball 1.6.0 [A+] #5 neverball 1.6.0
[A.] #6 physfs 3.0.2 [A.] #6 physfs 3.0.2
[A.] #7 smpeg-svn390 <none> [A.] #7 smpeg-svn390 <none>
Closure size: 2382 -> 2392 (21 paths added, 11 paths removed, delta +10). Closure size: 2382 -> 2392 (21 paths added, 11 paths removed, delta +10, disk usage +312.5MiB).
.EE .EE
.RE .RE
.P .P
@ -308,7 +308,7 @@ Added packages:
[A+] #1 gpsbabel 1.6.0 [A+] #1 gpsbabel 1.6.0
[A+] #2 gpxsee 7.31 [A+] #2 gpxsee 7.31
[A.] #3 qttranslations 5.15.2 [A.] #3 qttranslations 5.15.2
Closure size: 2480 -> 2483 (44 paths added, 41 paths removed, delta +3). Closure size: 2480 -> 2483 (44 paths added, 41 paths removed, delta +3, disk usage +22.3MiB).
.EE .EE
.RE .RE
.P .P
@ -328,7 +328,7 @@ $ nvd diff /nix/var/nix/profiles/system-{43,44}-link
>>> /nix/var/nix/profiles/system/system-44-link >>> /nix/var/nix/profiles/system/system-44-link
Version changes: Version changes:
[D.] #1 nixos-system-unnamed 20.09.git.61092780ec5 -> 20.09.git.f79caa0b693 [D.] #1 nixos-system-unnamed 20.09.git.61092780ec5 -> 20.09.git.f79caa0b693
Closure size: 2329 -> 2329 (16 paths added, 16 paths removed, delta +0). Closure size: 2329 -> 2329 (16 paths added, 16 paths removed, delta +0, disk usage +0B).
.EE .EE
.RE .RE
.P .P
@ -342,6 +342,6 @@ $ nvd diff /nix/var/nix/profiles/system-{23,24}-link
<<< /nix/var/nix/profiles/system/system-23-link <<< /nix/var/nix/profiles/system/system-23-link
>>> /nix/var/nix/profiles/system/system-24-link >>> /nix/var/nix/profiles/system/system-24-link
No version or selection state changes. No version or selection state changes.
Closure size: 2191 -> 2191 (3 paths added, 3 paths removed, delta +0). Closure size: 2191 -> 2191 (3 paths added, 3 paths removed, delta +0, disk usage +0B).
.EE .EE
.RE .RE