Merge pull request 'less verbose logging if commands fail' (#2497) from less-logging into main

This commit is contained in:
clan-bot
2024-11-26 13:45:01 +00:00
2 changed files with 29 additions and 15 deletions

View File

@@ -30,7 +30,7 @@
# this disables dynamic dependency loading in clan-cli # this disables dynamic dependency loading in clan-cli
export CLAN_NO_DYNAMIC_DEPS=1 export CLAN_NO_DYNAMIC_DEPS=1
nix develop "$ROOT#clan-cli" -c bash -c "TMPDIR=/tmp python -m pytest -s -m impure ./tests $@" nix develop "$ROOT#clan-cli" -c bash -c "TMPDIR=/tmp python -m pytest -m impure ./tests $@"
''; '';
}; };
} }

View File

@@ -91,6 +91,9 @@ def indent_command(command_list: list[str]) -> str:
return final_command return final_command
DEBUG_COMMANDS = os.environ.get("CLAN_DEBUG_COMMANDS", False)
@dataclass @dataclass
class CmdOut: class CmdOut:
stdout: str stdout: str
@@ -108,23 +111,34 @@ class CmdOut:
def __str__(self) -> str: def __str__(self) -> str:
# Set a common indentation level, assuming a reasonable spacing # Set a common indentation level, assuming a reasonable spacing
label_width = max(len("Return Code"), len("Work Dir"), len("Error Msg")) label_width = max(len("Return Code"), len("Work Dir"), len("Error Msg"))
diffed_dict = ( error_msg = [
diff_dicts(cast(dict[str, str], os.environ), self.env) if self.env else None f"""
)
diffed_dict_str = (
json.dumps(diffed_dict.__dict__, indent=4) if diffed_dict else None
)
error_str = f"""
{optional_text("Stdout", self.stdout)}
{optional_text("Environment", diffed_dict_str)}
{optional_text("Stderr", self.stderr)}
{optional_text("Command", self.command)} {optional_text("Command", self.command)}
{text_heading(heading="Metadata")} {optional_text("Stdout", self.stdout)}
{optional_text("Stderr", self.stderr)}
{'Return Code:':<{label_width}} {self.returncode} {'Return Code:':<{label_width}} {self.returncode}
"""
]
if self.msg:
error_msg += [f"{'Error Msg:':<{label_width}} {self.msg.capitalize()}"]
if DEBUG_COMMANDS:
diffed_dict = (
diff_dicts(cast(dict[str, str], os.environ), self.env)
if self.env
else None
)
diffed_dict_str = (
json.dumps(diffed_dict.__dict__, indent=4) if diffed_dict else None
)
error_msg += [
f"""
{optional_text("Environment", diffed_dict_str)}
{text_heading(heading="Metadata")}
{'Work Dir:':<{label_width}} '{self.cwd}' {'Work Dir:':<{label_width}} '{self.cwd}'
{'Error Msg:':<{label_width}} {self.msg.capitalize() if self.msg else ""} """
""" ]
return error_str return "\n".join(error_msg)
class ClanError(Exception): class ClanError(Exception):