public inbox for gentoo-portage-dev@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-portage-dev] Current portage well designed, but badly used
@ 2004-11-27 23:10 Gustavo Barbieri
  2004-11-27 23:48 ` Michael Tindal
                   ` (3 more replies)
  0 siblings, 4 replies; 25+ messages in thread
From: Gustavo Barbieri @ 2004-11-27 23:10 UTC (permalink / raw
  To: gentoo-portage-dev

Hello,

I'm playing with portage and noticed it's well designed, but there are
some mistakes in its usage at the moment. For example:

Categories are mixed: there is a net-www/apache and net-www/mod_*
(apache modules), but there is a more convenient category www-apache/
for them. This is one example, there are more mistakes.  There is any
plan to fix them in next portage releases?

Some packages use numbering version padded with zero, that's good to
list with shell functions, but it's bad because you can't change them
to numbers and them back to string. For example:
mail-mta/nullmailer-1.00_rc7-r4. If you Convert it to integers, it
becomes 1.0 and you can't map back to the ebuild.

Portage provides metadata.xml, cool. But it's hardly used :(
metadata.xml seems to provide tags for maintainers, changelogs and
long description, many (most?) packages don't use them.

The portage library is too heavy, complicated and make things slow.
Heavy and complicated I noticed from (trying to) look at the source,
slow by usage. For example:

time emerge # without parameters
real    0m0.614s
user    0m0.487s
sys     0m0.046s

time emerge -pv world # 16 packages to be upgraded
real    0m22.664s
user    0m12.423s
sys     0m1.130s

It's too much, look at debian apt, it's fast. And I can't see why
portage is slow.
Forgive me if I'm wrong, but portage just need to parse
/var/lib/portage/world (237 entries in my case), them for each check
if there is any other version greater than and if so check for
dependencies. Why 22seconds? A hand made take less than 1.


Also, a brief explanation on why I was playing with portage and some
requests: I'm coding (for fun, no plan to get in a production state)
yet another graphical package manager atop portage with the newbie in
mind. But to achieve my goal I need:

   - a fast portage. Now I'm doing a module to do this for me (see
more above), at least the basics, like get package information,
versions, ... and if possible resolve primary dependencies (just to
show to user in a tab "Dependencies", hidden by default).

   - more meta data, if possible a list of urls to screenshots (most
packages have a screenshots section), if the url links to an html,
provide a threshold of images size to get, so it connects and
downloads every image bigger than it... cached of course.

   - portage to act as a daemon, queue requests  and fetch packages.
If portage could be a daemon with 3 threads: one that download
packages, one that compiles and one to manage the other and accept
requests; then it could schedule download to maximize download
throughput, downloading smaller packages first while respecting
dependencies, compile while download and wait until packages are there
and the "emerge" command just send commands to it.  It would be handy
since compiling times are huge.


About the fast portage: I know portage is a complex monster and is the
heart of gentoo, if it breaks, everything breaks. But how about a
python module to be used by other packages that just want to view the
portage and its packages. If eventually this module works as expected
and have every current portage feature, it could replace the old one.
   I started to code my own "fast portage", but some things are picky
to do, and I want to know how you do that: how do you parse ebuilds to
get USE, DESCRIPTION, SLOT, DEPEND, ... ?
   If you want to know why my implementation is fast: I use lazy
evaluation as far as possible. For example, I load every package, but
the attributes to available versions, installed versions, the status,
are just calculated on deman, I use python property() and
setters/getters for that. Since hardly you'll use every attribute from
everythin, it loads much faster.
   I have preliminar code here:
http://ltc08.ic.unicamp.br/~gustavo/packagemanager.tar.bz2, but some
modifications I did were lost in a power outtage + xfs... I just have
the .pyc, if someone knows how to get the .py back...


-- 
Gustavo Sverzut Barbieri
---------------------------------------
Computer Engineer 2001 - UNICAMP
GPSL - Grupo Pro Software Livre
Cell..: +55 (19) 9165 8010
Jabber: gsbarbieri@jabber.org
  ICQ#: 17249123
   GPG: 0xB640E1A2 @ wwwkeys.pgp.net

--
gentoo-portage-dev@gentoo.org mailing list


^ permalink raw reply	[flat|nested] 25+ messages in thread

end of thread, other threads:[~2004-12-01 13:41 UTC | newest]

Thread overview: 25+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-11-27 23:10 [gentoo-portage-dev] Current portage well designed, but badly used Gustavo Barbieri
2004-11-27 23:48 ` Michael Tindal
2004-11-28 17:08   ` Gustavo Barbieri
2004-11-28 17:31     ` Andrew Gaffney
2004-11-28 17:56       ` Gustavo Barbieri
2004-11-30 14:22     ` Brian Harring
2004-11-30 14:53       ` Jason Stubbs
2004-12-01  4:13         ` Gustavo Barbieri
2004-12-01  8:41           ` Brian Harring
2004-12-01 13:41             ` Gustavo Barbieri
2004-12-01  3:55       ` Gustavo Barbieri
2004-12-01  9:37         ` Gregorio Guidi
2004-12-01 10:59           ` Brian Harring
2004-12-01 11:25             ` Gregorio Guidi
2004-12-01 12:08               ` Brian Harring
2004-12-01 13:25                 ` Gregorio Guidi
2004-12-01 13:38                   ` Jason Stubbs
2004-11-28  3:41 ` Luke-Jr
2004-11-28 17:19   ` Gustavo Barbieri
2004-11-28  5:44 ` Ed Grimm
2004-11-28  6:18   ` John Nilsson
2004-11-28 15:58     ` Allen Parker
2004-11-28 17:22   ` Gustavo Barbieri
2004-11-29  0:39     ` Gustavo Barbieri
2004-11-28 19:37 ` Paul de Vrieze

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox