From e81f03c5aa1e74de7e4c4bc574ff052f0a72fd14 Mon Sep 17 00:00:00 2001 From: Michael Ingvarsson Date: Thu, 16 Jul 2026 12:04:51 +0200 Subject: [PATCH] fix grep --- gitea/tools/coding_tools.py | 4 ++-- tests/test_coding_tools.py | 22 ++++++++++++++++++++-- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/gitea/tools/coding_tools.py b/gitea/tools/coding_tools.py index f0d83f7..b73ae1a 100644 --- a/gitea/tools/coding_tools.py +++ b/gitea/tools/coding_tools.py @@ -274,10 +274,10 @@ class CodingTools: """ resolved: str = self._resolve_path(path) try: - command: str = f"grep -ri '{pattern}' {resolved}" + command: list[str] = ["grep", "-ri", pattern, resolved] process: subprocess.Popen[str] = subprocess.Popen( command, - shell=True, + shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, diff --git a/tests/test_coding_tools.py b/tests/test_coding_tools.py index cab07fc..88b03d3 100644 --- a/tests/test_coding_tools.py +++ b/tests/test_coding_tools.py @@ -126,8 +126,17 @@ def test_grep_search_success(mock_popen: MagicMock) -> None: mock_process.returncode = 0 mock_popen.return_value = mock_process - res: str = CodingTools().grep_search("pattern", "/path") + tools = CodingTools() + res: str = tools.grep_search("pattern", "/path") assert res == "match_line" + mock_popen.assert_called_once_with( + ["grep", "-ri", "pattern", tools._resolve_path("/path")], + shell=False, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + text=True, + cwd=tools.repo_path, + ) @patch("subprocess.Popen") @@ -137,8 +146,17 @@ def test_grep_search_no_matches(mock_popen: MagicMock) -> None: mock_process.returncode = 1 mock_popen.return_value = mock_process - res: str = CodingTools().grep_search("pattern", "/path") + tools = CodingTools() + res: str = tools.grep_search("pattern", "/path") assert "No matches found" in res + mock_popen.assert_called_once_with( + ["grep", "-ri", "pattern", tools._resolve_path("/path")], + shell=False, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + text=True, + cwd=tools.repo_path, + ) def test_grep_search_error() -> None: