PortGroup directory hierarchy/priority

Joshua Root jmr at macports.org
Tue May 31 19:20:08 PDT 2016


On 2016-6-1 03:34 , Mojca Miklavec wrote:
> On 27 March 2016 at 17:33, Rainer Müller wrote:
>> On 2016-03-27 16:57, René J.V. Bertin wrote:
>>> Can someone please summarise the exact priority rules used in
>>> resolving the file to be included when using a PortGroup statement in
>>> a port?
>>
>> 1. _resources/port1.0/group/*.tcl in ports tree of this port
>> 2. _resources/port1.0/group/*.tcl in default ports tree
>>
>> This is here in the base source:
>>
>> proc PortGroup:
>> https://trac.macports.org/browser/trunk/base/src/port1.0/portutil.tcl?rev=147064#L2561
>>
>> porc getportresourcepath/getdefaultportresourcepath:
>> https://trac.macports.org/browser/trunk/base/src/macports1.0/macports.tcl?rev=147103#L1637
>>
>> The _resource directory is meant to contain files that are specific to
>> this ports tree. This allows local modifications to port groups in a
>> ports tree without influencing other ports trees.
>
> Can you please explain if the following behaviour is intended by
> design or if it is a bug?
>
> "port something portname" works like you describe
> "port something ./[path/to/]portname" uses the default portgroup
>
>
> A concrete example. I modified livecheck in the perl5 PortGroup in the
> local svn checkout. Then I tested the following:
>
> $ cd /path/to/local/checkout
> $ portindex
> $ port -d livecheck perl/p5-b-c # uses *global* resources
> $ port -d livecheck perl/p5-* # uses *global* resources
> $ cd perl
> $ port -d livecheck p5-b-c # uses local resources
> $ port -d livecheck p5-* # uses local resources
> $ port -d livecheck ./p5-b-c # uses *global* resources
> $ cd p5-b-c
> $ port -d livecheck ./ # uses local resources
> $ port -d livecheck # uses local resources
>
> These examples seem somewhat strange to me.

It's more like a limitation of the information that is available when 
you parse an arbitrary Portfile, whether implicitly using the current 
directory or specifying a path. You don't even know the port's name 
until you parse it once. If you're not going via the PortIndex, you 
don't know what repo (if any) it belongs to and thus whether it has any 
local resources. So the default ones get used.

I guess with enough effort you could figure out when some arbitrary path 
is inside a sources.conf repo, but is it worth it when you can easily 
fix the problem by looking up via the index?

Cf. also <https://trac.macports.org/ticket/15186> which is sort of the 
opposite problem.

- Josh


More information about the macports-dev mailing list