@@ -25,7 +25,7 @@ use crate::{
25
25
} ,
26
26
mount:: mount_composefs_at,
27
27
splitstream:: { DigestMap , SplitStreamReader , SplitStreamWriter } ,
28
- util:: { proc_self_fd, Sha256Digest } ,
28
+ util:: { filter_errno , proc_self_fd, Sha256Digest } ,
29
29
} ;
30
30
31
31
/// Call openat() on the named subdirectory of "dirfd", possibly creating it first.
@@ -485,15 +485,28 @@ impl<ObjectID: FsVerityHashValue> Repository<ObjectID> {
485
485
fn gc_category ( & self , category : & str ) -> Result < HashSet < ObjectID > > {
486
486
let mut objects = HashSet :: new ( ) ;
487
487
488
- let category_fd = self . openat ( category, OFlags :: RDONLY | OFlags :: DIRECTORY ) ?;
488
+ let Some ( category_fd) = filter_errno (
489
+ self . openat ( category, OFlags :: RDONLY | OFlags :: DIRECTORY ) ,
490
+ Errno :: NOENT ,
491
+ )
492
+ . context ( "Opening {category} dir in repository" ) ?
493
+ else {
494
+ return Ok ( objects) ;
495
+ } ;
489
496
490
- let refs = openat (
491
- & category_fd,
492
- "refs" ,
493
- OFlags :: RDONLY | OFlags :: DIRECTORY ,
494
- Mode :: empty ( ) ,
495
- ) ?;
496
- Self :: walk_symlinkdir ( refs, & mut objects) ?;
497
+ if let Some ( refs) = filter_errno (
498
+ openat (
499
+ & category_fd,
500
+ "refs" ,
501
+ OFlags :: RDONLY | OFlags :: DIRECTORY ,
502
+ Mode :: empty ( ) ,
503
+ ) ,
504
+ Errno :: NOENT ,
505
+ )
506
+ . context ( "Opening {category}/refs dir in repository" ) ?
507
+ {
508
+ Self :: walk_symlinkdir ( refs, & mut objects) ?;
509
+ }
497
510
498
511
for item in Dir :: read_from ( & category_fd) ? {
499
512
let entry = item?;
0 commit comments