@@ -21,7 +21,7 @@ class Run:
21
21
cwd : os .PathLike [str ] | None = None
22
22
23
23
# Stores last printout, for cleaner debug logging
24
- _prev_env : ClassVar [str ] = ""
24
+ _prev_env : ClassVar [dict [ str , str ]] = {}
25
25
26
26
def live (self , * args : str | os .PathLike [str ]) -> None :
27
27
"""
@@ -47,12 +47,19 @@ def _run(
47
47
]
48
48
49
49
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 ()))
52
53
logger .debug ("RUNENV:\n {}" , msg )
53
54
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
+
56
63
logger .debug ("RUN: {}" , " " .join (options ))
57
64
58
65
return subprocess .run (
@@ -63,3 +70,11 @@ def _run(
63
70
env = self .env ,
64
71
cwd = self .cwd ,
65
72
)
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