diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -574,6 +574,7 @@ 'DiffusionRequest' => 'applications/diffusion/request/DiffusionRequest.php', 'DiffusionResolveUserQuery' => 'applications/diffusion/query/DiffusionResolveUserQuery.php', 'DiffusionSSHGitReceivePackWorkflow' => 'applications/diffusion/ssh/DiffusionSSHGitReceivePackWorkflow.php', + 'DiffusionSSHGitUploadArchiveWorkflow' => 'applications/diffusion/ssh/DiffusionSSHGitUploadArchiveWorkflow.php', 'DiffusionSSHGitUploadPackWorkflow' => 'applications/diffusion/ssh/DiffusionSSHGitUploadPackWorkflow.php', 'DiffusionSSHGitWorkflow' => 'applications/diffusion/ssh/DiffusionSSHGitWorkflow.php', 'DiffusionSSHMercurialServeWorkflow' => 'applications/diffusion/ssh/DiffusionSSHMercurialServeWorkflow.php', @@ -3287,6 +3288,7 @@ 'DiffusionRepositoryRemarkupRule' => 'PhabricatorRemarkupRuleObject', 'DiffusionResolveUserQuery' => 'Phobject', 'DiffusionSSHGitReceivePackWorkflow' => 'DiffusionSSHGitWorkflow', + 'DiffusionSSHGitUploadArchiveWorkflow' => 'DiffusionSSHGitWorkflow', 'DiffusionSSHGitUploadPackWorkflow' => 'DiffusionSSHGitWorkflow', 'DiffusionSSHGitWorkflow' => 'DiffusionSSHWorkflow', 'DiffusionSSHMercurialServeWorkflow' => 'DiffusionSSHMercurialWorkflow', diff --git a/src/applications/diffusion/ssh/DiffusionSSHGitUploadArchiveWorkflow.php b/src/applications/diffusion/ssh/DiffusionSSHGitUploadArchiveWorkflow.php new file mode 100644 --- /dev/null +++ b/src/applications/diffusion/ssh/DiffusionSSHGitUploadArchiveWorkflow.php @@ -0,0 +1,40 @@ +setName('git-upload-archive'); + $this->setArguments( + array( + array( + 'name' => 'dir', + 'wildcard' => true, + ), + )); + } + + protected function executeRepositoryOperations() { + $args = $this->getArgs(); + $path = head($args->getArg('dir')); + $repository = $this->loadRepository($path); + + $command = csprintf('git-upload-archive %s', $repository->getLocalPath()); + $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; + } + +}