Skip to content

Commit b866780

Browse files
Merge pull request #142 from dramforever/gc-fixes
nix-channels gc fixes
2 parents 2e1386b + d16a34e commit b866780

File tree

1 file changed

+31
-6
lines changed

1 file changed

+31
-6
lines changed

nix-channels.py

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -428,9 +428,20 @@ def garbage_collect():
428428
for path in process.stdout.decode().splitlines():
429429
closure.add(hash_part(path))
430430

431-
logging.info(f' - {len(closure)} paths in closure')
431+
logging.info(f' - {len(closure)} narinfo files in closure')
432432

433-
deleted = 0
433+
closure_nar = set()
434+
435+
for hash in closure:
436+
narinfo_path = working_dir / STORE_DIR / f'{hash}.narinfo'
437+
narinfo = narinfo_path.read_text()
438+
narinfo = parse_narinfo(narinfo)
439+
closure_nar.add(narinfo['URL'])
440+
441+
logging.info(f' - {len(closure_nar)} nar files in closure')
442+
443+
deleted_narinfo = 0
444+
deleted_nar = 0
434445

435446
for path in (working_dir / STORE_DIR).iterdir():
436447
if not path.name.endswith('.narinfo'):
@@ -440,7 +451,7 @@ def garbage_collect():
440451
if hash in closure:
441452
continue
442453

443-
deleted += 1
454+
deleted_narinfo += 1
444455

445456
if DELETE_OLD:
446457
narinfo = parse_narinfo(path.read_text())
@@ -453,14 +464,28 @@ def garbage_collect():
453464
except:
454465
pass
455466

467+
for path in (working_dir / STORE_DIR / 'nar').iterdir():
468+
if f'nar/{path.name}' in closure_nar:
469+
continue
470+
471+
deleted_nar += 1
472+
473+
if DELETE_OLD:
474+
try:
475+
path.unlink()
476+
except:
477+
pass
478+
456479
if DELETE_OLD:
457-
logging.info(f' - {deleted} paths deleted')
480+
logging.info(f' - {deleted_narinfo} narinfo files deleted')
481+
logging.info(f' - {deleted_nar} nar files deleted')
458482
else:
459-
logging.info(f' - {deleted} paths now unreachable')
483+
logging.info(f' - {deleted_narinfo} narinfo files unreachable')
484+
logging.info(f' - {deleted_nar} nar files unreachable')
460485

461486
if __name__ == '__main__':
487+
garbage_collect()
462488
channels = clone_channels()
463489
update_channels(channels)
464-
garbage_collect()
465490
if failure:
466491
sys.exit(1)

0 commit comments

Comments
 (0)