From 8e177c4db8d13a0cf0372265557bc025b5cdcd3e Mon Sep 17 00:00:00 2001 From: epriestley Date: Wed, 18 Dec 2013 14:20:59 -0800 Subject: [PATCH] Parse the output of `svnlook diff ...` Summary: Ref T4195. When figuring out changed content in SVN, the easiest approach is to use `svnlook diff`, but it has a slightly different header than we're used to. Adjust the parser for it and add some tests. Test Plan: Clean unit tests. Reviewers: btrahan Reviewed By: btrahan CC: aran Maniphest Tasks: T4195 Differential Revision: https://secure.phabricator.com/D7790 --- src/parser/ArcanistDiffParser.php | 5 +++++ src/parser/__tests__/ArcanistDiffParserTestCase.php | 5 +++++ src/parser/__tests__/diff/svnlook-add.svndiff | 7 +++++++ src/parser/__tests__/diff/svnlook-basics.svndiff | 10 ++++++++++ src/parser/__tests__/diff/svnlook-delete.svndiff | 7 +++++++ 5 files changed, 34 insertions(+) create mode 100644 src/parser/__tests__/diff/svnlook-add.svndiff create mode 100644 src/parser/__tests__/diff/svnlook-basics.svndiff create mode 100644 src/parser/__tests__/diff/svnlook-delete.svndiff diff --git a/src/parser/ArcanistDiffParser.php b/src/parser/ArcanistDiffParser.php index b6e8cbcd..45d2520b 100644 --- a/src/parser/ArcanistDiffParser.php +++ b/src/parser/ArcanistDiffParser.php @@ -207,6 +207,8 @@ final class ArcanistDiffParser { $patterns = array( // This is a normal SVN text change, probably from "svn diff". '(?PIndex): (?P.+)', + // This is an SVN text change, probably from "svnlook diff". + '(?PModified|Added|Deleted): (?P.+)', // This is an SVN property change, probably from "svn diff". '(?PProperty changes on): (?P.+)', // This is a git commit message, probably from "git show". @@ -285,6 +287,9 @@ final class ArcanistDiffParser { switch ($match['type']) { case 'Index': + case 'Modified': + case 'Added': + case 'Deleted': $this->parseIndexHunk($change); break; case 'Property changes on': diff --git a/src/parser/__tests__/ArcanistDiffParserTestCase.php b/src/parser/__tests__/ArcanistDiffParserTestCase.php index 32010f67..a4becd86 100644 --- a/src/parser/__tests__/ArcanistDiffParserTestCase.php +++ b/src/parser/__tests__/ArcanistDiffParserTestCase.php @@ -570,6 +570,11 @@ EOTEXT ArcanistDiffChangeType::TYPE_CHANGE, $change->getType()); break; + case 'svnlook-basics.svndiff': + case 'svnlook-add.svndiff': + case 'svnlook-delete.svndiff': + $this->assertEqual(1, count($changes)); + break; default: throw new Exception("No test block for diff file {$diff_file}."); break; diff --git a/src/parser/__tests__/diff/svnlook-add.svndiff b/src/parser/__tests__/diff/svnlook-add.svndiff new file mode 100644 index 00000000..fbfb1f4f --- /dev/null +++ b/src/parser/__tests__/diff/svnlook-add.svndiff @@ -0,0 +1,7 @@ +Added: OTHER +=================================================================== +--- OTHER (rev 0) ++++ OTHER 2013-12-18 21:00:43 UTC (txn 18-y) +@@ -0,0 +1 @@ ++other + diff --git a/src/parser/__tests__/diff/svnlook-basics.svndiff b/src/parser/__tests__/diff/svnlook-basics.svndiff new file mode 100644 index 00000000..e7c45c6d --- /dev/null +++ b/src/parser/__tests__/diff/svnlook-basics.svndiff @@ -0,0 +1,10 @@ +Modified: README +=================================================================== +--- README 2013-12-18 20:56:12 UTC (rev 17) ++++ README 2013-12-18 20:56:47 UTC (txn 17-x) +@@ -17,3 +17,4 @@ + j + j + j ++j + diff --git a/src/parser/__tests__/diff/svnlook-delete.svndiff b/src/parser/__tests__/diff/svnlook-delete.svndiff new file mode 100644 index 00000000..c3e7f7ae --- /dev/null +++ b/src/parser/__tests__/diff/svnlook-delete.svndiff @@ -0,0 +1,7 @@ +Deleted: OTHER +=================================================================== +--- OTHER 2013-12-18 21:00:43 UTC (rev 19) ++++ OTHER 2013-12-18 21:01:18 UTC (txn 19-z) +@@ -1 +0,0 @@ +-other +