Skip to content

Commit 5283aa8

Browse files
authored
Revert "Properly (de)serialize VersionSpec to JSON" (#98)
This reverts commit 3c5dc11.
1 parent 3c5dc11 commit 5283aa8

File tree

2 files changed

+31
-98
lines changed

2 files changed

+31
-98
lines changed

src/Dependencies.jl

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -113,37 +113,43 @@ end
113113
# Add JSON serialization of dependencies
114114
string_or_nothing(x) = isnothing(x) ? x : string(x)
115115

116-
# helper to get the version of a dependency (and not the build_version)
117-
version(d::AbstractDependency) = getpkg(d).version
118-
version(d::Dependency) = d.pkg.version
116+
major(v::VersionNumber) = v.major
117+
minor(v::VersionNumber) = v.minor
118+
patch(v::VersionNumber) = v.patch
119+
major(v::Pkg.Types.VersionBound) = v.t[1]
120+
minor(v::Pkg.Types.VersionBound) = v.t[2]
121+
patch(v::Pkg.Types.VersionBound) = v.t[3]
122+
__version(v::VersionNumber) = v
123+
__version(v::Pkg.Types.VersionSpec) = v.ranges[1].lower
124+
version(d::AbstractDependency) = __version(getpkg(d).version)
125+
version(d::Dependency) = __version(d.pkg.version)
119126

120127
for (type, type_descr) in ((Dependency, "dependency"), (BuildDependency, "builddependency"))
121128
JSON.lower(d::type) = Dict("type" => type_descr,
122129
"name" => d.pkg.name,
123130
"uuid" => string_or_nothing(d.pkg.uuid),
124-
"version" => JSON.parse(JSON.json(version(d))))
131+
"version-major" => major(version(d)),
132+
"version-minor" => minor(version(d)),
133+
"version-patch" => patch(version(d)))
125134
end
126135

127-
import Pkg.Types: VersionBound, VersionRange, VersionSpec
128-
dejson(::Type{VersionBound}, d::Dict{String,Any}) = VersionBound(NTuple{d["n"],Int}(d["t"]))
129-
dejson(::Type{VersionRange}, d::Dict{String,Any}) = VersionRange(dejson(VersionBound, d["lower"]), dejson(VersionBound, d["upper"]))
130-
dejson(::Type{VersionSpec}, d::Dict{String,Any}) = VersionSpec([dejson(VersionRange, v) for v in d["ranges"]])
131-
132136
# When deserialiasing the JSON file, the dependencies are in the form of
133137
# dictionaries. This function converts the dictionary back to the appropriate
134138
# AbstractDependency.
135139
function dependencify(d::Dict)
136-
if haskey(d, "uuid") && haskey(d, "version") && haskey(d, "name")
140+
if d["type"] == "dependency"
137141
uuid = isnothing(d["uuid"]) ? d["uuid"] : UUID(d["uuid"])
138-
version = dejson(VersionSpec, d["version"])
139-
pkg = PackageSpec(; name = d["name"], uuid = uuid, version = version)
140-
if d["type"] == "dependency"
141-
return Dependency(pkg)
142-
elseif d["type"] == "builddependency"
143-
return BuildDependency(pkg)
144-
end
142+
version = VersionNumber(d["version-major"], d["version-minor"], d["version-patch"])
143+
version = version == v"0" ? nothing : version
144+
return Dependency(PackageSpec(; name = d["name"], uuid = uuid, version = version))
145+
elseif d["type"] == "builddependency"
146+
uuid = isnothing(d["uuid"]) ? d["uuid"] : UUID(d["uuid"])
147+
version = VersionNumber(d["version-major"], d["version-minor"], d["version-patch"])
148+
version = version == v"0" ? nothing : version
149+
return BuildDependency(PackageSpec(; name = d["name"], uuid = uuid, version = version))
150+
else
151+
error("Cannot convert to dependency")
145152
end
146-
error("Cannot convert to dependency")
147153
end
148154

149155

test/dependencies.jl

Lines changed: 7 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
using Test
2-
using Base.BinaryPlatforms
3-
using Pkg
4-
using Pkg.Types: VersionSpec
2+
using Pkg, Base.BinaryPlatforms
53
using BinaryBuilderBase
64
using BinaryBuilderBase: getname, getpkg, dependencify
75
using JSON
@@ -19,20 +17,12 @@ end
1917

2018
@testset "Dependencies" begin
2119
name = "Foo_jll"
22-
2320
dep = Dependency(PackageSpec(; name = name))
2421
@test Dependency(name) == dep
2522
@test getname(dep) == name
23+
@test getname(PackageSpec(; name = name)) == name
2624
@test getpkg(dep) == PackageSpec(; name = name)
2725

28-
dep_version = Dependency(PackageSpec(; name = name, version = v"1"))
29-
@test getname(dep_version) == name
30-
@test getpkg(dep_version) == PackageSpec(; name = name, version = v"1")
31-
32-
dep_vspec = Dependency(PackageSpec(; name = name, version = VersionSpec("1.1-1.4.5")))
33-
@test getname(dep_vspec) == name
34-
@test getpkg(dep_vspec) == PackageSpec(; name = name, version = VersionSpec("1.1-1.4.5"))
35-
3626
build_version = v"1.2.3"
3727
dep_buildver = Dependency(PackageSpec(; name = name), build_version)
3828
@test Dependency(name, build_version) == dep_buildver
@@ -43,89 +33,26 @@ end
4333
build_dep = BuildDependency(PackageSpec(; name = build_name))
4434
@test BuildDependency(build_name) == build_dep
4535
@test getname(build_dep) == build_name
36+
@test getname(PackageSpec(; name = build_name)) == build_name
4637
@test getpkg(build_dep) == PackageSpec(; name = build_name)
4738

4839
@testset "JSON (de)serialization" begin
4940
jdep = JSON.lower(dep)
50-
@test jdep == Dict(
51-
"type" => "dependency",
52-
"name" => name,
53-
"uuid" => nothing,
54-
"version" => Dict(
55-
"ranges" => [
56-
Dict(
57-
"lower" => Dict("t" => [0,0,0], "n" => 0),
58-
"upper" => Dict("t" => [0,0,0], "n" => 0)
59-
)
60-
]
61-
)
62-
)
41+
@test jdep == Dict("type" => "dependency", "name" => name, "uuid" => nothing, "version-major" => 0x0, "version-minor" => 0x0, "version-patch" => 0x0)
6342
@test dependencify(jdep) == dep
6443

65-
jdep_vspec = JSON.lower(dep_vspec)
66-
@test jdep_vspec == Dict(
67-
"type" => "dependency",
68-
"name" => name,
69-
"uuid" => nothing,
70-
"version" => Dict(
71-
"ranges" => [
72-
Dict(
73-
"lower" => Dict("t" => [1,1,0], "n" => 2),
74-
"upper" => Dict("t" => [1,4,5], "n" => 3)
75-
)
76-
]
77-
)
78-
)
79-
@test dependencify(jdep_vspec) == dep_vspec
80-
8144
jdep_buildver = JSON.lower(dep_buildver)
82-
@test jdep_buildver == Dict(
83-
"type" => "dependency",
84-
"name" => name,
85-
"uuid" => nothing,
86-
"version" => Dict(
87-
"ranges" => [
88-
Dict(
89-
"lower" => Dict("t" => [0,0,0], "n" => 0),
90-
"upper" => Dict("t" => [0,0,0], "n" => 0)
91-
)
92-
]
93-
)
94-
)
45+
@test jdep_buildver == Dict("type" => "dependency", "name" => name, "uuid" => nothing, "version-major" => 0x0, "version-minor" => 0x0, "version-patch" => 0x0)
9546
# the build_version is currently not serialized, so the following test fails
9647
@test_broken dependencify(jdep_buildver) == dep_buildver
9748

9849
jbuild_dep = JSON.lower(build_dep)
99-
@test jbuild_dep == Dict(
100-
"type" => "builddependency",
101-
"name" => build_name,
102-
"uuid" => nothing,
103-
"version" => Dict(
104-
"ranges" => [
105-
Dict(
106-
"lower" => Dict("t" => [0,0,0], "n" => 0),
107-
"upper" => Dict("t" => [0,0,0], "n" => 0)
108-
)
109-
]
110-
)
111-
)
50+
@test jbuild_dep == Dict("type" => "builddependency", "name" => build_name, "uuid" => nothing, "version-major" => 0x0, "version-minor" => 0x0, "version-patch" => 0x0)
11251
@test dependencify(jbuild_dep) == build_dep
11352

11453
full_dep = Dependency(PackageSpec(; name = "Baz_jll", uuid = "00000000-1111-2222-3333-444444444444", version = "3.1.4"))
11554
jfull_dep = JSON.lower(full_dep)
116-
@test jfull_dep == Dict(
117-
"type" => "dependency",
118-
"name" => "Baz_jll",
119-
"uuid" => "00000000-1111-2222-3333-444444444444",
120-
"version" => Dict(
121-
"ranges" => [
122-
Dict(
123-
"lower" => Dict("t" => [3,1,4], "n" => 3),
124-
"upper" => Dict("t" => [3,1,4], "n" => 3)
125-
)
126-
]
127-
)
128-
)
55+
@test jfull_dep == Dict("type" => "dependency", "name" => "Baz_jll", "uuid" => "00000000-1111-2222-3333-444444444444", "version-major" => 0x3, "version-minor" => 0x1, "version-patch" => 0x4)
12956
@test dependencify(jfull_dep) == full_dep
13057
@test_throws ErrorException dependencify(Dict("type" => "git"))
13158
end

0 commit comments

Comments
 (0)