@@ -37,16 +37,7 @@ function VersionSet(versions::Vector{VersionNumber})
37
37
end
38
38
VersionSet (versions:: VersionNumber... ) = VersionSet (VersionNumber[versions... ])
39
39
40
- show (io:: IO , s:: VersionSet ) = join (io, s. intervals, " ∪ " )
41
- isempty (s:: VersionSet ) = all (isempty, s. intervals)
42
- in (v:: VersionNumber , s:: VersionSet ) = any (i-> in (v,i), s. intervals)
43
- function intersect (A:: VersionSet , B:: VersionSet )
44
- ivals = [intersect (a,b) for a in A. intervals for b in B. intervals]
45
- filter! (i-> ! isempty (i), ivals)
46
- sort! (ivals, by= i-> i. lower)
47
- VersionSet (ivals)
48
- end
49
- copy (A:: VersionSet ) = VersionSet (copy (A. intervals))
40
+ const empty_versionset = VersionSet ([v " 0.0" ,v " 0.0" ])
50
41
51
42
function normalize! (A:: VersionSet )
52
43
# removes empty intervals and fuses intervals without gaps
@@ -79,6 +70,18 @@ function normalize!(A::VersionSet)
79
70
return A
80
71
end
81
72
73
+ show (io:: IO , s:: VersionSet ) = join (io, s. intervals, " ∪ " )
74
+ isempty (s:: VersionSet ) = all (isempty, s. intervals)
75
+ in (v:: VersionNumber , s:: VersionSet ) = any (i-> in (v,i), s. intervals)
76
+ function intersect (A:: VersionSet , B:: VersionSet )
77
+ (isempty (A) || isempty (B)) && return normalize! (copy (empty_versionset))
78
+ ivals = [intersect (a,b) for a in A. intervals for b in B. intervals]
79
+ filter! (i-> ! isempty (i), ivals)
80
+ sort! (ivals, by= i-> i. lower)
81
+ VersionSet (ivals)
82
+ end
83
+ copy (A:: VersionSet ) = VersionSet (copy (A. intervals))
84
+
82
85
union (A:: VersionSet , B:: VersionSet ) = union! (copy (A), B)
83
86
function union! (A:: VersionSet , B:: VersionSet )
84
87
A == B && return normalize! (A)
@@ -176,13 +179,11 @@ mutable struct ResolveBacktraceItem
176
179
ResolveBacktraceItem (reason, versionreq:: VersionReq ) = new (versionreq, WhyReq[(versionreq,reason)])
177
180
end
178
181
179
- const empty_versionset = VersionSet ([v " 0.0" ,v " 0.0" ])
180
-
181
182
function push! (ritem:: ResolveBacktraceItem , reason, versionset:: VersionSet )
182
183
if isa (ritem. versionreq, VersionSet)
183
184
ritem. versionreq = ritem. versionreq ∩ versionset
184
185
elseif ritem. versionreq ∉ versionset
185
- ritem. versionreq = empty_versionset
186
+ ritem. versionreq = copy ( empty_versionset)
186
187
end
187
188
push! (ritem. why, (versionset,reason))
188
189
end
@@ -192,10 +193,10 @@ function push!(ritem::ResolveBacktraceItem, reason, version::VersionNumber)
192
193
if version ∈ ritem. versionreq
193
194
ritem. versionreq = version
194
195
else
195
- ritem. versionreq = empty_versionset
196
+ ritem. versionreq = copy ( empty_versionset)
196
197
end
197
198
elseif ritem. versionreq ≠ version
198
- ritem. versionreq = empty_versionset
199
+ ritem. versionreq = copy ( empty_versionset)
199
200
end
200
201
push! (ritem. why, (version,reason))
201
202
end
0 commit comments