Skip to content

Commit

Permalink
Do not show python traceback when esptool fails (#8603)
Browse files Browse the repository at this point in the history
Path separator already handled by python
Empty strings are false, implicitly checking for length
  • Loading branch information
mcspr committed Jun 14, 2022
1 parent 8bfc2e9 commit 0778980
Showing 1 changed file with 20 additions and 15 deletions.
35 changes: 20 additions & 15 deletions tools/upload.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,17 @@
# First parameter is pyserial path, second is esptool path, then a series of command arguments
# i.e. upload.py tools/pyserial tools/esptool write_flash file 0x0

import sys
import os
import sys
import tempfile

sys.argv.pop(0) # Remove executable name
toolspath = os.path.dirname(os.path.realpath(__file__)).replace('\\', '/') # CWD in UNIX format
toolspath = os.path.dirname(os.path.realpath(__file__))
try:
sys.path.insert(0, toolspath + "/pyserial") # Add pyserial dir to search path
sys.path.insert(0, toolspath + "/esptool") # Add esptool dir to search path
sys.path.insert(0, os.path.join(toolspath, "pyserial")) # Add pyserial dir to search path
sys.path.insert(0, os.path.join(toolspath, "esptool")) # Add esptool dir to search path
import esptool # If this fails, we can't continue and will bomb below
except Exception:
except ImportError:
sys.stderr.write("pyserial or esptool directories not found next to this upload.py tool.\n")
sys.exit(1)

Expand All @@ -26,7 +26,7 @@
erase_addr = ''
erase_len = ''

while len(sys.argv):
while sys.argv:
thisarg = sys.argv.pop(0)

# We silently replace the 921kbaud setting with 460k to enable backward
Expand All @@ -45,25 +45,30 @@
elif thisarg == 'write_flash':
write_addr = sys.argv.pop(0)
binary = sys.argv.pop(0)
elif len(thisarg):
elif thisarg:
cmdline = cmdline + [thisarg]

cmdline = cmdline + ['write_flash']
if len(write_option):
if write_option:
cmdline = cmdline + [write_option]
cmdline = cmdline + ['--flash_size', 'detect']
cmdline = cmdline + [write_addr, binary]

erase_file = ''
if len(erase_addr):
if erase_addr:
# Generate temporary empty (0xff) file
eraser = tempfile.mkstemp()
erase_file = eraser[1]
os.write(eraser[0], bytearray([255] * int(erase_len, 0)))
os.write(eraser[0], bytearray([0xff] * int(erase_len, 0)))
os.close(eraser[0])
cmdline = cmdline + [ erase_addr, erase_file ]
cmdline = cmdline + [erase_addr, erase_file]

esptool.main(cmdline)

if len(erase_file):
os.remove(erase_file)
try:
esptool.main(cmdline)
except esptool.FatalError as e:
sys.stderr.write('\nA fatal esptool.py error occurred: %s' % e)
finally:
if erase_file:
os.remove(erase_file)
if sys.exc_info:

This comment has been minimized.

Copy link
@jjsuwa-sys3175

jjsuwa-sys3175 Jun 17, 2022

Contributor

this clause is always executed because sys.exc_info is function literal and of course bool(sys.exc_info) is always True.

it must be if any(sys.exc_info()):.

sys.exit(2)

0 comments on commit 0778980

Please sign in to comment.