Skip to content

Commit

Permalink
Rename at-scriptdir project argument to at-script and search upwards …
Browse files Browse the repository at this point in the history
…for Project.toml (#53356)

Closes #53352

I also noticed it wasn't mentioned in the NEWs.md
and so I added it .

Reconciling the relative path behavior, with the search upwads behavour
requested in #53352 is a thing.

(cherry picked from commit a60f22e)
  • Loading branch information
oxinabox authored and KristofferC committed Jun 7, 2024
1 parent baf763d commit ddd5c28
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 2 deletions.
1 change: 1 addition & 0 deletions NEWS.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ Command-line option changes
difference between defining a `main` function and executing the code directly at the end of the script ([#50974]).
* The `--compiled-modules` and `--pkgimages` flags can now be set to `existing`, which will
cause Julia to consider loading existing cache files, but not to create new ones ([#50586], [#52573]).
* The `--project` argument now accepts `@script` to give a path to a directory with a Project.toml relative to the passed script file. `--project=@script/foo` for the `foo` subdirectory. If no path is given after (i.e. `--project=@script`) then (like `--project=@.`) the directory and its parents are searched for a Project.toml ([#50864] and [#53352])

Multi-threading changes
-----------------------
Expand Down
9 changes: 7 additions & 2 deletions base/initdefs.jl
Original file line number Diff line number Diff line change
Expand Up @@ -272,7 +272,7 @@ function load_path_expand(env::AbstractString)::Union{String, Nothing}
env == "@" && return active_project(false)
env == "@." && return current_project()
env == "@stdlib" && return Sys.STDLIB
if startswith(env, "@scriptdir")
if startswith(env, "@script")
if @isdefined(PROGRAM_FILE)
dir = dirname(PROGRAM_FILE)
else
Expand All @@ -283,7 +283,12 @@ function load_path_expand(env::AbstractString)::Union{String, Nothing}
end
dir = dirname(ARGS[1])
end
return abspath(replace(env, "@scriptdir" => dir))
if env == "@script" # complete match, not startswith, so search upwards
return current_project(dir)
else
# starts with, so assume relative path is after
return abspath(replace(env, "@script" => dir))
end
end
env = replace(env, '#' => VERSION.major, count=1)
env = replace(env, '#' => VERSION.minor, count=1)
Expand Down

0 comments on commit ddd5c28

Please sign in to comment.