mirror of
https://github.com/qodo-ai/pr-agent.git
synced 2025-07-03 04:10:49 +08:00
Add context-aware git provider retrieval and refactor related functions
This commit is contained in:
@ -2,11 +2,13 @@ from pr_agent.config_loader import get_settings
|
||||
from pr_agent.git_providers.bitbucket_provider import BitbucketProvider
|
||||
from pr_agent.git_providers.bitbucket_server_provider import BitbucketServerProvider
|
||||
from pr_agent.git_providers.codecommit_provider import CodeCommitProvider
|
||||
from pr_agent.git_providers.git_provider import GitProvider
|
||||
from pr_agent.git_providers.github_provider import GithubProvider
|
||||
from pr_agent.git_providers.gitlab_provider import GitLabProvider
|
||||
from pr_agent.git_providers.local_git_provider import LocalGitProvider
|
||||
from pr_agent.git_providers.azuredevops_provider import AzureDevopsProvider
|
||||
from pr_agent.git_providers.gerrit_provider import GerritProvider
|
||||
from starlette_context import context
|
||||
|
||||
_GIT_PROVIDERS = {
|
||||
'github': GithubProvider,
|
||||
@ -28,3 +30,33 @@ def get_git_provider():
|
||||
if provider_id not in _GIT_PROVIDERS:
|
||||
raise ValueError(f"Unknown git provider: {provider_id}")
|
||||
return _GIT_PROVIDERS[provider_id]
|
||||
|
||||
|
||||
def get_git_provider_with_context(pr_url) -> GitProvider:
|
||||
"""
|
||||
Get a GitProvider instance for the given PR URL. If the GitProvider instance is already in the context, return it.
|
||||
"""
|
||||
|
||||
is_context_env = None
|
||||
try:
|
||||
is_context_env = context.get("settings", None)
|
||||
except Exception:
|
||||
pass # we are not in a context environment (CLI)
|
||||
|
||||
# check if context["git_provider"]["pr_url"] exists
|
||||
if is_context_env and context.get("git_provider", {}).get("pr_url", {}):
|
||||
git_provider = context["git_provider"]["pr_url"]
|
||||
# possibly check if the git_provider is still valid, or if some reset is needed
|
||||
# ...
|
||||
return git_provider
|
||||
else:
|
||||
try:
|
||||
provider_id = get_settings().config.git_provider
|
||||
if provider_id not in _GIT_PROVIDERS:
|
||||
raise ValueError(f"Unknown git provider: {provider_id}")
|
||||
git_provider = _GIT_PROVIDERS[provider_id](pr_url)
|
||||
if is_context_env:
|
||||
context["git_provider"] = {pr_url: git_provider}
|
||||
return git_provider
|
||||
except Exception as e:
|
||||
raise ValueError(f"Failed to get git provider for {pr_url}") from e
|
||||
|
Reference in New Issue
Block a user