mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
60 lines
1.8 KiB
Python
60 lines
1.8 KiB
Python
# SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
import hashlib
|
|
import logging
|
|
import re
|
|
import time
|
|
from subprocess import Popen
|
|
|
|
|
|
class NoGdbProcessError(ValueError):
|
|
"""Raise when trying to interact with gdb subprocess, but it does not exist.
|
|
It may have been killed and removed, or failed to initialize for some reason."""
|
|
|
|
pass
|
|
|
|
|
|
def sha256(file: str) -> str:
|
|
res = hashlib.sha256()
|
|
with open(file, 'rb') as fr:
|
|
res.update(fr.read())
|
|
return res.hexdigest()
|
|
|
|
|
|
def quote_string(string: str) -> str:
|
|
"""Return a shell-escaped version of the string *string*."""
|
|
_find_unsafe = re.compile(r'[^\w@%+=:,./-]', re.ASCII).search
|
|
if not string:
|
|
return "''"
|
|
if _find_unsafe(string) is None:
|
|
return string
|
|
|
|
# use single quotes, and put single quotes into double quotes
|
|
# the string $'b is then quoted as '$'"'"'b'
|
|
return "'" + string.replace("'", "'\"'\"'") + "'"
|
|
|
|
|
|
def verify_valid_gdb_subprocess(gdb_process: Popen) -> None:
|
|
"""Verify there is a process object, and that it is still running.
|
|
Raise NoGdbProcessError if either of the above are not true."""
|
|
if not gdb_process:
|
|
raise NoGdbProcessError('gdb process is not attached')
|
|
|
|
elif gdb_process.poll() is not None:
|
|
raise NoGdbProcessError(
|
|
'gdb process has already finished with return code: %s'
|
|
% str(gdb_process.poll())
|
|
)
|
|
|
|
|
|
def attach_logger() -> logging.Logger:
|
|
handler = logging.StreamHandler()
|
|
handler.setFormatter(logging.Formatter('%(message)s'))
|
|
unique_number = time.time()
|
|
logger = logging.getLogger(__name__ + '.' + str(unique_number))
|
|
logger.propagate = False
|
|
logger.setLevel(logging.ERROR)
|
|
logger.addHandler(handler)
|
|
return logger
|