#:g1: eggs: patchの紹介

Posted 2014-11-04 15:00:00 GMT

(LISP Library 365参加エントリ)

 LISP Library 365 の309日目です。

eggs: patchとはなにか

 eggs: patchは、Tony Sidaway氏作のUnixのdiffの結果を読み込んでS式のパッチを作ったり適用したりするユーティリティです。

パッケージ情報

パッケージ名eggs: patch
Chicken eggs:patch - The Chicken Scheme wiki

インストール方法

$ sudo chicken-install patch

すれば、

(use patch)

で使えます。

試してみる

 マニュアルを眺めてみるとどうもScheme処理系の中から使うというよりスクリプトで使うことを想定しているようです。
S式のパッチの形式は、

([c|a|d] start-line finish-line new-start-line new-finish-line (lines to be deleted) (lines to be inserted))

というリストです。

a.txt
foo
bar
baz
quux
b.txt
foo
BAR
BAZ
quux

というファイルがあった場合、

(use patch)
(use shell)

(with-input-from-string (capture "diff /tmp/a.lisp /tmp/b.lisp") make-patch) ;=> ((c 2 3 2 3 ("bar" "baz") ("BAR" "BAZ")))

こんな感じの出力になります。

#!/usr/bin/env csi

(use patch)

(apply-patch '((c 2 3 2 3 ("bar" "baz") ("BAR" "BAZ"))))

のようなfoo.scmというスクリプトを作れば

$ cat a.txt|./foo.scm
foo
BAR
BAZ
quux

のようにパッチを適用することが可能です。reverse-patchは逆に適用します。

まとめ

 今回は、eggs: patchを紹介してみました。
若干紹介しづらいというか微妙なユーティリティでした。

comments powered by Disqus