README.md
1# sebastian/diff
2
3Diff implementation for PHP, factored out of PHPUnit into a stand-alone component.
4
5## Installation
6
7You can add this library as a local, per-project dependency to your project using [Composer](https://getcomposer.org/):
8
9 composer require sebastian/diff
10
11If 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:
12
13 composer require --dev sebastian/diff
14
15### Usage
16
17The `Differ` class can be used to generate a textual representation of the difference between two strings:
18
19```php
20use SebastianBergmann\Diff\Differ;
21
22$differ = new Differ;
23print $differ->diff('foo', 'bar');
24```
25
26The code above yields the output below:
27
28 --- Original
29 +++ New
30 @@ @@
31 -foo
32 +bar
33
34The `Parser` class can be used to parse a unified diff into an object graph:
35
36```php
37use SebastianBergmann\Diff\Parser;
38use SebastianBergmann\Git;
39
40$git = new Git('/usr/local/src/money');
41
42$diff = $git->getDiff(
43 '948a1a07768d8edd10dcefa8315c1cbeffb31833',
44 'c07a373d2399f3e686234c4f7f088d635eb9641b'
45);
46
47$parser = new Parser;
48
49print_r($parser->parse($diff));
50```
51
52The code above yields the output below:
53
54 Array
55 (
56 [0] => SebastianBergmann\Diff\Diff Object
57 (
58 [from:SebastianBergmann\Diff\Diff:private] => a/tests/MoneyTest.php
59 [to:SebastianBergmann\Diff\Diff:private] => b/tests/MoneyTest.php
60 [chunks:SebastianBergmann\Diff\Diff:private] => Array
61 (
62 [0] => SebastianBergmann\Diff\Chunk Object
63 (
64 [start:SebastianBergmann\Diff\Chunk:private] => 87
65 [startRange:SebastianBergmann\Diff\Chunk:private] => 7
66 [end:SebastianBergmann\Diff\Chunk:private] => 87
67 [endRange:SebastianBergmann\Diff\Chunk:private] => 7
68 [lines:SebastianBergmann\Diff\Chunk:private] => Array
69 (
70 [0] => SebastianBergmann\Diff\Line Object
71 (
72 [type:SebastianBergmann\Diff\Line:private] => 3
73 [content:SebastianBergmann\Diff\Line:private] => * @covers SebastianBergmann\Money\Money::add
74 )
75
76 [1] => SebastianBergmann\Diff\Line Object
77 (
78 [type:SebastianBergmann\Diff\Line:private] => 3
79 [content:SebastianBergmann\Diff\Line:private] => * @covers SebastianBergmann\Money\Money::newMoney
80 )
81
82 [2] => SebastianBergmann\Diff\Line Object
83 (
84 [type:SebastianBergmann\Diff\Line:private] => 3
85 [content:SebastianBergmann\Diff\Line:private] => */
86 )
87
88 [3] => SebastianBergmann\Diff\Line Object
89 (
90 [type:SebastianBergmann\Diff\Line:private] => 2
91 [content:SebastianBergmann\Diff\Line:private] => public function testAnotherMoneyWithSameCurrencyObjectCanBeAdded()
92 )
93
94 [4] => SebastianBergmann\Diff\Line Object
95 (
96 [type:SebastianBergmann\Diff\Line:private] => 1
97 [content:SebastianBergmann\Diff\Line:private] => public function testAnotherMoneyObjectWithSameCurrencyCanBeAdded()
98 )
99
100 [5] => SebastianBergmann\Diff\Line Object
101 (
102 [type:SebastianBergmann\Diff\Line:private] => 3
103 [content:SebastianBergmann\Diff\Line:private] => {
104 )
105
106 [6] => SebastianBergmann\Diff\Line Object
107 (
108 [type:SebastianBergmann\Diff\Line:private] => 3
109 [content:SebastianBergmann\Diff\Line:private] => $a = new Money(1, new Currency('EUR'));
110 )
111
112 [7] => SebastianBergmann\Diff\Line Object
113 (
114 [type:SebastianBergmann\Diff\Line:private] => 3
115 [content:SebastianBergmann\Diff\Line:private] => $b = new Money(2, new Currency('EUR'));
116 )
117
118 )
119
120 )
121
122 )
123
124 )
125
126 )
127