@@ -134,18 +134,18 @@ def run
134134 end
135135
136136 def with_env_vars ( env )
137- old_env = ENV . to_hash
138-
139- # TODO move env-filtering
140137 # Delete all env vars which are unchanged from before spring started
141138 original_env . each { |k , v | ENV . delete k if ENV [ k ] == v }
142139
140+ changed_keys = env . keys - ENV . keys
143141 # Load in the current env vars, except those which *were* changed when spring started
144142 env . each { |k , v | ENV [ k ] ||= v }
145143
146144 yield
147145 ensure
148- ENV . replace ( old_env . to_hash )
146+ changed_keys . each do |k |
147+ original_env . has_key? ( k ) ? ENV [ k ] = original_env [ k ] : ENV . delete ( k )
148+ end
149149 end
150150
151151 def serve ( client )
@@ -157,6 +157,7 @@ def serve(client)
157157
158158 client_args , client_env = JSON . load ( client . read ( client . gets . to_i ) ) . values_at ( "args" , "env" )
159159
160+ @pid = nil
160161 with_env_vars ( client_env ) do
161162 preload unless preloaded?
162163 command = Spring . command ( client_args . shift )
@@ -169,7 +170,7 @@ def serve(client)
169170 ActionDispatch ::Reloader . prepare!
170171 end
171172
172- pid = fork {
173+ @ pid = fork {
173174 IGNORE_SIGNALS . each { |sig | trap ( sig , "DEFAULT" ) }
174175 trap ( "TERM" , "DEFAULT" )
175176
@@ -197,20 +198,20 @@ def serve(client)
197198 disconnect_database
198199 reset_streams
199200
200- log "forked #{ pid } "
201- manager . puts pid
201+ log "forked #{ @ pid} "
202+ manager . puts @ pid
202203
203- wait pid , streams , client
204+ wait @ pid, streams , client
204205 rescue Exception => e
205206 log "exception: #{ e } "
206- manager . puts unless pid
207+ manager . puts unless @ pid
207208
208209 if streams && !e . is_a? ( SystemExit )
209210 print_exception ( stderr , e )
210211 streams . each ( &:close )
211212 end
212213
213- client . puts ( 1 ) if pid
214+ client . puts ( 1 ) if @ pid
214215 client . close
215216 end
216217
0 commit comments