summaryrefslogtreecommitdiff
path: root/servers/gitlab_python/src/mcp_server_gitlab_python/server.py
diff options
context:
space:
mode:
Diffstat (limited to 'servers/gitlab_python/src/mcp_server_gitlab_python/server.py')
-rw-r--r--servers/gitlab_python/src/mcp_server_gitlab_python/server.py29
1 files changed, 11 insertions, 18 deletions
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"