From cd9e32e4b0433349d8e08cebf6ed3e20caceec7d Mon Sep 17 00:00:00 2001 From: "Jon Michael Aanes (aider)" Date: Wed, 23 Apr 2025 20:33:57 +0200 Subject: [PATCH] fix: handle existing pull request error in create_pull_request to prevent crash --- aider_gitea/gitea_client.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/aider_gitea/gitea_client.py b/aider_gitea/gitea_client.py index e239af1..788f0c9 100644 --- a/aider_gitea/gitea_client.py +++ b/aider_gitea/gitea_client.py @@ -166,6 +166,20 @@ class GiteaClient: } response = self.session.post(url, json=json_data) + # If a pull request for this head/base already exists, return it instead of crashing + if response.status_code == 422: + logger.warning( + "Pull request already exists for head %s and base %s", head, base + ) + prs = self.get_pull_requests(owner, repo) + for pr in prs: + if ( + pr.get("head", {}).get("ref") == head + and pr.get("base", {}).get("ref") == base + ): + return pr + # fallback to raise if we can’t find it + response.raise_for_status() response.raise_for_status() return response.json() @@ -182,3 +196,15 @@ class GiteaClient: response = self.session.get(url) response.raise_for_status() return response.json() + + def get_pull_requests( + self, + owner: str, + repo: str, + state: str = "open", + ) -> list[dict]: + """Fetch pull requests for a repository.""" + url = f"{self.gitea_url}/repos/{owner}/{repo}/pulls?state={state}" + response = self.session.get(url) + response.raise_for_status() + return response.json()