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