@@ -21,7 +21,7 @@ class Run:
2121 cwd : os .PathLike [str ] | None = None
2222
2323 # Stores last printout, for cleaner debug logging
24- _prev_env : ClassVar [str ] = ""
24+ _prev_env : ClassVar [dict [ str , str ]] = {}
2525
2626 def live (self , * args : str | os .PathLike [str ]) -> None :
2727 """
@@ -47,12 +47,19 @@ def _run(
4747 ]
4848
4949 if self .env :
50- msg = "\n " .join (f"{ k } ={ v } " for k , v in sorted (self .env .items ()))
51- if msg != self ._prev_env :
50+ if not self ._prev_env :
51+ type(self )._prev_env = self .env .copy ()
52+ msg = "\n " .join (f"{ k } ={ v } " for k , v in sorted (self .env .items ()))
5253 logger .debug ("RUNENV:\n {}" , msg )
5354 else :
54- logger .debug ("RUNENV: same as last run" )
55- type(self )._prev_env = msg
55+ msg = "\n " .join (
56+ f"{ self ._key_diff (k )} { k } ={ self .env .get (k , '<unset>' )} "
57+ for k in sorted (self .env .keys () | self ._prev_env .keys ())
58+ if self ._prev_env .get (k , None ) != self .env .get (k , None )
59+ )
60+ logger .debug ("RUNENV - changes since last run only:\n {}" , msg )
61+ type(self )._prev_env = self .env .copy ()
62+
5663 logger .debug ("RUN: {}" , " " .join (options ))
5764
5865 return subprocess .run (
@@ -63,3 +70,11 @@ def _run(
6370 env = self .env ,
6471 cwd = self .cwd ,
6572 )
73+
74+ def _key_diff (self , k : str ) -> str :
75+ assert self .env
76+ if k in self .env and k not in self ._prev_env :
77+ return "+"
78+ if k in self ._prev_env and k not in self .env :
79+ return "-"
80+ return " "
0 commit comments