Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions src/Operations.jl
Original file line number Diff line number Diff line change
Expand Up @@ -3313,6 +3313,15 @@ function apply_force_latest_compatible_version!(
uuid,
old_compat_spec,
)
if latest_compatible_version === nothing
if name != target_name
@warn(
"Skipping force_latest_compatible_version for unregistered dependency",
name, uuid, target_name,
)
end
return nothing
end
earliest_backwards_compatible_version = get_earliest_backwards_compatible_version(latest_compatible_version)
if allow_earlier_backwards_compatible_versions
version_for_intersect = only_major_minor_patch(earliest_backwards_compatible_version)
Expand Down Expand Up @@ -3342,6 +3351,9 @@ function get_latest_compatible_version(
)
all_registered_versions = get_all_registered_versions(ctx, uuid)
compatible_versions = filter(in(compat_spec), all_registered_versions)
if isempty(compatible_versions)
return nothing # No registered versions found
end
latest_compatible_version = maximum(compatible_versions)
return latest_compatible_version
end
Expand Down
17 changes: 17 additions & 0 deletions test/force_latest_compatible_version.jl
Original file line number Diff line number Diff line change
Expand Up @@ -327,6 +327,23 @@ const test_package_parent_dir = joinpath(
end
end
end

@testset "UnregisteredDep: package with unregistered dependencies" begin
mktempdir() do tmp_dir
test_package = joinpath(tmp_dir, "UnregisteredDep")
cp(joinpath(test_package_parent_dir, "UnregisteredDep"), test_package; force = true)
Utils.isolate(loaded_depot = true) do
Pkg.activate(test_package)
# Note: we can't actually instantiate this package since it has unregistered deps
# But we can test that force_latest_compatible_version handles it gracefully

# Test that it throws and shows warning for unregistered dependency
@test_logs (:warn, r"Skipping force_latest_compatible_version for unregistered dependency") begin
@test_throws Pkg.Types.PkgError "expected package `SomeUnregisteredPackage [deadbeef]` to be registered" Pkg.test(; force_latest_compatible_version = true)
end
end
end
end
end

end # module
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
name = "UnregisteredDep"
uuid = "abc047b9-6ad4-4533-a374-d50ae908e3e9"
authors = ["Test <[email protected]>"]
version = "0.1.0"

[deps]
SomeUnregisteredPackage = "deadbeef-dead-beef-dead-beefdeadbeef"

[compat]
SomeUnregisteredPackage = "^1.0"

[extras]
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"

[targets]
test = ["Test"]
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
module UnregisteredDep

# This is a dummy module for testing

end
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
using Test

@testset "UnregisteredDep tests" begin
@test true # Just a dummy test
end
Loading