Я нашел решение Я должен был добавить «требовать все гранты» в файл конфигурации apache
с некоторыми улучшениями и дедупликацией двух частей в одну.
$2 ~ /\.puml$/ && $2 !~ /(theme|config)\.puml$/ \
{ if($1 !~ /^D$/) { result1= (result1==""? "" : result1 " ") $2 } else {
split($2, fn, ".")
result2=(result2==""? "" : result2 " ") fn[1] ".svg"
}
}
END {
printf "::set-output name=files::%s\n::warning::%s\n", result1, result1
printf "::set-output name=files::%s\n::warning::%s\n", result2, result2
}
Итак, у вас есть один ввод (или файл, результат git)
A .config/plantuml/theme.puml
M .github/workflows/main.yml
M .github/workflows/plantuml.yml
M README.md
A app/gradle.lockfile
A authn/gradle.lockfile
A docs/README.md
A docs/domain-model/README.md
A docs/domain-model/user.md
A docs/domain-model/user.puml
A docs/domain-model/foo.puml
M settings.gradle.kts
D user.puml
D foo.puml
и два awk-скрипта, которые выполняют похожие (, но разные )действия на этом входе.
Я предполагаю, что ваша цель состоит в том, чтобы (как можно сократить )действия этих скриптов.
Первые две строки в точности равны:
$2 ~ /\.puml$/ &&
$2 !~ /(theme|config)\.puml$/
После этого один скрипт выполняет действие над $2
, являющимся , а не D
(. Я предполагаю, что это означает удаление ). Другой сценарий выполняет действие над дополнением, $2
равно D
. Это может быть закодировано как:
{ if ( $1 ~ /^[D]$/ ) then { print "Deleted" } else { print "Changed" } }
Или, если вам нужен более детальный выбор:
{ if ( $1 ~ /^[D]$/ ) then { print "Deleted" }
if ( $1 ~ /^[MA]$/ ) then { print "Changed" } }
Хранение каждого файла в одном массиве на самом деле не требуется, поскольку вам нужен список файлов, разделенных пробелами.
Это можно сделать внутри цикла для каждой входной строки (меньше памяти, быстрее):
{ if ( $1 ~ /^[D]$/ ) then { deleted = deleted " " $2 }
if ( $1 ~ /^[A]$/ ) then { changed = changed " " $2 } }
Конечно, совпадение может быть точной строкой вместо регулярного выражения (быстрее )и вам также нужно извлечь имя файла без расширения в измененном регистре:
{ if ( $1 == "D" ) then { deleted = deleted " " $2 }
if ( $1 == "A" ) then { sub( /\.[^.]+$/, "", $2 ) ;
changed = changed " " $2 ".svg"
}
}
Сценарий оболочки для проверки всех идей может быть:
#!/bin/bash
a='\
A .config/plantuml/theme.puml
M .github/workflows/main.yml
M .github/workflows/plantuml.yml
M README.md
A app/gradle.lockfile
A authn/gradle.lockfile
A docs/README.md
A docs/domain-model/README.md
A docs/domain-model/user.md
A docs/domain-model/user.puml
A docs/domain-model/foo.puml
M settings.gradle.kts
D user.puml
D foo.puml
'
printf '%s\n' "$a" | awk '
$2 ~ /\.puml$/ &&
$2 !~ /(theme|config)\.puml$/ {
if ( $1 == "D" ) { deleted = deleted " " $2 }
if ( $1 == "A" ) { sub(/\.[^.]+$/, "", $2);
changed = changed " " $2 ".svg"
}
}
END {
printf "::set-output name=removed-files::%s\n", deleted
printf "::warning::removed-files %s\n", deleted
printf "::set-output name=changed-files::%s\n", changed
printf "::warning::changed-files %s\n", changed
}
'