@@ -114,7 +114,7 @@ function load_project_deps(project::Project, project_file::String, manifest::Man
114114
115115 for (name:: String , uuid:: UUID ) in project. deps
116116 findfirst (pkg -> pkg. uuid == uuid, pkgs) === nothing || continue # do not duplicate packages
117- path, repo = get_path_repo (project, name)
117+ path, repo = get_path_repo (project, project_file, manifest_file, name)
118118 entry = manifest_info (manifest, uuid)
119119 push! (pkgs_direct, entry === nothing ?
120120 PackageSpec (;uuid, name, path, repo) :
@@ -155,7 +155,7 @@ function load_all_deps(env::EnvCache, pkgs::Vector{PackageSpec}=PackageSpec[];
155155 pkgs = load_manifest_deps (env. manifest, pkgs; preserve= preserve)
156156 # Sources takes presedence over the manifest...
157157 for pkg in pkgs
158- path, repo = get_path_repo (env. project, pkg. name)
158+ path, repo = get_path_repo (env. project, env . project_file, env . manifest_file, pkg. name)
159159 if path != = nothing
160160 pkg. path = path
161161 end
@@ -319,7 +319,7 @@ function reset_all_compat!(proj::Project)
319319 return nothing
320320end
321321
322- function collect_project (pkg:: Union{PackageSpec, Nothing} , path:: String , julia_version)
322+ function collect_project (pkg:: Union{PackageSpec, Nothing} , path:: String , manifest_file :: String , julia_version)
323323 deps = PackageSpec[]
324324 weakdeps = Set {UUID} ()
325325 project_file = projectfile_path (path; strict= true )
@@ -329,9 +329,9 @@ function collect_project(pkg::Union{PackageSpec, Nothing}, path::String, julia_v
329329 pkgerror (" julia version requirement for package at `$path ` not satisfied: compat entry \" julia = $(get_compat_str (project, " julia" )) \" does not include Julia version $julia_version " )
330330 end
331331 for (name, uuid) in project. deps
332- path , repo = get_path_repo (project, name)
332+ dep_path , repo = get_path_repo (project, project_file, manifest_file , name)
333333 vspec = get_compat (project, name)
334- push! (deps, PackageSpec (name= name, uuid= uuid, version= vspec, path= path , repo= repo))
334+ push! (deps, PackageSpec (name = name, uuid = uuid, version = vspec, path = dep_path , repo = repo))
335335 end
336336 for (name, uuid) in project. weakdeps
337337 vspec = get_compat (project, name)
@@ -390,15 +390,15 @@ function collect_fixed!(env::EnvCache, pkgs::Vector{PackageSpec}, names::Dict{UU
390390 weak_map = Dict {UUID,Set{UUID}} ()
391391
392392 uuid = Types. project_uuid (env)
393- deps, weakdeps = collect_project (env. pkg, dirname (env. project_file), julia_version)
393+ deps, weakdeps = collect_project (env. pkg, dirname (env. project_file), env . manifest_file, julia_version)
394394 deps_map[uuid] = deps
395395 weak_map[uuid] = weakdeps
396396 names[uuid] = env. pkg === nothing ? " project" : env. pkg. name
397397
398398 for (path, project) in env. workspace
399399 uuid = Types. project_uuid (project, path)
400- pkg = project. name === nothing ? nothing : PackageSpec (name= project. name, uuid= uuid)
401- deps, weakdeps = collect_project (pkg, path, julia_version)
400+ pkg = project. name === nothing ? nothing : PackageSpec (name = project. name, uuid = uuid)
401+ deps, weakdeps = collect_project (pkg, path, env . manifest_file, julia_version)
402402 deps_map[Types. project_uuid (env)] = deps
403403 weak_map[Types. project_uuid (env)] = weakdeps
404404 names[uuid] = project. name === nothing ? " project" : project. name
@@ -418,7 +418,7 @@ function collect_fixed!(env::EnvCache, pkgs::Vector{PackageSpec}, names::Dict{UU
418418 if ! isdir (path)
419419 pkgerror (" expected package $(err_rep (pkg)) to exist at path `$path `" )
420420 end
421- deps, weakdeps = collect_project (pkg, path, julia_version)
421+ deps, weakdeps = collect_project (pkg, path, env . manifest_file, julia_version)
422422 deps_map[pkg. uuid] = deps
423423 weak_map[pkg. uuid] = weakdeps
424424 end
@@ -1883,7 +1883,7 @@ function up(ctx::Context, pkgs::Vector{PackageSpec}, level::UpgradeLevel;
18831883 # TODO check all pkg.version == VersionSpec()
18841884 # set version constraints according to `level`
18851885 for pkg in pkgs
1886- source_path, source_repo = get_path_repo (ctx. env. project, pkg. name)
1886+ source_path, source_repo = get_path_repo (ctx. env. project, ctx . env . project_file, ctx . env . manifest_file, pkg. name)
18871887 entry = manifest_info (ctx. env. manifest, pkg. uuid)
18881888 new = up_load_versions! (ctx, pkg, entry, source_path, source_repo, level)
18891889 new && push! (new_git, pkg. uuid) # TODO put download + push! in utility function
@@ -2100,7 +2100,8 @@ end
21002100function abspath! (env:: EnvCache , project:: Project )
21012101 for (key, entry) in project. sources
21022102 if haskey (entry, " path" )
2103- entry[" path" ] = project_rel_path (env, entry[" path" ])
2103+ # Paths in project sources are project-relative, so join with project_file dir, not manifest_file dir
2104+ entry[" path" ] = normpath (joinpath (dirname (env. project_file), entry[" path" ]))
21042105 end
21052106 end
21062107 return project
0 commit comments