webhooks: handle git repos on multiple projects

It is possible for one git repository to be added to several hub
projects, but the webhook was not prepared for this case.
This commit is contained in:
Drew DeVault 2021-08-23 11:24:03 +02:00
parent 590f5dc1f3
commit 6fb2029120
1 changed files with 23 additions and 22 deletions

View File

@ -31,30 +31,31 @@ def git_user(user_id):
return "I don't recognize this user.", 404
if event == "repo:update":
repo = (SourceRepo.query
repos = (SourceRepo.query
.filter(SourceRepo.remote_id == payload["id"])
.filter(SourceRepo.repo_type == RepoType.git)).one_or_none()
if not repo:
return "I don't recognize this git repo.", 404
repo.name = payload["name"]
repo.description = payload["description"]
repo.visibility = Visibility(payload["visibility"])
repo.project.updated = datetime.utcnow()
db.session.commit()
return f"Updated local:{repo.id}/remote:{repo.remote_id}. Thanks!", 200
elif event == "repo:delete":
repo = (SourceRepo.query
.filter(SourceRepo.remote_id == payload["id"])
.filter(SourceRepo.repo_type == RepoType.git)).one_or_none()
if not repo:
return "I don't recognize this git repo.", 404
if repo.project.summary_repo_id == repo.id:
repo.project.summary_repo = None
.filter(SourceRepo.repo_type == RepoType.git))
summary = ""
for repo in repos:
repo.name = payload["name"]
repo.description = payload["description"]
repo.visibility = Visibility(payload["visibility"])
repo.project.updated = datetime.utcnow()
db.session.commit()
db.session.delete(repo)
repo.project.updated = datetime.utcnow()
db.session.commit()
return f"Deleted local:{repo.id}/remote:{repo.remote_id}. Thanks!", 200
summary += f"Updated local:{repo.id}/remote:{repo.remote_id}. Thanks!\n"
return summary, 200
elif event == "repo:delete":
repos = (SourceRepo.query
.filter(SourceRepo.remote_id == payload["id"])
.filter(SourceRepo.repo_type == RepoType.git))
for repo in repos:
if repo.project.summary_repo_id == repo.id:
repo.project.summary_repo = None
db.session.commit()
db.session.delete(repo)
repo.project.updated = datetime.utcnow()
db.session.commit()
summary += f"Deleted local:{repo.id}/remote:{repo.remote_id}. Thanks!\n"
return summary, 200
else:
raise NotImplementedError()