@@ -26,7 +26,7 @@ use crate::{
26
26
} ,
27
27
mount:: { composefs_fsmount, mount_at} ,
28
28
splitstream:: { DigestMap , SplitStreamReader , SplitStreamWriter } ,
29
- util:: { proc_self_fd, Sha256Digest } ,
29
+ util:: { filter_errno , proc_self_fd, Sha256Digest } ,
30
30
} ;
31
31
32
32
/// Call openat() on the named subdirectory of "dirfd", possibly creating it first.
@@ -552,15 +552,28 @@ impl<ObjectID: FsVerityHashValue> Repository<ObjectID> {
552
552
fn gc_category ( & self , category : & str ) -> Result < HashSet < ObjectID > > {
553
553
let mut objects = HashSet :: new ( ) ;
554
554
555
- let category_fd = self . openat ( category, OFlags :: RDONLY | OFlags :: DIRECTORY ) ?;
555
+ let Some ( category_fd) = filter_errno (
556
+ self . openat ( category, OFlags :: RDONLY | OFlags :: DIRECTORY ) ,
557
+ Errno :: NOENT ,
558
+ )
559
+ . context ( "Opening {category} dir in repository" ) ?
560
+ else {
561
+ return Ok ( objects) ;
562
+ } ;
556
563
557
- let refs = openat (
558
- & category_fd,
559
- "refs" ,
560
- OFlags :: RDONLY | OFlags :: DIRECTORY ,
561
- Mode :: empty ( ) ,
562
- ) ?;
563
- Self :: walk_symlinkdir ( refs, & mut objects) ?;
564
+ if let Some ( refs) = filter_errno (
565
+ openat (
566
+ & category_fd,
567
+ "refs" ,
568
+ OFlags :: RDONLY | OFlags :: DIRECTORY ,
569
+ Mode :: empty ( ) ,
570
+ ) ,
571
+ Errno :: NOENT ,
572
+ )
573
+ . context ( "Opening {category}/refs dir in repository" ) ?
574
+ {
575
+ Self :: walk_symlinkdir ( refs, & mut objects) ?;
576
+ }
564
577
565
578
for item in Dir :: read_from ( & category_fd) ? {
566
579
let entry = item?;
0 commit comments