I just tried some upgrades between different versions of redhat by just using rpm. E.g. I upgraded a 7.3 to rpm-4.1 and then tried to upgrade the remaining packages. I noted that if you pass a large number of rpms it sometimes happens that it fails to upgrade the packages since it ends up in a loop (warning: LOOP:) but the exit code is still 0.
A dependency loop is not a failure, rpm-4.x undertakes appropriate corrective action, ignoring the Requires: in the loop, honoring the PreReq:'s. The only side effect is that the partial order of the packages in the transaction set changes, as the loop is detected late, causing packages in the loop to be emitted later than they would be in the absence of the loop.
Sorry if my report was unclear. There are some dependency issues and rpm fails with unresolved dependencies, but the exit code is still 0. Unfortunately, I don't know how to reproduce this, the only thing in common is the "loop" error. But this might be just coincidence.
If you want me to dig out an erroneous exit code, I'm gonna need a reproducible test case that shows the problem.
OK. I just managed to reproduce this with rpm-4.0.4 I took a fully up2date 7.3 system (with rpm-4.0.4-7x.18) and tried to upgrade 256 packages from redhat 8.0. I'll add the command line plus the rpm output as attachment. In this case it will print an error about failed dependencies (and it will not upgrade a single rpm) but exit with 0.
Created attachment 90464 [details] rpm command line plus output
I can no longer reproduce this with rpm-4.1.1.