setName('from:git') ->setDescription('Exécuter l’autodoc sur une source GIT donnée') ->setHelp('Si le répertoire cible est un plugin SPIP, certaines informations seront extraites du paquet.xml et du fichier de langue.') ->addArgument('source', InputArgument::REQUIRED, 'URL de la source GIT. Exemple : "https://git.spip.net/spip/spip.git"') ->addOption('branch', 'b', InputOption::VALUE_OPTIONAL, 'Branche ou tag à utiliser', 'master') ->addOption('prefix', 'p', InputOption::VALUE_OPTIONAL, 'Préfixe servant au stockage des données') ->addOption('output', 'o', InputOption::VALUE_OPTIONAL, 'Répertoire recevant le HTML généré. Chemin absolu ou relatif au répertoire courant. Défaut : "var/output/{prefixe}"') ->addOption('topnav', null, InputOption::VALUE_OPTIONAL, 'URL d’un fichier JS à charger dans le head html. Exemple : "//boussole.spip.net/?page=spipnav.js&lang=fr"') ->addOption('topnav_spip', null, InputOption::VALUE_NONE, 'Intègre le JS de la boussole SPIP en entête topnav.') ->addOption('force', '', InputOption::VALUE_NONE, 'Force l’analyse de tous les fichiers, même s’ils n’ont pas été modifiés.'); } protected function execute(InputInterface $input, OutputInterface $output) { $context = new Context($input, $output); /** @var SymfonyStyle */ $io = $context->get('io'); $io->title("Autodoc " . $this->getName()); if ($input->hasArgument('source')) { $source = $input->getArgument('source'); $io->text("Source: $source."); } $source = $this->getRepository($source ?? null); if (!$source) { throw new AutodocException("Source must be provide"); } $context->directory->set('output', $input->getOption('output')); $context->set('default_prefix', $input->getOption('prefix') ?: pathinfo($source, \PATHINFO_FILENAME)); $context->set('topnav', $input->getOption('topnav')); $context->set('topnav_spip', $input->getOption('topnav_spip')); $context->phpdocumentor->options->set('force', $input->getOption('force')); $branch = $input->getOption('branch'); $git = (new Git($source))->setBranch($branch); $context->set('git_asked', $git); $this->pipeline($context); return Command::SUCCESS; } protected function pipeline(Context $context): void { $processor = new InterruptibleProcessor(fn (Context $context) => $context->empty('errors')); $pipeline = (new Pipeline($processor)) ->pipe(new CheckStage()) ->pipe(new GitStage()) ->pipe(new PackageStage()) ->pipe(new PhpDocumentorConfigStage()) ->pipe(new PhpDocumentorStage()) ->pipe(new JsonAutodocStage()); $pipeline->process($context); } protected function getRepository(?string $source = null): ?string { return $source; } }