From 8376637c0675511b038a8bfbe717e1fd1492ef59 Mon Sep 17 00:00:00 2001 From: Raja Boujbel Date: Wed, 19 Feb 2025 18:20:55 +0100 Subject: [PATCH] admin: add an upgrade advice if repo prior to 2.0 --- master_changes.md | 1 + src/client/opamAdminCommand.ml | 24 ++++++++++++++++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/master_changes.md b/master_changes.md index d3677c426a3..285829af845 100644 --- a/master_changes.md +++ b/master_changes.md @@ -133,6 +133,7 @@ users) * ✘ The `-i`/`--ignore-test-doc` argument has been removed from `opam admin check` [#6335 @kit-ty-kate] * ✘ `opam admin check` now sets `with-test` and `with-doc` to `false` instead of `true` [#6335 @kit-ty-kate] * Enforce repository root check for all command [#6385 @rjbou] + * Add an upgrade advice is the repository is 1.2 version, for all command except upgrade [#6385 @rjbou] ## Opam installer diff --git a/src/client/opamAdminCommand.ml b/src/client/opamAdminCommand.ml index 80fb5c4420d..705dad6e9d7 100644 --- a/src/client/opamAdminCommand.ml +++ b/src/client/opamAdminCommand.ml @@ -16,13 +16,33 @@ open Cmdliner type command = unit Cmdliner.Term.t * Cmdliner.Cmd.info -let checked_repo_root () = +let repo_version_lt repo_root v = + let v' = + let open OpamStd.Option.Op in + (OpamFile.Repo.read_opt + (OpamRepositoryPath.repo repo_root) + >>= OpamFile.Repo.opam_version) + +! (OpamVersion.of_string "1.2") + in + if OpamVersion.compare v v' > 0 then Some v' else None + +let checked_repo_root ?(check=true)() = let repo_root = OpamFilename.cwd () in if not (OpamFilename.exists_dir (OpamRepositoryPath.packages_dir repo_root)) then OpamConsole.error_and_exit `Bad_arguments "No repository found in current directory.\n\ Please make sure there is a \"packages%s\" directory" OpamArg.dir_sep; + (if check then + let default_current = "2.0" in + match repo_version_lt repo_root + (OpamVersion.of_string default_current) with + | Some v -> + OpamConsole.warning + "The repository is at version %s, \ + please consider upgrading to %s with 'opam admin upgrade'" + (OpamVersion.to_string v) default_current + | None -> ()); repo_root let global_options cli = @@ -646,7 +666,7 @@ let upgrade_command cli = in let cmd global_options clear_cache create_mirror () = OpamArg.apply_global_options cli global_options; - let repo_root = checked_repo_root () in + let repo_root = checked_repo_root ~check:false () in if clear_cache then OpamAdminRepoUpgrade.clear_cache () else match create_mirror with | None ->