Skip to main content

apply_patch

The apply_patch tool applies unified diff patches to multiple files in a single operation. It supports custom patch headers for adding, deleting, and updating files, making it ideal for complex multi-file refactoring operations.


Parameters

The tool accepts these parameters:

  • patch (required): A unified diff patch string with custom headers. Supports *** Add File:, *** Delete File:, and *** Update File: headers.

What It Does

This tool processes unified diff patches containing operations for multiple files. It parses the patch content, identifies file operations (add, delete, update), and applies the changes atomically. Unlike apply_diff which handles single-file search-and-replace operations, apply_patch works with traditional unified diff format.


When is it used?

  • When applying patches generated by version control systems or diff tools
  • When performing complex multi-file refactoring with precise line-level changes
  • When migrating code changes from one branch or repository to another
  • When bulk-adding, updating, or removing multiple files in one operation
  • When working with patches from external sources or automated tools

Key Features

  • Supports multiple files in a single patch operation
  • Handles file addition, deletion, and modification
  • Uses unified diff format for precise line-level control
  • Custom headers (*** Add File:, *** Delete File:, *** Update File:) for clarity
  • Atomic operations with validation before applying changes
  • Compatible with standard diff/patch tooling output

Limitations

  • Requires proper unified diff format syntax
  • Line numbers and context must match existing file content
  • Cannot apply patches with conflicts or mismatched context
  • Less flexible than search-and-replace tools for fuzzy matching
  • Requires exact line-level accuracy in patches

How It Works

When the apply_patch tool is invoked, it follows this process:

  1. Patch Parsing: Parses the patch string to identify custom headers (*** Add File:, *** Delete File:, *** Update File:) and unified diff blocks.
  2. Operation Identification: Groups changes by file path and operation type (add, delete, update).
  3. Validation: Validates that target files exist (for updates/deletes) or can be created (for adds).
  4. RooIgnore Check: Ensures target files are not restricted by .rooignore rules.
  5. User Review: Presents the patch operations for user review and approval.
  6. Application: Applies approved changes to each file sequentially.
  7. Feedback: Reports success or failure for each file operation.

Patch Format

The patch format uses custom headers followed by unified diff blocks:

*** Add File: src/utils/newHelper.ts
--- /dev/null
+++ b/src/utils/newHelper.ts
@@ -0,0 +1,5 @@
+export function helperFunction(value: string): string {
+ return value.toUpperCase();
+}

*** Update File: src/main.ts
--- a/src/main.ts
+++ b/src/main.ts
@@ -10,7 +10,7 @@
import { config } from './config';
-const timeout = 5000;
+const timeout = 10000;

function main() {

*** Delete File: src/deprecated/oldUtil.ts

Relation to Other Tools

  • apply_diff: Use for single-file search-and-replace with fuzzy matching
  • apply_patch: Use for multi-file operations with unified diff format
  • write_to_file: Use for creating entire new files