Hello,

As Sid Hayn raised today on #gentoo-portage, it would be useful to
finally have portage able to fetch updates from VCS-es independently
of src_unpack(). This could be used, for example, on machines
temporarily connected to the network -- one would then fetch files
while connected to the network, and perform the updates later.

There are a few ways how we could handle that but the cleanest and most
universal one seems to be defining a src_fetch() phase function
in a future EAPI.

In the EAPIs supporting src_fetch(), that phase function would be used
by PM when requesting the files to be fetched. A default_src_fetch()
will be declared as well, providing implementation-defined code
fetching files like they are fetched now. Older EAPIs will simply
always use that default.

The phase function would be disjoint from the normal merge process,
much like pkg_pretend(). In portage, it will be called as 'portage'
user if FEATURES=userfetch is enabled.

VCS eclasses supporting separated fetching would define two phase
functions:
- src_fetch() which would be responsible for fetching updates,
- src_unpack() which would be responsible for checking out the source
  to work directory.

The remaining issue is handling dependencies on the tools necessary to
do fetching. For default_src_fetch(), we can assume that the package
manager provides the necessary tools. For custom src_fetch(), we would
need either to:

1) require satisfying whole DEPEND when fetching -- probably pointless,
   as it will make --fetchonly almost impossible when doing initial
   installs;

2) introduce a new dependency type (please do not get into details how
   we do it -- we will discuss that another time, at the moment please
   just keep it as 'new dependency type') -- and we probably end up
   having a switch for --fetchonly without installing deps (thus
   omitting packages where they are not satisfied), and with deps;

3) [ugly!] assume that src_fetch() should check for its deps and fail
   if they are not satisfied. If that's mostly for live ebuilds, it may
   be acceptable. Then the package manager will just have one 'fetch
   failed' on --fetchonly (or early pre-fetch), and it will have to
   invoke src_fetch() after satisfying the deps, before src_unpack().

What do you think? What are your ideas, suggestions?

-- 
Best regards,
Michał Górny

Attachment: signature.asc
Description: PGP signature

Reply via email to