tomphp / patch-builder
此包最新版本(v0.1.0)没有提供许可证信息。
用于生成补丁的文件操作 PHP 库。
v0.1.0
2014-01-10 16:47 UTC
Requires
- php: >=5.3
- phpspec/php-diff: 1.0.2
Requires (Dev)
- henrikbjorn/phpspec-code-coverage: dev-master
- phpmd/phpmd: 1.4.0
- phpspec/phpspec: 2.0.*@dev
- satooshi/php-coveralls: dev-master
- squizlabs/php_codesniffer: 1.*
This package is not auto-updated.
Last update: 2024-09-14 15:21:46 UTC
README
一个 PHP 库,允许你加载一些文本,对其进行修改,然后生成补丁。
安装
使用 composer 安装非常简单
composer require tomphp/patch-builder:dev-master
用法
简单创建一个包含您想要修改的内容的 PatchBuffer
,然后使用可用的方法应用修改
use TomPHP\PatchBuilder\PatchBuffer; use TomPHP\PatchBuilder\Types\LineNumber; use TomPHP\PatchBuilder\Types\LineRange; $buffer = PatchBuffer::createWithContents(file('somedata.txt')); // Insert 2 at line 27 $buffer->insert(new LineNumber(27), array('hello', 'world')); // Delete lines 12 to 16 $buffer->delete(LineRange::createFromNumbers(12, 16)); // Replace line 4 and 5 with a new line $buffer->replace(LineRange::createFromNumbers(4, 5), array('hello moon'));
###行号
行号和范围指定为 TomPHP\PatchBuilder\Types\LineNumber
和 TomPHP\PatchBuilder\Types\LineRange
对象,并引用缓冲区中的行(在修改后的状态中)。
如果您想引用一行,但其在原始内容中的编号,可以使用一个 TomPHP\PatchBuilder\Types\OriginalLineNumber
对象代替,它将转换为修改文件中的当前行号。
use TomPHP\PatchBuilder\PatchBuffer; use TomPHP\PatchBuilder\Types\LineNumber; use TomPHP\PatchBuilder\Types\OrignalLineNumber; $buffer = PatchBuffer::createWithContents(file('somedata.txt')); // Insert 2 at line 5 $buffer->insert(new LineNumber(5), array('hello', 'world')); // Actually inserts at line 8 because 2 lines have been added before here. $buffer->insert(new OriginalLineNumber(6), array('hello', 'moon'));
如果您尝试通过原始行号访问已经删除的行,将会抛出 TomPHP\PatchBuilder\LineTracker\Exception\DeletedLineException
异常。
###输出补丁
可以使用 PatchBuilder
类将缓冲区转换为补丁。目前只提供了一个 PatchBuilder
类。
use TomPHP\PatchBuilder\PatchBuffer; use TomPHP\PatchBuilder\Builder\PhpDiffBuilder; $filename = 'myfile.txt'; $src = 'orignal/' . $filename; $dest = 'new/' . $filename; $buffer = PatchBuffer::createWithContents(file($src)); // ... perform buffer manipulations ... $builder = new PhpDiffBuilder(); echo $builder->buildPatch($src, $dest, $buffer);