1717from tox .execute .request import ExecuteRequest
1818from tox .tox_env .errors import Fail , Recreate , Skip
1919from tox .tox_env .info import Info
20- from tox .util .path import ensure_empty_dir
20+ from tox .util .path import ensure_cachedir_dir , ensure_empty_dir
2121
2222if TYPE_CHECKING :
2323 from tox .config .cli .parser import Parsed
@@ -315,16 +315,27 @@ def _setup_with_env(self) -> None: # noqa: B027 # empty abstract base class
315315 def _done_with_setup (self ) -> None : # noqa: B027 # empty abstract base class
316316 """Called when setup is done."""
317317
318+ def _maybe_ensure_workdir (self ) -> None :
319+ if not self .work_dir .is_dir ():
320+ # Populate the workdir with a CACHEDIR.TAG file only if we would
321+ # be creating it now. If it already exists, do not touch it.
322+ ensure_cachedir_dir (self .work_dir )
323+
318324 def _handle_env_tmp_dir (self ) -> None :
319325 """Ensure exists and empty."""
320326 env_tmp_dir = self .env_tmp_dir
321327 if env_tmp_dir .exists () and next (env_tmp_dir .iterdir (), None ) is not None :
322328 LOGGER .debug ("clear env temp folder %s" , env_tmp_dir )
323329 ensure_empty_dir (env_tmp_dir )
324- env_tmp_dir .mkdir (parents = True , exist_ok = True )
330+ if env_tmp_dir .parent == self .work_dir :
331+ self ._maybe_ensure_workdir ()
332+ ensure_cachedir_dir (env_tmp_dir )
325333
326334 def _handle_core_tmp_dir (self ) -> None :
327- self .temp_dir .mkdir (parents = True , exist_ok = True )
335+ temp_dir = self .temp_dir
336+ if temp_dir .parent == self .work_dir :
337+ self ._maybe_ensure_workdir ()
338+ ensure_cachedir_dir (temp_dir )
328339
329340 def _clean (self , transitive : bool = False ) -> None : # noqa: ARG002, FBT001, FBT002
330341 if self ._run_state ["clean" ]: # pragma: no branch
@@ -333,6 +344,7 @@ def _clean(self, transitive: bool = False) -> None: # noqa: ARG002, FBT001, FBT
333344 if env_dir .exists ():
334345 LOGGER .warning ("remove tox env folder %s" , env_dir )
335346 ensure_empty_dir (env_dir , except_filename = "file.lock" )
347+ ensure_cachedir_dir (env_dir )
336348 self ._log_id = 0 # we deleted logs, so start over counter
337349 self .cache .reset ()
338350 self ._run_state .update ({"setup" : False , "clean" : True })
0 commit comments