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 <sokcevic@google.com>
Reviewed-by: Gavin Mak <gavinmak@google.com>
Commit-Queue: Josip Sokcevic <sokcevic@google.com>
diff --git a/main.py b/main.py
index 2e1058d..b00aadb 100755
--- a/main.py
+++ b/main.py
@@ -425,7 +425,7 @@
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 2ba2b76..7d6b6ce 100644
--- a/project.py
+++ b/project.py
@@ -1813,11 +1813,11 @@
)
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.")