Page MenuHomePhabricator

D8133.id18400.diff
No OneTemporary

D8133.id18400.diff

diff --git a/src/applications/repository/engine/__tests__/data/CHE.svn.tgz b/src/applications/repository/engine/__tests__/data/CHE.svn.tgz
new file mode 100644
index 0000000000000000000000000000000000000000..e24e20b993be876fa98cd1b52f80d17106d1b508
GIT binary patch
literal 9245
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
literal 0
Hc$@<O00001
diff --git a/src/applications/repository/worker/__tests__/PhabricatorChangeParserTestCase.php b/src/applications/repository/worker/__tests__/PhabricatorChangeParserTestCase.php
--- a/src/applications/repository/worker/__tests__/PhabricatorChangeParserTestCase.php
+++ b/src/applications/repository/worker/__tests__/PhabricatorChangeParserTestCase.php
@@ -1103,11 +1103,55 @@
pht('Artificial SVN root should fail.'));
}
+ public function testSubversionForeignStubsParser() {
+ $repository = $this->buildBareRepository('CHE');
+ $repository->setDetail('svn-subpath', 'branch/');
- private function expectChanges(
+ id(new PhabricatorRepositoryPullEngine())
+ ->setRepository($repository)
+ ->pullRepository();
+
+ id(new PhabricatorRepositoryDiscoveryEngine())
+ ->setRepository($repository)
+ ->discoverCommits();
+
+ $viewer = PhabricatorUser::getOmnipotentUser();
+
+ $commits = id(new DiffusionCommitQuery())
+ ->setViewer($viewer)
+ ->withRepositoryIDs(array($repository->getID()))
+ ->execute();
+
+ foreach ($commits as $commit) {
+ $this->parseCommit($repository, $commit);
+ }
+
+ // As a side effect, we expect parsing these commits to have created
+ // foreign stubs of other commits.
+
+ $commits = id(new DiffusionCommitQuery())
+ ->setViewer($viewer)
+ ->withRepositoryIDs(array($repository->getID()))
+ ->execute();
+
+ $commits = mpull($commits, null, 'getCommitIdentifier');
+
+ $this->assertEqual(
+ true,
+ isset($commits['2']),
+ 'Expect rCHE2 to exist as a foreign stub.');
+
+ // The foreign stub should be marked imported.
+
+ $commit = $commits['2'];
+ $this->assertEqual(
+ PhabricatorRepositoryCommit::IMPORTED_ALL,
+ (int)$commit->getImportStatus());
+ }
+
+ private function parseCommit(
PhabricatorRepository $repository,
- array $commits,
- array $expect) {
+ PhabricatorRepositoryCommit $commit) {
switch ($repository->getVersionControlSystem()) {
case PhabricatorRepositoryType::REPOSITORY_TYPE_GIT:
@@ -1123,6 +1167,15 @@
throw new Exception(pht('No support yet.'));
}
+ $parser_object = newv($parser, array(array()));
+ return $parser_object->parseChangesForUnitTest($repository, $commit);
+ }
+
+ private function expectChanges(
+ PhabricatorRepository $repository,
+ array $commits,
+ array $expect) {
+
foreach ($commits as $commit) {
$commit_identifier = $commit->getCommitIdentifier();
$expect_changes = idx($expect, $commit_identifier);
@@ -1137,8 +1190,7 @@
$repository->getCallsign()));
}
- $parser_object = newv($parser, array(array()));
- $changes = $parser_object->parseChangesForUnitTest($repository, $commit);
+ $changes = $this->parseCommit($repository, $commit);
$path_map = id(new DiffusionPathQuery())
->withPathIDs(mpull($changes, 'getPathID'))
diff --git a/src/applications/repository/worker/commitchangeparser/PhabricatorRepositorySvnCommitChangeParserWorker.php b/src/applications/repository/worker/commitchangeparser/PhabricatorRepositorySvnCommitChangeParserWorker.php
--- a/src/applications/repository/worker/commitchangeparser/PhabricatorRepositorySvnCommitChangeParserWorker.php
+++ b/src/applications/repository/worker/commitchangeparser/PhabricatorRepositorySvnCommitChangeParserWorker.php
@@ -509,11 +509,15 @@
"Missing commits ({$need}) in a SVN repository which is not ".
"configured for subdirectory-only parsing!");
}
+
foreach ($need as $foreign_commit) {
$commit = new PhabricatorRepositoryCommit();
$commit->setRepositoryID($repository->getID());
$commit->setCommitIdentifier($foreign_commit);
$commit->setEpoch(0);
+ // Mark this commit as imported so it doesn't prevent the repository
+ // from transitioning into the "Imported" state.
+ $commit->setImportStatus(PhabricatorRepositoryCommit::IMPORTED_ALL);
$commit->save();
$data = new PhabricatorRepositoryCommitData();

File Metadata

Mime Type
text/plain
Expires
Sat, Mar 29, 7:42 PM (6 d, 22 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7706021
Default Alt Text
D8133.id18400.diff (15 KB)

Event Timeline