Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use the new menus for the initial setup too #5057

Merged
merged 2 commits into from
Aug 2, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions master_changes.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ users)
* [BUG] Fix `OPAMCURL` and `OPAMFETCH` value setting [#5111 @rjbou - fix #5108]
* [BUG] Fix display of pinned packages in action list [#5079 @rjbou]
* [BUG] Fix spaces in root and switch dirs [#5203 @jonahbeckford]
* Use menu for init setup [#5057 @AltGr]

## Plugins
*
Expand Down
92 changes: 52 additions & 40 deletions src/state/opamEnv.ml
Original file line number Diff line number Diff line change
Expand Up @@ -798,12 +798,12 @@ let check_and_print_env_warning st =
let setup
root ~interactive ?dot_profile ?update_config ?env_hook ?completion
?inplace shell =
let update_dot_profile =
let update_dot_profile, env_hook =
match update_config, dot_profile, interactive with
| Some false, _, _ -> None
| Some false, _, _ -> None, env_hook
| _, None, _ -> invalid_arg "OpamEnv.setup"
| Some true, Some dot_profile, _ -> Some dot_profile
| None, _, false -> None
| Some true, Some dot_profile, _ -> Some dot_profile, env_hook
| None, _, false -> None, env_hook
| None, Some dot_profile, true ->
OpamConsole.header_msg "Required setup - please read";

Expand All @@ -817,51 +817,63 @@ let setup
\n\
\ %s\
\n\
\ Otherwise, every time you want to access your opam installation, you will\n\
\ need to run:\n\
\n\
\ %s\n\
\n\
\ You can always re-run this setup with 'opam init' later.\n\n"
Filename.dir_sep
(OpamConsole.colorise `bold @@ string_of_shell shell)
(OpamConsole.colorise `cyan @@ OpamFilename.prettify dot_profile)
(OpamConsole.colorise `bold @@ source root shell (init_file shell))
(OpamConsole.colorise `bold @@ shell_eval_invocation shell (opam_env_invocation shell));
(OpamConsole.colorise `bold @@ source root shell (init_file shell));
if OpamCoreConfig.answer_is_yes () then begin
OpamConsole.warning "Shell not updated in non-interactive mode: use --shell-setup";
None
None, env_hook
end else
let rec menu shell dot_profile default =
let opam_env_inv =
OpamConsole.colorise `bold @@ shell_eval_invocation shell (opam_env_invocation shell)
in
match
OpamConsole.read
"Do you want opam to modify %s? [N/y/f]\n\
(default is 'no', use 'f' to choose a different file)"
(OpamFilename.prettify dot_profile)
OpamConsole.menu "Do you want opam to configure %s?"
(OpamConsole.colorise `bold (string_of_shell shell))
~default ~noninteractive:`No ~no:`No ~options:[
`Yes, Printf.sprintf "Yes, update %s"
(OpamConsole.colorise `cyan (OpamFilename.prettify dot_profile));
`No_hooks, Printf.sprintf "Yes, but don't setup any hooks. You'll \
have to run %s whenever you change \
your current 'opam switch'"
opam_env_inv;
`Change_shell, "Select a different shell";
`Change_file, "Specify another config file to update instead";
`No, Printf.sprintf "No, I'll remember to run %s when I need opam"
opam_env_inv;
]
with
| Some ("y" | "Y" | "yes" | "YES" ) -> Some dot_profile
| Some ("f" | "F" | "file" | "FILE") ->
begin
match OpamConsole.read " Enter the name of the file to update:"
with
| None ->
OpamConsole.msg "Alright, assuming you changed your mind, not \
performing any changes.\n";
None
| Some f -> Some (OpamFilename.of_string f)
end
| _ -> None
in
let env_hook = match env_hook, interactive with
| Some b, _ -> Some b
| None, false -> None
| None, true ->
(* not just interactive mode *)
if update_config <> None || completion <> None then None else
Some
(OpamConsole.confirm ~default:false
"A hook can be added to opam's init scripts to ensure that the \
shell remains in sync with the opam environment when they are \
loaded. Set that up?")
| `No -> None, env_hook
| `Yes -> Some dot_profile, Some true
| `No_hooks -> Some dot_profile, Some false
| `Change_shell ->
let shell = OpamConsole.menu ~default:shell ~no:shell
"Please select a shell to configure"
~options: (List.map (fun s -> s, string_of_shell s) shells_list)
in
menu shell (OpamFilename.of_string (OpamStd.Sys.guess_dot_profile shell))
`Yes
| `Change_file ->
let open OpamStd.Option.Op in
let dot_profile =
(OpamConsole.read "Enter the name of the file to update:"
>>| (fun f ->
if Filename.is_implicit f then Filename.concat (OpamStd.Sys.home ()) f
else f)
>>| OpamFilename.of_string)
+! dot_profile
in
menu shell dot_profile `Yes
in
let default = match env_hook with
| Some true -> `Yes
| Some false -> `No_hooks
| None -> `No
in
Comment on lines +871 to +875
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can implement #4877 here:

Suggested change
let default = match env_hook with
| Some true -> `Yes
| Some false -> `No_hooks
| None -> `No
in
let default = if env_hook = Some false then `No_hooks else `Yes in

menu shell dot_profile default
in
update_user_setup root ?dot_profile:update_dot_profile shell;
write_static_init_scripts root ?completion ?env_hook ?inplace ()
Expand Down