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