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 `<`.