Ticket #1086 (closed defect: fixed)

Opened 8 years ago

Last modified 8 years ago

resolver always applies strong self blocks to self

Reported by: uzytkownik Owned by:
Priority: Sometime Milestone:
Component: clients/cave Version: 0.58.0
Keywords: Cc:
Blocked By: Blocking:
Distribution: Gentoo

Description

From recent gnome overlay there is dev-libs/libgweather-2.30.3-r200:2 with

PDEPEND="dev-libs/libgweather:3"

And libgweather-2.91.0:3

RDEPEND="!!<dev-libs/libgweather-2.30.3-r200"
DEPEND="!!<dev-libs/libgweather-2.30.3-r200"

Cave states that:

u   dev-libs/libgweather:2::gnome (formerly from gentoo) 2.30.3-r200 to ::installed replacing 2.30.3
    doc python build_options: -optional_tests split strip -trace -preserve_work
    Reasons: target, !!<dev-libs/libgweather-2.30.3-r200 from dev-libs/libgweather
    7.10 MBytes to download

Total: 1 upgrades, 7.10 MBytes to download

I cannot provide a legal ordering for the following:

s   dev-libs/libgweather:3::gnome 2.91.0 to ::installed [cycle 1]
    "Library to access weather information from online services"
    doc introspection build_options: -optional_tests split strip -trace -preserve_work
    Reasons: !!<dev-libs/libgweather-2.30.3-r200 from dev-libs/libgweather, dev-libs/libgweather, gnome-base/gnome-applets, 2 more
    Self dependent (unsolvable)

Despite the legal ordering:

  • Upgrade dev-libs/libgweather:2 to 2.30.3-r200
  • Install dev-libs/libgweather:3

Change History

comment:1 Changed 8 years ago by uzytkownik

  • Summary changed from cave canno provide legal ordering even if there is one to cave cannot provide legal ordering even if there is one

comment:2 Changed 8 years ago by ciaranm

--explain libgweather please?

comment:3 Changed 8 years ago by uzytkownik

Explaining requested decisions:

For dev-libs/libgweather:2::(install_to_slash):
    The following constraints were in action:
      * dev-libs/libgweather:2, never using existing, installing to /
        Because of target
      * !!<dev-libs/libgweather-2.30.3-r200, use existing if possible, installing to /
        Because of !!<dev-libs/libgweather-2.30.3-r200 from dev-libs/libgweather-2.91.0:3::gnome
      * !!<dev-libs/libgweather-2.30.3-r200, use existing if possible, installing to /
        Because of !!<dev-libs/libgweather-2.30.3-r200 from dev-libs/libgweather-2.91.0:3::gnome
    The decision made was:
        Use origin ID dev-libs/libgweather-2.30.3-r200:2::gnome
        Install to repository installed
            Replacing dev-libs/libgweather-2.30.3:2::installed
For dev-libs/libgweather:3::(install_to_slash):
    The following constraints were in action:
      * dev-libs/libgweather:3, use existing if possible, installing to /
        Because of dev-libs/libgweather:3 from dev-libs/libgweather-2.30.3-r200:2::gnome, key 'Post dependencies', labelled 'PDEPEND'
      * !!<dev-libs/libgweather-2.30.3-r200, use existing if possible, installing to /
        Because of !!<dev-libs/libgweather-2.30.3-r200 from dev-libs/libgweather-2.91.0:3::gnome
      * !!<dev-libs/libgweather-2.30.3-r200, use existing if possible, installing to /
        Because of !!<dev-libs/libgweather-2.30.3-r200 from dev-libs/libgweather-2.91.0:3::gnome
      * >=dev-libs/libgweather-2.22.1, use existing if possible, installing to /
        Because of >=dev-libs/libgweather-2.22.1 from gnome-base/gnome-applets-2.32.1.1:2::installed, key 'Run dependencies', labelled 'RDEPEND'
      * >=dev-libs/libgweather-2.27.90, use existing if possible, installing to /
        Because of >=dev-libs/libgweather-2.27.90 from gnome-base/gnome-panel-2.32.1:0::installed, key 'Run dependencies', labelled 'RDEPEND'
      * >=dev-libs/libgweather-2.25.4, use existing if possible, installing to /
        Because of >=dev-libs/libgweather-2.25.4 from gnome-extra/evolution-data-server-2.32.1-r1:0::installed, key 'Run dependencies', labelled 'RDEPEND', conditions 'weather?'
    The decision made was:
        Use origin ID dev-libs/libgweather-2.91.0:3::gnome
        Install to repository installed
For dev-libs/libgweather:0::(install_to_slash):
    The following constraints were in action:
      * !!<dev-libs/libgweather-2.30.3-r200, use existing if possible, installing to /
        Because of !!<dev-libs/libgweather-2.30.3-r200 from dev-libs/libgweather-2.91.0:3::gnome
      * !!<dev-libs/libgweather-2.30.3-r200, use existing if possible, installing to /
        Because of !!<dev-libs/libgweather-2.30.3-r200 from dev-libs/libgweather-2.91.0:3::gnome
    The decision made was:
        Do not do anything

comment:4 Changed 8 years ago by ciaranm

  • Summary changed from cave cannot provide legal ordering even if there is one to resolver always applies strong self blocks to self

Oh, I think I know what this is. We map blockers to every slot, and then we treat !! blocks as strong even if they're not met.

comment:5 Changed 8 years ago by ciaranm

Hrm, actually, it's not that simple... Unless I'm misreading the code, it'll only do this if there's something matching the block in the slot in question. Could you give me cave show -0 libgweather please?

comment:6 Changed 8 years ago by uzytkownik

* dev-libs/libgweather
    ::gentoo                  2.30.2 2.30.3 {:2}
    ::gnome                   2.30.3-r200 {:2} 2.91.0* (9999)KU {:3}
    ::gnome-live              (9999)RU(~) {:0}
    ::installed               2.30.3-r200 {:2} 2.91.0 {:3}
    ::layman                  (2.30.2 (in ::multilib))X (2.30.2-r1 (in ::wish))X (2.30.3 (in ::multilib))X (2.91.0 (in ::keruspe))X {:0}

The installed version was 2.30.3 only

comment:7 Changed 8 years ago by ciaranm

Oooooh. I see what's going on here. We're picking the slots for a non-:slot-restricting blocker using:

        const std::shared_ptr<const PackageIDSequence> ids((*_imp->env)[selection::BestVersionInEachSlot(
                    generator::Package(*spec.blocking().package_ptr())
                    )]);

and ignoring the version restrictions.

I think we've got two options here then. We can change that to only apply to slots that might work, but then that would be wrong if someone did something annoying and confusing with slots. Or we could change the _already_met check to be much smarter (which is slightly non-trivial, since it's currently part of the DependencyReason?, which is shared between resolvents and which is used to work out which resolvents matter).

comment:8 Changed 8 years ago by ciaranm

  • Status changed from new to closed
  • Resolution set to fixed
Note: See TracTickets for help on using tickets.