Skip to content

Commit

Permalink
Use OpamPackage.Version.t instead of string
Browse files Browse the repository at this point in the history
  • Loading branch information
Leonidas-from-XIV committed Nov 29, 2021
1 parent d6a7df4 commit dd73e94
Show file tree
Hide file tree
Showing 7 changed files with 56 additions and 48 deletions.
16 changes: 9 additions & 7 deletions cli/list_cmd.ml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ open Duniverse

type t = {
name : OpamPackage.Name.t;
version : string;
version : OpamPackage.Version.t;
loc : string;
pinned : bool;
descr : string option;
Expand All @@ -14,6 +14,7 @@ type t = {
let pad s max_len = Printf.sprintf "%-*s" max_len s

let guess_pin ~version ~loc =
let version = OpamPackage.Version.to_string version in
(* opam-overlays *)
String.is_suffix ~suffix:"+dune" version
|| String.is_prefix ~prefix:"https://github.com/dune-universe" loc
Expand All @@ -35,7 +36,9 @@ let pp ~max_name ~max_version ~short ppf t =
if short then Duniverse_lib.Opam.Pp.package_name ppf t.name
else
let padded_name = pad (OpamPackage.Name.to_string t.name) max_name in
let padded_version = pad t.version max_version in
let padded_version =
pad (OpamPackage.Version.to_string t.version) max_version
in
if t.pinned then
Fmt.pf ppf "%a %a %a" pp_name padded_name pp_pin_version padded_version
pp_pin_loc t.loc
Expand Down Expand Up @@ -66,10 +69,7 @@ let with_descr pkgs =
OpamSwitchState.with_ `Lock_none global_state (fun switch_state ->
List.map
~f:(fun pkg ->
let opam =
OpamPackage.create pkg.name
(OpamPackage.Version.of_string pkg.version)
in
let opam = OpamPackage.create pkg.name pkg.version in
match OpamSwitchState.opam switch_state opam with
| opam -> { pkg with descr = OpamFile.OPAM.synopsis opam }
| exception Not_found ->
Expand All @@ -88,7 +88,9 @@ let run (`Root root) (`Lockfile explicit_lockfile) short () =
List.fold_left
~f:(fun (max_name, max_version) t ->
( max (String.length (OpamPackage.Name.to_string t.name)) max_name,
max (String.length t.version) max_version ))
max
(String.length (OpamPackage.Version.to_string t.version))
max_version ))
~init:(0, 0) pkgs
in
let pp = pp ~max_name ~max_version ~short in
Expand Down
19 changes: 9 additions & 10 deletions lib/duniverse.ml
Original file line number Diff line number Diff line change
Expand Up @@ -6,27 +6,26 @@ type unresolved = Git.Ref.t
type resolved = Git.Ref.resolved

module Opam = struct
type t = { name : OpamPackage.Name.t; version : string }
type t = { name : OpamPackage.Name.t; version : OpamPackage.Version.t }

let equal t t' =
let { name; version } = t in
let { name = name'; version = version' } = t' in
OpamPackage.Name.equal name name' && String.equal version version'
OpamPackage.Name.equal name name'
&& OpamPackage.Version.equal version version'

let pp fmt { name; version } =
Format.fprintf fmt "%a.%s" Opam.Pp.package_name name version
Format.fprintf fmt "%a.%a" Opam.Pp.package_name name Opam.Pp.version version

let raw_pp fmt { name; version } =
let open Pp_combinators.Ocaml in
Format.fprintf fmt "@[<hov 2>{ name = %a;@ version = %a }@]"
Opam.Pp.package_name name string version
Opam.Pp.package_name name Opam.Pp.version version

let to_opam { name = n; version = v } =
OpamPackage.(create n (Version.of_string v))
let to_opam { name; version } = OpamPackage.create name version

let from_opam pkg =
let name = OpamPackage.name pkg in
let version = OpamPackage.version_to_string pkg in
let version = OpamPackage.version pkg in
{ name; version }
end

Expand Down Expand Up @@ -137,7 +136,7 @@ module Repo = struct
| Other s -> s
in
let pp_package fmt { Package.opam = { name; version }; url; _ } =
Format.fprintf fmt "%a.%s: %s" O.Pp.package_name name version
Format.fprintf fmt "%a.%a: %s" O.Pp.package_name name O.Pp.version version
(url_to_string url)
in
let sep fmt () = Format.fprintf fmt "\n" in
Expand Down Expand Up @@ -181,7 +180,7 @@ module Repo = struct
need dune to provide that feature. *)
let highest_version_package =
List.max_exn packages ~compare:(fun p p' ->
OpamVersionCompare.compare p.Package.opam.version p'.opam.version)
OpamPackage.Version.compare p.Package.opam.version p'.opam.version)
in
log_url_selection ~dev_repo ~packages ~highest_version_package;
let url = highest_version_package.url in
Expand Down
2 changes: 1 addition & 1 deletion lib/duniverse.mli
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ type unresolved = Git.Ref.t
type resolved = Git.Ref.resolved

module Opam : sig
type t = { name : OpamPackage.Name.t; version : string }
type t = { name : OpamPackage.Name.t; version : OpamPackage.Version.t }
(** Type of dependencies to install through opam *)

val equal : t -> t -> bool
Expand Down
13 changes: 8 additions & 5 deletions lib/lockfile.ml
Original file line number Diff line number Diff line change
Expand Up @@ -131,10 +131,8 @@ module Root_packages = struct
end

module Depends = struct
type version = string

type t = {
dependencies : (OpamPackage.Name.t * version) list;
dependencies : (OpamPackage.Name.t * OpamPackage.Version.t) list;
vendored : OpamPackage.Name.Set.t;
}

Expand Down Expand Up @@ -163,7 +161,10 @@ module Depends = struct
let from_filtered_formula formula =
let open OpamTypes in
let atoms = OpamFormula.ands_to_list formula in
let dependency name version = (name, version) in
let dependency name version =
let version = OpamPackage.Version.of_string version in
(name, version)
in
Result.List.fold_left atoms
~init:{ dependencies = []; vendored = OpamPackage.Name.Set.empty }
~f:(fun { dependencies; vendored } -> function
Expand Down Expand Up @@ -196,7 +197,9 @@ module Depends = struct
(OpamTypes.Filter (OpamTypes.FIdent ([], Config.vendor_variable, None)))
in
let version_constraint =
OpamFormula.Atom (OpamTypes.Constraint (`Eq, OpamTypes.FString version))
OpamFormula.Atom
(OpamTypes.Constraint
(`Eq, OpamTypes.FString (OpamPackage.Version.to_string version)))
in
let is_vendored = OpamPackage.Name.Set.mem name vendored in
let formula =
Expand Down
10 changes: 6 additions & 4 deletions lib/opam.ml
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,8 @@ module Pp = struct

let package_name = Fmt.using OpamPackage.Name.to_string Fmt.string

let version = Fmt.using OpamPackage.Version.to_string Fmt.string

let hash = Hash.pp

let url = Fmt.using OpamUrl.to_string Fmt.string
Expand All @@ -134,7 +136,7 @@ end
module Package_summary = struct
type t = {
name : OpamPackage.Name.t;
version : string;
version : OpamPackage.Version.t;
url_src : Url.t option;
hashes : OpamHash.t list;
dev_repo : string option;
Expand All @@ -143,7 +145,7 @@ module Package_summary = struct

let equal { name; version; url_src; hashes; dev_repo; depexts } t' =
OpamPackage.Name.equal name t'.name
&& String.equal version t'.version
&& OpamPackage.Version.equal version t'.version
&& Option.equal Url.equal url_src t'.url_src
&& List.equal Hash.equal hashes t'.hashes
&& Option.equal String.equal dev_repo t'.dev_repo
Expand All @@ -154,15 +156,15 @@ module Package_summary = struct
Format.fprintf fmt
"@[<hov 2>{ name = %a;@ version = %a;@ url_src = %a;@ hashes = %a;@ \
dev_repo = %a;@ depexts = %a }@]"
Pp.package_name name string version
Pp.package_name name Pp.version version
(option ~brackets:true Url.pp)
url_src (list Hash.pp) hashes
(option ~brackets:true string)
dev_repo Depexts.pp depexts

let from_opam ~pkg opam_file =
let name = OpamPackage.name pkg in
let version = OpamPackage.version_to_string pkg in
let version = OpamPackage.version pkg in
let url_field = OpamFile.OPAM.url opam_file in
let url_src = Option.map ~f:Url.from_opam_field url_field in
let hashes =
Expand Down
4 changes: 3 additions & 1 deletion lib/opam.mli
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ end
module Package_summary : sig
type t = {
name : OpamPackage.Name.t;
version : string;
version : OpamPackage.Version.t;
url_src : Url.t option;
hashes : OpamHash.t list;
dev_repo : string option;
Expand Down Expand Up @@ -43,6 +43,8 @@ module Pp : sig

val package_name : OpamPackage.Name.t Fmt.t

val version : OpamPackage.Version.t Fmt.t

val hash : OpamHash.t Fmt.t

val url : OpamUrl.t Fmt.t
Expand Down
40 changes: 20 additions & 20 deletions test/lib/test_duniverse.ml
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,14 @@ end
let summary_factory ?(name = "") ?(version = "") ?dev_repo ?url_src
?(hashes = []) ?(depexts = []) () =
let name = OpamPackage.Name.of_string name in
let version = OpamPackage.Version.of_string version in
{ Opam.Package_summary.name; version; dev_repo; url_src; hashes; depexts }

let opam_factory ~name ~version =
let name = OpamPackage.Name.of_string name in
let version = OpamPackage.Version.of_string version in
Duniverse.Opam.{ name; version }

module Repo = struct
module Package = struct
let test_from_package_summary =
Expand Down Expand Up @@ -57,8 +63,7 @@ module Repo = struct
(Ok
(Some
{
opam =
{ name = OpamPackage.Name.of_string "y"; version = "v" };
opam = opam_factory ~name:"y" ~version:"v";
dev_repo = "d";
url = Other "u";
hashes = [];
Expand All @@ -75,8 +80,7 @@ module Repo = struct
(Ok
(Some
{
opam =
{ name = OpamPackage.Name.of_string "y"; version = "v" };
opam = opam_factory ~name:"y" ~version:"v";
dev_repo = "d";
url = Git { repo = "r"; ref = "master" };
hashes = [];
Expand All @@ -88,8 +92,8 @@ module Repo = struct
let package_factory ?(name = "") ?(version = "") ?(dev_repo = "")
?(url = Duniverse.Repo.Url.Other "") ?(hashes = []) () =
let open Duniverse.Repo.Package in
let name = OpamPackage.Name.of_string name in
{ opam = { name; version }; dev_repo; url; hashes }
let opam = opam_factory ~name ~version in
{ opam; dev_repo; url; hashes }
let test_from_packages =
let make_test ~name ~dev_repo ~packages ~expected () =
Expand All @@ -115,8 +119,7 @@ module Repo = struct
dir = "d";
url = Other "u";
hashes = [];
provided_packages =
[ { name = OpamPackage.Name.of_string "p"; version = "v" } ];
provided_packages = [ opam_factory ~name:"p" ~version:"v" ];
}
();
make_test ~name:"Uses repository name as dir"
Expand All @@ -131,8 +134,7 @@ module Repo = struct
dir = "repo";
url = Other "u";
hashes = [];
provided_packages =
[ { name = OpamPackage.Name.of_string "p"; version = "v" } ];
provided_packages = [ opam_factory ~name:"p" ~version:"v" ];
}
();
make_test ~name:"Expection for dune"
Expand All @@ -147,8 +149,7 @@ module Repo = struct
dir = "dune_";
url = Other "u";
hashes = [];
provided_packages =
[ { name = OpamPackage.Name.of_string "p"; version = "v" } ];
provided_packages = [ opam_factory ~name:"p" ~version:"v" ];
}
();
make_test ~name:"Add all to provided packages" ~dev_repo:"d"
Expand All @@ -166,8 +167,8 @@ module Repo = struct
hashes = [];
provided_packages =
[
{ name = OpamPackage.Name.of_string "d"; version = "zdev" };
{ name = OpamPackage.Name.of_string "d-lwt"; version = "zdev" };
opam_factory ~name:"d" ~version:"zdev";
opam_factory ~name:"d-lwt" ~version:"zdev";
];
}
();
Expand All @@ -186,8 +187,8 @@ module Repo = struct
hashes = [];
provided_packages =
[
{ name = OpamPackage.Name.of_string "d"; version = "1" };
{ name = OpamPackage.Name.of_string "d-lwt"; version = "2" };
opam_factory ~name:"d" ~version:"1";
opam_factory ~name:"d-lwt" ~version:"2";
];
}
();
Expand Down Expand Up @@ -230,8 +231,7 @@ let test_from_package_summaries =
dir = "d";
url = Other "u";
hashes = [];
provided_packages =
[ { name = OpamPackage.Name.of_string "x"; version = "v" } ];
provided_packages = [ opam_factory ~name:"x" ~version:"v" ];
};
])
();
Expand All @@ -252,8 +252,8 @@ let test_from_package_summaries =
hashes = [];
provided_packages =
[
{ name = OpamPackage.Name.of_string "y-lwt"; version = "v" };
{ name = OpamPackage.Name.of_string "y"; version = "v" };
opam_factory ~name:"y-lwt" ~version:"v";
opam_factory ~name:"y" ~version:"v";
];
};
])
Expand Down

0 comments on commit dd73e94

Please sign in to comment.