Hi Ryan,

On Mar 13, 2009, at 1:42 AM, Ryan Schmidt wrote:

I have not used "port list" or "port echo" very often.

Now that I'm looking at them, I'm confused about echo's behavior.

I'll try to answer this; the reasons for this are a little subtle. As the author of this stuff, at least I understand the motivations involved.

The ports that may be specified on the command line may be general ("apache"), or more specific ("[email protected]"), or more specific yet (addition of variant specs). So the list of ports we build up includes those various degrees of information.

port tries to be careful not to assume more than it knows. If you just say "port echo zlib", it just knows that you've specified zlib, but not anything else about it.

pseudo-ports, at least in some cases, expand to much more specific information. "port echo installed", for instance, knows exactly which version of apache is installed, and so will expand the pseudo-port to that more specific instance of the apache port. You're thankful for this behavior when you say something like "port uninstall inactive", and rely on the inactive pseudo-port to expand to a specific port and version of the inactive port. Depending on the particular pseudo-port, the version information may relate to the latest version of the port, or a version that is installed.

port is also careful, when doing set operations on ports, to do the right thing in promoting or coalescing this information. If I remember right, for instance, "apache and [email protected]" will resolve to "[email protected]", but "[email protected] and [email protected]" will resolve to the null set. Etc.

That background laid, I'll try to get to the answer. "port echo" really does just tell you all the information this it has about the port specifications you've given. In the case of "port apache" (or "port zlib"), it doesn't know anything else. Where you specified more, or where a pseudo-port supplied more specific information, it has more knowledge, and will report it.

Remember that port echo, itself, doesn't query any database of ports: it just echos what you gave it (including expansions thereof). The pseudo-ports, on the other hand, do hit the database, and so may have supplied more information from there.

Hope that helps.

James



I have zlib installed:

$ port installed zlib
The following ports are currently installed:
 zlib @1.2.3_2+universal (active)

"port list zlib" shows the name, version and category:

$ port list zlib
zlib                           @1.2.3          archivers/zlib

"port echo zlib" shows the name only:

$ port echo zlib
zlib

But "port echo installed" shows the name and version, revision and variants:

$ port echo installed | grep ^zlib
zlib                           @1.2.3_2+universal

Why does "echo" behave differently depending on whether zlib was specified implicitly via the "installed" pseudo-port, or explicitly on the command line?

I guess what's happening is that "installed" is expanding to not only the names of the installed ports but also their version, revision and variants, which I can even fake:

$ port echo zlib @1.0_0+foo+bar
zlib                           @1.0_0+bar+foo


_______________________________________________
macports-dev mailing list
[email protected]
http://lists.macosforge.org/mailman/listinfo.cgi/macports-dev

_______________________________________________
macports-dev mailing list
[email protected]
http://lists.macosforge.org/mailman/listinfo.cgi/macports-dev

Reply via email to