Monorepo management for opam overlays
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Fix sync crash when some packages have no checkout

The merge step was iterating over all packages without checking if
the checkout directory exists, causing an Eio.Io Fs Not_found error
for packages like dune, odoc, etc. that don't have local checkouts.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

+11 -5
+11 -5
lib/monopam.ml
··· 1338 1338 (* Step 4: Merge phase - fast-forward merge checkouts (SEQUENTIAL) *) 1339 1339 Log.app (fun m -> m " Merging checkouts..."); 1340 1340 let merge_errs = ref [] in 1341 + let checkouts_root = Config.Paths.checkouts config in 1341 1342 List.iter (fun pkg -> 1342 - match merge_checkout_safe ~proc ~fs:fs_t ~config pkg with 1343 - | Ok () -> () 1344 - | Error e -> 1345 - merge_errs := { repo_name = Package.repo_name pkg; 1346 - phase = `Merge; error = e } :: !merge_errs) 1343 + let checkout_dir = Package.checkout_dir ~checkouts_root pkg in 1344 + (* Skip packages without checkouts *) 1345 + if not (Git.is_repo ~proc ~fs:fs_t checkout_dir) then 1346 + Log.info (fun m -> m "Skipping %s (no checkout)" (Package.repo_name pkg)) 1347 + else 1348 + match merge_checkout_safe ~proc ~fs:fs_t ~config pkg with 1349 + | Ok () -> () 1350 + | Error e -> 1351 + merge_errs := { repo_name = Package.repo_name pkg; 1352 + phase = `Merge; error = e } :: !merge_errs) 1347 1353 repos; 1348 1354 1349 1355 (* Step 5: Subtree phase - pull subtrees into monorepo (SEQUENTIAL) *)