2.1.0~alpha
Pre-releaseThis is the alpha release of opam 2.1.0.
This alpha release contains many new features, please see blog post for some highlights and upgrade instructions.
Binaries and full archive are signed by @AltGr.
Changelog (possibly scripts breaking changes are prefixed with ✘):
New features
Recursive pin
Opam now handles lookup for opam files on subdirectories with recursive, subpath based, and subpath recursive pin: --recursive
and --subpath PATH
options. On recursive mode, opam goes through subdirectories to find opam files & pin them to their subdirectories. On subpath based mode, opam goes to the given subdirectory to find opam file & pin it to this subdirectory.
Switch Invariant
Define switch base packages as a switch invariant, a generic dependency formula instead of an immutable specific package/version.
-
Define switch invariants rather than "base packages" [#3894 @AltGr] {2.1.0-alpha}
-
Don't warn on switch creation with 'ocaml' as invariant [#4108 @AltGr] {2.1.0-alpha}
-
Better error handling on switch creation [#4121 @AltGr] {2.1.0-alpha}
Lock
opam-lock
was during a long time an opam plugin, and it is now integrated into opam. Option --locked
permits to lock an opam package, according the current switch. It produces a locked file (by default <pkgname>.opam.locked
, can be specified with --lock-suffix
) that contains the original opam file with its depends:
field all package are set to their exact version available in the current switch.
-
Integrate lock plugin [#3746 @rjbou - fix #3734 #3769 #3694] {2.1.0-alpha}
-
Check consistency with opam file when reading lock file to suggest regeneration message [#3680 @rjbou - fix #3654] {2.0.2}
Options configuration
Replace switch and global variables settings opam config set
options, by opam var
and opam option
to generalize them to all modifiable options and variables:
-
opam var|option
: list modifiable options and their values -
opam var|option foo
: displayfoo
value, available for all -
opam var|option foo(=|-=|+=)bar
: updatefoo
value -
opam var|option foo=
: remove/revertfoo
value
By default, acts on switch scope. It can be specified with --global
or --switch sw
.
It deprecates opam config (set|unset|set-global-unset-global)
commands.
-
Add configuration modifications as opam config subcommands [#3992 @rjbou] {2.1.0-alpha}
-
opam var and opam option outside of opam config [#4116 @rjbou - fix #4119] {2.1.0-alpha}
-
Enable option var optim switch load [#4138 @rjbou] {2.1.0-alpha}
Depext
opam-depext
is also a long time opam plugin, used to show / install external dependencies of opam packages. It is now fully integrated in the opam workflow:
-
check of installed package dependencies
-
on install, check that required dependencies are present, show / propose to install if not
Global configuration option depext
, depext-verify
, depext-cannot-install
, depext-run-installs, and
depext-bypasspermit to configure depext use and interactions. CLI options
--assume-depextsand
--no-depexts` can also be used for a single command.
-
Integrate depext plugin [#3975 @rjbou @AltGr - fix #3790 #1519 #2426 #3692] {2.1.0-alpha}
-
Enable command/output display only from verbose level 3 [#4141 @rjbou] {2.1.0-alpha}
New options
Install
-
opam install --check <pkg>
checks that<pkg>
dependencies are already installed in the switch. It reports missing ones and exits with 1, 0 otherwise. It is used on a check only purpose, additionally to--deps-only
. [#3854 @rjbou - fix #3823] {2.1.0-alpha} -
--ignore-conflicts
to use with--deps-only
in case it is needed to install dependencies without taking conflicts into account. [#3853 @rjbou - fix #3846] {2.1.0-alpha}
Show
-
opam show --just-file <file>
shows information of a given file, without loading the switch state. It can be combined with other options, as field filter--field
. It deprecates--file
option. [#3729 @rjbou - fix #3721] {2.1.0-alpha} -
opam show --all-versions <pkg>
displays information of all versions of the given package. It can be used in combination of field filter. [#3867 @rjbou - fix #2980] {2.1.0-alpha} -
opam show --sort <pkg>
display on stdout a sorted opam file: all fields are alphabetically sorted. [#3866 @rjbou - fix ocaml-opam/opam2web#173] {2.1.0-alpha} -
Better error handling. [#4118 @rjbou - fix #3875] {2.1.0-alpha}
Lint
opam lint --check-upstream
enables lint checks on archive urls. This option lead to download archives to check their checksum. [#3758 @rjbou] {2.0.5}
List
--silent
to not write in the output, exit with return code 0 if the list is not empty, 1 otherwise. [#3533 @rjbou - fix #3525] {2.0.1}
Env
opam env --check
permit to indicates if an opam environment is synchronized: returns 0 if up-to-date, 1 otherwise. [#4074 @rjbou - fix #3725] {2.1.0-alpha}
Switch export
-
--freeze
option record VCS commit hash when a VCS url is specified. [#4055 @hannesm] {2.1.0-alpha} -
With
--full
option, include extra-files in switch export, on import create an overlay directory with the file contents. [#4040 @hannesm] {2.1.0-alpha}
Enhancements, updates, and fixes
Repository Management
- Optimize repository loading: we store the repository contents as
.tar.gz
files in~/.opam/repo
instead. Rather than resorting to a complex in-memory structure, we just untar them to/tmp
when they need to be read, and re-tar them after modification (opam update, or format upgrade only). Then we let the OS disk cache do the job: in normal operation, the tree never needs to be flushed to disk, and loading the.tar.gz
is orders of magnitude faster than loading the individual files. [#3752 @AltGr - fix l#3721] {2.1.0-alpha}
Fixes
-
Remove mismatching extra-files: sort list before comparing them. [#3744 @rjbou] {2.0.4}
-
Handle failure or interruption of tar during
opam update
. [#3861 @AltGr] {2.1.0-alpha} -
Fallback in case repository archive doesn't exist. [#4008 @rjbou] {2.1.0-alpha}
-
In case repository archive is corrupted, delete it and ask to launch an update. [#4075 @rjbou - fix #4053] {2.1.0-alpha}
-
When adding a repository, an error is displayed in case of mismatching urls, now both urls are displayed. [#4086 @rjbou - fix #4085] {2.1.0-alpha}
Update
- Handle url backend change to VCS of a package from repository. [#4007 @rjbou - fix #3991] {2.1.0-alpha}
Switch & install
-
Allow local compiler switch creation. [#3720 @rjbou - fix #3713] {2.1.0-alpha}
-
Fix multiple compiler candidate. [#3884 @rjbou - fix #3874] {2.1.0-alpha}
-
Make reinstall handling stricter. [#3907 @AltGr] {2.1.0-alpha}
List
-
Fix
opam list --external
[#3558 @rjbou - fix #3557 ocaml/opam-repository#12677] {2.0.1} -
✘ With
--resolve
restrain test dependencies to direct one instead of listing all test dependencies of queried package(s) [#3923 @rjbou - fix ocaml-opam/opam-depext#121] {2.1.0-alpha}
Show
-
opam show
with local opam file returns local file information. Fixes also the non 1.2 conversion to 2.0 format of local files withopam show --raw
. [#3536 @rjbou - fix #3423] {2.0.1} -
Fields are no longer required to end with a colon. [#3931 @rjbou] {2.1.0-alpha}
-
✘ With
--normalise
disable terminal width wrapping. [#3868 @rjbou - fix #3751] {2.1.0-alpha} -
String fields printed with quotes, as lists. [#3368 @rjbou - fix #3365] {2.0.1}
Pinning
-
Update source of (version) pinned directory [#3726 @rjbou - fix #3651] {2.0.4}
-
Pin edit: fix editing an opam file without a name field. [#3535 @rjbou] {2.0.1}
-
Upgrade pin depends on pinning. [#3684 @rjbou - fix #3508] {2.0.2}
-
Update pin-depends confirmation message to add a skip option. [#3852 @rjbou - fix #3840] {2.1.0-alpha}
-
To avoid lint warning 57 (description error) on 1.2 opam file pinning, add auxiliary files (descr, url) before linting. [#3687 @rjbou] {2.0.2}
-
Fix
--ignore-pin-depends
with autopin. [#3736 @AltGr] {2.0.4} -
Fix pin not installing/upgrading already pinned package. [#3800 @AltGr] {2.0.4}
Working directory
-
Add OPAMDROPWORKINGDIR environment variable for C. [#3792 @rjbou - fix #3727] {2.1.0-alpha}
-
Don't restrain copy to versioned file. [#3759 @rjbou] {2.1.0-alpha}
-
Don't fetch sources when working-dir is set. [#4046 @rjbou] {2.1.0-alpha}
-
Update in place source copy:
-
Fix
working-dir
messages on update command. [#3824 @rjbou] {2.1.0-alpha}
Download & url management
Download
-
Don't execute validation hook if update is empty. [#3490 @hannesm] {2.0.1}
-
Don't check hash with --no-checksum on pull_upstream. [#3658 @rjbou - fix #3652] {2.0.2}
-
Update download errors handling during actions processing. [#3811 @AltGr] {2.1.0-alpha}
-
Update
ftp
command, to pass url last. [#3910 @hannesm] {2.1.0-alpha} -
Terminate (with double dashes) list of command-line download option. [#3913 @cfcs] {2.1.0-alpha}
VCS
-
Git: fallback, fetch all repository remotes to get SHA1 with git < 2.1. [#3561 @rjbou - fix #3523 #3548] {2.0.1}
-
Repository: remove 'file://' prefix for darcs. [#3761 @rjbou] {2.1.0-alpha}
-
Use git -c diff.noprefix=false diff. [#3788/#3628 @Blaisorblade - fix #3627] {2.0.4}
-
Don't remove git cache objects that may be used. [#3831 @AltGr - fix #3828] {2.0.6}
-
Don't include .gitattributes in index.tar.g. [#3873 @dra27] {2.0.6}
-
Opam{Git,Hg}: Fix diffs in presence of binary file. [#3879 @kit-ty-kate] {2.1.0-alpha}
-
Set core.autocrlf and core.eol for Git remotes. This change ensures that Git always disables text file line-ending normalization when cloning changes from a Git remote. [#3882 @dra27] {2.1.0-alpha}
-
Add a git clean on
reset_tree
to keep source dir clean. [#3948 @rjbou] {2.1.0-alpha}
Lint
New lint checks
-
Error 57: A description or a synopsis must be present and non empty. [#3581 @rjbou - fix ocaml/opam-repository#12729] {2.0.1}
-
Warning 58: Advise to use
with-test
andwith-doc
variables iftest
anddoc
are present. [#3591 @rjbou - fix #3580 ocaml/opam-repository#12729] {2.0.1} -
Warning 59: No url checksum given (if
check-upstream
enabled). [#3758 @rjbou] {2.0.5} -
Error 60: Unavailable archive or checksum mismatching (if
check-upstream
enabled). [#3758 @rjbou] {2.0.5} -
Error 61: Out-of-scope
with-test
variable inrun-test:
field. [#3763 @rjbou - fix ocaml-opam/Camelus/issues/27] {2.0.5} -
Warning 62: Add a lint check for SPDX license. [#3976 @AltGr] {2.1.0-alpha}
Updates
Fixes
-
Warning 47: Update warning message. [#3753 @rjbou - fix #3738] {2.0.4}
-
Error 52: Fix
light_uninstall
flag. [#3631 @rjbou - fix #3625] {2.0.2} -
Warning 58: Restrain warning to filters. [#3871 @rjbou - fix ocaml/opam-repository#14280 (comment)] {2.0.5}
Initialization
opam init
-
Don't fail if empty compiler given. [#3633 @rjbou - fix #3614] {2.0.2}
-
Retrieve
root is ok
from global options instead of initialization. [#3704 @rjbou - fix #3695] {2.0.3} -
Default configuration file: add
getconf
to required tools. [#3813 @rjbou] {2.1.0-alpha} -
Clarify message in
opam init --yes
. [#3893 @dra27] {2.1.0-alpha} -
Shell setup: don't advice an infinite sourcing loop. [#3832 @rjbou] {2.1.0-alpha}
-
Default configuration file: Add compilation target globals,
sys-ocaml-arch,
sys-ocaml-cc, and
sys-ocaml-libc`. [#3900 @dra27] {2.1.0-alpha} -
Ensure that environment is initialized lazily, not before init functions are called [#4111 @gasche] {2.1.0-alpha}
-
Fix OPAMLOGS handling, and logdir
opam_init
argument [#4117 @rjbou - fix #4076] {2.1.0-alpha}
opam config / variable configuration
-
Harmonization of
opam config list
andopam config var <var>
: resolve variable first with switch state (loading it only for package defined variables), otherwise, global state. [#3723 @rjbou - fix #3717] {2.0.4} -
Include base packages configuration variables in opam config report. [#3798 @dra27] {2.1.0-alpha}
-
Determine jobs number at launch (
OpamStateConfig
) [#4004 @rjbou - fix #3986] {2.1.0-alpha} -
Read jobs variable from
OpamStateConfig
[#3881 @dra27] {2.0.5} -
opam exec: display command not found message [#4133 @rjbou - fix #4131] {2.0.7}
Portability
Windows
-
Fully test native Windows in the testsuite. [#3260 @dra27] {2.1.0-alpha}
-
Allow native Windows to use Cygwin tool. [#3348 @dra27] {2.1.0-alpha}
-
Deal with Windows path conventions (backslashes, .exe, etc.) [#3350 @dra27] {2.1.0-alpha}
-
Correct display of dir separator on Windows. [#3893 @dra27] {2.1.0-alpha}
-
Tested wrong variable in OPAMW_HasGlyp. [#3898 @dra27] {2.1.0-alpha}
-
Escape Windows paths on manpages [#4129 @AltGr @rjbou - fix #4100] {2.0.7}
BSD
-
Add
gtar
as OpenBSD required tool, as tar does not support theJ
flag. [#3538 @adamsteen] {2.0.1} -
Default use
fetch
on FreeBSD,ftp
on OpenBSD. [#3904 @hannesm] {2.1.0-alpha}
MacOS
- Hash: fallback to internal library in case of openssl error. [#3543 @rjbou - fix ocaml/opam-repository#12613] {2.0.1}
Shell files
Sandbox
-
Respect user's TMPDIR when invoking bwrap. [#3487 @3noch] {2.0.1}
-
Adding way to mount unusual path in bwrap sandbox: introduction of
OPAM_USER_PATH_RO
environment variable. [#3540 @ErwanGa] {2.0.1} -
Make
/var
read-only instead of empty and rw. [#3605 @bobot - fix #3604] {2.0.2} -
Handle symlinks in bwrap. [#3661 @mroch - fix #3660] {2.0.2}
-
Change one-line conditional to
if
statement which was incompatible withset -e
. [#3645 @rjbou - fix #3607] {2.0.2} -
Do not fail if
$HOME/.ccache
is missing. [#3957 @mseri - fix discuss thread] {2.0.6} -
Don't overwrite user's modification. [#4020 #4092 @rjbou] {2.1.0-alpha}
-
Handle
CCACHE_DIR
environment variable in caseccache
call fail. [#4087 @rjbou - fix #4079] {2.1.0-alpha} -
Follow links of
~/.cache
&~/.cache/dune
for bwrap call. [#4087 @rjbou - fix #4086] {2.1.0-alpha}
MacOS specific
-
Considering the possibility that TMPDIR is unset. [#3597 @herbelin - fix
#3576] {2.0.4} -
Release use of unix sockets on MacOS. [#3663 @silene - fix #3659] {2.0.2}
-
Always read write mount
/tmp
[#3742 @rjbou - fix ocaml/opam-repository#13339] {2.1.0-alpha}
Environment file
-
Regenerate missing environment file. [#3691 @rjbou - fix #3690 #3594] {2.0.3}
-
Right handling for empty switch. [#3899 @dra27] {2.1.0-alpha}
fish
-
Unconditionally display MANPATH when fish version is 2.7 or late. [#3728 @gregory-nisbet] {2.0.4}
-
Add colon for fish MANPATH. [#3886 @rjbou - fix #3878] {2.0.6} [#4084 @rjbou - fix #4078] {2.1.0-alpha}
zsh
- Update zsh check interactive terminal (ohmyzsh fix) [#4095 @OCamlPro-mattiasdrp #4128 @AltGr] {2.1.0-alpha}
opam admin
-
Handle non http backend on repository upgrade: compute hash only for http or distant rsync backend [#3596 @rjbou - fix #3590] {2.0.1}
-
Add package selection to
add-hashes
[#3787 @rjbou - fix #3767] {2.1.0-alpha} -
Download files (patches, etc.) using a safe filename. [#3900 @dra27] {2.1.0-alpha}
-
With
--add-constraints
, add constraint on depopts. [#4002 @rjbou - fix #3994] {2.1.0-alpha}
Internal enhancements
Opam file
-
Add
format-version
field to all files. [#3478 #3906 @AltGr] {2.1.0-alpha} -
Clarify pin depend parse error. [#3762 @rjbou] {2.1.0-alpha}
-
Opam file extensions (
x-
fields) enhancement. [#4049 @hannesm] {2.1.0-alpha}
Inner Actions
Solver
-
Fix closure computation in the presence of cycle. [#3670 @AltGr - fix #3662 #3666] {2.0.2}
-
Fix some cases of listing coinstallable package. [#3689 @AltGr] {2.0.2}
-
Add support for Z3 as a solver backend. [#3845 @AltGr] {2.1.0-alpha}
Scheduler
-
Interleave download actions with build/install actions. [#3777 @Armael] {2.1.0-alpha} [#4083 @rjbou - fix #4080] {2.1.0-alpha}
-
Generalization of the job scheduler: provide separate job pools for different subsets of the tasks. [#3778 @AltGr] {2.1.0-alpha}
-
Refactor the return types of
OpamSolution.{apply,resolve_and_apply}
[#3781 @Armael] {2.1.0-alpha} -
Use the scheduler pools to respect the download-jobs parameter. [#3791 @AltGr] {2.1.0-alpha}
Internals
Upgrade 1.2 → 2.0
-
Upgrade to opam 2.0 format overlay opam files of pinned package. [#3528 @rjbou - fix #3513] {2.0.1}
-
Add Compiler file translation function. [#3530 @rjbou - fix ocaml/opam-repository#12523] {2.0.1}
-
Extract archived source files of version-pinned packages. [#3610 @rjbou - fix #3600] {2.0.2}
-
Add function to upgrade opam file, including its auxiliary files: descr, url, files/. [#3624 @rjbou] {2.0.2}
-
Set the right
format-version
field on upgrade. [#4014 @rjbou] {2.1.0-alpha}
UI
-
Streamline the output from download action. [#3794 @AltGr] {2.1.0-alpha}
-
Use a character that displays better on terminals for download action. [#3802 @AltGr] {2.1.0-alpha}
-
Change symbol for download action. [#3862 @AltGr] {2.1.0-alpha}
-
Include the version number in "compilation failed" message. [#4052 @Armael] {2.1.0-alpha}
Directory Tracking
-
Fix precise tracking mode:: missing
to_hex
conversion. [#3796 @rjbou] {2.0.4} -
Check both size and mtime for cached entries. [#4038 @hannesm] {2.0.6}
-
Propagate
--force
to directory tracking revert function. [#4094 @rjbou - fix #4091] {2.1.0-alpha} -
Add
OpamDirTack.string_of_changes
[#4107 @rjbou @hannesm] {2.1.0-alpha}
States
-
Introduce
drop
to replaceignore (unlock ..)
for more lock-type-safety. [#3783 @gasche] {2.1.0-alpha} [#3812 @rjbou] {2.1.0-alpha} -
Change
OpamStateTypes.switch_state.conf_files
frompackage_map
toname_map
[#3799 @dra27] {2.1.0-alpha} -
Fix handling of availability outside of switches. [#3864 @AltGr] {2.1.0-alpha}
Formulas
System
-
Tar extract fail error message: if a tar extract fails, it checks the presence of underlying commands (bzip2, xz, lzma, gzip) to display the error message in verbose mode. [#3502 @rjbou - fix #3497] {2.0.1}
-
Remove link only if it exists. [#3519 @rjbou - fix ocaml-opam/opam-depext#104] {2.0.1}
-
Catch signal to select ones that are really cancelling a blocking state (e.g. waiting for a lock to be released). [#3541 @rjbou] {2.0.4}
-
Set
.out
suffix forread_command_output
stdout file. [#3644 @rjbou] {2.0.2} -
Default opam root is resolved at creation, in order to have the correct linked path. [#3681 @rjbou - fix #3622] {2.0.2}
-
opam clean
: ignore errors trying to remove directories. [#3732 @kit-ty-kate] {2.0.4} -
Command errors display: differentiate command not found & permission denied. [#3865 @rjbou] {2.1.0-alpha}
-
Factorize option functions in
OpamProcess
[#4016 @nobrakal] {2.1.0-alpha} -
Use ocaml code for looking up commands in
PATH
[#4072 @Armael] {2.1.0-alpha} -
Copy files using OCaml code instead of calling to cp or install [#4064 @Armael] {2.1.0-alpha}
Variables
Misc
-
Reinsert and deprecate
alias-of
&no-autoinstall
option. [#3685 @rjbou - fix #3390] {2.0.2} -
Add
of_json
functions & crowbar. [#3776 @gasche] {2.1.0-alpha} -
JSON (de)serialization for OpamParallel graph. [#3786 @gasche] {2.1.0-alpha}
-
Url: catch failure & specific exception. [#3946 @rjbou] {2.1.0-alpha}
-
Update: don't update installed dev package that is not pinned. [#3947 @rjbou] {2.1.0-alpha}
-
Use
OpamArg
helpers for option. [#4059 @rjbou] {2.1.0-alpha}
Build
-
Remove GNUism from bootstrap-ocaml.sh. [#3481 @dra27 - fix #3480] {2.0.1}
-
Steps towards sudo-enabled make install. [#3522 @dra27] {2.1.0-alpha}
-
Avoid sed -i, a GNU sed extension: use mv instead [#3603 @hannesm] {2.0.1}
-
Port build system to Dune (1.2) [#3618 @dra27] {2.1.0-alpha}
-
Update shell/msvs-detect to 0.4.0. [#3869 @dra27] {2.1.0-alpha}
-
Sort out repository script mode. [#3963 @dra27] {2.1.0-alpha}
-
Preliminary support for Dune 2.0. [#3965 @dra27] {2.1.0-alpha}
-
make cold: fail if patch or bunzip2 missing. [#4006 @rjbou - fix #3842] {2.0.6}
-
Fix various warnings [#4132 @rjbou @AltGr - fix #4100] {2.0.7}
Configure
-
Add patch & bunzip2 check. [#3531 @rjbou - fix #3520] {2.0.1}
-
Not having wget or curl is now only a hard-error if
src_ext/archives
doesn't contain the archives (i.e. if make -C src_ext cache-archives has not been run) which means that this should no longer be a requirement for building with the "full" tarball. [#3572 @dra27 - fix #3551] {2.0.1} -
C++ test for MCCS is now moved to the correct place and the message as to whether the solver will be build should work correctly with --disable-checks. Note that not having a C++ compiler is not considered an error if --disable-checks is specified because configure is permitted to believe that the MCCS library exists even if it couldn't detect it. [#3572 @dra27] {2.0.1}
-
Ensure configure generates consistently. [#3935 @dra27] {2.1.0-alpha}
Documentation
Various contributors helped us to update and add code documentation: