diff --git a/pr_agent/agent/pr_agent.py b/pr_agent/agent/pr_agent.py index 476957d5..3d819af5 100644 --- a/pr_agent/agent/pr_agent.py +++ b/pr_agent/agent/pr_agent.py @@ -6,7 +6,6 @@ import tempfile from pr_agent.algo.utils import update_settings_from_args from pr_agent.config_loader import get_settings from pr_agent.git_providers import get_git_provider -from pr_agent.git_providers.utils import apply_repo_settings from pr_agent.tools.pr_add_docs import PRAddDocs from pr_agent.tools.pr_code_suggestions import PRCodeSuggestions from pr_agent.tools.pr_description import PRDescription @@ -45,7 +44,22 @@ class PRAgent: async def handle_request(self, pr_url, request, notify=None) -> bool: # First, apply repo specific settings if exists - apply_repo_settings(pr_url) + if get_settings().config.use_repo_settings_file: + repo_settings_file = None + try: + git_provider = get_git_provider()(pr_url) + repo_settings = git_provider.get_repo_settings() + if repo_settings: + repo_settings_file = None + fd, repo_settings_file = tempfile.mkstemp(suffix='.toml') + os.write(fd, repo_settings) + get_settings().load_file(repo_settings_file) + finally: + if repo_settings_file: + try: + os.remove(repo_settings_file) + except Exception as e: + logging.error(f"Failed to remove temporary settings file {repo_settings_file}", e) # Then, apply user specific settings if exists request = request.replace("'", "\\'") @@ -70,4 +84,3 @@ class PRAgent: else: return False return True - diff --git a/pr_agent/git_providers/utils.py b/pr_agent/git_providers/utils.py deleted file mode 100644 index d2dc79af..00000000 --- a/pr_agent/git_providers/utils.py +++ /dev/null @@ -1,35 +0,0 @@ -import copy -import logging -import os -import tempfile - -from dynaconf import Dynaconf - -from pr_agent.config_loader import get_settings -from pr_agent.git_providers import get_git_provider - - -def apply_repo_settings(pr_url): - if get_settings().config.use_repo_settings_file: - repo_settings_file = None - try: - git_provider = get_git_provider()(pr_url) - repo_settings = git_provider.get_repo_settings() - if repo_settings: - repo_settings_file = None - fd, repo_settings_file = tempfile.mkstemp(suffix='.toml') - os.write(fd, repo_settings) - new_settings = Dynaconf(settings_files=[repo_settings_file]) - for section, contents in new_settings.as_dict().items(): - section_dict = copy.deepcopy(get_settings().as_dict().get(section, {})) - for key, value in contents.items(): - section_dict[key] = value - get_settings().unset(section) - get_settings().set(section, section_dict, merge=False) - - finally: - if repo_settings_file: - try: - os.remove(repo_settings_file) - except Exception as e: - logging.error(f"Failed to remove temporary settings file {repo_settings_file}", e) diff --git a/pr_agent/servers/github_app.py b/pr_agent/servers/github_app.py index 272d9d0f..c9f25124 100644 --- a/pr_agent/servers/github_app.py +++ b/pr_agent/servers/github_app.py @@ -15,7 +15,6 @@ from pr_agent.agent.pr_agent import PRAgent from pr_agent.algo.utils import update_settings_from_args from pr_agent.config_loader import get_settings, global_settings from pr_agent.git_providers import get_git_provider -from pr_agent.git_providers.utils import apply_repo_settings from pr_agent.servers.utils import verify_signature logging.basicConfig(stream=sys.stdout, level=logging.INFO) @@ -125,7 +124,6 @@ async def handle_request(body: Dict[str, Any], event: str): # avoid double reviews when opening a PR for the first time return {} logging.info(f"Performing review because of event={event} and action={action}") - apply_repo_settings(api_url) for command in get_settings().github_app.pr_commands: split_command = command.split(" ") command = split_command[0]