summaryrefslogtreecommitdiff
path: root/servers
diff options
context:
space:
mode:
authorDawid Rycerz <dawid@rycerz.xyz>2025-07-17 11:07:33 +0300
committerDawid Rycerz <dawid@rycerz.xyz>2025-07-17 11:07:33 +0300
commita8e4df1743c78394269d922246a29e419069b01e (patch)
tree7aa8c7fe057d235c99155603fa0e67caeb8bbb6d /servers
parent3890d86f59bd996ac2d64da8e2694666e51d33c0 (diff)
feat: fix diff logic if old or new path not exists
Diffstat (limited to 'servers')
-rw-r--r--servers/gitlab_python/pyproject.toml2
-rw-r--r--servers/gitlab_python/src/mcp_server_gitlab_python/server.py29
-rw-r--r--servers/gitlab_python/uv.lock2
3 files changed, 13 insertions, 20 deletions
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" },