Skip to content

Commit

Permalink
Fail when trying to pin a package whose definition could not be found…
Browse files Browse the repository at this point in the history
… instead of forcing interactive edition
  • Loading branch information
kit-ty-kate committed Nov 30, 2024
1 parent 1445912 commit 607c6cd
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 95 deletions.
42 changes: 19 additions & 23 deletions src/client/opamPinCommand.ml
Original file line number Diff line number Diff line change
Expand Up @@ -571,32 +571,28 @@ and source_pin
| _ -> opam_opt
in

if not need_edit && opam_opt = None then
OpamConsole.note
"No package definition found for %s: please complete the template"
(OpamConsole.colorise `bold (OpamPackage.to_string nv));

let need_edit = need_edit || opam_opt = None in

let opam_opt =
let opam_base = match opam_opt with
| None -> OpamFileTools.template nv
| Some opam -> opam
in
let opam_base =
OpamFile.OPAM.with_url_opt urlf opam_base
in
if need_edit then
(if not (OpamFile.exists temp_file) then
OpamFile.OPAM.write_with_preserved_format
?format_from:(OpamPinned.orig_opam_file st name opam_base)
temp_file opam_base;
edit_raw name temp_file >>|
(* Preserve metadata_dir so that copy_files below works *)
OpamFile.OPAM.(with_metadata_dir (metadata_dir opam_base))
)
let opam_base = match opam_opt with
| None ->
OpamConsole.note
"No package definition found for %s: please complete the template"
(OpamConsole.colorise `bold (OpamPackage.to_string nv));
OpamFileTools.template nv
| Some opam -> opam
in
let opam_base =
OpamFile.OPAM.with_url_opt urlf opam_base
in
if not (OpamFile.exists temp_file) then
OpamFile.OPAM.write_with_preserved_format
?format_from:(OpamPinned.orig_opam_file st name opam_base)
temp_file opam_base;
edit_raw name temp_file >>|
(* Preserve metadata_dir so that copy_files below works *)
OpamFile.OPAM.(with_metadata_dir (metadata_dir opam_base))
else
Some opam_base
Option.map (OpamFile.OPAM.with_url_opt urlf) opam_opt
in
match opam_opt with
| None ->
Expand Down
94 changes: 22 additions & 72 deletions tests/reftests/pin.test
Original file line number Diff line number Diff line change
Expand Up @@ -682,17 +682,9 @@ Done.
nip-v is now pinned to file://${BASEDIR}/nip-v.1.tgz (version 2)
### opam pin add nip 1 --with-version 42 --no-action
[nip.42] synchronised (file://${BASEDIR}/nip.1.tgz)
[NOTE] No package definition found for nip.42: please complete the template
[WARNING] The opam file didn't pass validation:
error 22: Some fields are present but empty; remove or fill them: "homepage", "license", "bug_reports"
error 57: Synopsis must not be empty
warning 59: url doesn't contain a checksum
warning 62: License doesn't adhere to the SPDX standard, see https://spdx.org/licenses/ : ""
Proceed anyway ('no' will re-edit)? [Y/n] y
You can edit this file again with "opam pin edit nip", export it with "opam show nip --raw"
nip is now pinned to file://${BASEDIR}/nip.1.tgz (version 42)
[ERROR] No valid package definition found
# Return code 5 #
### opam pin list
nip.42 (uninstalled) rsync file://${BASEDIR}/nip.1.tgz
nip-path.42 rsync file://${BASEDIR}/nip-path
nip-v.2 (uninstalled) rsync file://${BASEDIR}/nip-v.1.tgz
### find OPAM/versions/lib -name '*.t' | sort
Expand Down Expand Up @@ -944,27 +936,13 @@ opam-version: "2.0"
### opam pin pkg-with-typo ./missing-opam --no-action
Package pkg-with-typo does not exist, create as a NEW package? [Y/n] y
[pkg-with-typo.dev] synchronised (file://${BASEDIR}/missing-opam)
[NOTE] No package definition found for pkg-with-typo.dev: please complete the template
iNvAlId ${BASEDIR}/OPAM/vcs-local/.opam-switch/overlay/pkg-with-typo/opam_
[WARNING] The opam file didn't pass validation:
error 22: Some fields are present but empty; remove or fill them: "homepage", "license", "bug_reports"
error 57: Synopsis must not be empty
warning 62: License doesn't adhere to the SPDX standard, see https://spdx.org/licenses/ : ""
Proceed anyway ('no' will re-edit)? [Y/n] y
You can edit this file again with "opam pin edit pkg-with-typo", export it with "opam show pkg-with-typo --raw"
pkg-with-typo is now pinned to file://${BASEDIR}/missing-opam (version dev)
[ERROR] No valid package definition found
# Return code 5 #
### opam pin pkg-with-typo ./missing-opam
[NOTE] Package pkg-with-typo is already pinned to file://${BASEDIR}/missing-opam (version dev).
Package pkg-with-typo does not exist, create as a NEW package? [Y/n] y
[pkg-with-typo.dev] synchronised (no changes)
pkg-with-typo is now pinned to file://${BASEDIR}/missing-opam (version dev)

[ERROR] Package conflict!
* Missing dependency:
- pkg-with-typo -> specify-dependencies-here
unknown package

[NOTE] Pinning command successful, but your installed packages may be out of sync.
# Return code 20 #
[ERROR] No valid package definition found
# Return code 5 #
### <pin:missing-opam/pkg.opam>
opam-version: "2.0"
pin-depends: [
Expand All @@ -977,25 +955,8 @@ The following additional pinnings are required by pkg.dev:
Pin and install them? [Y/n] y
Package pin-pkg does not exist, create as a NEW package? [Y/n] y
[pin-pkg.dev] synchronised (file://.)
[NOTE] No package definition found for pin-pkg.dev: please complete the template
iNvAlId ${BASEDIR}/OPAM/vcs-local/.opam-switch/overlay/pin-pkg/opam_
[WARNING] The opam file didn't pass validation:
error 22: Some fields are present but empty; remove or fill them: "homepage", "license", "bug_reports"
error 57: Synopsis must not be empty
warning 62: License doesn't adhere to the SPDX standard, see https://spdx.org/licenses/ : ""
error 65: URLs must be absolute: "."
Proceed anyway ('no' will re-edit)? [Y/n] y
You can edit this file again with "opam pin edit pin-pkg", export it with "opam show pin-pkg --raw"
pin-pkg is now pinned to file://. (version dev)
pkg is now pinned to file://${BASEDIR}/missing-opam (version dev)

[ERROR] Package conflict!
* Missing dependency:
- pin-pkg -> specify-dependencies-here
unknown package

[NOTE] Pinning command successful, but your installed packages may be out of sync.
# Return code 20 #
[ERROR] No valid package definition found
# Return code 5 #
### <pin:missing-opam/pkg.opam>
opam-version: "2.0"
depends: [
Expand All @@ -1005,37 +966,26 @@ pin-depends: [
["pin-pkg.dev" "file://."]
]
### opam pin ./missing-opam
[NOTE] Package pkg is already pinned to file://${BASEDIR}/missing-opam (version dev).
pkg is now pinned to file://${BASEDIR}/missing-opam (version dev)

[ERROR] Package conflict!
* Missing dependency:
- pkg -> pin-pkg -> specify-dependencies-here
unknown package

[NOTE] Pinning command successful, but your installed packages may be out of sync.
# Return code 20 #
Package pkg does not exist, create as a NEW package? [Y/n] y
The following additional pinnings are required by pkg.dev:
- pin-pkg.dev at file://.
Pin and install them? [Y/n] y
Package pin-pkg does not exist, create as a NEW package? [Y/n] y
[pin-pkg.dev] synchronised (file://.)
[ERROR] No valid package definition found
# Return code 5 #
### : special case where the name of the pin-depend matches the name of the package itself (recursive)
### <pin:missing-opam/pkg.opam>
opam-version: "2.0"
pin-depends: [
["pkg.dev" "git+https://github.com/kit-ty-kate/tsv-tools"]
]
### opam pin ./missing-opam
[NOTE] Package pkg is already pinned to file://${BASEDIR}/missing-opam (version dev).
Package pkg does not exist, create as a NEW package? [Y/n] y
The following additional pinnings are required by pkg.dev:
- pkg.dev at git+https://github.com/kit-ty-kate/tsv-tools
Pin and install them? [Y/n] y
[NOTE] Package pkg is currently pinned to file://${BASEDIR}/missing-opam (version dev).
[pkg.dev] synchronised (git+https://github.com/kit-ty-kate/tsv-tools)
pkg is now pinned to git+https://github.com/kit-ty-kate/tsv-tools (version dev)
pkg is now pinned to file://${BASEDIR}/missing-opam (version dev)

The following actions will be performed:
=== install 1 package
- install pkg dev (pinned)

<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>
-> retrieved pkg.dev (file://${BASEDIR}/missing-opam)
-> installed pkg.dev
Done.
Package pkg does not exist, create as a NEW package? [Y/n] y
[pkg.dev] synchronised (no changes)
[ERROR] No valid package definition found
# Return code 5 #

0 comments on commit 607c6cd

Please sign in to comment.