diff --git a/src/MBO/SatisGitlab/Command/GitlabToConfigCommand.php b/src/MBO/SatisGitlab/Command/GitlabToConfigCommand.php index a8c24ce..1e4a36a 100644 --- a/src/MBO/SatisGitlab/Command/GitlabToConfigCommand.php +++ b/src/MBO/SatisGitlab/Command/GitlabToConfigCommand.php @@ -20,6 +20,7 @@ use MBO\SatisGitlab\Git\GitlabProject; use MBO\SatisGitlab\Filter\FilterCollection; +use MBO\SatisGitlab\Filter\GitlabNamespaceFilter; use MBO\SatisGitlab\Filter\IgnoreRegexpFilter; use MBO\SatisGitlab\Filter\IncludeIfHasFileFilter; use MBO\SatisGitlab\Filter\ProjectTypeFilter; @@ -63,6 +64,7 @@ protected function configure() { ->addOption('ignore', 'i', InputOption::VALUE_REQUIRED, 'ignore project according to a regexp, for ex : "(^phpstorm|^typo3\/library)"', null) ->addOption('include-if-has-file',null,InputOption::VALUE_REQUIRED, 'include in satis config if project contains a given file, for ex : ".satisinclude"', null) ->addOption('project-type',null,InputOption::VALUE_REQUIRED, 'include in satis config if project is of a specified type, for ex : "library"', null) + ->addOption('gitlab-groups',null,InputOption::VALUE_REQUIRED, 'include in satis config if gitlab project namespace is in the list, for ex : "2,Diaspora"', null) /* * satis config generation options */ @@ -131,6 +133,12 @@ protected function execute(InputInterface $input, OutputInterface $output) { $logger )); } + /* project-type option */ + if ( ! empty($input->getOption('gitlab-groups')) ){ + $filterCollection->addFilter(new GitlabNamespaceFilter( + $input->getOption('gitlab-groups') + )); + } /* * Create configuration builder diff --git a/src/MBO/SatisGitlab/Filter/GitlabNamespaceFilter.php b/src/MBO/SatisGitlab/Filter/GitlabNamespaceFilter.php new file mode 100644 index 0000000..c8eefb7 --- /dev/null +++ b/src/MBO/SatisGitlab/Filter/GitlabNamespaceFilter.php @@ -0,0 +1,64 @@ +groups = explode(',',strtolower($groups)); + } + + /** + * {@inheritDoc} + */ + public function isAccepted(ProjectInterface $project) + { + $project_info = $project->getRawMetadata(); + if (isset($project_info['namespace'])) { + + // Extra data from namespace to patch on. + $valid_keys = [ + 'name' => 'name', + 'id' => 'id', + ]; + $namespace_info = array_intersect_key($project_info['namespace'], $valid_keys); + $namespace_info = array_map('strtolower', $namespace_info); + + if (!empty($namespace_info) && !empty(array_intersect($namespace_info, $this->groups))) { + // Accept any package with a permitted namespace name or id. + return TRUE; + } + } + return FALSE; + } +}