feature/generador-instaladores-linux-windows
This commit is contained in:
@@ -16,6 +16,7 @@ from ..constants import (
|
||||
DIR_PROCESADOS,
|
||||
DIR_TEMP,
|
||||
ENV_PATH,
|
||||
IS_WINDOWS,
|
||||
LOGS_DIR,
|
||||
ODBC_DIR,
|
||||
SEVEN_ZIP_DIR,
|
||||
@@ -25,10 +26,32 @@ from .env_loader import render_env_template
|
||||
|
||||
|
||||
def _copy_tree_if_missing(src: Path, dest: Path) -> None:
|
||||
if not src.is_dir() or dest.exists():
|
||||
if not src.is_dir():
|
||||
return
|
||||
dest.parent.mkdir(parents=True, exist_ok=True)
|
||||
shutil.copytree(src, dest)
|
||||
# dest puede existir pero VACÍO: ensure_runtime_layout crea ODBC_DIR/SEVEN_ZIP_DIR
|
||||
# antes de llamar aquí. Solo saltar si ya tiene contenido (evita re-copiar en cada
|
||||
# arranque). Antes se saltaba por dest.exists(), dejando 7-Zip/ODBC sin desplegar.
|
||||
if dest.exists() and any(dest.iterdir()):
|
||||
return
|
||||
dest.mkdir(parents=True, exist_ok=True)
|
||||
shutil.copytree(src, dest, dirs_exist_ok=True)
|
||||
|
||||
|
||||
def _ensure_seven_zip_executable() -> None:
|
||||
"""
|
||||
Asegura el bit de ejecución del 7-Zip embebido en Linux/macOS. shutil.copytree
|
||||
suele preservar los permisos, pero esto es una salvaguarda barata: si el binario
|
||||
quedó sin 'x', la extracción fallaría con PermissionError.
|
||||
"""
|
||||
if IS_WINDOWS:
|
||||
return
|
||||
for exe_name in ("7zz", "7za", "7z"):
|
||||
exe_path = SEVEN_ZIP_DIR / exe_name
|
||||
if exe_path.is_file():
|
||||
try:
|
||||
exe_path.chmod(0o755)
|
||||
except OSError:
|
||||
pass
|
||||
|
||||
|
||||
def _write_env_if_missing() -> None:
|
||||
@@ -71,6 +94,7 @@ def ensure_runtime_layout() -> None:
|
||||
|
||||
_copy_tree_if_missing(BUNDLED_SOURCE_7ZIP, SEVEN_ZIP_DIR)
|
||||
_copy_tree_if_missing(BUNDLED_SOURCE_ODBC, ODBC_DIR)
|
||||
_ensure_seven_zip_executable()
|
||||
|
||||
from ..constants import DB_PATH
|
||||
|
||||
|
||||
Reference in New Issue
Block a user