d5acff5 Add a form of Obsoletes with a caret to simplify removal of old packages

Authored and Committed by zbyszek 2 years ago
    Add a form of Obsoletes with a caret to simplify removal of old packages
    
    The requirement to use a specific version+release, but bumped, is something that
    is annoying (because we need to look up what releases have been built in various
    branches of Fedora), and something that people get wrong quite often.
    (E.g. https://src.fedoraproject.org/rpms/fedora-release/c/026814f9c79336538459b55c91104375df594556
    is one random example that I saw this morning and which pushed me to write this
    patch.)
    
    With a caret we can skip this complicated logic. In the new scheme, the last
    version v suffixed with "^" is used. The release part is ignored.
    v^ sorts higher than all releases like v-1, v-33.f34, etc. If the package is
    unretired, if the unretired version is higher, then things just work. If the
    unretired version is unchanged, than the new package would have to get a fake
    version bump like v^. (For example we had hello-5.1.1-11.fc34 as the last
    version built, it gets retired, we have 'Obsoletes:hello < 5.1.1^'. If it is
    unretired, the version could be either hello-5.1.2-1.fc35, or hello-5.1.1^-1.fc35.)
    Since the scenario of unretirement with the exact same version is fairly
    unlikely, I think this solution is acceptable.
    
    I downloaded the git-seed-latest repo and went over retirement+unretirment cases.
    It turns out that we resurrect packages with the same version quite often,
    much more often than I expected. Thus the simplified form can only be used
    in some specific cases. But when it is applicable, it is quite nice, so
    advertise it as an option.
    
    While at it, I moved the discussion of Epoch higher, because it relevant to for
    $provEVR, and simplified the text a bit.
    
    `<=` doesn't work as expected, because it's defeated by the `%{dist}` suffix. Use `<`.