This week didn't see much movement in the repository due to life
happening (moving and lack of internet at new apt). On the plus side,
I believe the majority of the work is complete, and I urge everyone to
give it a test to help me discover problems. :)
I'm happy with the overall results so far. One thing that irks me is
the dependence on directory and library masks found in
/etc/revdep-rebuild/*. I was really hoping to find a more elegant
solution than parsing masks from config files, but all my attempts at
a different solution were not successful. Unfortunately, as long as
masks are used, there is the potential of false positives for
libraries that are not properly masked, which as far as I know is the
only major issue.
My work over the last week was largely polishing details in
docstrings/comments and contemplating final modifications (or future
endeavors). During this last week of gsoc, I'm going to (hopefully)
improve the performance of LinkageMap and MissingLibraryConsumerSet
before the deadline. It was suggested on the gentoo-portage-dev
mailing list [1] that efficiency in path comparisons in LinkageMap
could be improved by comparing inodes rather than os.path.realpath in
python's os.path module, which is what I started to implement
recently; however, this appears to require changes outside of the
class, which will take time to finalize e.g. during the unmerge
process, LinkageMap.rebuild is called after files have been removed
but before /var/db/pkg has been correspondingly updated, which is
problematic since. I may not get all the kinks worked out of changing
LinkageMap before the gsoc deadline, so I'll have something to work on
afterwards. :)
The attached patches add the library dependency rebuilder as a set,
@missing-rebuild, to portage-2.2_rc6. Similar to the --library flag
in revdep-rebuild, the user can additionally emerge the set of
packages containing consumers of libraries matched by a (python)
regular expression; however, until a better solution is found, the
regexp must be passed through the LIBRARY environment variable to
enable that feature.
Attached are patches for
/usr/lib/portage/pym/portage/dbapi/vartree.py,
/usr/lib/portage/pym/portage/sets/libs.py and
/usr/share/portage/config/sets.conf, which can also be found in the
repository.[2] After applying the three patches, one can test the set
with emerge -p @missing-rebuild. If anyone is brave enough to do so,
let me know how it goes!
Lucian
[1] http://archives.gentoo.org/gentoo-portage-dev/msg_abcbac026ed8670f6dc61bb28be6151e.xml
[2] http://repo.or.cz/w/revdep-rebuild-reimplementation.git?a=tree;h=refs/heads/rc1;hb=rc1
|