mirror of
https://gitlab.com/khumba/nvd.git
synced 2024-11-23 13:21:46 +01:00
Add display of the change in closure disk size (issue #8).
This commit is contained in:
parent
f735e17038
commit
082958c205
3 changed files with 68 additions and 5 deletions
|
@ -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
63
src/nvd
|
@ -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():
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue