JuliaRegistries / CompatHelper.jl

Automatically update the [compat] entries for your Julia package's dependencies
https://JuliaRegistries.github.io/CompatHelper.jl/dev/
MIT License
138 stars 40 forks source link

Pkg.jl and CompatHelper.jl write `[sources]` section differently on v1.11 #504

Open agdestein opened 1 month ago

agdestein commented 1 month ago

On Julia v1.11, the following code

using Pkg

showtoml(project) = println(read(joinpath(project, "Project.toml"), String))

project = "project"
mkdir(project)
Pkg.activate(project)
Pkg.add("CompatHelper")

# Create two packages and `dev` them to get the UUIDs
Pkg.generate(joinpath(project, "SomePackage"))
Pkg.generate(joinpath(project, "AnotherPackage"))
Pkg.develop([
    PackageSpec(; path = joinpath(project, "SomePackage")),
    PackageSpec(; path = joinpath(project, "AnotherPackage")),
])

showtoml(project)

creates an environment with this Project.toml:

[deps]
AnotherPackage = "70b51dde-ff63-4d56-bd06-f5c077573a96"
CompatHelper = "aa819f21-2bde-4658-8897-bab36330d9b7"
SomePackage = "3c4efd53-1385-4fe4-b6f1-2e1dbb823624"

Julia v1.11 allows for manually adding a [sources] section to automate the Pkg.develop part, which is useful for monorepos:

open(joinpath(project, "Project.toml"), "a") do io
    println(io)
    println(io, "[sources]")
    println(io, "SomePackage = {path = \"SomePackage\"}")
    println(io, "AnotherPackage = {path = \"AnotherPackage\"}")
end
showtoml(project)
[deps]
AnotherPackage = "70b51dde-ff63-4d56-bd06-f5c077573a96"
CompatHelper = "aa819f21-2bde-4658-8897-bab36330d9b7"
SomePackage = "3c4efd53-1385-4fe4-b6f1-2e1dbb823624"

[sources]
SomePackage = {path = "SomePackage"}
AnotherPackage = {path = "AnotherPackage"}

CompatHelper.jl will split this into separate sections (see e.g. this PR)

using CompatHelper

# I think CompatHelper.main() is doing something like this
CompatHelper.modify_project_toml("SomePackage", project, "0.1", false)
showtoml(project)
[deps]
AnotherPackage = "30d7d2c7-f9c0-4ce7-8ffa-160e2f9efd03"
CompatHelper = "aa819f21-2bde-4658-8897-bab36330d9b7"
SomePackage = "e796d48f-4455-4818-ba38-a7fd70694e68"

[sources.AnotherPackage]
path = "AnotherPackage"

[sources.SomePackage]
path = "SomePackage"

[compat]
SomePackage = "0.1"

On the other hand, doing Pkg.jl operations takes it back:

Pkg.add("LinearAlgebra")
showtoml(project)
[deps]
AnotherPackage = "30d7d2c7-f9c0-4ce7-8ffa-160e2f9efd03"
CompatHelper = "aa819f21-2bde-4658-8897-bab36330d9b7"
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
SomePackage = "e796d48f-4455-4818-ba38-a7fd70694e68"

[sources]
AnotherPackage = {path = "AnotherPackage"}
SomePackage = {path = "SomePackage"}

[compat]
SomePackage = "0.1"