Skip to content

Allow overriding a component which is included via dependency (PACMAN-1198) #99

@projectgus

Description

@projectgus

Related area

Components

Is your feature request related to a problem?

Recently in MicroPython we had the situation:

  • We include espressif/esp_tinyusb component in our project via idf_component.yml.
  • espressif/esp_tinyusb component includes the espressif/tinyusb component as a dependency.
  • We needed to apply a "hot fix" by overriding the version of the espressif/tinyusb component (specifically, redirecting it to a branch in a github repo).

Our idf_component.yml looks something like:

dependencies:
  espressif/esp_tinyusb:
    version: "~1.7.6"

I tried explicitly changing it to something like:

dependencies:
  espressif/esp_tinyusb:
    version: "~1.7.6"
  espressif/tinyusb:
    git: https://github.com/micropython/tinyusb-espressif.git
    version: cherrypick/dwc2_zlp_fix

Component manager sees both components, but ultimately the version added as a dependency of esp_tinyusb replaces the first one (without any error or warning printed):

NOTICE: Processing 5 dependencies:
NOTICE: [1/5] espressif/esp_tinyusb (1.7.6~1)
NOTICE: [2/5] espressif/mdns (1.1.0)
NOTICE: [3/5] espressif/tinyusb (e4c0ec3caab3d9c25374de7047653b9ced8f14ff)
NOTICE: [4/5] espressif/tinyusb (0.18.0~6)
NOTICE: [5/5] idf (5.5.1)

Describe the solution you'd like

It'd be very helpful if the logic of override_path could be generalised to allow any dependency in the project to be overridden by the top level manifest. i.e. something like:

  espressif/esp_tinyusb:
    version: "~1.7.6"
  espressif/tinyusb:
    override: true   # New flag, means that any `espressif/tinyusb` component in the project will be replaced with this one
    git: https://github.com/micropython/tinyusb-espressif.git
    version: cherrypick/dwc2_zlp_fix

Describe alternatives you've considered

The only way forward that I can see would be to also make a repo with a fork of esp_tinyusb component, change it's tinyusb dependency, and then have my project manifest point to that.

I didn't try this as it was too fiddly.

Additional context

No response

I have checked existing list of Feature requests and I have provided enough information.

  • I confirm I have checked existing list of Feature requests and I have provided enough information.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions