RPM %trigger* is broken:
%triggerin -- %{name} < %{version}-%{release}is always triggered on upgrade · Issue #209 · rpm-software-management/rpm
rpm-software-management/rpm#209
RPM %trigger* is broken:
%triggerin -- %{name} < %{version}-%{release} is always triggered on upgrade · Issue #209 · rpm-software-management/rpm| %pre | |
| if %{ver_cmp_opposite < 1.2.3-222.new}; then | |
| echo "Upgrade from $(%{ver_opposite}) (< 1.2.3-222.new)" | |
| fi | |
| exit 0 | |
| %postun | |
| if %{ver_cmp_opposite < 1.2.3-222.new}; then | |
| echo "Downgrade to $(%{ver_opposite}) (< 1.2.3-222.new)" | |
| fi | |
| exit 0 |
| ## In %pre, %post of the installing package on upgrade or downgrade: | |
| ## Print version string of the uninstalling package | |
| ## In %preun, %postun of the uninstalling package on upgrade or downgrade: | |
| ## Print version string of the installing package | |
| %ver_opposite(n:) \ | |
| LC_ALL=C \\\ | |
| rpm \\\ | |
| -q \\\ | |
| --queryformat '%%|epoch?{%%{epoch}:}|%%{version}-%%{release}\\n' \\\ | |
| %{!-n:%{name}}%{-n*} \\\ | |
| |fgrep -v '%{?epoch:%{epoch}:}%{version}-%{release}' \\\ | |
| |grep -v ' is not installed$' \\\ | |
| || : | |
| ## Compare 2 version strings with an operator | |
| %ver_cmp() \ | |
| %{__python} -c '\ | |
| from __future__ import print_function\ | |
| import sys\ | |
| import rpm\ | |
| \ | |
| \ | |
| def stringToEVR(verstring):\ | |
| i = verstring.find(":")\ | |
| if i == -1:\ | |
| epoch = None\ | |
| else:\ | |
| epoch = verstring[:i]\ | |
| i += 1\ | |
| j = verstring.find("-", i)\ | |
| if j == -1:\ | |
| version = verstring[i:]\ | |
| release = None\ | |
| else:\ | |
| version = verstring[i:j]\ | |
| release = verstring[j + 1:]\ | |
| return (epoch, version, release)\ | |
| \ | |
| \ | |
| v1 = sys.argv[1]\ | |
| operator = sys.argv[2]\ | |
| v2 = sys.argv[3]\ | |
| rc = rpm.labelCompare(stringToEVR(v1), stringToEVR(v2))\ | |
| sys.exit(0 if operator == ("<", "==", ">")[rc + 1] else 1)\ | |
| ' | |
| ## In %pre, %post on upgrade or downgrade: | |
| ## Compare the uninstalling package version string and the specified one | |
| ## In %preun, %postun on upgrade or downgrade: | |
| ## Compare the installing package version string and the specified one | |
| %ver_cmp_opposite(n:) \ | |
| (\ | |
| ver_opposite=$(%{expand:%%{ver_opposite %{-n*}}})\ | |
| [[ -z $ver_opposite ]] && exit 1\ | |
| %{ver_cmp} "$ver_opposite" "%{1}" "%{2}"\ | |
| ) |