Route some VCS connections over SSH
Summary: - Add web UI for configuring SSH hosting. - Route git reads (`git-upload-pack` over SSH). Test Plan: >>> orbital ~ $ git clone ssh://127.0.0.1/ Cloning into '127.0.0.1'... Exception: Unrecognized repository path "/". Expected a path like "/diffusion/X/". fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. >>> orbital ~ $ git clone ssh://127.0.0.1/diffusion/X/ Cloning into 'X'... Exception: No repository "X" exists! fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. >>> orbital ~ $ git clone ssh://127.0.0.1/diffusion/MT/ Cloning into 'MT'... Exception: This repository is not available over SSH. fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. >>> orbital ~ $ git clone ssh://127.0.0.1/diffusion/P/ Cloning into 'P'... Exception: TODO: Implement serve over SSH. fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. Reviewers: btrahan Reviewed By: btrahan CC: hach-que, aran Maniphest Tasks: T2230 Differential Revision: https://secure.phabricator.com/D7421
This commit is contained in:
@@ -61,6 +61,8 @@ try {
|
||||
|
||||
$workflows = array(
|
||||
new ConduitSSHWorkflow(),
|
||||
|
||||
new DiffusionSSHGitUploadPackWorkflow(),
|
||||
);
|
||||
|
||||
$workflow_names = mpull($workflows, 'getName', 'getName');
|
||||
@@ -81,16 +83,24 @@ try {
|
||||
throw new Exception("Unable to open stdout.");
|
||||
}
|
||||
|
||||
$sock_stderr = fopen('php://stderr', 'w');
|
||||
if (!$sock_stderr) {
|
||||
throw new Exception("Unable to open stderr.");
|
||||
}
|
||||
|
||||
$socket_channel = new PhutilSocketChannel(
|
||||
$sock_stdin,
|
||||
$sock_stdout);
|
||||
$error_channel = new PhutilSocketChannel(null, $sock_stderr);
|
||||
$metrics_channel = new PhutilMetricsChannel($socket_channel);
|
||||
$workflow->setIOChannel($metrics_channel);
|
||||
$workflow->setErrorChannel($error_channel);
|
||||
|
||||
$err = $workflow->execute($original_args);
|
||||
|
||||
$metrics_channel->flush();
|
||||
$error_channel->flush();
|
||||
} catch (Exception $ex) {
|
||||
echo "phabricator-ssh-exec: ".$ex->getMessage()."\n";
|
||||
fwrite(STDERR, "phabricator-ssh-exec: ".$ex->getMessage()."\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user