Shreevatsa R wrote:
Hi MacPorts developers,
Hi,
I was planning to write some non-trivial code before posting to this list, but I thought I would first check if I was doing anything stupid.
[snip]
So deciding that at least knowing all dependencies of a port beforehand would help, I tried writing a command for recursive dependencies. The proc action_deps does a lot of stuff, and it's not easy getting just the list of dependencies with no extra output, so I wrote my own "bare" proc that does the actual dependencies, etc., and rdeps that recursively calls it:
Yes, a --pretend feature is on the wish-list since a long time and would be really nice to have.
[snip]
And "rdeps action_rdeps" in action_array. Yeah, it uses a global variable to avoid printing the same ports again, but it works: ~$ port rdeps subversion expat neon gettext libiconv gperf ncurses ncursesw openssl zlib apr apr-util db44 sqlite3 gawk gmake readline
This looks good. Of course the output could be a lot better... And how are you dealing with ports appearing multiple times? E.g. portA depends on portB and portC, and these two depend on portD. If portD depends on a lot of other ports you get a long list - twice. Don't know if that can be improved in the ascii output...
But I don't like introducing a new command just for this. This should be port deps --follow-deps as discussed earlier.
What I also would like (and I think Ryan would like it, too ;-)) is the possibility to output the dependency tree in the dot language for graphviz. So we could use something like this to get a nice graph:
port deps --follow-deps --dot | dot -o depgraph.png Would also be cool to have such graphs on the website.
This is not great code, but it does what I want. (It is also the only Tcl I have ever written, so please tell me what I'm doing stupidly.) I was planning to do the same for variants (because I install something and later discover I should have installed one of its dependencies with a different variant), and for uninstall (because it is a real pain to uninstall ports).
Not sure what a mean with "variants". port deps currently does not take dependencies into account, because it is reading the PortIndex only. This makes it probably faster but this feature is missing. So to solve this one would have to [mportopen] all ports and their dependencies to get the dependencies list modified by variants.
I don't quite understand why you call uninstalling ports a "real pain". What is the problem with that?
More specifically, I was planning to (1) make a general (simple) function for getting a specific port's "tree of dependencies" (and/or tree of dependents) and then something to act on it. Uninstall would then be trivial. (2) Also, putting something to return the list of dependencies of a port in the MacPorts API itself. (3) Also, looking at action_deps, it seems to share a lot in common with other functions (searching for ports, etc.), so that part can be cleaned up...
Sounds like a good plan! Rainer _______________________________________________ macports-dev mailing list macports-dev@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo/macports-dev