addOption('keep', null, InputOption::VALUE_REQUIRED, 'Wie viele Sicherungen aufbewahrt werden.', (string) Backup::KEEP) ->addOption('list', null, InputOption::VALUE_NONE, 'Nur auflisten, was vorhanden ist.'); } protected function execute(InputInterface $input, OutputInterface $output): int { $io = new SymfonyStyle($input, $output); if ($input->getOption('list')) { $rows = array_map( static fn (array $backup): array => [ $backup['name'], $backup['manifest']['erstellt'] ?? '?', $backup['manifest']['fassung'] ?? '?', round($backup['bytes'] / 1048576, 1).' MB', $backup['intact'] ? 'ok' : 'PRÜFSUMME FALSCH', ], $this->backup->all(), ); [] === $rows ? $io->writeln('Noch keine Sicherung vorhanden.') : $io->table(['Name', 'Erstellt', 'Fassung', 'Größe', 'Zustand'], $rows); return Command::SUCCESS; } try { $result = $this->backup->create('Konsole'); } catch (InvalidPage $error) { $io->error($error->getMessage()); return Command::FAILURE; } $removed = $this->backup->rotate((int) $input->getOption('keep')); $io->success(sprintf( '%s angelegt: %d Seite(n), %d Fassung(en), %d Mediendatei(en).%s', $result['name'], $result['manifest']['inhalt']['seiten'], $result['manifest']['inhalt']['fassungen'], $result['manifest']['medien']['dateien'], [] === $removed ? '' : ' Entfernt: '.implode(', ', $removed).'.', )); $io->writeln('Nicht enthalten: .env, vendor/ und der Quellcode – die kommen aus dem Repository.'); return Command::SUCCESS; } }