From 0841ffe108cadd00a531d03ba3fa8f6d4b23e295 Mon Sep 17 00:00:00 2001 From: KristofferC Date: Thu, 6 Nov 2025 15:38:23 +0100 Subject: [PATCH 1/3] allow finding stdlibs that are not in the manifest as a fallback this helps handling manifest from earlier julia versions --- base/loading.jl | 3 +++ 1 file changed, 3 insertions(+) diff --git a/base/loading.jl b/base/loading.jl index 39f892c38446c..d63cb073e0a0a 100644 --- a/base/loading.jl +++ b/base/loading.jl @@ -463,6 +463,8 @@ function locate_package_env(pkg::PkgId, stopenv::Union{String, Nothing}=nothing) path = manifest_uuid_path(env, pkg) # missing is used as a sentinel to stop looking further down in envs if path === missing + # Before stopping, try stdlib fallback for missing stdlib dependencies + is_stdlib(pkg) && @goto stdlib_fallback path = nothing @goto done end @@ -474,6 +476,7 @@ function locate_package_env(pkg::PkgId, stopenv::Union{String, Nothing}=nothing) stopenv == env && break end end + @label stdlib_fallback # Allow loading of stdlibs if the name/uuid are given # e.g. if they have been explicitly added to the project/manifest mbypath = manifest_uuid_path(Sys.STDLIB, pkg) From 150feab29db48d6c6f850a0c3becd624df23c592 Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Thu, 6 Nov 2025 20:51:44 +0100 Subject: [PATCH 2/3] add test --- test/loading.jl | 11 +++- .../project/deps/BadStdlibDeps2/Manifest.toml | 54 +++++++++++++++++++ test/project/deps/BadStdlibDeps2/Project.toml | 2 + 3 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 test/project/deps/BadStdlibDeps2/Manifest.toml create mode 100644 test/project/deps/BadStdlibDeps2/Project.toml diff --git a/test/loading.jl b/test/loading.jl index ad5eab3768760..f3201cc9bc9fe 100644 --- a/test/loading.jl +++ b/test/loading.jl @@ -1539,12 +1539,21 @@ end mktempdir() do depot # This manifest has a LibGit2 entry that is missing LibGit2_jll, which should be # handled by falling back to the stdlib Project.toml for dependency truth. - badmanifest_test_dir = joinpath(@__DIR__, "project", "deps", "BadStdlibDeps.jl") + badmanifest_test_dir = joinpath(@__DIR__, "project", "deps", "BadStdlibDeps") @test success(addenv( `$(Base.julia_cmd()) --project=$badmanifest_test_dir --startup-file=no -e 'using LibGit2'`, "JULIA_DEPOT_PATH" => depot * Base.Filesystem.pathsep(), )) end + mktempdir() do depot + # This manifest has a LibGit2 entry that has a LibGit2_jll with a git-tree-hash1 + # which simulates an old manifest where LibGit2_jll was not a stdlib + badmanifest_test_dir2 = joinpath(@__DIR__, "project", "deps", "BadStdlibDeps2") + @test success(addenv( + `$(Base.julia_cmd()) --project=$badmanifest_test_dir2 --startup-file=no -e 'using LibGit2'`, + "JULIA_DEPOT_PATH" => depot * Base.Filesystem.pathsep(), + )) + end end @testset "code coverage disabled during precompilation" begin diff --git a/test/project/deps/BadStdlibDeps2/Manifest.toml b/test/project/deps/BadStdlibDeps2/Manifest.toml new file mode 100644 index 0000000000000..988efc8da56f3 --- /dev/null +++ b/test/project/deps/BadStdlibDeps2/Manifest.toml @@ -0,0 +1,54 @@ +# This file is machine-generated - editing it directly is not advised + +julia_version = "1.12.0-DEV" +manifest_format = "2.0" +project_hash = "dc9d33b0ee13d9466bdb75b8d375808a534a79ec" + +[[deps.Artifacts]] +uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" +version = "1.11.0" + +[[deps.LibGit2]] +deps = ["NetworkOptions", "Printf", "SHA", "LibGit2_jll"] +uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" +version = "1.11.0" + +# This is an stdlib but intentionally has a git-tree-sha1 because +# we are emulating that the manifest comes from a version where +# LibGit2_jll was not an stdlib +[[deps.LibGit2_jll]] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll"] +git-tree-sha1 = "1111111111111111111111111111111111111111" +uuid = "e37daf67-58a4-590a-8e99-b0245dd2ffc5" +version = "1.8.0+0" + +[[deps.LibSSH2_jll]] +deps = ["Artifacts", "Libdl", "MbedTLS_jll"] +uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" +version = "1.11.0+1" + +[[deps.Libdl]] +uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" +version = "1.11.0" + +[[deps.MbedTLS_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" +version = "2.28.6+1" + +[[deps.NetworkOptions]] +uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" +version = "1.2.0" + +[[deps.Printf]] +deps = ["Unicode"] +uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" +version = "1.11.0" + +[[deps.SHA]] +uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" +version = "0.7.0" + +[[deps.Unicode]] +uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" +version = "1.11.0" diff --git a/test/project/deps/BadStdlibDeps2/Project.toml b/test/project/deps/BadStdlibDeps2/Project.toml new file mode 100644 index 0000000000000..223889185ea15 --- /dev/null +++ b/test/project/deps/BadStdlibDeps2/Project.toml @@ -0,0 +1,2 @@ +[deps] +LibGit2 = "76f85450-5226-5b5a-8eaa-529ad045b433" From 25f81cbae47ad4b214bf912baeba4516f3c254eb Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Mon, 10 Nov 2025 09:14:43 +0100 Subject: [PATCH 3/3] Update loading.jl --- base/loading.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base/loading.jl b/base/loading.jl index d63cb073e0a0a..eee0b820dcb0e 100644 --- a/base/loading.jl +++ b/base/loading.jl @@ -463,7 +463,7 @@ function locate_package_env(pkg::PkgId, stopenv::Union{String, Nothing}=nothing) path = manifest_uuid_path(env, pkg) # missing is used as a sentinel to stop looking further down in envs if path === missing - # Before stopping, try stdlib fallback for missing stdlib dependencies + # Before stopping, try stdlib fallback is_stdlib(pkg) && @goto stdlib_fallback path = nothing @goto done