diff --git a/src/client/opamPinCommand.ml b/src/client/opamPinCommand.ml index 3a4506fb538..af4645d8228 100644 --- a/src/client/opamPinCommand.ml +++ b/src/client/opamPinCommand.ml @@ -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 -> diff --git a/tests/reftests/pin.test b/tests/reftests/pin.test index 91924b7d011..09573e9545f 100644 --- a/tests/reftests/pin.test +++ b/tests/reftests/pin.test @@ -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 @@ -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 # ### opam-version: "2.0" pin-depends: [ @@ -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 # ### opam-version: "2.0" depends: [ @@ -1005,16 +966,14 @@ 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) ### opam-version: "2.0" @@ -1022,20 +981,11 @@ 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 #