1
0
mirror of git://projects.qi-hardware.com/wernermisc.git synced 2024-11-15 06:41:53 +02:00
wernermisc/qpkg
Werner Almesberger 0229051f07 qpkg: change prerequisite resolution order to be fully depth-first
Until now, when considering adding a package, we processed its
dependencies after completing the current list of dependencies. E.g.,
if we had a package A that depended on B and C, B depended on D, and C
depended on E, then the sequence would have been A, B, C, ...

We now process the dependencies of a package immediately after
considering the package, so the sequence above would become A, B, D,
C, ...

The advantage of the new order is that it becomes easier to follow the
dependency tree, which will be beneficial for loop detection and for
ordering packages by installation order.

- prereq.c (resolve): change prerequisite resolution order such that the
  dependencies of the package being considered are processed immediately,
  instead of deferring them until the end of the current dependency list
- prereq.c (prereq): we can now pass the list of dependencies directly,
  without needing a list of lists element
- test/resorder: test resolution order
2010-11-21 17:34:17 -03:00
..
test qpkg: change prerequisite resolution order to be fully depth-first 2010-11-21 17:34:17 -03:00
COPYING.GPLv2 qpkg: added README and COPYING.GPLv2 2010-11-20 06:29:57 -03:00
gobble.c qpkg: store dependencies and conflicts in file order 2010-11-21 15:56:55 -03:00
gobble.h qpkg: added copyright headers and changed name to emphasize speediness 2010-11-20 07:29:18 -03:00
id.c qpkg: towards "struct id" without jrb reference - change ID creation 2010-11-21 03:12:00 -03:00
id.h qpkg: give ID2S macro a more "offical" status 2010-11-21 03:25:53 -03:00
jrb.c qpkg/jrb.c: removed unnecessary inclusion of ctype.h and string.h 2010-11-19 22:32:39 -03:00
jrb.h qpkg: optimize duplicate lookup when inserting a new name 2010-11-19 22:20:15 -03:00
LICENSE.jrb qpkg: added James S. Plank's red-black trees 2010-11-19 19:17:47 -03:00
Makefile qpkg: added regression test harness and a few tests 2010-11-21 04:32:04 -03:00
prereq.c qpkg: change prerequisite resolution order to be fully depth-first 2010-11-21 17:34:17 -03:00
prereq.h qpkg: added copyright headers and changed name to emphasize speediness 2010-11-20 07:29:18 -03:00
qpkg.c qpkg/qpkg.c: tighten detection of inconsistent use of Filename: 2010-11-21 08:19:28 -03:00
qpkg.h qpkg: record Architecture: tag 2010-11-21 03:53:19 -03:00
rbtest.c qpkg: added copyright headers and changed name to emphasize speediness 2010-11-20 07:29:18 -03:00
README qpkg: added copyright headers and changed name to emphasize speediness 2010-11-20 07:29:18 -03:00
README.jrb qpkg: mention in jrb-related files that they've been heavily edited 2010-11-19 20:37:29 -03:00
TODO qpkg/TODO: cleanup and added new task for consideration 2010-11-20 07:18:44 -03:00
util.h qpkg/: initial commit (sneak preview only, doesn't work properly yet) 2010-11-19 14:00:15 -03:00

qpkg - Quick package database query
===================================

qpkg is a tool that reads package databases of the kind used by opkg
in OE-derived Jlime (which are very similar to what dpkg and apt use)
and that can answer a number of queries on them.

While being able to perform some of the database operations commonly
found in package managers, qpkg is not a package manager itself. 
However, it may be used to help a package manager do its work faster.


Except for the files jrb.h and jrb.c, this work is distributed under
the terms of the GNU GENERAL PUBLIC LICENSE, Version 2:

  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2 of the License, or
  (at your option) any later version.

For your convenience, a copy of the complete license has been included
in the file COPYING.GPLv2.


The implementation of red-black trees, in jrb.h and jrb.c, is
distributed under the terms of the GNU Lesser General Public License,
Version 2.1:

  This library is free software; you can redistribute it and/or
  modify it under the terms of the GNU Lesser General Public
  License as published by the Free Software Foundation; either
  version 2.1 of the License, or (at your option) any later version.

For your convenience, the original copyright notice accompanying JRB
and a copy of the license have been included in the files READNE.jrb
and LICENSE.jrb, respectively.


Objectives
----------

The original motivation for qpkg comes from the observation that opkg
consumes inordinate amounts of memory when determining the
prerequisites for installing a package on a given system, and the
proof of concept implementation of a shell script wrapper by Rafael
Zurita, that performs a large subset of the same task with much less
overhead.

qpkg thus aims to load and parse large package databases as quickly
and memory-efficiently as possible, and to provide a number of query
functions that operate on the data.

A second objective is to provide a means to test the integrity of a
package database, and to perform simple "what if" queries, e.g., to
test which packages would become uninstallable if a package was to be
removed or a conflict was to be introduced.

This is to aid not only in general housekeeping of package databases,
but also to assist in generating - at the package level - restricted
distributions derived from a master distribution.