From a8e4df1743c78394269d922246a29e419069b01e Mon Sep 17 00:00:00 2001 From: Dawid Rycerz Date: Thu, 17 Jul 2025 11:07:33 +0300 Subject: feat: fix diff logic if old or new path not exists --- servers/gitlab_python/pyproject.toml | 2 +- .../src/mcp_server_gitlab_python/server.py | 29 ++++++++-------------- servers/gitlab_python/uv.lock | 2 +- 3 files changed, 13 insertions(+), 20 deletions(-) (limited to 'servers') diff --git a/servers/gitlab_python/pyproject.toml b/servers/gitlab_python/pyproject.toml index 98f423b..dc1641e 100644 --- a/servers/gitlab_python/pyproject.toml +++ b/servers/gitlab_python/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "mcp-server-gitlab-python" -version = "0.2.0" +version = "0.2.1" description = "An MCP server for GitLab using python-gitlab" readme = "README.md" requires-python = ">=3.11" diff --git a/servers/gitlab_python/src/mcp_server_gitlab_python/server.py b/servers/gitlab_python/src/mcp_server_gitlab_python/server.py index 20bfffa..e8231c0 100644 --- a/servers/gitlab_python/src/mcp_server_gitlab_python/server.py +++ b/servers/gitlab_python/src/mcp_server_gitlab_python/server.py @@ -192,29 +192,22 @@ class GitLabPythonServer: try: proj = self.gl.projects.get(project) mr = proj.mergerequests.get(mr_iid) - diffs = mr.diffs.list(get_all=True) - logger.debug(f"Fetched {len(diffs)} diffs for MR {mr_iid} in project {project}") - if diffs: - logger.debug(f"First diff type: {type(diffs[0])}, attributes: {dir(diffs[0])}") + changes = mr.changes() + logger.debug(f"Fetched {len(changes.get('changes', []))} file changes for MR {mr_iid} in project {project}") diff_content = "" - for i, diff in enumerate(diffs): - logger.debug(f"Processing diff #{i}: type={type(diff)}, attrs={dir(diff)}") - if all(hasattr(diff, attr) for attr in ("old_path", "new_path", "diff")): - old_path = diff.old_path - new_path = diff.new_path - diff_text = diff.diff - logger.debug(f"Using direct attributes for diff #{i}: old_path={old_path}, new_path={new_path}") - else: - logger.debug(f"Fetching full diff object for diff #{i} (id={getattr(diff, 'id', None)})") - full_diff = mr.diffs.get(diff.id) - old_path = full_diff.old_path - new_path = full_diff.new_path - diff_text = full_diff.diff + for i, change in enumerate(changes.get('changes', [])): + logger.debug(f"Processing change #{i}: {change}") + old_path = change.get('old_path', '/dev/null') or '/dev/null' + new_path = change.get('new_path', '/dev/null') or '/dev/null' + diff_text = change.get('diff', None) + if diff_text is None: + logger.warning(f"Skipping change #{i} due to missing diff text: {change}") + continue if any( old_path.endswith(ext) or new_path.endswith(ext) for ext in filter_extensions ): - logger.debug(f"Skipping diff #{i} due to filter extension: {old_path}, {new_path}") + logger.debug(f"Skipping change #{i} due to filter extension: {old_path}, {new_path}") continue diff_content += f"diff --git a/{old_path} b/{new_path}\n" diff_content += diff_text + "\n" diff --git a/servers/gitlab_python/uv.lock b/servers/gitlab_python/uv.lock index 5f9ec61..a500be2 100644 --- a/servers/gitlab_python/uv.lock +++ b/servers/gitlab_python/uv.lock @@ -310,7 +310,7 @@ wheels = [ [[package]] name = "mcp-server-gitlab-python" -version = "0.2.0" +version = "0.2.1" source = { editable = "." } dependencies = [ { name = "gitpython" }, -- cgit v1.2.3