# @summary Manages a single cgit filter. # @param filtername # Target filter. # @param source # Source file of filter, mutually exclusive with content. # @param content # Contents of filter, mutually exclusive with source. # @param file_props # Passed along to the file resource. Useful for checksums. # @param type # If it's a lua or exec filter. Inferred from source filename. define cgit::filter ( Cgit::Filter_types $filtername = $name, Optional[Variant[String, Array[String]]] $source = undef, Optional[String] $content = undef, Hash $file_props = {}, Enum['lua', 'exec'] $type = $source ? { Undef => fail("Type must be explictly set when source isn't used."), Array => fail("Type can't be inferred from arrays."), String => stdlib::extname($source) ? { '.lua' => 'lua', default => 'exec', }, } ) { include cgit::filter_setup $dest = "${cgit::filterpath}/${filtername}-filter" $mode = $type ? { 'lua' => '0444', 'exec' => '0555', } file { $dest: ensure => file, mode => $mode, source => $source, content => $content, * => $file_props, } concat::fragment { "cgit config filter ${filtername}": target => $cgit::cgitrc, content => "${filtername}-filter=${type}:${dest}\n", require => File[$dest], } }