mirror of
https://we.phorge.it/source/phorge.git
synced 2025-03-26 11:10:16 +01:00
Summary: Ref T10860. At least in Git over SSH, we can freely echo a bunch of stuff to stderr and Git will print it to the console, so we can tell users what's going on. This should make debugging, etc., easier. We could tone this down a little bit once things are more stable if it's a little too chatty. Test Plan: ``` $ echo D >> record && git commit -am D && git push [master ca5efff] D 1 file changed, 1 insertion(+) # Push received by "local001.phacility.net", forwarding to cluster host. # Waiting up to 120 second(s) for a cluster write lock... # Acquired write lock immediately. # Waiting up to 120 second(s) for a cluster read lock on "local001.phacility.net"... # Acquired read lock immediately. # Device "local001.phacility.net" is already a cluster leader and does not need to be synchronized. # Ready to receive on cluster host "local001.phacility.net". Counting objects: 3, done. Delta compression using up to 8 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 256 bytes | 0 bytes/s, done. Total 3 (delta 1), reused 0 (delta 0) To ssh://local@localvault.phacility.com/diffusion/26/locktopia.git 8616189..ca5efff master -> master ``` Reviewers: chad Reviewed By: chad Maniphest Tasks: T10860 Differential Revision: https://secure.phabricator.com/D15791
66 lines
1.7 KiB
PHP
66 lines
1.7 KiB
PHP
<?php
|
|
|
|
final class DiffusionGitUploadPackSSHWorkflow extends DiffusionGitSSHWorkflow {
|
|
|
|
protected function didConstruct() {
|
|
$this->setName('git-upload-pack');
|
|
$this->setArguments(
|
|
array(
|
|
array(
|
|
'name' => 'dir',
|
|
'wildcard' => true,
|
|
),
|
|
));
|
|
}
|
|
|
|
protected function executeRepositoryOperations() {
|
|
$repository = $this->getRepository();
|
|
$viewer = $this->getUser();
|
|
$device = AlmanacKeys::getLiveDevice();
|
|
|
|
$skip_sync = $this->shouldSkipReadSynchronization();
|
|
|
|
if ($this->shouldProxy()) {
|
|
$command = $this->getProxyCommand();
|
|
|
|
if ($device) {
|
|
$this->writeClusterEngineLogMessage(
|
|
pht(
|
|
"# Fetch received by \"%s\", forwarding to cluster host.\n",
|
|
$device->getName()));
|
|
}
|
|
} else {
|
|
$command = csprintf('git-upload-pack -- %s', $repository->getLocalPath());
|
|
if (!$skip_sync) {
|
|
$cluster_engine = id(new DiffusionRepositoryClusterEngine())
|
|
->setViewer($viewer)
|
|
->setRepository($repository)
|
|
->setLog($this)
|
|
->synchronizeWorkingCopyBeforeRead();
|
|
|
|
if ($device) {
|
|
$this->writeClusterEngineLogMessage(
|
|
pht(
|
|
"# Cleared to fetch on cluster host \"%s\".\n",
|
|
$device->getName()));
|
|
}
|
|
}
|
|
}
|
|
$command = PhabricatorDaemon::sudoCommandAsDaemonUser($command);
|
|
|
|
$future = id(new ExecFuture('%C', $command))
|
|
->setEnv($this->getEnvironment());
|
|
|
|
$err = $this->newPassthruCommand()
|
|
->setIOChannel($this->getIOChannel())
|
|
->setCommandChannelFromExecFuture($future)
|
|
->execute();
|
|
|
|
if (!$err) {
|
|
$this->waitForGitClient();
|
|
}
|
|
|
|
return $err;
|
|
}
|
|
|
|
}
|