mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-24 06:20:56 +01:00
Fix an issue where we would try to release an unheld lock
Summary: Fixes T7484. If the lock failed, we'd still try to unlock it, which is incorrect. Test Plan: Ran two `bin/repository update X` in different windows, got proper LockException instead of indirect symptomatic "not locked by this process" exception. Reviewers: btrahan Reviewed By: btrahan Subscribers: epriestley Maniphest Tasks: T7484 Differential Revision: https://secure.phabricator.com/D12253
This commit is contained in:
parent
898ccd7552
commit
e9886c4353
1 changed files with 31 additions and 29 deletions
|
@ -58,38 +58,42 @@ final class PhabricatorRepositoryManagementUpdateWorkflow
|
||||||
$lock = PhabricatorGlobalLock::newLock($lock_name);
|
$lock = PhabricatorGlobalLock::newLock($lock_name);
|
||||||
|
|
||||||
$lock->lock();
|
$lock->lock();
|
||||||
|
try {
|
||||||
|
$no_discovery = $args->getArg('no-discovery');
|
||||||
|
|
||||||
$no_discovery = $args->getArg('no-discovery');
|
id(new PhabricatorRepositoryPullEngine())
|
||||||
|
->setRepository($repository)
|
||||||
|
->setVerbose($this->getVerbose())
|
||||||
|
->pullRepository();
|
||||||
|
|
||||||
id(new PhabricatorRepositoryPullEngine())
|
if ($no_discovery) {
|
||||||
->setRepository($repository)
|
$lock->unlock();
|
||||||
->setVerbose($this->getVerbose())
|
return;
|
||||||
->pullRepository();
|
}
|
||||||
|
|
||||||
if ($no_discovery) {
|
// TODO: It would be nice to discover only if we pulled something, but
|
||||||
|
// this isn't totally trivial. It's slightly more complicated with
|
||||||
|
// hosted repositories, too.
|
||||||
|
|
||||||
|
$repository->writeStatusMessage(
|
||||||
|
PhabricatorRepositoryStatusMessage::TYPE_NEEDS_UPDATE,
|
||||||
|
null);
|
||||||
|
|
||||||
|
$this->discoverRepository($repository);
|
||||||
|
|
||||||
|
$this->checkIfRepositoryIsFullyImported($repository);
|
||||||
|
|
||||||
|
$this->updateRepositoryRefs($repository);
|
||||||
|
|
||||||
|
$this->mirrorRepository($repository);
|
||||||
|
|
||||||
|
$repository->writeStatusMessage(
|
||||||
|
PhabricatorRepositoryStatusMessage::TYPE_FETCH,
|
||||||
|
PhabricatorRepositoryStatusMessage::CODE_OKAY);
|
||||||
|
} catch (Exception $ex) {
|
||||||
$lock->unlock();
|
$lock->unlock();
|
||||||
return;
|
throw $ex;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: It would be nice to discover only if we pulled something, but
|
|
||||||
// this isn't totally trivial. It's slightly more complicated with hosted
|
|
||||||
// repositories, too.
|
|
||||||
|
|
||||||
$repository->writeStatusMessage(
|
|
||||||
PhabricatorRepositoryStatusMessage::TYPE_NEEDS_UPDATE,
|
|
||||||
null);
|
|
||||||
|
|
||||||
$this->discoverRepository($repository);
|
|
||||||
|
|
||||||
$this->checkIfRepositoryIsFullyImported($repository);
|
|
||||||
|
|
||||||
$this->updateRepositoryRefs($repository);
|
|
||||||
|
|
||||||
$this->mirrorRepository($repository);
|
|
||||||
|
|
||||||
$repository->writeStatusMessage(
|
|
||||||
PhabricatorRepositoryStatusMessage::TYPE_FETCH,
|
|
||||||
PhabricatorRepositoryStatusMessage::CODE_OKAY);
|
|
||||||
} catch (Exception $ex) {
|
} catch (Exception $ex) {
|
||||||
$repository->writeStatusMessage(
|
$repository->writeStatusMessage(
|
||||||
PhabricatorRepositoryStatusMessage::TYPE_FETCH,
|
PhabricatorRepositoryStatusMessage::TYPE_FETCH,
|
||||||
|
@ -98,8 +102,6 @@ final class PhabricatorRepositoryManagementUpdateWorkflow
|
||||||
'message' => pht(
|
'message' => pht(
|
||||||
'Error updating working copy: %s', $ex->getMessage()),
|
'Error updating working copy: %s', $ex->getMessage()),
|
||||||
));
|
));
|
||||||
|
|
||||||
$lock->unlock();
|
|
||||||
throw $ex;
|
throw $ex;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue