Skip to main content
Glama
commit.ts5.84 kB
import type { GiteaClient } from '../gitea-client.js'; import type { ContextManager } from '../context-manager.js'; import { createLogger } from '../logger.js'; const logger = createLogger('tools:commit'); export interface CommitToolsContext { client: GiteaClient; contextManager: ContextManager; } // Common parameters export interface CommitParams { owner?: string; repo?: string; token?: string; } // List commits export interface ListCommitsParams extends CommitParams { sha?: string; path?: string; since?: string; until?: string; stat?: boolean; verification?: boolean; files?: boolean; page?: number; limit?: number; not?: string; } export async function listCommits( ctx: CommitToolsContext, params: ListCommitsParams ): Promise<unknown> { const owner = ctx.contextManager.resolveOwner(params.owner); const repo = ctx.contextManager.resolveRepo(params.repo); logger.info({ owner, repo }, 'Listing commits'); const queryParams: Record<string, string> = {}; if (params.sha) queryParams.sha = params.sha; if (params.path) queryParams.path = params.path; if (params.since) queryParams.since = params.since; if (params.until) queryParams.until = params.until; if (params.stat !== undefined) queryParams.stat = String(params.stat); if (params.verification !== undefined) queryParams.verification = String(params.verification); if (params.files !== undefined) queryParams.files = String(params.files); if (params.page !== undefined) queryParams.page = String(params.page); if (params.limit !== undefined) queryParams.limit = String(params.limit); if (params.not) queryParams.not = params.not; const response = await ctx.client.request({ method: 'GET', path: `/repos/${owner}/${repo}/commits`, query: queryParams, token: params.token, }); return response.data; } // Get single commit export interface GetCommitParams extends CommitParams { sha: string; } export async function getCommit( ctx: CommitToolsContext, params: GetCommitParams ): Promise<unknown> { const owner = ctx.contextManager.resolveOwner(params.owner); const repo = ctx.contextManager.resolveRepo(params.repo); logger.info({ owner, repo, sha: params.sha }, 'Getting commit'); const response = await ctx.client.request({ method: 'GET', path: `/repos/${owner}/${repo}/git/commits/${params.sha}`, token: params.token, }); return response.data; } // Get commit diff or patch export interface GetCommitDiffParams extends CommitParams { sha: string; diffType: 'diff' | 'patch'; } export async function getCommitDiff( ctx: CommitToolsContext, params: GetCommitDiffParams ): Promise<unknown> { const owner = ctx.contextManager.resolveOwner(params.owner); const repo = ctx.contextManager.resolveRepo(params.repo); logger.info({ owner, repo, sha: params.sha, diffType: params.diffType }, 'Getting commit diff'); const response = await ctx.client.request({ method: 'GET', path: `/repos/${owner}/${repo}/git/commits/${params.sha}.${params.diffType}`, token: params.token, }); return response.data; } // Get commit combined status export interface GetCommitStatusParams extends CommitParams { ref: string; page?: number; limit?: number; } export async function getCommitCombinedStatus( ctx: CommitToolsContext, params: GetCommitStatusParams ): Promise<unknown> { const owner = ctx.contextManager.resolveOwner(params.owner); const repo = ctx.contextManager.resolveRepo(params.repo); logger.info({ owner, repo, ref: params.ref }, 'Getting commit combined status'); const queryParams: Record<string, string> = {}; if (params.page !== undefined) queryParams.page = String(params.page); if (params.limit !== undefined) queryParams.limit = String(params.limit); const response = await ctx.client.request({ method: 'GET', path: `/repos/${owner}/${repo}/commits/${encodeURIComponent(params.ref)}/status`, query: queryParams, token: params.token, }); return response.data; } // List commit statuses export async function listCommitStatuses( ctx: CommitToolsContext, params: GetCommitStatusParams ): Promise<unknown> { const owner = ctx.contextManager.resolveOwner(params.owner); const repo = ctx.contextManager.resolveRepo(params.repo); logger.info({ owner, repo, ref: params.ref }, 'Listing commit statuses'); const queryParams: Record<string, string> = {}; if (params.page !== undefined) queryParams.page = String(params.page); if (params.limit !== undefined) queryParams.limit = String(params.limit); const response = await ctx.client.request({ method: 'GET', path: `/repos/${owner}/${repo}/commits/${encodeURIComponent(params.ref)}/statuses`, query: queryParams, token: params.token, }); return response.data; } // Create commit status export interface CreateCommitStatusParams extends CommitParams { sha: string; state: 'pending' | 'success' | 'error' | 'failure' | 'warning' | 'skipped'; context?: string; description?: string; target_url?: string; } export async function createCommitStatus( ctx: CommitToolsContext, params: CreateCommitStatusParams ): Promise<unknown> { const owner = ctx.contextManager.resolveOwner(params.owner); const repo = ctx.contextManager.resolveRepo(params.repo); logger.info({ owner, repo, sha: params.sha, state: params.state }, 'Creating commit status'); const body: any = { state: params.state, }; if (params.context) body.context = params.context; if (params.description) body.description = params.description; if (params.target_url) body.target_url = params.target_url; const response = await ctx.client.request({ method: 'POST', path: `/repos/${owner}/${repo}/statuses/${params.sha}`, body, token: params.token, }); return response.data; }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/SupenBysz/gitea-mcp-tool'

If you have feedback or need assistance with the MCP directory API, please join our Discord server