path-packer-c/ALGORITHM.md

115 lines
5.1 KiB
Markdown
Raw Normal View History

2012-08-22 14:37:32 +00:00
PACKING ALGORITHM
=================
Begin with a list of content set paths:
2012-08-22 14:38:33 +00:00
```
2012-08-22 14:37:32 +00:00
/content/dist/rhel/$releasever/$basearch/os
/content/dist/rhel/$releasever/$basearch/debug
/content/dist/rhel/$releasever/$basearch/source/SRPMS
/content/dist/jboss/source
/content/beta/rhel/$releasever/$basearch/os
/content/beta/rhel/$releasever/$basearch/debug
/content/beta/rhel/$releasever/$basearch/source/SRPMS
2012-08-22 14:38:33 +00:00
```
2012-08-22 14:37:32 +00:00
Create a prefix tree out of the paths, where each node in the tree contains the
names of its children, rather than the children containing its own name:
2012-08-22 14:38:33 +00:00
```
2012-08-22 14:37:32 +00:00
+-------+ +------+
| | | |
|-------+ |------|
|content+--+-------+ |source+-+---+
+-------+ | | +------+ | |
|-------| | |---|
|dist +--------+-------+ | +---+
+--+beta | | | |
| +-------+ |-------| |
| |jboss +--+
+-------+ |rhel +--+
| | +-------+ |
|-------| |
|rhel +--+-----------+ +-----------+
+-------+ | | | |
|-----------| |-----------|
+----------+$releasever| |$releasever+--+
| +-----------+ +-----------+ |
| |
+---------+ +---------+
| | | |
|---------| |---------|
|$basearch+--+ +--+$basearch| +---+
+---------+ | | +---------+ | |
| | |---|
+--------+ +-------+ +---+
| | | | |
|--------| |-------| |
+---+--------+os | |os +---------+
| | +--+debug | |debug +-----------+---+
|---| | |source +--+ |source +--+ | |
+---+ | +--------+ | +-------+ | |---|
| | | +---+
+---+ +------+ |
| | | | +-----+
|---| |------| | |
+---+ +--+SRPMS | |-----|
| +------+ |SRPMS+--+---+
| +-----+ | |
+---+ |---|
| | +---+
|---|
+---+
2012-08-22 14:38:33 +00:00
```
2012-08-22 14:37:32 +00:00
This eliminates the duplication in the prefixes of our paths. We now only have
one instance of the word "content", for example. We now find any duplicate
subtrees, remove the duplicate, and point all references from the duplicate to
the original:
2012-08-22 14:38:33 +00:00
```
2012-08-22 14:37:32 +00:00
+-------+ +------+
| | | |
|-------+ |------|
|content+--+-------+ |source+-+
+-------+ | | +------+ |
|-------| | |
|dist +--------+-------+ | |
+--+beta | | | | |
| +-------+ |-------| | |
| |jboss +--+ |
+-------+-------------------+rhel | |
| | +-------+ |
|-------| |
|rhel +--+-----------+ |
+-------+ | | |
|-----------| |
+----------+$releasever| |
| +-----------+ |
| |
+---------+ |
| | |
|---------| |
|$basearch+--+ |
+---------+ | |
| |
+--------+ |
| | |
|--------| |
+-------+os | |
| +--+debug | |
| | |source +--+ |
| | +--------+ | |
| | | |
| | +------+ |
| +-------+ | | |
| | |------| |
| | +--+SRPMS | |
| | | +------+ |
| | | |
+------------+---+-------------------------+
| |
|---|
+---+
2012-08-22 14:38:33 +00:00
```
2012-08-22 14:37:32 +00:00