···15771577 `S Manpage.s_examples;
15781578 `P "Join a repository:";
15791579 `Pre "monopam join https://github.com/someone/some-lib";
15801580- `P "Join with a custom name:";
15801580+ `P "Join with explicit name using --url:";
15811581+ `Pre "monopam join --url https://tangled.org/handle/sortal sortal";
15821582+ `P "Join with a custom name using --as:";
15811583 `Pre "monopam join https://github.com/someone/some-lib --as my-lib";
15821584 `P "Join with upstream tracking (for forks):";
15831585 `Pre "monopam join https://github.com/me/cohttp --upstream https://github.com/mirage/cohttp";
···15891591 in
15901592 let info = Cmd.info "join" ~doc ~man in
15911593 let url_or_pkg_arg =
15921592- let doc = "Git URL to join, or package name (with --from)" in
15931593- Arg.(required & pos 0 (some string) None & info [] ~docv:"URL|PACKAGE" ~doc)
15941594+ let doc = "Git URL to join, or subtree name (when using --url)" in
15951595+ Arg.(required & pos 0 (some string) None & info [] ~docv:"URL|NAME" ~doc)
15941596 in
15951597 let as_arg =
15961598 let doc = "Override subtree directory name" in
···16051607 Arg.(value & opt (some string) None & info [ "from" ] ~docv:"HANDLE" ~doc)
16061608 in
16071609 let fork_url_arg =
16081608- let doc = "Your fork URL (required with --from)" in
16101610+ let doc = "Git URL to clone from (makes positional arg the subtree name)" in
16091611 Arg.(value & opt (some string) None & info [ "url" ] ~docv:"URL" ~doc)
16101612 in
16111613 let dry_run_arg =
···16191621 let proc = Eio.Stdenv.process_mgr env in
16201622 match from with
16211623 | Some handle ->
16221622- (* Join from verse member *)
16241624+ (* Join from verse member - requires --url for your fork *)
16231625 (match fork_url with
16241626 | None ->
16251627 Fmt.epr "Error: --url is required when using --from@.";
···16441646 Fmt.epr "Error: %a@." Monopam.Fork_join.pp_error_with_hint e;
16451647 `Error (false, "join failed"))
16461648 | None ->
16471647- (* Normal join from URL *)
16481648- match Monopam.Fork_join.join ~proc ~fs ~config ~url:url_or_pkg ?name:as_name ?upstream ~dry_run () with
16491649+ (* Normal join from URL - use --url if provided, otherwise positional arg *)
16501650+ let url = match fork_url with Some u -> u | None -> url_or_pkg in
16511651+ let name = match fork_url with Some _ -> Some url_or_pkg | None -> as_name in
16521652+ match Monopam.Fork_join.join ~proc ~fs ~config ~url ?name ?upstream ~dry_run () with
16491653 | Ok result ->
16501654 if dry_run then begin
16511655 Fmt.pr "Would join '%s':@." result.name;