Page MenuHomePhabricator

D15877.id38243.diff
No OneTemporary

D15877.id38243.diff

diff --git a/src/applications/diffusion/engine/DiffusionCommitHookEngine.php b/src/applications/diffusion/engine/DiffusionCommitHookEngine.php
--- a/src/applications/diffusion/engine/DiffusionCommitHookEngine.php
+++ b/src/applications/diffusion/engine/DiffusionCommitHookEngine.php
@@ -172,14 +172,7 @@
if ($this->isInitialImport($all_updates)) {
$repository = $this->getRepository();
-
- $repository->openTransaction();
- $repository->beginReadLocking();
- $repository = $repository->reload();
- $repository->setDetail('importing', true);
- $repository->save();
- $repository->endReadLocking();
- $repository->saveTransaction();
+ $repository->markImporting();
}
if ($this->emailPHIDs) {
@@ -1244,7 +1237,7 @@
$commit_count++;
}
- if ($commit_count <= 7) {
+ if ($commit_count <= PhabricatorRepository::IMPORT_THRESHOLD) {
// If this pushes a very small number of commits, assume it's an
// initial commit or stack of a few initial commits.
return false;
diff --git a/src/applications/repository/engine/PhabricatorRepositoryDiscoveryEngine.php b/src/applications/repository/engine/PhabricatorRepositoryDiscoveryEngine.php
--- a/src/applications/repository/engine/PhabricatorRepositoryDiscoveryEngine.php
+++ b/src/applications/repository/engine/PhabricatorRepositoryDiscoveryEngine.php
@@ -52,6 +52,16 @@
throw new Exception(pht("Unknown VCS '%s'!", $vcs));
}
+ if ($this->isInitialImport($refs)) {
+ $this->log(
+ pht(
+ 'Discovered more than %s commit(s) in an empty repository, '.
+ 'marking repository as importing.',
+ new PhutilNumber(PhabricatorRepository::IMPORT_THRESHOLD)));
+
+ $repository->markImporting();
+ }
+
// Clear the working set cache.
$this->workingSet = array();
@@ -579,4 +589,30 @@
PhabricatorWorker::scheduleTask($class, $data);
}
+ private function isInitialImport(array $refs) {
+ $commit_count = count($refs);
+
+ if ($commit_count <= PhabricatorRepository::IMPORT_THRESHOLD) {
+ // If we fetched a small number of commits, assume it's an initial
+ // commit or a stack of a few initial commits.
+ return false;
+ }
+
+ $viewer = $this->getViewer();
+ $repository = $this->getRepository();
+
+ $any_commits = id(new DiffusionCommitQuery())
+ ->setViewer($viewer)
+ ->withRepository($repository)
+ ->setLimit(1)
+ ->execute();
+
+ if ($any_commits) {
+ // If the repository already has commits, this isn't an import.
+ return false;
+ }
+
+ return true;
+ }
+
}
diff --git a/src/applications/repository/storage/PhabricatorRepository.php b/src/applications/repository/storage/PhabricatorRepository.php
--- a/src/applications/repository/storage/PhabricatorRepository.php
+++ b/src/applications/repository/storage/PhabricatorRepository.php
@@ -26,6 +26,11 @@
*/
const MINIMUM_QUALIFIED_HASH = 5;
+ /**
+ * Minimum number of commits to an empty repository to trigger "import" mode.
+ */
+ const IMPORT_THRESHOLD = 7;
+
const TABLE_PATH = 'repository_path';
const TABLE_PATHCHANGE = 'repository_pathchange';
const TABLE_FILESYSTEM = 'repository_filesystem';
@@ -354,7 +359,7 @@
if (!strlen($name)) {
$name = $this->getName();
$name = phutil_utf8_strtolower($name);
- $name = preg_replace('@[/ -:]+@', '-', $name);
+ $name = preg_replace('@[/ -:<>]+@', '-', $name);
$name = trim($name, '-');
if (!strlen($name)) {
$name = $this->getCallsign();
@@ -2155,6 +2160,18 @@
return $service;
}
+ public function markImporting() {
+ $this->openTransaction();
+ $this->beginReadLocking();
+ $repository = $this->reload();
+ $repository->setDetail('importing', true);
+ $repository->save();
+ $this->endReadLocking();
+ $this->saveTransaction();
+
+ return $repository;
+ }
+
/* -( Symbols )-------------------------------------------------------------*/

File Metadata

Mime Type
text/plain
Expires
Wed, Oct 23, 9:29 PM (3 w, 5 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6745177
Default Alt Text
D15877.id38243.diff (3 KB)

Event Timeline