Skip to content

Commit aed6f5a

Browse files
JeffBezansonKristofferC
authored andcommitted
re-allow non-string values in ENV get! (#50771)
fixes #50472 (cherry picked from commit 6dd763b)
1 parent ac0eec2 commit aed6f5a

File tree

2 files changed

+10
-1
lines changed

2 files changed

+10
-1
lines changed

base/env.jl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,10 @@ end
138138
getindex(::EnvDict, k::AbstractString) = access_env(k->throw(KeyError(k)), k)
139139
get(::EnvDict, k::AbstractString, def) = access_env(Returns(def), k)
140140
get(f::Callable, ::EnvDict, k::AbstractString) = access_env(k->f(), k)
141+
function get!(default::Callable, ::EnvDict, k::AbstractString)
142+
haskey(ENV, k) && return ENV[k]
143+
ENV[k] = default()
144+
end
141145
in(k::AbstractString, ::KeySet{String, EnvDict}) = _hasenv(k)
142146
pop!(::EnvDict, k::AbstractString) = (v = ENV[k]; _unsetenv(k); v)
143147
pop!(::EnvDict, k::AbstractString, def) = haskey(ENV,k) ? pop!(ENV,k) : def

test/env.jl

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,11 @@ end
5252
@test get!(ENV, key, "default") == "default"
5353
@test haskey(ENV, key)
5454
@test ENV[key] == "default"
55+
56+
key = randstring(25)
57+
@test !haskey(ENV, key)
58+
@test get!(ENV, key, 0) == 0
59+
@test ENV[key] == "0"
5560
end
5661
@testset "#17956" begin
5762
@test length(ENV) > 1
@@ -168,7 +173,7 @@ end
168173
end
169174

170175
# Restore the original environment
171-
for k in keys(ENV)
176+
for k in collect(keys(ENV))
172177
if !haskey(original_env, k)
173178
delete!(ENV, k)
174179
end

0 commit comments

Comments
 (0)