tommyaie99's picture
add tool to retrieve diff of commits.
ecf0796
from pmcp.mcp_server.github_server.utils.github_api import GithubClient
class ContentService:
"""Commits and file-content helpers."""
def __init__(self, client: GithubClient):
self.client = client
async def recent_commits(
self, owner: str, repo: str, branch: str, per_page: int = 10
):
"""
Retrieve the most recent commits on a branch.
Args:
owner (str): Repository owner.
repo (str): Repository name.
branch (str): Branch ref (e.g. ``main``).
per_page (int): Max commits to return (<=100).
Returns:
List of commit dicts.
"""
params = {"sha": branch, "per_page": per_page}
return await self.client.GET(f"{owner}/{repo}/commits", params=params)
async def get_commit_details(
self, owner: str, repo: str, sha: str
) -> dict:
"""
Retrieve a single commit’s metadata *and* its file-level diff.
Args:
owner (str): Repository owner.
repo (str): Repository name.
sha (str): Commit SHA.
Returns:
Full JSON payload for the commit, including `commit.message` and
a `files` array where each entry has a `patch` (the diff).
"""
return await self.client.GET(f"{owner}/{repo}/commits/{sha}")
async def get_file(
self, owner: str, repo: str, path: str, ref: str | None = None
):
"""
Download a file’s blob (Base64) from a repo.
Args:
owner (str): Repository owner.
repo (str): Repository name.
path (str): File path within the repo.
ref (str): Optional commit SHA / branch / tag.
Returns:
GitHub ``contents`` API response including ``content``.
"""
params = {"ref": ref} if ref else None
return await self.client.GET(f"{owner}/{repo}/contents/{path}", params=params)