svn-mcp 1.0.1 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASpE,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,QAyE9C"}
|
package/dist/tools/index.js
CHANGED
|
@@ -4,6 +4,7 @@ import { handleSvnStatus } from './svn-status.js';
|
|
|
4
4
|
import { handleSvnLog } from './svn-log.js';
|
|
5
5
|
import { handleSvnDiff } from './svn-diff.js';
|
|
6
6
|
import { handleSvnBlame } from './svn-blame.js';
|
|
7
|
+
import { handleSvnCat } from './svn-cat.js';
|
|
7
8
|
export function registerTools(server) {
|
|
8
9
|
// svn_info - Get repository and working copy information
|
|
9
10
|
server.tool('svn_info', 'Get SVN repository and working copy information including URL, revision, branch type, and last commit details', {
|
|
@@ -35,5 +36,12 @@ export function registerTools(server) {
|
|
|
35
36
|
start_line: z.number().optional().describe('Start line number for output'),
|
|
36
37
|
end_line: z.number().optional().describe('End line number for output'),
|
|
37
38
|
}, async (input) => handleSvnBlame(input));
|
|
39
|
+
// svn_cat - Show file contents at a specific revision
|
|
40
|
+
server.tool('svn_cat', 'Show contents of a file at a specific revision. Useful for viewing historical versions of a file.', {
|
|
41
|
+
path: z.string().describe('File path to show (required)'),
|
|
42
|
+
revision: z.string().optional().describe('Revision to show (e.g., "1000", "HEAD", "BASE"). Defaults to working copy version.'),
|
|
43
|
+
start_line: z.number().optional().describe('Start line number for output'),
|
|
44
|
+
end_line: z.number().optional().describe('End line number for output'),
|
|
45
|
+
}, async (input) => handleSvnCat(input));
|
|
38
46
|
}
|
|
39
47
|
//# sourceMappingURL=index.js.map
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface SvnCatInput {
|
|
2
|
+
path: string;
|
|
3
|
+
revision?: string;
|
|
4
|
+
start_line?: number;
|
|
5
|
+
end_line?: number;
|
|
6
|
+
}
|
|
7
|
+
export declare function handleSvnCat(input: SvnCatInput): Promise<{
|
|
8
|
+
content: Array<{
|
|
9
|
+
type: 'text';
|
|
10
|
+
text: string;
|
|
11
|
+
}>;
|
|
12
|
+
}>;
|
|
13
|
+
//# sourceMappingURL=svn-cat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"svn-cat.d.ts","sourceRoot":"","sources":["../../src/tools/svn-cat.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAyElH"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { executeSvnCommand } from '../utils/svn-executor.js';
|
|
2
|
+
import { resolvePathForOperation } from '../utils/working-copy.js';
|
|
3
|
+
import { SvnError, SVN_ERROR_CODES } from '../types/index.js';
|
|
4
|
+
export async function handleSvnCat(input) {
|
|
5
|
+
try {
|
|
6
|
+
if (!input.path) {
|
|
7
|
+
throw new SvnError('Path is required for cat operation', SVN_ERROR_CODES.FILE_NOT_FOUND);
|
|
8
|
+
}
|
|
9
|
+
const resolved = await resolvePathForOperation(input.path, 'info');
|
|
10
|
+
const args = [];
|
|
11
|
+
if (input.revision) {
|
|
12
|
+
args.push('-r', input.revision);
|
|
13
|
+
}
|
|
14
|
+
args.push(resolved.path);
|
|
15
|
+
const output = await executeSvnCommand('cat', args, {
|
|
16
|
+
useCredentials: resolved.useCredentials,
|
|
17
|
+
workingDir: resolved.workingDir,
|
|
18
|
+
});
|
|
19
|
+
if (!output) {
|
|
20
|
+
return {
|
|
21
|
+
content: [{ type: 'text', text: 'File is empty or binary.' }],
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
// Split into lines for potential filtering
|
|
25
|
+
const allLines = output.split('\n');
|
|
26
|
+
// Apply line range filter if specified
|
|
27
|
+
let lines = allLines;
|
|
28
|
+
let startLine = 1;
|
|
29
|
+
let endLine = allLines.length;
|
|
30
|
+
if (input.start_line || input.end_line) {
|
|
31
|
+
startLine = input.start_line ?? 1;
|
|
32
|
+
endLine = input.end_line ?? allLines.length;
|
|
33
|
+
// Convert to 0-indexed for slice
|
|
34
|
+
lines = allLines.slice(startLine - 1, endLine);
|
|
35
|
+
}
|
|
36
|
+
// Format output with line numbers
|
|
37
|
+
const header = [];
|
|
38
|
+
header.push(`File: ${input.path}`);
|
|
39
|
+
if (input.revision) {
|
|
40
|
+
header.push(`Revision: ${input.revision}`);
|
|
41
|
+
}
|
|
42
|
+
if (input.start_line || input.end_line) {
|
|
43
|
+
header.push(`Lines ${startLine} to ${Math.min(endLine, allLines.length)} of ${allLines.length}`);
|
|
44
|
+
}
|
|
45
|
+
header.push('');
|
|
46
|
+
// Add line numbers
|
|
47
|
+
const maxLineNum = (startLine + lines.length - 1).toString().length;
|
|
48
|
+
const numberedLines = lines.map((line, idx) => {
|
|
49
|
+
const lineNum = (startLine + idx).toString().padStart(maxLineNum);
|
|
50
|
+
return `${lineNum}: ${line}`;
|
|
51
|
+
});
|
|
52
|
+
return {
|
|
53
|
+
content: [{ type: 'text', text: header.join('\n') + numberedLines.join('\n') }],
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
if (error instanceof SvnError) {
|
|
58
|
+
return {
|
|
59
|
+
content: [{ type: 'text', text: `Error: ${error.message}\nCode: ${error.code}${error.details ? `\nDetails: ${error.details}` : ''}` }],
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
throw error;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=svn-cat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"svn-cat.js","sourceRoot":"","sources":["../../src/tools/svn-cat.ts"],"names":[],"mappings":"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"}
|