From 6ce36d95dcb35da07db30f7cf1f5b6d1da3a09ed Mon Sep 17 00:00:00 2001 From: TEC Date: Mon, 7 Oct 2024 23:41:49 +0800 Subject: [PATCH] Allow use of a url and subdir in [sources] Monorepos exist, so we shouldn't complain when somebody tries to combine the url and subdir parameters. --- docs/src/toml-files.md | 1 + src/API.jl | 6 ++++++ src/project.jl | 2 +- test/sources.jl | 6 ++++++ .../WithSources/TestMonorepo/Project.toml | 13 +++++++++++++ .../WithSources/TestMonorepo/src/TestMonorepo.jl | 5 +++++ .../WithSources/TestMonorepo/test/runtests.jl | 1 + 7 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 test/test_packages/WithSources/TestMonorepo/Project.toml create mode 100644 test/test_packages/WithSources/TestMonorepo/src/TestMonorepo.jl create mode 100644 test/test_packages/WithSources/TestMonorepo/test/runtests.jl diff --git a/docs/src/toml-files.md b/docs/src/toml-files.md index 79496e0321..262c1b5767 100644 --- a/docs/src/toml-files.md +++ b/docs/src/toml-files.md @@ -100,6 +100,7 @@ corresponding manifest file. ```toml [sources] Example = {url = "https://github.com/JuliaLang/Example.jl", rev = "custom_branch"} +WithinMonorepo = {url = "https://github.org/author/BigProject", subdir = "SubPackage"} SomeDependency = {path = "deps/SomeDependency.jl"} ``` diff --git a/src/API.jl b/src/API.jl index 5e5723a8b7..2218f248b3 100644 --- a/src/API.jl +++ b/src/API.jl @@ -195,6 +195,9 @@ function update_source_if_set(project, pkg) if pkg.path !== nothing source["path"] = pkg.path end + if pkg.subdir !== nothing + source["subdir"] = pkg.subdir + end path, repo = get_path_repo(project, pkg.name) if path !== nothing pkg.path = path @@ -205,6 +208,9 @@ function update_source_if_set(project, pkg) if repo.rev !== nothing pkg.repo.rev = repo.rev end + if repo.subdir !== nothing + pkg.repo.subdir = repo.subdir + end end function develop(ctx::Context, pkgs::Vector{PackageSpec}; shared::Bool=true, diff --git a/src/project.jl b/src/project.jl index f7a7e83757..1b559898c2 100644 --- a/src/project.jl +++ b/src/project.jl @@ -92,7 +92,7 @@ read_project_compat(raw, project::Project) = read_project_sources(::Nothing, project::Project) = Dict{String,Any}() function read_project_sources(raw::Dict{String,Any}, project::Project) - valid_keys = ("path", "url", "rev") + valid_keys = ("path", "url", "rev", "subdir") sources = Dict{String,Any}() for (name, source) in raw if !(source isa AbstractDict) diff --git a/test/sources.jl b/test/sources.jl index 311b203f00..1497464aab 100644 --- a/test/sources.jl +++ b/test/sources.jl @@ -33,6 +33,12 @@ temp_pkg_dir() do project_path end end + cd(joinpath(dir, "WithSources", "TestMonorepo")) do + with_current_env() do + Pkg.test() + end + end + cd(joinpath(dir, "WithSources", "TestProject")) do with_current_env() do Pkg.test() diff --git a/test/test_packages/WithSources/TestMonorepo/Project.toml b/test/test_packages/WithSources/TestMonorepo/Project.toml new file mode 100644 index 0000000000..b6a31a7b51 --- /dev/null +++ b/test/test_packages/WithSources/TestMonorepo/Project.toml @@ -0,0 +1,13 @@ +name = "TestMonorepo" +uuid = "864d8eef-2526-4817-933e-34008eadd182" +authors = ["KristofferC "] +version = "0.1.0" + +[extras] +Example = "d359f271-ef68-451f-b4fc-6b43e571086c" + +[sources] +Example = {url = "https://github.com/JuliaLang/Pkg.jl", subdir = "test/test_packages/Example"} + +[targets] +test = ["Example"] diff --git a/test/test_packages/WithSources/TestMonorepo/src/TestMonorepo.jl b/test/test_packages/WithSources/TestMonorepo/src/TestMonorepo.jl new file mode 100644 index 0000000000..e4d52f12ff --- /dev/null +++ b/test/test_packages/WithSources/TestMonorepo/src/TestMonorepo.jl @@ -0,0 +1,5 @@ +module TestMonorepo + +greet() = print("Hello World!") + +end diff --git a/test/test_packages/WithSources/TestMonorepo/test/runtests.jl b/test/test_packages/WithSources/TestMonorepo/test/runtests.jl new file mode 100644 index 0000000000..3e04fee8cc --- /dev/null +++ b/test/test_packages/WithSources/TestMonorepo/test/runtests.jl @@ -0,0 +1 @@ +using Example