2017 © Pedro Peláez
 

library diff

Diff implementation

image

sebastian/diff

Diff implementation

  • Sunday, June 10, 2018
  • by Sebastian
  • Repository
  • 16 Watchers
  • 3436 Stars
  • 80,129,436 Installations
  • PHP
  • 112 Dependents
  • 0 Suggesters
  • 42 Forks
  • 0 Open issues
  • 14 Versions
  • 8 % Grown

The README.md

Latest Stable Version CI Status codecov, (*1)

sebastian/diff

Diff implementation for PHP, factored out of PHPUnit into a stand-alone component., (*2)

Installation

You can add this library as a local, per-project dependency to your project using Composer:, (*3)

composer require sebastian/diff

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:, (*4)

composer require --dev sebastian/diff

Usage

Generating diff

The Differ class can be used to generate a textual representation of the difference between two strings:, (*5)

<?php declare(strict_types=1);
use SebastianBergmann\Diff\Differ;
use SebastianBergmann\Diff\Output\UnifiedDiffOutputBuilder;

$differ = new Differ(new UnifiedDiffOutputBuilder);

print $differ->diff('foo', 'bar');

The code above yields the output below:, (*6)

--- Original
+++ New
@@ @@
-foo
+bar

The UnifiedDiffOutputBuilder used in the example above generates output in "unified diff" format and is used by PHPUnit, for example., (*7)

The StrictUnifiedDiffOutputBuilder generates output in "strict unified diff" format with hunks, similar to diff -u and compatible with patch or git apply., (*8)

The DiffOnlyOutputBuilder generates output that only contains the lines that differ., (*9)

If none of these three output builders match your use case then you can implement DiffOutputBuilderInterface to generate custom output., (*10)

Parsing diff

The Parser class can be used to parse a unified diff into an object graph:, (*11)

use SebastianBergmann\Diff\Parser;
use SebastianBergmann\Git;

$git = new Git('/usr/local/src/money');

$diff = $git->getDiff(
  '948a1a07768d8edd10dcefa8315c1cbeffb31833',
  'c07a373d2399f3e686234c4f7f088d635eb9641b'
);

$parser = new Parser;

print_r($parser->parse($diff));

The code above yields the output below:, (*12)

Array
(
    [0] => SebastianBergmann\Diff\Diff Object
        (
            [from:SebastianBergmann\Diff\Diff:private] => a/tests/MoneyTest.php
            [to:SebastianBergmann\Diff\Diff:private] => b/tests/MoneyTest.php
            [chunks:SebastianBergmann\Diff\Diff:private] => Array
                (
                    [0] => SebastianBergmann\Diff\Chunk Object
                        (
                            [start:SebastianBergmann\Diff\Chunk:private] => 87
                            [startRange:SebastianBergmann\Diff\Chunk:private] => 7
                            [end:SebastianBergmann\Diff\Chunk:private] => 87
                            [endRange:SebastianBergmann\Diff\Chunk:private] => 7
                            [lines:SebastianBergmann\Diff\Chunk:private] => Array
                                (
                                    [0] => SebastianBergmann\Diff\Line Object
                                        (
                                            [type:SebastianBergmann\Diff\Line:private] => 3
                                            [content:SebastianBergmann\Diff\Line:private] =>      * @covers SebastianBergmann\Money\Money::add
                                        )

                                    [1] => SebastianBergmann\Diff\Line Object
                                        (
                                            [type:SebastianBergmann\Diff\Line:private] => 3
                                            [content:SebastianBergmann\Diff\Line:private] =>      * @covers SebastianBergmann\Money\Money::newMoney
                                        )

                                    [2] => SebastianBergmann\Diff\Line Object
                                        (
                                            [type:SebastianBergmann\Diff\Line:private] => 3
                                            [content:SebastianBergmann\Diff\Line:private] =>      */
                                        )

                                    [3] => SebastianBergmann\Diff\Line Object
                                        (
                                            [type:SebastianBergmann\Diff\Line:private] => 2
                                            [content:SebastianBergmann\Diff\Line:private] =>     public function testAnotherMoneyWithSameCurrencyObjectCanBeAdded()
                                        )

                                    [4] => SebastianBergmann\Diff\Line Object
                                        (
                                            [type:SebastianBergmann\Diff\Line:private] => 1
                                            [content:SebastianBergmann\Diff\Line:private] =>     public function testAnotherMoneyObjectWithSameCurrencyCanBeAdded()
                                        )

                                    [5] => SebastianBergmann\Diff\Line Object
                                        (
                                            [type:SebastianBergmann\Diff\Line:private] => 3
                                            [content:SebastianBergmann\Diff\Line:private] =>     {
                                        )

                                    [6] => SebastianBergmann\Diff\Line Object
                                        (
                                            [type:SebastianBergmann\Diff\Line:private] => 3
                                            [content:SebastianBergmann\Diff\Line:private] =>         $a = new Money(1, new Currency('EUR'));
                                        )

                                    [7] => SebastianBergmann\Diff\Line Object
                                        (
                                            [type:SebastianBergmann\Diff\Line:private] => 3
                                            [content:SebastianBergmann\Diff\Line:private] =>         $b = new Money(2, new Currency('EUR'));
                                        )
                                )
                        )
                )
        )
)

Note: If the chunk size is 0 lines, i.e., getStartRange() or getEndRange() return 0, the number of line returned by getStart() or getEnd() is one lower than one would expect. It is the line number after which the chunk should be inserted or deleted; in all other cases, it gives the first line number of the replaced range of lines., (*13)

The Versions

10/06 2018

dev-master

9999999-dev https://github.com/sebastianbergmann/diff

Diff implementation

  Sources   Download

BSD-3-Clause

The Requires

  • php ^7.1

 

The Development Requires

by Kore Nordmann

diff udiff unified diff unidiff

10/06 2018

3.0.1

3.0.1.0 https://github.com/sebastianbergmann/diff

Diff implementation

  Sources   Download

BSD-3-Clause

The Requires

  • php ^7.1

 

The Development Requires

by Kore Nordmann

diff udiff unified diff unidiff

01/02 2018

3.0.0

3.0.0.0 https://github.com/sebastianbergmann/diff

Diff implementation

  Sources   Download

BSD-3-Clause

The Requires

  • php ^7.1

 

The Development Requires

by Kore Nordmann

diff udiff unified diff unidiff

14/12 2017

2.0.x-dev

2.0.9999999.9999999-dev https://github.com/sebastianbergmann/diff

Diff implementation

  Sources   Download

BSD-3-Clause

The Requires

  • php ^7.0

 

The Development Requires

by Kore Nordmann

diff

03/08 2017

2.0.1

2.0.1.0 https://github.com/sebastianbergmann/diff

Diff implementation

  Sources   Download

BSD-3-Clause

The Requires

  • php ^7.0

 

The Development Requires

by Kore Nordmann

diff

22/05 2017

1.4.x-dev

1.4.9999999.9999999-dev https://github.com/sebastianbergmann/diff

Diff implementation

  Sources   Download

BSD-3-Clause

The Requires

  • php ^5.3.3 || ^7.0

 

The Development Requires

by Kore Nordmann

diff

22/05 2017

1.4.3

1.4.3.0 https://github.com/sebastianbergmann/diff

Diff implementation

  Sources   Download

BSD-3-Clause

The Requires

  • php ^5.3.3 || ^7.0

 

The Development Requires

by Kore Nordmann

diff

18/05 2017

1.4.2

1.4.2.0 https://github.com/sebastianbergmann/diff

Diff implementation

  Sources   Download

BSD-3-Clause

The Requires

  • php ^5.3.3 || ^7.0

 

The Development Requires

by Kore Nordmann

diff

08/12 2015

1.4.1

1.4.1.0 https://github.com/sebastianbergmann/diff

Diff implementation

  Sources   Download

BSD-3-Clause

The Requires

  • php >=5.3.3

 

The Development Requires

by Kore Nordmann

diff

06/12 2015

1.4.0

1.4.0.0 https://github.com/sebastianbergmann/diff

Diff implementation

  Sources   Download

BSD-3-Clause

The Requires

  • php >=5.3.3

 

The Development Requires

by Kore Nordmann

diff

22/02 2015

1.3.0

1.3.0.0 http://www.github.com/sebastianbergmann/diff

Diff implementation

  Sources   Download

BSD-3-Clause

The Requires

  • php >=5.3.3

 

The Development Requires

by Kore Nordmann

diff

15/08 2014

1.2.0

1.2.0.0 http://www.github.com/sebastianbergmann/diff

Diff implementation

  Sources   Download

BSD-3-Clause

The Requires

  • php >=5.3.3

 

The Development Requires

by Kore Nordmann

diff

03/08 2013

1.1.0

1.1.0.0 http://www.github.com/sebastianbergmann/diff

Diff implementation

  Sources   Download

BSD-3-Clause

The Requires

  • php >=5.3.3

 

by Kore Nordmann

diff

09/07 2013

1.0.0

1.0.0.0 http://www.github.com/sebastianbergmann/diff

Diff implementation

  Sources   Download

BSD-3-Clause

The Requires

  • php >=5.3.3

 

by Kore Nordmann

diff