From f810b2a11dcd72994e167eb489dfb1186a1c18b5 Mon Sep 17 00:00:00 2001 From: Kate Date: Mon, 28 Oct 2024 18:18:53 +0000 Subject: [PATCH] opam upgrade: Do not show the not-up-to-date message with packages tagged with avoid-version --- master_changes.md | 1 + src/client/opamClient.ml | 22 +++++++++++++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/master_changes.md b/master_changes.md index 4a4a5094825..bd9fc4dfea5 100644 --- a/master_changes.md +++ b/master_changes.md @@ -33,6 +33,7 @@ users) ## UI * [BUG] Fix the detection of the current terminal size [#6244 @kit-ty-kate - fix #6243] * [BUG] Ensure the output of opam commands using a column style UI stay consistent accross environment by setting the number of columns to 80 if stdout is not a tty and if the `COLUMNS` env variable is not set [#6244 @kit-ty-kate] + * [BUG] opam upgrade: Do not show the not-up-to-date message with packages tagged with avoid-version [#6273 @kit-ty-kate - fix #6271] ## Switch diff --git a/src/client/opamClient.ml b/src/client/opamClient.ml index 535135fb191..87d7055156c 100644 --- a/src/client/opamClient.ml +++ b/src/client/opamClient.ml @@ -202,9 +202,25 @@ let upgrade_t else OpamPackage.packages_of_names t.installed requested in let latest = - OpamPackage.Name.Set.fold (fun name acc -> - OpamPackage.Set.add (OpamPackage.max_version t.packages name) acc) - (OpamPackage.names_of_packages to_check) + OpamPackage.Set.fold (fun pkg acc -> + let name = OpamPackage.name pkg in + let pkgs = OpamPackage.packages_of_name t.packages name in + let latest = + OpamPackage.Set.fold (fun pkg latest -> + if OpamPackage.compare latest pkg < 0 then + let opam = OpamPackage.Map.find pkg t.opams in + let avoid_version = + List.exists (function + | Pkgflag_AvoidVersion | Pkgflag_Deprecated -> true + | _ -> false) + (OpamFile.OPAM.flags opam) + in + if avoid_version then latest else pkg + else latest) + pkgs pkg + in + OpamPackage.Set.add latest acc) + to_check OpamPackage.Set.empty in let notuptodate = latest -- to_check in if OpamPackage.Set.is_empty notuptodate then