From 6c3552f93963ff67114d147cc878879ff609e37d Mon Sep 17 00:00:00 2001 From: epriestley Date: Fri, 13 Mar 2015 11:30:13 -0700 Subject: [PATCH] Add `bin/files cat` to print a file to stdout Summary: Ref T7149. This makes debugging some of this stuff a bit easier by removing the HTTP part in the middle. Particularly, I anticipate having this stream data chunk-by-chunk in the near future. Test Plan: Ran `files cat F23`, got output. Reviewers: btrahan Reviewed By: btrahan Subscribers: joshuaspence, epriestley Maniphest Tasks: T7149 Differential Revision: https://secure.phabricator.com/D12062 --- src/__phutil_library_map__.php | 2 + .../PhabricatorFilesManagementCatWorkflow.php | 39 +++++++++++++++++++ .../PhabricatorFilesManagementWorkflow.php | 35 +++++++++-------- 3 files changed, 60 insertions(+), 16 deletions(-) create mode 100644 src/applications/files/management/PhabricatorFilesManagementCatWorkflow.php diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index 0166f22af4..b6f18aee6c 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -1832,6 +1832,7 @@ phutil_register_library_map(array( 'PhabricatorFilesApplication' => 'applications/files/application/PhabricatorFilesApplication.php', 'PhabricatorFilesApplicationStorageEnginePanel' => 'applications/files/applicationpanel/PhabricatorFilesApplicationStorageEnginePanel.php', 'PhabricatorFilesConfigOptions' => 'applications/files/config/PhabricatorFilesConfigOptions.php', + 'PhabricatorFilesManagementCatWorkflow' => 'applications/files/management/PhabricatorFilesManagementCatWorkflow.php', 'PhabricatorFilesManagementCompactWorkflow' => 'applications/files/management/PhabricatorFilesManagementCompactWorkflow.php', 'PhabricatorFilesManagementEnginesWorkflow' => 'applications/files/management/PhabricatorFilesManagementEnginesWorkflow.php', 'PhabricatorFilesManagementMigrateWorkflow' => 'applications/files/management/PhabricatorFilesManagementMigrateWorkflow.php', @@ -5138,6 +5139,7 @@ phutil_register_library_map(array( 'PhabricatorFilesApplication' => 'PhabricatorApplication', 'PhabricatorFilesApplicationStorageEnginePanel' => 'PhabricatorApplicationConfigurationPanel', 'PhabricatorFilesConfigOptions' => 'PhabricatorApplicationConfigOptions', + 'PhabricatorFilesManagementCatWorkflow' => 'PhabricatorFilesManagementWorkflow', 'PhabricatorFilesManagementCompactWorkflow' => 'PhabricatorFilesManagementWorkflow', 'PhabricatorFilesManagementEnginesWorkflow' => 'PhabricatorFilesManagementWorkflow', 'PhabricatorFilesManagementMigrateWorkflow' => 'PhabricatorFilesManagementWorkflow', diff --git a/src/applications/files/management/PhabricatorFilesManagementCatWorkflow.php b/src/applications/files/management/PhabricatorFilesManagementCatWorkflow.php new file mode 100644 index 0000000000..ed354d4a89 --- /dev/null +++ b/src/applications/files/management/PhabricatorFilesManagementCatWorkflow.php @@ -0,0 +1,39 @@ +setName('cat') + ->setSynopsis( + pht('Print the contents of a file.')) + ->setArguments( + array( + array( + 'name' => 'names', + 'wildcard' => true, + ), + )); + } + + public function execute(PhutilArgumentParser $args) { + $console = PhutilConsole::getConsole(); + + $names = $args->getArg('names'); + if (count($names) > 1) { + throw new PhutilArgumentUsageException( + pht('Specify exactly one file to print, like "F123".')); + } else if (!$names) { + throw new PhutilArgumentUsageException( + pht('Specify a file to print, like "F123".')); + } + + $file = head($this->loadFilesWithNames($names)); + + echo $file->loadFileData(); + + return 0; + } + +} diff --git a/src/applications/files/management/PhabricatorFilesManagementWorkflow.php b/src/applications/files/management/PhabricatorFilesManagementWorkflow.php index 400c2ee034..d0bff01c7c 100644 --- a/src/applications/files/management/PhabricatorFilesManagementWorkflow.php +++ b/src/applications/files/management/PhabricatorFilesManagementWorkflow.php @@ -15,26 +15,29 @@ abstract class PhabricatorFilesManagementWorkflow } if ($names) { - $query = id(new PhabricatorObjectQuery()) - ->setViewer($this->getViewer()) - ->withNames($names) - ->withTypes(array(PhabricatorFileFilePHIDType::TYPECONST)); - - $query->execute(); - $files = $query->getNamedResults(); - - foreach ($names as $name) { - if (empty($files[$name])) { - throw new PhutilArgumentUsageException( - "No file '{$name}' exists!"); - } - } - - return array_values($files); + return $this->loadFilesWithNames($names); } return null; } + protected function loadFilesWithNames(array $names) { + $query = id(new PhabricatorObjectQuery()) + ->setViewer($this->getViewer()) + ->withNames($names) + ->withTypes(array(PhabricatorFileFilePHIDType::TYPECONST)); + + $query->execute(); + $files = $query->getNamedResults(); + + foreach ($names as $name) { + if (empty($files[$name])) { + throw new PhutilArgumentUsageException( + "No file '{$name}' exists!"); + } + } + + return array_values($files); + } }