Chris@12: # sebastian/diff Chris@0: Chris@0: Diff implementation for PHP, factored out of PHPUnit into a stand-alone component. Chris@0: Chris@0: ## Installation Chris@0: Chris@12: You can add this library as a local, per-project dependency to your project using [Composer](https://getcomposer.org/): Chris@0: Chris@12: composer require sebastian/diff Chris@12: Chris@12: If you only need this library during development, for instance to run your project's test suite, then you should add it as a development-time dependency: Chris@12: Chris@12: composer require --dev sebastian/diff Chris@0: Chris@0: ### Usage Chris@0: Chris@0: The `Differ` class can be used to generate a textual representation of the difference between two strings: Chris@0: Chris@0: ```php Chris@0: use SebastianBergmann\Diff\Differ; Chris@0: Chris@0: $differ = new Differ; Chris@0: print $differ->diff('foo', 'bar'); Chris@0: ``` Chris@0: Chris@0: The code above yields the output below: Chris@0: Chris@0: --- Original Chris@0: +++ New Chris@0: @@ @@ Chris@0: -foo Chris@0: +bar Chris@0: Chris@0: The `Parser` class can be used to parse a unified diff into an object graph: Chris@0: Chris@0: ```php Chris@0: use SebastianBergmann\Diff\Parser; Chris@0: use SebastianBergmann\Git; Chris@0: Chris@0: $git = new Git('/usr/local/src/money'); Chris@0: Chris@0: $diff = $git->getDiff( Chris@0: '948a1a07768d8edd10dcefa8315c1cbeffb31833', Chris@0: 'c07a373d2399f3e686234c4f7f088d635eb9641b' Chris@0: ); Chris@0: Chris@0: $parser = new Parser; Chris@0: Chris@0: print_r($parser->parse($diff)); Chris@0: ``` Chris@0: Chris@0: The code above yields the output below: Chris@0: Chris@0: Array Chris@0: ( Chris@0: [0] => SebastianBergmann\Diff\Diff Object Chris@0: ( Chris@0: [from:SebastianBergmann\Diff\Diff:private] => a/tests/MoneyTest.php Chris@0: [to:SebastianBergmann\Diff\Diff:private] => b/tests/MoneyTest.php Chris@0: [chunks:SebastianBergmann\Diff\Diff:private] => Array Chris@0: ( Chris@0: [0] => SebastianBergmann\Diff\Chunk Object Chris@0: ( Chris@0: [start:SebastianBergmann\Diff\Chunk:private] => 87 Chris@0: [startRange:SebastianBergmann\Diff\Chunk:private] => 7 Chris@0: [end:SebastianBergmann\Diff\Chunk:private] => 87 Chris@0: [endRange:SebastianBergmann\Diff\Chunk:private] => 7 Chris@0: [lines:SebastianBergmann\Diff\Chunk:private] => Array Chris@0: ( Chris@0: [0] => SebastianBergmann\Diff\Line Object Chris@0: ( Chris@0: [type:SebastianBergmann\Diff\Line:private] => 3 Chris@0: [content:SebastianBergmann\Diff\Line:private] => * @covers SebastianBergmann\Money\Money::add Chris@0: ) Chris@0: Chris@0: [1] => SebastianBergmann\Diff\Line Object Chris@0: ( Chris@0: [type:SebastianBergmann\Diff\Line:private] => 3 Chris@0: [content:SebastianBergmann\Diff\Line:private] => * @covers SebastianBergmann\Money\Money::newMoney Chris@0: ) Chris@0: Chris@0: [2] => SebastianBergmann\Diff\Line Object Chris@0: ( Chris@0: [type:SebastianBergmann\Diff\Line:private] => 3 Chris@0: [content:SebastianBergmann\Diff\Line:private] => */ Chris@0: ) Chris@0: Chris@0: [3] => SebastianBergmann\Diff\Line Object Chris@0: ( Chris@0: [type:SebastianBergmann\Diff\Line:private] => 2 Chris@0: [content:SebastianBergmann\Diff\Line:private] => public function testAnotherMoneyWithSameCurrencyObjectCanBeAdded() Chris@0: ) Chris@0: Chris@0: [4] => SebastianBergmann\Diff\Line Object Chris@0: ( Chris@0: [type:SebastianBergmann\Diff\Line:private] => 1 Chris@0: [content:SebastianBergmann\Diff\Line:private] => public function testAnotherMoneyObjectWithSameCurrencyCanBeAdded() Chris@0: ) Chris@0: Chris@0: [5] => SebastianBergmann\Diff\Line Object Chris@0: ( Chris@0: [type:SebastianBergmann\Diff\Line:private] => 3 Chris@0: [content:SebastianBergmann\Diff\Line:private] => { Chris@0: ) Chris@0: Chris@0: [6] => SebastianBergmann\Diff\Line Object Chris@0: ( Chris@0: [type:SebastianBergmann\Diff\Line:private] => 3 Chris@0: [content:SebastianBergmann\Diff\Line:private] => $a = new Money(1, new Currency('EUR')); Chris@0: ) Chris@0: Chris@0: [7] => SebastianBergmann\Diff\Line Object Chris@0: ( Chris@0: [type:SebastianBergmann\Diff\Line:private] => 3 Chris@0: [content:SebastianBergmann\Diff\Line:private] => $b = new Money(2, new Currency('EUR')); Chris@0: ) Chris@0: Chris@0: ) Chris@0: Chris@0: ) Chris@0: Chris@0: ) Chris@0: Chris@0: ) Chris@0: Chris@0: )