From 943e7bcec5a39bfe874f97a7f2b25c8ea0265e52 Mon Sep 17 00:00:00 2001 From: Julianne Swinoga Date: Sun, 26 Nov 2023 12:49:06 -0500 Subject: [PATCH 1/2] When removing previously downloaded FW, try to make any problem files writable and then try deleting again. Fixes #33 --- OATFWGUI/gui_logic.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/OATFWGUI/gui_logic.py b/OATFWGUI/gui_logic.py index 7167918..66e19e0 100644 --- a/OATFWGUI/gui_logic.py +++ b/OATFWGUI/gui_logic.py @@ -4,6 +4,8 @@ import zipfile import json import shutil +import os +import stat from typing import List, Optional from pathlib import Path @@ -64,11 +66,17 @@ def download_fw(zip_url: str) -> Path: def extract_fw(zipfile_name: Path) -> Path: + def remove_readonly(func, path, excinfo): + # Windows has a problem with deleting some git files + log.debug(f'Problem removing {path}, attempting to make writable') + os.chmod(path, stat.S_IWRITE) + func(path) + # For Windows path length reasons, keep the firmware folder name short fw_dir = Path(get_install_dir(), 'OATFW') if fw_dir.exists(): log.info(f'Removing previously downloaded FW from {fw_dir}') - shutil.rmtree(fw_dir, ignore_errors=True) + shutil.rmtree(fw_dir, onerror=remove_readonly) log.info(f'Extracting FW from {zipfile_name}') with zipfile.ZipFile(zipfile_name, 'r') as zip_ref: From 1189c51dd0b72e67e2179f1cd46b91204abd204e Mon Sep 17 00:00:00 2001 From: Julianne Swinoga Date: Sun, 26 Nov 2023 12:49:17 -0500 Subject: [PATCH 2/2] Convert raw strings to Path objects before checking equality. Windows path separators may be different in a raw string. Fixes #34 --- OATFWGUI/gui_logic.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OATFWGUI/gui_logic.py b/OATFWGUI/gui_logic.py index 66e19e0..1070dfb 100644 --- a/OATFWGUI/gui_logic.py +++ b/OATFWGUI/gui_logic.py @@ -236,7 +236,7 @@ def build_fw(self): self.main_app.wSpn_build.setState(BusyIndicatorState.BUSY) config_dest_path = str(Path(self.logic_state.fw_dir, 'Configuration_local.hpp').resolve()) - if config_dest_path != self.logic_state.config_file_path: + if Path(config_dest_path) != Path(self.logic_state.config_file_path): if QFile.exists(config_dest_path): log.warning(f'Deleting existing configuration file {config_dest_path}') QFile.remove(config_dest_path)