Skip site navigation (1)Skip section navigation (2)
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>