From b799a3c37ad2bcf38eb2c35018553558d654f23f Mon Sep 17 00:00:00 2001 From: Maxim Prokhorov Date: Thu, 7 Dec 2023 22:43:41 +0300 Subject: [PATCH 1/3] upload.py - more exception handling fixes - don't check exc_info() in `finally`, it only works without `except` with just `try` and `finally` see https://docs.python.org/3/reference/compound_stmts.html#try after `except Exception as e:` block, `e` is already deleted - handle a rare case when esptool code does not close 'erase_file'. printing paths may cause encoding issues, so just fall through silently --- tools/upload.py | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/tools/upload.py b/tools/upload.py index 760d4dbbef..c410e5b93a 100755 --- a/tools/upload.py +++ b/tools/upload.py @@ -39,9 +39,11 @@ # https://github.com/esp8266/Arduino/issues/6755#issuecomment-553208688 if thisarg == "erase_flash": write_option = '--erase-all' + # 'erase_region' is using a temporary file filled with 0xff elif thisarg == 'erase_region': erase_addr = sys.argv.pop(0) erase_len = sys.argv.pop(0) + # 'write_flash' and everything else is used as-is elif thisarg == 'write_flash': write_addr = sys.argv.pop(0) binary = sys.argv.pop(0) @@ -56,19 +58,23 @@ erase_file = '' if erase_addr: - # Generate temporary empty (0xff) file - eraser = tempfile.mkstemp() - erase_file = eraser[1] - os.write(eraser[0], bytearray([0xff] * int(erase_len, 0))) - os.close(eraser[0]) + erase_fd, erase_file = tempfile.mkstemp() + os.write(erase_fd, b"\xff" * int(erase_len, 0)) + os.close(erase_fd) cmdline = cmdline + [erase_addr, erase_file] +exit_code = 0 + try: esptool.main(cmdline) except Exception as e: - sys.stderr.write('\nA fatal esptool.py error occurred: %s' % e) -finally: - if erase_file: + sys.stderr.write(f"\nA fatal upload.py error occurred: {repr(e)}") + exit_code = 2 + +if erase_file: + try: os.remove(erase_file) - if any(sys.exc_info()): - sys.exit(2) + except: + pass + +sys.exit(exit_code) From 2ef98093a7c9348018f8130f9ffdce04b4ba5ea5 Mon Sep 17 00:00:00 2001 From: Maxim Prokhorov Date: Thu, 1 Aug 2024 05:31:39 +0300 Subject: [PATCH 2/3] wrap remove exc too --- tools/upload.py | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/tools/upload.py b/tools/upload.py index c410e5b93a..9b024a2cc6 100755 --- a/tools/upload.py +++ b/tools/upload.py @@ -67,14 +67,10 @@ try: esptool.main(cmdline) + if erase_file: + os.remove(erase_file) except Exception as e: - sys.stderr.write(f"\nA fatal upload.py error occurred: {repr(e)}") + sys.stderr.write(f"\nA fatal upload.py error occurred: {repr(e)}\n") exit_code = 2 -if erase_file: - try: - os.remove(erase_file) - except: - pass - sys.exit(exit_code) From 42689474c1ad8a9691c8ff97c5c89e3cb7d1c372 Mon Sep 17 00:00:00 2001 From: Maxim Prokhorov Date: Thu, 1 Aug 2024 05:42:11 +0300 Subject: [PATCH 3/3] revert fatal os.remove --- tools/upload.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tools/upload.py b/tools/upload.py index 9b024a2cc6..f3802ec307 100755 --- a/tools/upload.py +++ b/tools/upload.py @@ -67,10 +67,14 @@ try: esptool.main(cmdline) - if erase_file: - os.remove(erase_file) except Exception as e: sys.stderr.write(f"\nA fatal upload.py error occurred: {repr(e)}\n") exit_code = 2 +if erase_file: + try: + os.remove(erase_file) + except: + pass + sys.exit(exit_code)