Skip to content

Commit eacfaec

Browse files
committed
Fix issue #2, handling of diffs from svn propedit
1 parent cbfe1a1 commit eacfaec

File tree

3 files changed

+72
-16
lines changed

3 files changed

+72
-16
lines changed

src/Parse/UnifiedDiffTokenizer.php

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -241,29 +241,36 @@ private function getHunkStartTokens($diffLine)
241241
*/
242242
private function getFilenameTokens(array $diffLineList, $currentLine)
243243
{
244+
$filenameTokens = array();
245+
244246
// Get hunk metadata
245247
$hunkTokens = $this->getHunkStartTokens($diffLineList[$currentLine+2]);
246248

247-
// Simple change
248-
if (4 == count($hunkTokens)) {
249-
$originalFilename = $this->diffNormalizer->getFilename($diffLineList[$currentLine]);
250-
$newFilename = $this->diffNormalizer->getFilename($diffLineList[$currentLine+1]);
249+
// In some cases we may have a diff with no contents (e.g. diff of svn propedit)
250+
if (count($hunkTokens)) {
251+
// Simple change
252+
if (4 == count($hunkTokens)) {
253+
$originalFilename = $this->diffNormalizer->getFilename($diffLineList[$currentLine]);
254+
$newFilename = $this->diffNormalizer->getFilename($diffLineList[$currentLine + 1]);
251255

252-
// File deletion
253-
} elseif (Token::FILE_DELETION_LINE_COUNT === $hunkTokens[0]->getType()) {
254-
$originalFilename = $this->diffNormalizer->getFilename($diffLineList[$currentLine]);
255-
$newFilename = '';
256+
// File deletion
257+
} elseif (Token::FILE_DELETION_LINE_COUNT === $hunkTokens[0]->getType()) {
258+
$originalFilename = $this->diffNormalizer->getFilename($diffLineList[$currentLine]);
259+
$newFilename = '';
256260

257-
// File creation
258-
} else {
259-
$originalFilename = '';
260-
$newFilename = $this->diffNormalizer->getFilename($diffLineList[$currentLine+1]);
261+
// File creation
262+
} else {
263+
$originalFilename = '';
264+
$newFilename = $this->diffNormalizer->getFilename($diffLineList[$currentLine + 1]);
265+
}
266+
267+
$filenameTokens = array(
268+
new Token(Token::ORIGINAL_FILENAME, $originalFilename),
269+
new Token(Token::NEW_FILENAME, $newFilename)
270+
);
261271
}
262272

263-
return array(
264-
new Token(Token::ORIGINAL_FILENAME, $originalFilename),
265-
new Token(Token::NEW_FILENAME, $newFilename)
266-
);
273+
return $filenameTokens;
267274
}
268275

269276
/**
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?php
2+
3+
/**
4+
* PHP Version 5.3
5+
*
6+
* @copyright (c) 2014-2015 brian ridley
7+
* @author brian ridley <ptlis@ptlis.net>
8+
* @license http://opensource.org/licenses/MIT MIT
9+
*/
10+
11+
namespace ptlis\DiffParser\Test\Parse\Svn;
12+
13+
use ptlis\DiffParser\File;
14+
use ptlis\DiffParser\Hunk;
15+
use ptlis\DiffParser\Line;
16+
use ptlis\DiffParser\Parse\UnifiedDiffParser;
17+
use ptlis\DiffParser\Parse\UnifiedDiffTokenizer;
18+
use ptlis\DiffParser\Parse\SvnDiffNormalizer;
19+
20+
class DiffParserPropEditTest extends \PHPUnit_Framework_TestCase
21+
{
22+
public function testPropEdit()
23+
{
24+
$parser = new UnifiedDiffParser(
25+
new UnifiedDiffTokenizer(
26+
new SvnDiffNormalizer()
27+
)
28+
);
29+
30+
$data = file(__DIR__ . '/data/diff_propedit', FILE_IGNORE_NEW_LINES);
31+
32+
$diff = $parser->parse($data);
33+
34+
$this->assertInstanceOf('ptlis\DiffParser\Changeset', $diff);
35+
$this->assertEquals(0, count($diff->getFiles()));
36+
}
37+
}

tests/Parse/Svn/data/diff_propedit

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
Index: branches/7.0/trunk
2+
===================================================================
3+
--- branches/7.0/trunk (revision 115793)
4+
+++ branches/7.0/trunk (revision 115794)
5+
6+
Property changes on: branches/7.0/trunk
7+
___________________________________________________________________
8+
Modified: svn:mergeinfo
9+
Merged /branches/7.0/dev/7.3.3-5959:r115410-115793
10+
Merged /branches/7.0/dev/7.3.2-5968:r115162-115780
11+
12+
------------------------------------------------------------------------

0 commit comments

Comments
 (0)