I understand the basic concepts, but are there any special algorithms used or maybe some blogs, papers or even books on the subject for someone building their own system? There seems to be very little information out there on actually implementing a system like this.
-
What happened when you tried to look at the source code of those package managers? Being able to see how Open Source tools are written is a large part of their benefit! – Feb 22 '10 at 11:41
-
1I've checked them out but to be honest some are very disorganized and hard to parse. Shockingly enough I've found PEAR to be an excellent resource and have been looking through it quite a bit. – Robert Hafner Feb 23 '10 at 18:47
-
I suggest you update your question with the contents of your previous comment. Research-related information belongs to the question. – tzot Nov 13 '11 at 07:53
2 Answers
The dependency tree itself is trivial to load, all you need is some mapping from keys (such as names) to objects.
You've not specified any language, so I've chosen Python. The expected input is a file of lines in the form "[name]: [space separated dependencies]".
def load_depends(file):
depends = {}
for line in file:
line = line.strip()
if not line or line.startswith("#"): # allow blanks and comments
continue
name, _, deps = line.partition(":")
deps = deps.strip()
assert deps, "invalid input" # most basic input error-checking
depends[name] = set(deps.split())
return depends
This code assumes any item not listed has zero dependencies, and you could traverse the tree to add empty entries if desired. At the very least you should check for recursive dependencies.
Example:
>>> input = """\
... a: b c
... b: c
... c: d
... e: a
... """.split("\n")
>>> from pprint import pprint
>>> pprint(load_depends(input))
{'a': set(['b', 'c']),
'b': set(['c']),
'c': set(['d']),
'e': set(['a'])}
[Note: I take a shortcut, since I really don't require a file of lines, but an iterable of lines (which a file meets), so I pass a list of lines to the function.]
You can build all sorts of functions on top of this basic structure, and encapsulate it and those concepts (like depends vs recommends vs suggests, and even conflicts vs replaces, etc.) into various objects specific to your system.
Many other concepts also involve dependency trees, such as SNMP MIB resolution, C/C++ source code compiling. So you can reference any other materials that talk about this :)

- 60,503
- 9
- 116
- 147
-
Do you have anything specific in mind? One of my problems is that googling around just leads to people talking about their own package manager issues rather than anything about programming one. – Robert Hafner Nov 30 '09 at 08:32
-
When I programed #SNMP Suite, I wrote my own SNMP MIB resolution code. In that a simple recursive algorithm is utilized to check whether all dependencies are already loaded in ObjectTree instance before loading a new MIB module. Generally speaking, it is not that hard to write, and you can always start from a small sample project in your favorite language. – Lex Li Nov 30 '09 at 09:13