From 023ae79d17201e9f4850e6e159087813af18cdb5 Mon Sep 17 00:00:00 2001
From: Thomas Gazagnaire <thomas@gazagnaire.org>
Date: Sat, 28 Oct 2023 00:25:56 +0200
Subject: [PATCH] Only add root pin-depends in the .opam.locked file

---
 cli/lock.ml                  |  5 ++++-
 lib/lockfile.ml              | 11 ++---------
 lib/lockfile.mli             |  1 +
 test/bin/simple-lock.t/run.t |  4 ----
 4 files changed, 7 insertions(+), 14 deletions(-)

diff --git a/cli/lock.ml b/cli/lock.ml
index 4ceb32fd7..d7f8080ac 100644
--- a/cli/lock.ml
+++ b/cli/lock.ml
@@ -573,8 +573,11 @@ let run (`Root root) (`Recurse_opam recurse) (`Build_only build_only)
   Common.Logs.app (fun l -> l "Calculating exact pins for each of them.");
   let* duniverse = compute_duniverse ~dependency_entries >>= resolve_ref in
   let target_depexts = target_depexts opam_files target_packages in
+  let pin_depends =
+    match root_pin_depends opam_files with Ok r -> r | Error _ -> []
+  in
   let lockfile =
-    D.Lockfile.create ~source_config ~root_packages:target_packages
+    D.Lockfile.create ~source_config ~root_packages:target_packages ~pin_depends
       ~dependency_entries ~root_depexts:target_depexts ~duniverse ()
   in
   let cli_args = raw_cli_args () in
diff --git a/lib/lockfile.ml b/lib/lockfile.ml
index a422c9c1f..bef0b98ec 100644
--- a/lib/lockfile.ml
+++ b/lib/lockfile.ml
@@ -173,12 +173,6 @@ end
 module Pin_depends = struct
   type t = (OpamPackage.t * OpamUrl.t) list
 
-  let from_duniverse l =
-    let open Duniverse.Repo in
-    List.concat_map l ~f:(fun { provided_packages; url; _ } ->
-        let url = Url.to_opam_url url in
-        List.map provided_packages ~f:(fun p -> (p, url)))
-
   let sort t =
     List.sort ~cmp:(fun (pkg, _) (pkg', _) -> OpamPackage.compare pkg pkg') t
 end
@@ -293,11 +287,10 @@ type t = {
 
 let depexts t = t.depexts
 
-let create ~source_config ~root_packages ~dependency_entries ~root_depexts
-    ~duniverse () =
+let create ~source_config ~root_packages ~pin_depends ~dependency_entries
+    ~root_depexts ~duniverse () =
   let version = Version.current in
   let depends = Depends.from_dependency_entries dependency_entries in
-  let pin_depends = Pin_depends.from_duniverse duniverse in
   let duniverse_dirs = Duniverse_dirs.from_duniverse duniverse in
   let depexts = Depexts.all ~root_depexts ~dependency_entries in
   {
diff --git a/lib/lockfile.mli b/lib/lockfile.mli
index f9390f5ac..5de52a6ab 100644
--- a/lib/lockfile.mli
+++ b/lib/lockfile.mli
@@ -8,6 +8,7 @@ end
 val create :
   source_config:Source_opam_config.t ->
   root_packages:OpamPackage.Name.Set.t ->
+  pin_depends:(OpamPackage.t * OpamUrl.t) list ->
   dependency_entries:Opam.Dependency_entry.t list ->
   root_depexts:(OpamSysPkg.Set.t * OpamTypes.filter) list list ->
   duniverse:Duniverse.t ->
diff --git a/test/bin/simple-lock.t/run.t b/test/bin/simple-lock.t/run.t
index 86300ca05..28fa03884 100644
--- a/test/bin/simple-lock.t/run.t
+++ b/test/bin/simple-lock.t/run.t
@@ -43,10 +43,6 @@ The lockfile should contain the base packages, dune and our 2 dependencies
     "ocaml-config" {= "2"}
     "ocaml-options-vanilla" {= "1"}
   ]
-  pin-depends: [
-    ["b.1" "https://b.com/b.tbz"]
-    ["c.1" "https://c.com/c.tbz"]
-  ]
   x-opam-monorepo-duniverse-dirs: [
     [
       "https://b.com/b.tbz"