Date: Tue, 20 Feb 2018 22:47:49 +0000 (UTC) From: Kyle Evans <kevans@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r329680 - head/stand/lua Message-ID: <201802202247.w1KMlnZF024702@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: kevans Date: Tue Feb 20 22:47:49 2018 New Revision: 329680 URL: https://svnweb.freebsd.org/changeset/base/329680 Log: lualoader: When restoring environment, only restore unchanged vars Track the latest value we've set an environment variable to, and only restore those that are unchanged from that. This gives us some leeway to make sure we're not clobbering variables overwritten by menu changes. Modified: head/stand/lua/config.lua Modified: head/stand/lua/config.lua ============================================================================== --- head/stand/lua/config.lua Tue Feb 20 22:03:08 2018 (r329679) +++ head/stand/lua/config.lua Tue Feb 20 22:47:49 2018 (r329680) @@ -142,13 +142,26 @@ function config.setCarouselIndex(id, idx) end function config.restoreEnv() + -- Examine changed environment variables for k, v in pairs(config.env_changed) do local restore_value = config.env_restore[k]; + if (restore_value == nil) then + -- This one doesn't need restored for some reason + goto continue; + end + local current_value = loader.getenv(k); + if (current_value ~= v) then + -- This was overwritten by some action taken on the menu + -- most likely; we'll leave it be. + goto continue; + end + restore_value = restore_value.value; if (restore_value ~= nil) then loader.setenv(k, restore_value); else loader.unsetenv(k); end + ::continue:: end config.env_changed = {}; @@ -156,11 +169,12 @@ function config.restoreEnv() end function config.setenv(k, v) - -- Do we need to track this change? - if (config.env_changed[k] == nil) then - config.env_changed[k] = true; - config.env_restore[k] = loader.getenv(k); + -- Track the original value for this if we haven't already + if (config.env_restore[k] == nil) then + config.env_restore[k] = {value = loader.getenv(k)}; end + + config.env_changed[k] = v; return loader.setenv(k, v); end
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201802202247.w1KMlnZF024702>