Skip to content

Commit 172ff0d

Browse files
carlobaldassitkelman
authored andcommitted
Tiny improvements in Pkg.Types
(cherry picked from commit 1edbe3e) ref #20480
1 parent 9cac2e7 commit 172ff0d

File tree

2 files changed

+29
-27
lines changed

2 files changed

+29
-27
lines changed

base/pkg/query.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ function filter_versions(reqs::Requires, deps::Dict{String,Dict{VersionNumber,Av
241241
if !any(values(allowedp))
242242
err_msg = "Unsatisfiable requirements detected for package $p:\n"
243243
err_msg *= string(bktrc[p])
244-
err_msg *= """The intersection of the requirements is $(bktrc[p].versionset).
244+
err_msg *= """The intersection of the requirements is $(bktrc[p].versionreq).
245245
None of the available versions can satisfy this requirement."""
246246
throw(PkgError(err_msg))
247247
end
@@ -278,7 +278,7 @@ function filter_versions(reqs::Requires, deps::Dict{String,Dict{VersionNumber,Av
278278
isreq[rp] || continue
279279
bktrcp = get!(bktrc, rp) do; ResolveBacktraceItem(); end
280280
push!(bktrcp, p=>bktrc[p], srvs)
281-
if isa(bktrcp.versionset, VersionSet) && isempty(bktrcp.versionset)
281+
if isa(bktrcp.versionreq, VersionSet) && isempty(bktrcp.versionreq)
282282
err_msg = "Unsatisfiable requirements detected for package $rp:\n"
283283
err_msg *= string(bktrcp)
284284
err_msg *= "The intersection of the requirements is empty."

base/pkg/types.jl

Lines changed: 27 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -70,12 +70,12 @@ function normalize!(A::VersionSet)
7070
lo = lo1
7171
continue
7272
end
73-
fuse && splice!(ivals, (k+1):k0, [VersionInterval(lo, up),])
73+
fuse && splice!(ivals, (k+1):k0, (VersionInterval(lo, up),))
7474
fuse = false
7575
lo, up = lo1, up1
7676
k0 = k
7777
end
78-
fuse && splice!(ivals, 1:k0, [VersionInterval(lo, up),])
78+
fuse && splice!(ivals, 1:k0, (VersionInterval(lo, up),))
7979
return A
8080
end
8181

@@ -94,10 +94,10 @@ function union!(A::VersionSet, B::VersionSet)
9494
for k1 = k0:length(ivals)
9595
intA = ivals[k1]
9696
if uB < intA.lower
97-
splice!(ivals, k0:(k1-1), [VersionInterval(lB, uB),])
97+
splice!(ivals, k0:(k1-1), (VersionInterval(lB, uB),))
9898
break
9999
elseif uB intA || k1 == length(ivals)
100-
splice!(ivals, k0:k1, [VersionInterval(lB, max(uB, intA.upper)),])
100+
splice!(ivals, k0:k1, (VersionInterval(lB, max(uB, intA.upper)),))
101101
break
102102
end
103103
end
@@ -151,48 +151,50 @@ show(io::IO, f::Fixed) = isempty(f.requires) ?
151151
# required by anything that processes these things.
152152

153153

154+
typealias VersionReq Union{VersionNumber,VersionSet}
155+
typealias WhyReq Tuple{VersionReq,Any}
156+
154157
# This is used to keep track of dependency relations when propagating
155158
# requirements, so as to emit useful information in case of unsatisfiable
156159
# conditions.
157-
# The `versionset` field keeps track of the remaining allowed versions,
160+
# The `versionreq` field keeps track of the remaining allowed versions,
158161
# intersecting all requirements.
159162
# The `why` field is a Vector which keeps track of the requirements. Each
160163
# entry is a Tuple of two elements:
161164
# 1) the first element is the version requirement (can be a single VersionNumber
162-
# or a VersionSet.
165+
# or a VersionSet).
163166
# 2) the second element can be either :fixed (for requirements induced by
164167
# fixed packages), :required (for requirements induced by explicitly
165168
# required packages), or a Pair p=>backtrace_item (for requirements induced
166169
# indirectly, where `p` is the package name and `backtrace_item` is
167170
# another ResolveBacktraceItem.
168171
type ResolveBacktraceItem
169-
versionset::Union{VersionNumber,VersionSet}
170-
why::Vector
171-
ResolveBacktraceItem() = new(VersionSet(), Any[])
172-
ResolveBacktraceItem(reason, versionset::VersionSet) = new(versionset, Any[(versionset,reason)])
173-
ResolveBacktraceItem(reason, version::VersionNumber) = new(version, Any[(version,reason)])
172+
versionreq::VersionReq
173+
why::Vector{WhyReq}
174+
ResolveBacktraceItem() = new(VersionSet(), WhyReq[])
175+
ResolveBacktraceItem(reason, versionreq::VersionReq) = new(versionreq, WhyReq[(versionreq,reason)])
174176
end
175177

176178
const empty_versionset = VersionSet([v"0.0",v"0.0"])
177179

178180
function push!(ritem::ResolveBacktraceItem, reason, versionset::VersionSet)
179-
if isa(ritem.versionset, VersionSet)
180-
ritem.versionset = ritem.versionset versionset
181-
elseif ritem.versionset versionset
182-
ritem.versionset = empty_versionset
181+
if isa(ritem.versionreq, VersionSet)
182+
ritem.versionreq = ritem.versionreq versionset
183+
elseif ritem.versionreq versionset
184+
ritem.versionreq = empty_versionset
183185
end
184186
push!(ritem.why, (versionset,reason))
185187
end
186188

187189
function push!(ritem::ResolveBacktraceItem, reason, version::VersionNumber)
188-
if isa(ritem.versionset, VersionSet)
189-
if version ritem.versionset
190-
ritem.versionset = version
190+
if isa(ritem.versionreq, VersionSet)
191+
if version ritem.versionreq
192+
ritem.versionreq = version
191193
else
192-
ritem.versionset = empty_versionset
194+
ritem.versionreq = empty_versionset
193195
end
194-
elseif ritem.versionset version
195-
ritem.versionset = empty_versionset
196+
elseif ritem.versionreq version
197+
ritem.versionreq = empty_versionset
196198
end
197199
push!(ritem.why, (version,reason))
198200
end
@@ -220,14 +222,14 @@ function _show(io::IO, ritem::ResolveBacktraceItem, indent::String, seen::Set{Re
220222
print(io, "version range $vs ")
221223
end
222224
print(io, "required by package $(w[1]), ")
223-
if isa(w[2].versionset, VersionSet)
224-
if !isempty(w[2].versionset)
225-
println(io, "whose allowed version range is $(w[2].versionset):")
225+
if isa(w[2].versionreq, VersionSet)
226+
if !isempty(w[2].versionreq)
227+
println(io, "whose allowed version range is $(w[2].versionreq):")
226228
else
227229
println(io, "whose allowed version range is empty:")
228230
end
229231
else
230-
println(io, "whose only allowed version is $(w[2].versionset):")
232+
println(io, "whose only allowed version is $(w[2].versionreq):")
231233
end
232234
if w[2] seen
233235
println(io, (i==l ? " " : "") * indent, "└─[see above for $(w[1]) backtrace]")

0 commit comments

Comments
 (0)