tomphp/patch-builder

此包最新版本(v0.1.0)没有提供许可证信息。

用于生成补丁的文件操作 PHP 库。

v0.1.0 2014-01-10 16:47 UTC

This package is not auto-updated.

Last update: 2024-09-14 15:21:46 UTC


README

Build Status Scrutinizer Quality Score Coverage Status

一个 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\LineNumberTomPHP\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);