diff --git a/src/manifest.jl b/src/manifest.jl index 45fcdd06c0..e1e65a9946 100644 --- a/src/manifest.jl +++ b/src/manifest.jl @@ -131,7 +131,7 @@ function validate_manifest(julia_version::Union{Nothing,VersionNumber}, manifest end function Manifest(raw::Dict, f_or_io::Union{String, IO})::Manifest - julia_version = isnothing(raw["julia_version"]) ? nothing : VersionNumber(raw["julia_version"]) + julia_version = raw["julia_version"] == "nothing" ? nothing : VersionNumber(raw["julia_version"]) manifest_format = VersionNumber(raw["manifest_format"]) if !in(manifest_format.major, 1:2) if f_or_io isa IO @@ -201,7 +201,7 @@ end function convert_flat_format_manifest(old_raw_manifest::Dict) new_raw_manifest = Dict{String, Any}( "deps" => old_raw_manifest, - "julia_version" => nothing, + "julia_version" => "nothing", # must be a string here to match raw dict "manifest_format" => "1.0.0" # must be a string here to match raw dict ) return new_raw_manifest diff --git a/test/manifests.jl b/test/manifests.jl index 30a792bb99..fe369c13e0 100644 --- a/test/manifests.jl +++ b/test/manifests.jl @@ -86,6 +86,35 @@ using ..Utils @test_logs (:warn,) Pkg.activate(env_dir; io=io) end end + + @testset "Pkg.upgrade_manifest()" begin + env_dir = joinpath(@__DIR__, "manifest", "formats", "v1.0") + env_manifest = joinpath(env_dir, "Manifest.toml") + cp(env_manifest, string(env_manifest, "_backup")) + try + isfile(env_manifest) || error("Reference manifest is missing") + if Base.is_v1_format_manifest(Base.parsed_toml(env_manifest)) == false + error("Reference manifest file at $(env_manifest) is invalid") + end + isolate(loaded_depot=true) do + io = IOBuffer() + Pkg.activate(env_dir; io=io) + output = String(take!(io)) + @test occursin(r"Activating.*project at.*`.*v1.0`", output) + @test Base.is_v1_format_manifest(Base.parsed_toml(env_manifest)) + + Pkg.upgrade_manifest() + @test Base.is_v1_format_manifest(Base.parsed_toml(env_manifest)) == false + Pkg.activate(env_dir; io=io) + output = String(take!(io)) + @test occursin(r"Activating.*project at.*`.*v1.0`", output) + @test Pkg.Types.Context().env.manifest.manifest_format == v"2.0.0" + end + finally + cp(string(env_manifest, "_backup"), env_manifest, force = true) + rm(string(env_manifest, "_backup")) + end + end end