Gratuitous Code Post
Posted on Tue 24 May 2005 by alex in geek
I got home today and had a sudden urge to run. I think this is because I've been cooped up in an office all day and needed some physical exertion. I didn't run far, but I did run hard (so to speak).
I think it cleared my mind enough that I could face adding the following code to my .bashrc
to make working with gentoo overlays a little easier. Basically it allows me to hack around with ebuilds without doing my editing as root.
# # Gentoo Related Macros # # These are various tools for manipulating a local # portage structure (which can be part of an overlay) # # These functions allow you to list, clone, delete and diff ebuilds # LOCAL_PORTAGE=$HOME/portage MASTER_PORTAGE=/usr/portage alias ls_le="find $LOCAL_PORTAGE -xtype d -mindepth 2 -maxdepth 2 | sed s#$LOCAL_PORTAGE##" alias ls_me="find $MASTER_PORTAGE -xtype d -mindepth 2 -maxdepth 2 | sed s#$MASTER_PORTAGE##" # # guess_ebuild # # Take a string, possibly partial and match it a proper group/ebuild # function guess_ebuild() { tmp=`ls_me | grep $1` group=`echo $tmp | perl -ne 'm#/([^/]*)#; print "$1"'` ebuild=`echo $tmp | perl -ne 'm#/([^/]*)/(\w*)#; print "$2"'` } # # diff ebuild # # Do a diff for a given ebuild # function diff_ebuild() { result=0 if [ "$1" ] then guess_ebuild $1 if [[ "$group" && "$ebuild" ]] then diff -ub $MASTER_PORTAGE/$group/$ebuild $LOCAL_PORTAGE/$group/$ebuild fi else for ebuild in `ls_le` do diff -ub $MASTER_PORTAGE/$ebuild $LOCAL_PORTAGE/$ebuild done fi } # # Clone an ebuild from the master tree into the local tree # # function clone_ebuild() { if [ "$1" ] then guess_ebuild $1 if [[ "$group" && "$ebuild" ]] then echo "Cloning ebuild $group/$ebuild" mkdir -p $LOCAL_PORTAGE/$group cp -aP $MASTER_PORTAGE/$group/$ebuild $LOCAL_PORTAGE/$group/ else echo "$1 not in Master Portage" fi else echo "No ebuild specified" fi } # # Clean ebuilds # # Delete untouched ebuilds from local portage # function clean_ebuilds() { for ebuild in `ls_le` do result=`diff -br --brief $MASTER_PORTAGE/$ebuild $LOCAL_PORTAGE/$ebuild` if [ "x$result" == "x" ] then echo "Removing local copy of $ebuild" rm -rf $LOCAL_PORTAGE/$ebuild fi done }