diff --git a/src/applications/files/management/PhabricatorFilesManagementWorkflow.php b/src/applications/files/management/PhabricatorFilesManagementWorkflow.php index 85de4aefcb..4ce3e21a0f 100644 --- a/src/applications/files/management/PhabricatorFilesManagementWorkflow.php +++ b/src/applications/files/management/PhabricatorFilesManagementWorkflow.php @@ -8,44 +8,33 @@ abstract class PhabricatorFilesManagementWorkflow } protected function buildIterator(PhutilArgumentParser $args) { + $names = $args->getArg('names'); + if ($args->getArg('all')) { - if ($args->getArg('names')) { + if ($names) { throw new PhutilArgumentUsageException( "Specify either a list of files or `--all`, but not both."); } return new LiskMigrationIterator(new PhabricatorFile()); } - if ($args->getArg('names')) { - $iterator = array(); + if ($names) { + $query = id(new PhabricatorObjectQuery()) + ->setViewer(PhabricatorUser::getOmnipotentUser()) + ->withNames($names) + ->withTypes(array(PhabricatorFilePHIDTypeFile::TYPECONST)); - // TODO: (T603) Convert this to ObjectNameQuery. + $query->execute(); + $files = $query->getNamedResults(); - foreach ($args->getArg('names') as $name) { - $name = trim($name); - - $id = preg_replace('/^F/i', '', $name); - if (ctype_digit($id)) { - $file = id(new PhabricatorFile())->loadOneWhere( - 'id = %d', - $id); - if (!$file) { - throw new PhutilArgumentUsageException( - "No file exists with ID '{$name}'."); - } - } else { - $file = id(new PhabricatorFile())->loadOneWhere( - 'phid = %s', - $name); - if (!$file) { - throw new PhutilArgumentUsageException( - "No file exists with PHID '{$name}'."); - } + foreach ($names as $name) { + if (empty($files[$name])) { + throw new PhutilArgumentUsageException( + "No file '{$name}' exists!"); } - $iterator[] = $file; } - return $iterator; + return array_values($files); } return null; diff --git a/src/applications/phid/query/PhabricatorObjectQuery.php b/src/applications/phid/query/PhabricatorObjectQuery.php index 473f914fdf..1e492fe5d9 100644 --- a/src/applications/phid/query/PhabricatorObjectQuery.php +++ b/src/applications/phid/query/PhabricatorObjectQuery.php @@ -5,6 +5,7 @@ final class PhabricatorObjectQuery private $phids = array(); private $names = array(); + private $types; private $namedResults; @@ -18,12 +19,20 @@ final class PhabricatorObjectQuery return $this; } + public function withTypes(array $types) { + $this->types = $types; + return $this; + } + public function loadPage() { if ($this->namedResults === null) { $this->namedResults = array(); } $types = PhabricatorPHIDType::getAllTypes(); + if ($this->types) { + $types = array_select_keys($types, $this->types); + } $names = array_unique($this->names); $phids = $this->phids;