@@ -99,7 +99,7 @@ function authenticate(;
9999
100100 _assert_pkg_server_env_var_is_set ()
101101
102- server = get_pkg_server () :: String
102+ server = pkg_server ()
103103 server = rstrip (server, ' /' )
104104 server = string (server, " /" , auth_suffix)
105105
347347
348348# # utils
349349
350- @static if Base. VERSION >= v " 1.4-"
351- # Note that we add `::Union{String, Nothing}` to force conversion from `SubString` to `String`
352- get_pkg_server ():: Union{String, Nothing} = Pkg. pkg_server ()
353- else
354- # This function does not exist in Julia 1.3
355- # Note that we add `::Union{String, Nothing}` to force conversion from `SubString` to `String`
356- function get_pkg_server ():: Union{String, Nothing}
357- server = get (ENV , " JULIA_PKG_SERVER" , " https://pkg.julialang.org" )
358- isempty (server) && return nothing
359- startswith (server, r" \w +://" ) || (server = " https://$server " )
360- return rstrip (server, ' /' )
361- end
362- end
363-
364350is_new_auth_mechanism () =
365351 isdefined (Pkg, :PlatformEngines ) &&
366352 isdefined (Pkg. PlatformEngines, :get_server_dir ) &&
@@ -373,16 +359,58 @@ is_token_valid(toml) =
373359 (get (toml, " expires_at" , nothing ) isa Union{Integer, AbstractFloat} ||
374360 get (toml, " expires" , nothing ) isa Union{Integer, AbstractFloat})
375361
362+ @static if Base. VERSION >= v " 1.4-"
363+ const pkg_server = Pkg. pkg_server
364+ else
365+ # This function does not exist in Julia 1.3
366+ function pkg_server ()
367+ server = get (ENV , " JULIA_PKG_SERVER" , " https://pkg.julialang.org" )
368+ isempty (server) && return nothing
369+ startswith (server, r" \w +://" ) || (server = " https://$server " )
370+ return rstrip (server, ' /' )
371+ end
372+ end
373+
374+ function _get_server_dir (
375+ url:: AbstractString ,
376+ server:: Union{AbstractString, Nothing} ,
377+ )
378+ server === nothing && return
379+ url == server || startswith (url, " $server /" ) || return
380+ m = match (r" ^\w +://([^\\ /]+)(?:$|/)" , server)
381+ if m === nothing
382+ @warn " malformed Pkg server value" server
383+ return
384+ end
385+ isempty (Base. DEPOT_PATH ) && return
386+ invalid_filename_chars = [' :' , ' /' , ' <' , ' >' , ' "' , ' /' , ' \\ ' , ' |' , ' ?' , ' *' ]
387+ dir = join (replace (c -> c in invalid_filename_chars ? ' _' : c, collect (String (only (m. captures)))))
388+ return joinpath (Pkg. depots1 (), " servers" , dir)
389+ end
390+ function get_server_dir (
391+ url:: AbstractString ,
392+ server:: Union{AbstractString, Nothing} = pkg_server (),
393+ )
394+ server_dir_pkgauth = _get_server_dir (url, server)
395+ server_dir_pkg = Pkg. PlatformEngines. get_server_dir (url, server)
396+ if server_dir_pkgauth != server_dir_pkg
397+ msg = " The PkgAuthentication server directory is not equal to the Pkg server directory." *
398+ " Unexpected behavior may occur."
399+ @warn msg server_dir_pkgauth server_dir_pkg
400+ end
401+ return server_dir_pkgauth
402+ end
403+
376404function token_path (url:: AbstractString )
377405 @static if is_new_auth_mechanism ()
378- server_dir = Pkg . PlatformEngines . get_server_dir (url)
406+ server_dir = get_server_dir (url)
379407 if server_dir != = nothing
380408 return joinpath (server_dir, " auth.toml" )
381409 end
382410 end
383411 # older auth mechanism uses a different token location
384412 default = joinpath (Pkg. depots1 (), " token.toml" )
385- get (ENV , " JULIA_PKG_TOKEN_PATH" , default)
413+ return get (ENV , " JULIA_PKG_TOKEN_PATH" , default)
386414end
387415
388416const OPEN_BROWSER_HOOK = Ref {Union{Base.Callable, Nothing}} (nothing )
@@ -482,7 +510,7 @@ function install(; maxcount::Integer = 3)
482510 throw (ArgumentError (" `maxcount` must be greater than or equal to one" ))
483511 end
484512 _assert_pkg_server_env_var_is_set ()
485- server = get_pkg_server ( )
513+ server = String ( pkg_server () )
486514 auth_handler = generate_auth_handler (maxcount)
487515 @static if PkgAuthentication. is_new_auth_mechanism ()
488516 Pkg. PlatformEngines. register_auth_error_handler (server, auth_handler)
0 commit comments