From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: Michael Shigorin To: devel-distro@lists.altlinux.org Date: Mon, 22 Nov 2021 21:45:16 +0300 Message-Id: <20211122184518.10821-3-mike@altlinux.org> X-Mailer: git-send-email 2.25.4 In-Reply-To: <20211122184518.10821-1-mike@altlinux.org> References: <20211122182425.GH24863@imap.altlinux.org> <20211122184518.10821-1-mike@altlinux.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Subject: [devel-distro] [PATCH 2/4] bin/archdep-filter: implement multi-!matching too X-BeenThere: devel-distro@lists.altlinux.org X-Mailman-Version: 2.1.12 Precedence: list Reply-To: Distributions development List-Id: Distributions development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 22 Nov 2021 18:45:33 -0000 Archived-At: List-Archive: 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@i586 i586-\1@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@X86,aarch64,ppc64le,mipsel + java-11-openjdk@!E2K,mipsel Для преобразования можно воспользоваться следующей командой: -- 2.33.0