diff --git a/aider_gitea/gitea_client.py b/aider_gitea/gitea_client.py index e239af1..751b2ea 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()