[MacPorts] #56437: rev-upgrade ignores -p

MacPorts noreply at macports.org
Sat Sep 21 03:24:20 UTC 2019


#56437: rev-upgrade ignores -p
------------------------+--------------------
  Reporter:  fhgwright  |      Owner:  (none)
      Type:  defect     |     Status:  new
  Priority:  Normal     |  Milestone:
 Component:  base       |    Version:  2.4.3
Resolution:             |   Keywords:
      Port:             |
------------------------+--------------------

Comment (by fhgwright):

 First of all, there is most certainly a "rebuild sequence" with `rev-
 upgrade` - it even tells you that there is when it says "determining
 rebuild order".  This presumably relates to dependencies, since rebuilding
 against a broken dependency may result in a port that's still broken.  The
 issue that this ticket is complaining about is that as soon as any `rev-
 upgrade` rebuild fails, it immediately gives up without trying any others,
 even when `-p` is specified.  Granted, if a dependency rebuild fails, then
 rebuilding any of its dependents may not fix anything even if
 "successful", but it's highly unlikely that that's the reason it stops,
 especially since I've seen cases where it gave up without rebuilding
 something which definitely did *not* depend on the failed-to-rebuild port.

 In some cases, `sudo port -n upgrade --force` of a particular port is able
 to repair its brokenness when rev-upgrade with `-p` gave up without
 trying.  In some cases, it doesn't help, but `sudo port -ns upgrade
 --force` does.  I believe this happens in cases where some dependency is
 unable to rebuild, and thus is stuck at a downlevel version, so a
 precompiled binary linked against the latest version doesn't match, but a
 binary built against the active downlevel dependency is OK.  A smarter
 `rev-upgrade` might need to recognize such cases and force a rebuild from
 source, but that's a different issue than this ticket.

 What's even more bizarre is that there are cases where even a successful
 rebuild from source *still* reports as broken.  E.g., even after being
 masochistic enough to rebuild gcc47 from source, I *still* see it listed
 as broken.  My best guess is that this involves brokenness that's "pulled
 in" from a dependency during a rebuild in a way that's not repaired by
 rebuilding the dependent.  Unfortunately, `rev-upgrade` is woefully
 underinformative, even with `-v`.

 I'm aware of `--no-rev-upgrade`, which is useful in cases where you're
 doing lots of port building and don't want to keep repeating "Scanning
 binaries for linking errors" a zillion times, but that's actually the
 exact opposite of what's wanted here, which is to get a maximally
 effective `rev-upgrade` rather than a disabled `rev-upgrade`.

 Disabling `rev-upgrade` altogether seems like a mistake, since that's
 simply sweeping real problems under the rug.  And the whole C++ library
 thing may create more situations where `rev-upgrade` matters.

-- 
Ticket URL: <https://trac.macports.org/ticket/56437#comment:5>
MacPorts <https://www.macports.org/>
Ports system for macOS


More information about the macports-tickets mailing list