#31 RFE: Recursive build-time dependency tracking
Opened 7 years ago by psabata. Modified 7 years ago

Working on our first base-runtime prototype and bootstrapping the modularity infrastructure we defined a huge self-hosted module (in modularity terminology) to get things started. Since our modules reference SRPM names and we build all the packages from source, we had an idea it would be useful to track complete sets of build dependencies so that we could update and extend our modules as necessary.

I think Insim might be the perfect tool for this task.


If I understand this correctly, it would mean doing something like:

input(srpm_names) # initial set of source package names, provided by user

srpms_todo = find_latest_builds(srpm_names)
srpms_done = set()
rpms_done = set()

while not_empty(srpms_todo):
    rpms_todo = map_srpms_to_rpms(srpms_todo) - rpms_done
    rpms_todo += resolve_deps(rpms_todo) - rpms_done
    rpms_todo += resolve_deps(get_build_requires(srpms_todo)) - rpms_done
    srpms_done += srpms_todo
    rpms_done += rpms_todo
    srpms_todo = map_rpms_to_srpms(rpms_todo)

output(srpms_done)

All that can be done using only repodata from Koji, but getting build-requires would need either access to SRPM repodata, or using Koji XML-RPC. This is a problem because Insim currently doesn't have any Koji integration.

@psabata Do you think that using SRPM repodata from rawhide composes would be acceptable? Or do you need faster reaction to changes in package build-requires?

Ah, missed the request. I get a little lost in the example code :)

We would like to, for a given set of SRPMs, get a package list of their runtime and build dependencies, their build dependencies' runtime dependencies, build dependencies of all these components and their runtime dependencies again and so on, recursively. Stephen Gallagher's whatpkg script (https://github.com/sgallagher/whatpkgs) does just that. The resulting set should, provided there are no packaging errors, define a self-hosting package set needed to build & run the input components and their entire dependency chain.

We would like to use Insim for tracking the [build] dependency chain changes over time.

And we would like to have this not just for rawhide but also for branched releases, starting with f25.

Does that make sense? :)

Login to comment on this ticket.

Metadata