[CmdletBinding(SupportsShouldProcess)]param( [ArgumentCompleter({Invoke-Command -ScriptBlock $_DockerComposeDirsCompleter -ArgumentList $args})] [string[]]$ProjectPath=@($PWD), [switch]$Force, [string[]]$AdditionalFiles ) $local:EditCandidates = @('docker-compose.###','.base.docker-compose.###','secrets.env') $local:EditBonus = @('Dockerfile', '.env', '*.env') $local:editFiles = @() foreach( $local:ext in @('.yml', '.yaml') ) { $local:rawEditCandidates = $EditCandidates | ForEach-Object { $_ -replace '\.###',$ext } foreach( $local:fileName in $rawEditCandidates ) { foreach( $local:path in $ProjectPath ) { $local:testPath = Join-Path $path $fileName if( $Force -or $(Test-Path $testPath) ) { $editFiles += $testPath | Get-Path $editFiles += Get-ChildItem $(Join-Path $path '*') -Include $EditBonus -Depth 1 | Select-Object -ExpandProperty FullName } } } if( $editFiles ) { break } } $AdditionalFiles = $AdditionalFiles | Where-Object { $_ } | ForEach-Object { $_ -replace '^#lsi$','#/*linuxserver.yml' -replace '^#tr?$','#/*traefik.yml' -replace '^#/',"$env:SZ_DOCKER_SYSTEM_PATH" } | Get-ChildItem -Force | Select-Object -ExpandProperty FullName $local:FinalEditList = $editFiles | Where-Object {$_} | Sort-Object { $local:n = [System.IO.Path]::GetFileName($_) $local:sorder = "$( if( $n[0] -eq '.' ) { "2" } elseif( $n -match 'docker-compose\.y' ) { "1" } else { "9" } )$n" Write-Verbose "sorder($n)=$sorder" $local:sorder = Join-Path $([System.IO.Path]::GetDirectoryName($_)) $sorder $sorder } $FinalEditList = (@() + $FinalEditList + @() + $AdditionalFiles) | Select-Object -Unique Write-Verbose "`$FinalEditList = `n$($FinalEditList | Out-String)" Edit-TextFile $FinalEditList dcc -ProjectPath $ProjectPath -TestOnly