---
name: "patch"
section: "3tcl"
platform: "linux"
package: "tcllib"
version: "2.0+dfsg-4"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/patch/3tcl"
---

# patch(3tcl)

Application of uni-diff patches to directory trees

```

```

## NAME

textutil::patch - Application of uni-diff patches to directory trees

## SYNOPSIS

package require **Tcl 8.5 9**

package require **textutil::patch ?0.2?**

**::textutil::patch::apply** *basedirectory* *striplevel* *patch* *reportcmd*

**{\*}reportcmd** **apply** *filename*

**{\*}reportcmd** **fail** *filename* *hunk* *expected* *seen*

**{\*}reportcmd** **fail-already** *filename* *hunk*

```

```

## DESCRIPTION

This package provides a single command which applies a patch in *unified format* \[https://www.gnu.org/software/diffutils/manual/html\_node/Detailed-Unified.html\] to a directory tree.

- **::textutil::patch::apply** *basedirectory* *striplevel* *patch* *reportcmd*

  Applies the *patch* (text of the path, not file) to the files in the *basedirectory* using the specified *striplevel*. The result of the command is the empty string.

  The *striplevel* argument is equivalent to option **-p** of the **patch** command.

  Errors are thrown when the *patch* does not parse, and nothing is done to the files in *basedirectory*.

  All activities during the application of the patch, including the inability to apply a hunk are reported through the command prefix *reportcmd* instead. Files with problems are left unchanged.  Note however that this does *not prevent* changes to files with no problems, before and after the problematic file(s).

  The command prefix is called in 3 possible forms:

  - **{\*}reportcmd** **apply** *filename*

    The caller begins operation on file *fname*, applying all hunks collected for said file.

  - **{\*}reportcmd** **fail** *filename* *hunk* *expected* *seen*

    Application of hunk number *hunk* of file *filename* has failed. The command expected to find the text *expected*, and saw *seen* instead.

  - **{\*}reportcmd** **fail-already** *filename* *hunk*

    Application of hunk number *hunk* of file *filename* has failed. The command believes that this hunk has already been applied to the file.

## BUGS, IDEAS, FEEDBACK

This document, and the package it describes, will undoubtedly contain bugs and other problems. Please report such in the category *textutil* of the *Tcllib Trackers* \[http://core.tcl.tk/tcllib/reportlist\]. Please also report any ideas for enhancements you may have for either package and/or documentation.

When proposing code changes, please provide *unified diffs*, i.e the output of **diff -u**.

Note further that *attachments* are strongly preferred over inlined patches. Attachments can be made by going to the **Edit** form of the ticket immediately after its creation, and then using the left-most button in the secondary navigation bar.

## KEYWORDS

diff -ruN, diff, unified format, fossil, git, patch, unified format diff

## CATEGORY

Text processing
