Merge branch 'fix/activate_tmp_multiuser_multiinstance' into 'master'

fix(tools): Enable multiuser/multiinstance use of activate script

Closes IDF-11313 and IDF-11355

See merge request espressif/esp-idf!34334
This commit is contained in:
Roland Dobai
2024-10-22 18:36:29 +08:00

View File

@@ -1,10 +1,13 @@
# SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD # SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
# SPDX-License-Identifier: Apache-2.0 # SPDX-License-Identifier: Apache-2.0
import getpass
import os import os
import re import re
import shutil import shutil
import sys import sys
import textwrap import textwrap
from datetime import datetime
from datetime import timedelta
from pathlib import Path from pathlib import Path
from subprocess import run from subprocess import run
from tempfile import gettempdir from tempfile import gettempdir
@@ -18,6 +21,7 @@ from typing import Union
import click import click
from console_output import debug from console_output import debug
from console_output import status_message from console_output import status_message
from console_output import warn
from utils import conf from utils import conf
from utils import run_cmd from utils import run_cmd
@@ -27,10 +31,26 @@ class Shell():
self.shell = shell self.shell = shell
self.deactivate_cmd = deactivate_cmd self.deactivate_cmd = deactivate_cmd
self.new_esp_idf_env = new_esp_idf_env self.new_esp_idf_env = new_esp_idf_env
self.tmp_dir_path = Path(gettempdir()) / 'esp_idf_activate'
try:
self.tmp_dir_path = Path(gettempdir()) / ('esp_idf_activate_' + getpass.getuser())
except Exception as e:
self.tmp_dir_path = Path(gettempdir()) / 'esp_idf_activate'
warn(f'Failed to get username with error: {e}. Using default temporary directory {self.tmp_dir_path}.')
if not conf.ARGS.debug and os.path.exists(self.tmp_dir_path): if not conf.ARGS.debug and os.path.exists(self.tmp_dir_path):
# Do not cleanup temporary directory when debugging # Do not cleanup temporary directory when debugging
shutil.rmtree(self.tmp_dir_path) for item in self.tmp_dir_path.iterdir():
try:
if item.is_file():
current_time = datetime.now()
file_creation_time = datetime.fromtimestamp(os.path.getctime(item))
# delete files older than 1 hour to avoid datarace when using activation in parallel
if current_time - file_creation_time > timedelta(hours=1):
item.unlink()
except Exception as e:
warn(f'Failed to clean temp activation directory with file {item}: {e}')
self.tmp_dir_path.mkdir(parents=True, exist_ok=True) self.tmp_dir_path.mkdir(parents=True, exist_ok=True)
def export(self) -> None: def export(self) -> None: