• Michael Shigorin's avatar
    bin/archdep-filter: implement multi-!matching too · 1b5b309b
    Michael Shigorin authored
    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).
    1b5b309b
archdep.txt 3.04 KB