diff --git a/src/applications/repository/engine/__tests__/data/CHC.svn.tgz b/src/applications/repository/engine/__tests__/data/CHC.svn.tgz index 93da53515b9b0bfad18205cf29aa5d9e9fcc54bb..dbd99c1f1b4f4eea597bd0412537cc4d066b5c0e 100644 GIT binary patch literal 11360 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 amTJeo^a|f~3Ct}2XU{&P$&Vp}kpTc{wTTY^ literal 10048 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 W*d~>QgRo}#FK;FO#hbx_kpTdF*!*7r diff --git a/src/applications/repository/worker/__tests__/PhabricatorChangeParserTestCase.php b/src/applications/repository/worker/__tests__/PhabricatorChangeParserTestCase.php index 1194c8922b..170cda5df6 100644 --- a/src/applications/repository/worker/__tests__/PhabricatorChangeParserTestCase.php +++ b/src/applications/repository/worker/__tests__/PhabricatorChangeParserTestCase.php @@ -406,6 +406,280 @@ final class PhabricatorChangeParserTestCase $repository, $commits, array( + // Copy a directory, removing and adding files to the copy + '12' => array( + array( + '/', + null, + null, + DifferentialChangeType::TYPE_CHILD, + DifferentialChangeType::FILE_DIRECTORY, + 0, + 12, + ), + array( + '/dir', + null, + null, + // TODO: This might reasonbly be considered a bug in the parser; it + // should probably be COPY_AWAY. + DifferentialChangeType::TYPE_CHILD, + DifferentialChangeType::FILE_DIRECTORY, + 0, + 12, + ), + array( + '/dir/a', + null, + null, + DifferentialChangeType::TYPE_COPY_AWAY, + DifferentialChangeType::FILE_NORMAL, + 0, + 12, + ), + array( + '/dir/b', + null, + null, + DifferentialChangeType::TYPE_COPY_AWAY, + DifferentialChangeType::FILE_NORMAL, + 0, + 12, + ), + array( + '/dir/subdir', + null, + null, + DifferentialChangeType::TYPE_COPY_AWAY, + DifferentialChangeType::FILE_DIRECTORY, + 0, + 12, + ), + array( + '/dir/subdir/a', + null, + null, + DifferentialChangeType::TYPE_COPY_AWAY, + DifferentialChangeType::FILE_NORMAL, + 0, + 12, + ), + array( + '/dir/subdir/b', + null, + null, + DifferentialChangeType::TYPE_COPY_AWAY, + DifferentialChangeType::FILE_NORMAL, + 0, + 12, + ), + array( + '/dir_copy', + '/dir', + '11', + DifferentialChangeType::TYPE_COPY_HERE, + DifferentialChangeType::FILE_DIRECTORY, + 1, + 12, + ), + array( + '/dir_copy/a', + '/dir/a', + '11', + DifferentialChangeType::TYPE_COPY_HERE, + DifferentialChangeType::FILE_NORMAL, + 1, + 12, + ), + array( + '/dir_copy/b', + '/dir/b', + '11', + DifferentialChangeType::TYPE_COPY_HERE, + DifferentialChangeType::FILE_NORMAL, + 1, + 12, + ), + array( + '/dir_copy/subdir', + '/dir/subdir', + '11', + DifferentialChangeType::TYPE_COPY_HERE, + DifferentialChangeType::FILE_DIRECTORY, + 1, + 12, + ), + array( + '/dir_copy/subdir/a', + '/dir/subdir/a', + '11', + DifferentialChangeType::TYPE_COPY_HERE, + DifferentialChangeType::FILE_NORMAL, + 1, + 12, + ), + array( + '/dir_copy/subdir/b', + '/dir/subdir/b', + '11', + DifferentialChangeType::TYPE_DELETE, + DifferentialChangeType::FILE_NORMAL, + 1, + 12, + ), + array( + '/dir_copy/subdir/c', + null, + null, + DifferentialChangeType::TYPE_ADD, + DifferentialChangeType::FILE_NORMAL, + 1, + 12, + ), + ), + + // Add a directory with a subdirectory and files, sets up next commit + '11' => array( + array( + '/', + null, + null, + DifferentialChangeType::TYPE_CHILD, + DifferentialChangeType::FILE_DIRECTORY, + 0, + 11, + ), + array( + '/dir', + null, + null, + DifferentialChangeType::TYPE_ADD, + DifferentialChangeType::FILE_DIRECTORY, + 1, + 11, + ), + array( + '/dir/a', + null, + null, + DifferentialChangeType::TYPE_ADD, + DifferentialChangeType::FILE_NORMAL, + 1, + 11, + ), + array( + '/dir/b', + null, + null, + DifferentialChangeType::TYPE_ADD, + DifferentialChangeType::FILE_NORMAL, + 1, + 11, + ), + array( + '/dir/subdir', + null, + null, + DifferentialChangeType::TYPE_ADD, + DifferentialChangeType::FILE_DIRECTORY, + 1, + 11, + ), + array( + '/dir/subdir/a', + null, + null, + DifferentialChangeType::TYPE_ADD, + DifferentialChangeType::FILE_NORMAL, + 1, + 11, + ), + array( + '/dir/subdir/b', + null, + null, + DifferentialChangeType::TYPE_ADD, + DifferentialChangeType::FILE_NORMAL, + 1, + 11, + ), + ), + + // Remove directory + '10' => array( + array( + '/', + null, + null, + DifferentialChangeType::TYPE_CHILD, + DifferentialChangeType::FILE_DIRECTORY, + 0, + 10, + ), + array( + '/dir', + null, + null, + DifferentialChangeType::TYPE_DELETE, + DifferentialChangeType::FILE_DIRECTORY, + 1, + 10, + ), + array( + '/dir/subfile', + null, + null, + DifferentialChangeType::TYPE_DELETE, + DifferentialChangeType::FILE_NORMAL, + 1, + 10, + ), + ), + + // Replace directory with file + '9' => array( + array( + '/', + null, + null, + DifferentialChangeType::TYPE_CHILD, + DifferentialChangeType::FILE_DIRECTORY, + 0, + 9, + ), + array( + '/file_moved', + null, + null, + DifferentialChangeType::TYPE_CHANGE, + DifferentialChangeType::FILE_DIRECTORY, + 1, + 9, + ), + ), + + // Replace file with file + '8' => array( + array( + '/', + null, + null, + DifferentialChangeType::TYPE_CHILD, + DifferentialChangeType::FILE_DIRECTORY, + 0, + 8, + ), + array( + '/file_moved', + null, + null, + DifferentialChangeType::TYPE_CHANGE, + DifferentialChangeType::FILE_NORMAL, + 1, + 8, + ), + ), + '7' => array( array( '/', diff --git a/src/applications/repository/worker/commitchangeparser/PhabricatorRepositorySvnCommitChangeParserWorker.php b/src/applications/repository/worker/commitchangeparser/PhabricatorRepositorySvnCommitChangeParserWorker.php index 2aaaf17c33..5ac6752a17 100644 --- a/src/applications/repository/worker/commitchangeparser/PhabricatorRepositorySvnCommitChangeParserWorker.php +++ b/src/applications/repository/worker/commitchangeparser/PhabricatorRepositorySvnCommitChangeParserWorker.php @@ -37,7 +37,7 @@ final class PhabricatorRepositorySvnCommitChangeParserWorker // TODO: Explicitly mark this commit as broken elsewhere? This isn't // supposed to happen but we have some cases like rE27 and rG935 in the // Facebook repositories where things got all clowned up. - return; + return array(); } $raw_paths = array();