Skip to content

Commit 85ddf9b

Browse files
committed
A few more fixes
1 parent 45fbf16 commit 85ddf9b

File tree

1 file changed

+34
-11
lines changed

1 file changed

+34
-11
lines changed

src/Operations.jl

Lines changed: 34 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1819,19 +1819,28 @@ function set_force_latest_compatible_version!(ctx::Types.Context,
18191819
has_compat = haskey(ctx.env.project.compat, dep_name)
18201820
if has_compat
18211821
old_compat_entry_string = ctx.env.project.compat[dep_name]
1822+
old_compat_entry_spec = Types.semver_spec(old_compat_entry_string)
1823+
all_registered_versions = get_all_registered_versions(ctx, dep_uuid)
18221824
latest_compatible_version = get_latest_compatible_version(
18231825
ctx,
18241826
dep_uuid,
1825-
old_compat_entry_string,
1827+
old_compat_entry_spec,
1828+
all_registered_versions,
18261829
)
18271830
earliest_backwards_compatible_version = get_earliest_backwards_compatible_version(latest_compatible_version)
1831+
all_compatible_earliest_to_latest = get_all_compatible_earliest_to_latest(
1832+
old_compat_entry_spec,
1833+
earliest_backwards_compatible_version,
1834+
latest_compatible_version,
1835+
all_registered_versions,
1836+
)
18281837
if allow_earlier_backwards_compatible_versions
1829-
version_to_use_for_compat = earliest_backwards_compatible_version
1838+
new_compat_entry_string = join(string.(Ref("="), all_compatible_earliest_to_latest), ", ")
18301839
else
1831-
version_to_use_for_compat = latest_compatible_version
1840+
new_compat_entry_string = "=$(latest_compatible_version)"
18321841
end
1833-
new_compat_entry_string = "^$(version_to_use_for_compat)"
18341842
ctx.env.project.compat[dep_name] = new_compat_entry_string
1843+
@info("Setting new `[compat]` entry: `$(dep_name) = \"$(new_compat_entry_string)\"`")
18351844
else
18361845
if dep_name != target_name
18371846
@warn(
@@ -1843,17 +1852,31 @@ function set_force_latest_compatible_version!(ctx::Types.Context,
18431852
return nothing
18441853
end
18451854

1846-
function get_earliest_backwards_compatible_version(ver::Base.VersionNumber)
1847-
(ver.major > 0) && return Base.VersionNumber(ver.major, 0, 0)
1848-
(ver.minor > 0) && return Base.VersionNumber(0, ver.minor, 0)
1849-
return Base.VersionNumber(0, 0, ver.patch)
1855+
function get_all_compatible_earliest_to_latest(compat_spec::VersionSpec,
1856+
earliest_ver::VersionNumber,
1857+
latest_ver::VersionNumber,
1858+
all_registered_versions::Set{VersionNumber})
1859+
compatible_versions = Set{VersionNumber}()
1860+
for ver in all_registered_versions
1861+
if earliest_ver <= ver <= latest_ver
1862+
if ver in compat_spec
1863+
push!(compatible_versions, ver)
1864+
end
1865+
end
1866+
end
1867+
return sort(collect(compatible_versions))
1868+
end
1869+
1870+
function get_earliest_backwards_compatible_version(ver::VersionNumber)
1871+
(ver.major > 0) && return VersionNumber(ver.major, 0, 0)
1872+
(ver.minor > 0) && return VersionNumber(0, ver.minor, 0)
1873+
return VersionNumber(0, 0, ver.patch)
18501874
end
18511875

18521876
function get_latest_compatible_version(ctx::Types.Context,
18531877
uuid::Base.UUID,
1854-
compat_entry_string::AbstractString)
1855-
all_registered_versions = get_all_registered_versions(ctx, uuid)
1856-
compat_spec = Pkg.Types.semver_spec(compat_entry_string)
1878+
compat_spec::VersionSpec,
1879+
all_registered_versions::Set{VersionNumber})
18571880
compatible_versions = filter(in(compat_spec), all_registered_versions)
18581881
latest_compatible_version = maximum(compatible_versions)
18591882
return latest_compatible_version

0 commit comments

Comments
 (0)