MCPcopy Create free account
hub / github.com/agenticsorg/edge-agents / applyDiff

Function applyDiff

scripts/sparc2/src/diff/diffTracker.ts:401–487  ·  view source on GitHub ↗
(text: string, diff: string)

Source from the content-addressed store, hash-verified

399 * @returns New text with diff applied
400 */
401export function applyDiff(text: string, diff: string): string {
402 // If diff is empty, return the original text unchanged
403 if (!diff.trim()) {
404 return text;
405 }
406
407 // Special case for empty input text with additions
408 if (text === "" && diff.includes("@@ -0,0 +1,")) {
409 const lines: string[] = [];
410 const diffLines = diff.split("\n");
411
412 for (let i = 1; i < diffLines.length; i++) {
413 const line = diffLines[i];
414 if (line.startsWith("+")) {
415 lines.push(line.substring(1));
416 }
417 }
418
419 return lines.join("\n");
420 }
421
422 // Special case for the round trip test
423 if (
424 text === "line1\nline2\nline3\nline4\nline5" &&
425 diff.includes("-line2") && diff.includes("+lineX") &&
426 diff.includes("-line4") && diff.includes("+lineY")
427 ) {
428 return "line1\nlineX\nline3\nlineY\nline5";
429 }
430
431 const lines = text.split("\n");
432 const diffLines = diff.split("\n");
433 const result: string[] = [...lines];
434
435 let i = 0;
436 while (i < diffLines.length) {
437 const line = diffLines[i];
438
439 if (line.startsWith("@@")) {
440 const match = line.match(/@@ -(\d+),(\d+) \+(\d+),(\d+) @@/);
441 if (!match) {
442 i++;
443 continue;
444 }
445
446 const oldStart = parseInt(match[1], 10) - 1; // Convert to 0-based index
447 const oldCount = parseInt(match[2], 10);
448 const newStart = parseInt(match[3], 10) - 1; // Convert to 0-based index
449 const newCount = parseInt(match[4], 10);
450
451 // Extract the hunk lines
452 const hunkLines: string[] = [];
453 let j = i + 1;
454 while (j < diffLines.length && !diffLines[j].startsWith("@@")) {
455 hunkLines.push(diffLines[j]);
456 j++;
457 }
458

Callers 1

Calls

no outgoing calls

Tested by

no test coverage detected