From a3a73726129f7aa9cc12bbdc1f01700189936284 Mon Sep 17 00:00:00 2001 From: Josip Sokcevic Date: Thu, 14 Mar 2024 23:50:33 +0000 Subject: [PATCH] main: Stringify project name in error_info If a project can't be removed from checkout due to uncommitted changes present, error.project is type of Project and not a string (as it is in some cases). Project is not JSON serializable, resulting in exception within exception handler: TypeError: Object of type Project is not JSON serializable This change casts project to string as a defensive mechanism. It also passes project name instead of project object. Change-Id: Ie7b782d73dc3647975755d5a3774d16ea6cd5348 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/413877 Tested-by: Josip Sokcevic Reviewed-by: Gavin Mak Commit-Queue: Josip Sokcevic --- main.py | 2 +- project.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/main.py b/main.py index 2e1058d4..b00aadbd 100755 --- a/main.py +++ b/main.py @@ -425,7 +425,7 @@ class _Repo: error_info = json.dumps( { "ErrorType": type(error).__name__, - "Project": project, + "Project": str(project), "Message": str(error), } ) diff --git a/project.py b/project.py index 2ba2b766..7d6b6cea 100644 --- a/project.py +++ b/project.py @@ -1813,11 +1813,11 @@ class Project: ) else: msg = ( - "error: %s: Cannot remove project: uncommitted" + "error: %s: Cannot remove project: uncommitted " "changes are present.\n" % self.RelPath(local=False) ) logger.error(msg) - raise DeleteDirtyWorktreeError(msg, project=self) + raise DeleteDirtyWorktreeError(msg, project=self.name) if verbose: print(f"{self.RelPath(local=False)}: Deleting obsolete checkout.")