Skip to content

Commit

Permalink
Add an admin command to compare 2 package versions
Browse files Browse the repository at this point in the history
This is meant for quick sanity checks for example.

- Added some basic tests to cover the command. The tests I added do
  not duplicate the tests for the actual comparison function, rather
  that meant to cover the basic cases encountered by the command.

Signed-off-by: Mathieu Barbin <[email protected]>
  • Loading branch information
mbarbin committed Jul 30, 2024
1 parent 590b7e7 commit d22c06a
Show file tree
Hide file tree
Showing 5 changed files with 71 additions and 0 deletions.
11 changes: 11 additions & 0 deletions doc/man/opam-admin-topics.inc
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,16 @@
(diff opam-admin-list.err %{dep:opam-admin-list.0})))
(package opam))

(rule
(with-stdout-to opam-admin-compare-package-versions.0 (echo "")))
(rule
(targets opam-admin-compare-package-versions.1 opam-admin-compare-package-versions.err)
(deps using-built-opam)
(action (progn (with-stderr-to opam-admin-compare-package-versions.err
(with-stdout-to opam-admin-compare-package-versions.1 (run %{bin:opam} admin compare-package-versions --help=groff)))
(diff opam-admin-compare-package-versions.err %{dep:opam-admin-compare-package-versions.0})))
(package opam))

(rule
(with-stdout-to opam-admin-check.0 (echo "")))
(rule
Expand Down Expand Up @@ -130,6 +140,7 @@
opam-admin-add-constraint.1
opam-admin-filter.1
opam-admin-list.1
opam-admin-compare-package-versions.1
opam-admin-check.1
opam-admin-lint.1
opam-admin-upgrade.1
Expand Down
1 change: 1 addition & 0 deletions master_changes.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ users)
* Bump opam-root-version to 2.2 [#5980 @kit-ty-kate]

## Global CLI
* ◈ Add `opam admin compare-package-versions` to compare package versions for sanity checks [#<PR_NUMBER> @mbarbin]
* Add cli version 2.3 [#6045 @rjbou]

## Plugins
Expand Down
34 changes: 34 additions & 0 deletions src/client/opamAdminCommand.ml
Original file line number Diff line number Diff line change
Expand Up @@ -830,6 +830,39 @@ let check_command cli =
Term.(const cmd $ global_options cli $ ignore_test_arg $ print_short_arg
$ installability_arg $ cycles_arg $ obsolete_arg)

let compare_package_versions_command_doc = "Compare 2 package versions"
let compare_package_versions_command cli =
let version_arg n =
let doc =
Arg.info
~docv:"VERSION"
~doc:"Package version to compare" []
in
Arg.(required & pos n (Arg.some' OpamArg.package_version) None & doc)
in
let command = "compare-package-versions" in
let doc = compare_package_versions_command_doc in
let man = [
`S Manpage.s_description;
`P "This command compares 2 package versions for quick sanity checks, and prints the result of the comparison to the console. For example:";
`I ("For example:", "opam admin compare-package-versions 0.0.9 0.0.10");
`I ("outputs:", "-1 (0.0.9 < 0.0.10)");
`S Manpage.s_arguments;
`S Manpage.s_options;
]
in
let cmd global_options v1 v2 () =
OpamArg.apply_global_options cli global_options;
let result = OpamPackage.Version.compare v1 v2 in
OpamConsole.formatted_msg "%d (%s %s %s)\n"
result
(OpamPackage.Version.to_string v1)
(if result < 0 then "<" else if result = 0 then "=" else ">")
(OpamPackage.Version.to_string v2);
in
OpamArg.mk_command ~cli OpamArg.cli_original command ~doc ~man
Term.(const cmd $ global_options cli $ version_arg 0 $ version_arg 1)

let pattern_list_arg =
OpamArg.arg_list "PATTERNS"
"Package patterns with globs. matching against $(b,NAME) or \
Expand Down Expand Up @@ -1217,6 +1250,7 @@ let admin_subcommands cli =
upgrade_command cli;
lint_command cli;
check_command cli;
compare_package_versions_command cli;
list_command cli;
filter_command cli;
add_constraint_command cli;
Expand Down
7 changes: 7 additions & 0 deletions tests/reftests/compare-package-versions.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
N0REP0
### opam admin compare-package-versions 0.0.9 0.0.10
-1 (0.0.9 < 0.0.10)
### opam admin compare-package-versions 1.2.3 1.2.3~preview
1 (1.2.3 > 1.2.3~preview)
### opam admin compare-package-versions 0.1.0 0.01.0
0 (0.1.0 = 0.01.0)
18 changes: 18 additions & 0 deletions tests/reftests/dune.inc
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,24 @@
%{targets}
(run ./run.exe %{exe:../../src/client/opamMain.exe.exe} %{dep:cli-versioning.test} %{read-lines:testing-env}))))

(rule
(alias reftest-compare-package-versions)
(action
(diff compare-package-versions.test compare-package-versions.out)))

(alias
(name reftest)
(deps (alias reftest-compare-package-versions)))

(rule
(targets compare-package-versions.out)
(deps root-N0REP0)
(package opam)
(action
(with-stdout-to
%{targets}
(run ./run.exe %{exe:../../src/client/opamMain.exe.exe} %{dep:compare-package-versions.test} %{read-lines:testing-env}))))

(rule
(alias reftest-config)
(action
Expand Down

0 comments on commit d22c06a

Please sign in to comment.