• 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