The main thing that’s a little tricky to understand is the general data compression scheme for describing properties of various package versions, e.g.:
To apply this to a specific version of the ACME package—say version
0.7.1—you go through and for each stanza, see if the version range that identifies the section header includes the version number. The data for
0.7.1 is the union of key-value pairs for all of the sections that include the version
0.7.1, in this case:
ProgressMeter = "0.2.1-0.5"
IterTools = "0.1-0.2"
DataStructures = "0.2.9-0.8"
julia = "0.6-0.7"
Compat = "0.64-0.68"
These give the ranges of versions of these dependencies with which ACME 0.7.1 is compatible. These ranges only apply to actual versions of these dependencies within the same registry, so while they are expressed in compressed format, they are actually effectively just lists of specific registered versions of these other packages.
It is illegal for any version to be included in multiple stanzas which have key collisions so the ordering of the stanza doesn’t matter, nor does their specificity.
This same general compressed format is used for all of the per-package-version files, including:
Versions.toml (although this is degenerate since each key-value pair is unique to an individual version, but it’s still a form of this format),
Package.toml file is the only exception since it describes the package itself and not data about individual versions of it.
Another example, decoding the
Deps.toml file for ACME 0.7.1:
For 0.7.1 this decodes to:
Compat = "34da2185-b29b-5c13-b0c7-acf172513d20"
ProgressMeter = "92933f4c-e287-5a05-a399-4b506db050ca"
IterTools = "c8e1da08-722c-5040-9ed9-7db0dc04731e"
DataStructures = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8"
This is what would go in the
[deps] section of that version’s
Project.toml file (if it had one).