[devel-distro] [PATCH 2/4] bin/archdep-filter: implement multi-!matching too
Michael Shigorin
mike at altlinux.org
Mon Nov 22 21:45:16 MSK 2021
This has been clearly lacking while making the previous commit
but the implementation isn't that clear so let it be a separate
step.
The problem requiring the change in subsequent processors
is that these relied upon "@arch" as a flag to be inspected,
and "pkg@!arch1,arch2" on arch2 needs to take out *all* of that
fragment *including* arch1 mention as well.
Part of the cause is difference in handling: "positive" multi-match
would explode its "client" line into multiple lines to filter down
the pipeline, while "negative" multi-match *has* to keep that line
on a similarly single line (otherwise we'd end up with N-1 of those
slipping past the filter for particular architecture thus defeating
the whole purpose of "negative" matching semantics):
$ echo 'pkg@!E2K,mipsel,riscv64' |
sed -r ':loop; s/^((([^@]+@!)[^,]+)+),([a-zA-Z0-9_]+)/\1@!\4/; t loop'
pkg@!E2K@!mipsel@!riscv64
I've tried my best to test this specific change but it still might
introduce a regression in some corner case; feel free to report;
looks like there's a space for improvement in m-p's automated
tests department as well.
So now we can do:
pkg@!ARCHES1,ARCHES2,arch3,arch4
and have pkg excluded on arches mentioned; the previous approach
could only offer explicit whitelists (not that it was entirely
wrong but then again, we have both ExclusiveArch and ExcludeArch
rpmtags in our spec files).
---
bin/archdep-filter | 11 ++++++-----
doc/archdep.txt | 3 ++-
2 files changed, 8 insertions(+), 6 deletions(-)
diff --git a/bin/archdep-filter b/bin/archdep-filter
index 58cd076e9..674c2e1cc 100755
--- a/bin/archdep-filter
+++ b/bin/archdep-filter
@@ -34,13 +34,14 @@ esac
# NB: pipe runs in parallel => faster than -e -e
cat ${f:+"$f"} |
+sed -r ':loop; s/^((([^@]+@!)[^,]+)+),([a-zA-Z0-9_]+)/\1@!\4/; t loop' |
sed -r ':loop; s/^((([^@]+@)[^,]+)+),([a-zA-Z0-9_]+)/\1\n\3\4/; t loop' |
-sed -rn "s/\<([^@ ]*)\>|\<([^@ ]*)@$A\>/\1\2/pg" |
-sed -rn "s/\<([^@ ]*)\>|\<[^@ ]*@\!$A\> */\1/pg" |
+sed -rn "s/\<([^@ ]*)\>|\<([^@ ]*)@$A\>[^ ]*\>/\1\2/pg" |
+sed -rn "s/\<([^@ ]*)\>|\<[^@ ]*@\!$A\>[^ ]*\> */\1/pg" |
sed -r "s/\<([^@ ]*)@IA32\>/\1 at i586 i586-\1 at x86_64/g" |
-sed -rn "s/\<([^@ ]*)\>|\<([^@ ]*)@$a\>/\1\2/pg" |
-sed -rn "s/\<([^@ ]*)\>|\<[^@ ]*@\!$a\> */\1/pg" |
-sed -r "s/\<([^@ ]*)@\![^@ ]+\>/\1/g" |
+sed -rn "s/\<([^@ ]*)\>|\<([^@ ]*)@$a\>[^ ]*\>/\1\2/pg" |
+sed -rn "s/\<([^@ ]*)\>|\<[^ ]*@\!$a\>[^ ]*\> */\1/pg" |
+sed -r "s/\<([^@ ]*)@\![^ ]+\>/\1/g" |
sed -r "s/\<([^@ ]*)@[^@ ]+\> *//g" |
sed -r "s/^ +//;s/ +$//" |
if [ -n "$f" ]; then
diff --git a/doc/archdep.txt b/doc/archdep.txt
index d1a1c3e91..845e6acdf 100644
--- a/doc/archdep.txt
+++ b/doc/archdep.txt
@@ -49,9 +49,10 @@ ARM (armh или aarch64), а также выборка "для любой ар
(например, @!E2K, или "@!ARM).
С версии 1.4.21 поддерживается перечисление архитектур через запятую
-после "@":
+после "@" или "@!":
LibreOffice-still at X86,aarch64,ppc64le,mipsel
+ java-11-openjdk@!E2K,mipsel
Для преобразования можно воспользоваться следующей командой:
--
2.33.0
More information about the devel-distro
mailing list