--- /dev/null
+<?php
+
+namespace Cubist\Util\CommandLine;
+
+use Cubist\Net\Transfer\IServer;
+
+class LocalToGCSRclone extends CloneProgram
+{
+ protected $_prog = 'rclone';
+ protected $_gcs_config = [];
+ protected $_bucket;
+
+ protected function _preExecute()
+ {
+ parent::_preExecute();
+ $this->setArg(null, $this->getMirror() ? 'sync' : 'copy');
+ $this->setArg(null, $this->getSrc());
+ foreach ($this->_gcs_config as $k => $v) {
+ $this->setArg('gcs-' . str_replace('_', '-', $k), $v);
+ }
+
+ if ($this->isDryRun()) {
+ $this->setArg('dry-run');
+ }
+ foreach ($this->_cloneArgs as $name => $value) {
+ $this->setArg($name, $value);
+ }
+ $dest = ':gcs:' . $this->getBucket() . '/' . rtrim($this->getDest(), '/') . '/';
+ $this->setManualArg($dest);
+ }
+
+ public function setS3Config($config)
+ {
+ $this->_gcs_config = $config;
+ }
+
+ public function setServer(IServer $server)
+ {
+ parent::setServer($server);
+
+ $config = [
+ 'provider' => $server->getS3Provider(),
+ 'env_auth' => 'false',
+ 'access_key_id' => $server->getAccessKey(),
+ 'secret_access_key' => $server->getSecret(),
+ 'region' => $server->getRegion(),
+ 'endpoint' => $server->getEndpoint(),
+ ];
+
+ $this->setS3Config($config);
+ $this->setBucket($server->getBucket());
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getBucket()
+ {
+ return $this->_bucket;
+ }
+
+ /**
+ * @param mixed $bucket
+ */
+ public function setBucket($bucket): void
+ {
+ $this->_bucket = $bucket;
+ }
+}
\ No newline at end of file