@@ -428,9 +428,20 @@ def garbage_collect():
428
428
for path in process .stdout .decode ().splitlines ():
429
429
closure .add (hash_part (path ))
430
430
431
- logging .info (f' - { len (closure )} paths in closure' )
431
+ logging .info (f' - { len (closure )} narinfo files in closure' )
432
432
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
434
445
435
446
for path in (working_dir / STORE_DIR ).iterdir ():
436
447
if not path .name .endswith ('.narinfo' ):
@@ -440,7 +451,7 @@ def garbage_collect():
440
451
if hash in closure :
441
452
continue
442
453
443
- deleted += 1
454
+ deleted_narinfo += 1
444
455
445
456
if DELETE_OLD :
446
457
narinfo = parse_narinfo (path .read_text ())
@@ -453,14 +464,28 @@ def garbage_collect():
453
464
except :
454
465
pass
455
466
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
+
456
479
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' )
458
482
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' )
460
485
461
486
if __name__ == '__main__' :
487
+ garbage_collect ()
462
488
channels = clone_channels ()
463
489
update_channels (channels )
464
- garbage_collect ()
465
490
if failure :
466
491
sys .exit (1 )
0 commit comments