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 1/2] 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() -- 2.45.1 From 04b3baaba266d332ddf86a4423853cf129510f8a Mon Sep 17 00:00:00 2001 From: Jon Michael Aanes Date: Wed, 23 Apr 2025 20:34:01 +0200 Subject: [PATCH 2/2] Ruff after aider --- aider_gitea/gitea_client.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/aider_gitea/gitea_client.py b/aider_gitea/gitea_client.py index 788f0c9..751b2ea 100644 --- a/aider_gitea/gitea_client.py +++ b/aider_gitea/gitea_client.py @@ -169,13 +169,13 @@ class GiteaClient: # 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 + '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 + pr.get('head', {}).get('ref') == head + and pr.get('base', {}).get('ref') == base ): return pr # fallback to raise if we can’t find it @@ -201,10 +201,10 @@ class GiteaClient: self, owner: str, repo: str, - state: str = "open", + state: str = 'open', ) -> list[dict]: """Fetch pull requests for a repository.""" - url = f"{self.gitea_url}/repos/{owner}/{repo}/pulls?state={state}" + url = f'{self.gitea_url}/repos/{owner}/{repo}/pulls?state={state}' response = self.session.get(url) response.raise_for_status() return response.json() -- 2.45.1