From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from pigeon.gentoo.org ([69.77.167.62] helo=lists.gentoo.org) by finch.gentoo.org with esmtp (Exim 4.60) (envelope-from ) id 1Kw2sD-0003MR-Qa for garchives@archives.gentoo.org; Fri, 31 Oct 2008 22:53:46 +0000 Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 45015E0438; Fri, 31 Oct 2008 22:53:46 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) by pigeon.gentoo.org (Postfix) with ESMTP id DB396E0438 for ; Fri, 31 Oct 2008 22:53:45 +0000 (UTC) Received: from stork.gentoo.org (stork.gentoo.org [64.127.104.133]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTP id 25A3064879 for ; Fri, 31 Oct 2008 22:53:44 +0000 (UTC) Received: from dsd by stork.gentoo.org with local (Exim 4.69) (envelope-from ) id 1Kw2sB-0000RH-QP for gentoo-commits@lists.gentoo.org; Fri, 31 Oct 2008 22:53:43 +0000 From: "Daniel Drake (dsd)" To: gentoo-commits@lists.gentoo.org Reply-To: gentoo-dev@lists.gentoo.org, dsd@gentoo.org Subject: [gentoo-commits] gentoo-x86 commit in sys-kernel/module-rebuild/files: module-rebuild-0.6 X-VCS-Repository: gentoo-x86 X-VCS-Files: module-rebuild-0.6 X-VCS-Directories: sys-kernel/module-rebuild/files X-VCS-Committer: dsd X-VCS-Committer-Name: Daniel Drake Content-Type: text/plain; charset=utf8 Message-Id: Sender: Daniel Drake Date: Fri, 31 Oct 2008 22:53:43 +0000 Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: quoted-printable X-Archives-Salt: 48aa9adc-96f5-4296-98df-c8d30498bb05 X-Archives-Hash: f9e50ed0fa664689ca182130e476f361 dsd 08/10/31 22:53:43 Added: module-rebuild-0.6 Log: Pass --ignore-default-opts to emerge, thanks to Allen Brooker in bug #1= 37056. Add paludis support thanks to Jack Byer in bug #207681. Fix typo i= n error message thanks to Dan Wallis in bug #238044. (Portage version: 2.2_rc12/cvs/Linux 2.6.27-gentoo-r2 i686) Revision Changes Path 1.1 sys-kernel/module-rebuild/files/module-rebuild-0.6 file : http://sources.gentoo.org/viewcvs.py/gentoo-x86/sys-kernel/module-= rebuild/files/module-rebuild-0.6?rev=3D1.1&view=3Dmarkup plain: http://sources.gentoo.org/viewcvs.py/gentoo-x86/sys-kernel/module-= rebuild/files/module-rebuild-0.6?rev=3D1.1&content-type=3Dtext/plain Index: module-rebuild-0.6 =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D #!/bin/bash ####################################### # Inspiration from bug #34921 # Thanks to Paul Varner # Distributed under the GPL v2 # Written by John Mylchreest (johnm@gentoo.org) # Copyright Gentoo Linux if [[ `id -u` !=3D 0 ]]; then echo "This application must be run as root." exit 1 fi R_VERSION=3D"0.5" R_MODULES=3D"${ROOT}/var/lib/module-rebuild/moduledb" R_PORTAGEQ=3D"`which portageq 2>/dev/null`" if [[ -z ${R_PORTAGEQ} ]]; then echo "** FATAL: Unable to find portageq." exit 1 fi R_PORTDIR=3D`${R_PORTAGEQ} portdir` R_VDBPATH=3D`${R_PORTAGEQ} vdb_path` R_OPTION_X=3D0; R_OPTION_C=3D0; R_OPTION_PM=3D"portage"; package_valid() { local package=3D${1} [[ -z ${package} ]] && return 1 [[ -z ${package/*\/*} ]] && return 0 || return 1 } package_valid_strict() { local package=3D${1} package_valid ${package} && [[ -z ${package%%*-[0-9]*} ]] && return 0 ||= return 1 } package_exists() { local package=3D${1} package=3D${package%-[0-9]*} if $(${R_PORTAGEQ} has_version / ${package}); then return 0 else return 1 fi } db_module_exists() { local line package=3D${1} for line in `<${R_MODULES}`; do [[ -z ${line/*${package}*} ]] && return 0 done return 1 } db_module_toggle() { local package=3D${1} toggleto=3D${2} togglefrom line =09 if db_module_exists ${package}; then line=3D`grep ${package} ${R_MODULES}` togglefrom=3D${line#*:} togglefrom=3D${togglefrom/:*} if [[ -z ${toggleto} ]]; then [[ ${togglefrom} =3D 0 ]] && toggleto=3D1 || toggleto=3D0 fi echo "** Setting ${package}; rebuild=3D${toggleto}." sed -i -e "s:\(.\:\)\([01]\)\(\:${package}\):\1${toggleto}\3:g" ${R_MOD= ULES} else echo "** ${package} not found in moduledb." fi } db_module_add() { local package=3D${1} if db_module_exists ${package}; then echo -e "${C_BOLD}** Module already exists in moduledb.${C_NORM}" db_module_toggle ${package} 1 return 0 else if package_exists ${package}; then echo -e "${C_BOLD}${C_GREEN}** Adding ${package} to moduledb.${C_NORM}= " echo "m:1:${package}" >> ${R_MODULES} return 0 else echo -e "${C_RED}** Unable to locate an available ebuild for ${package= }.${C_NORM}" echo "** Please manually emerge ${package} first." fi fi return 1 } db_module_del() { local package=3D${1} =09 if db_module_exists ${package}; then echo "** Removing ${package} from moduledb." sed -ie "/.*${package/\//\\/}.*/d" ${R_MODULES} return 0 else echo "** ${package} not found in moduledb." return 1 fi } db_module_list() { local line auto pkg a=3D0 b=3D0 for line in `<${R_MODULES}`; do mode=3D${line:0:1} pkg=3D${line#*:} auto=3D${pkg/:*} pkg=3D${pkg/*:} if [[ ${R_OPTION_X} =3D=3D 1 ]]; then pkg=3D${pkg%-[0-9]*} package_valid ${pkg} else package_valid_strict ${pkg} && pkg=3D"=3D${pkg}" fi if [[ ${auto} =3D 1 ]]; then tomerge[${a}]=3D${pkg} a=3D$((${a} + 1)) else toignore[${b}]=3D${pkg} b=3D$((${b} + 1)) fi done pkg=3D"${tomerge[@]}${toignore[@]}" if [[ -z ${pkg} ]]; then echo -e "${C_BOLD}${C_RED}** There are no known modules. Quitting.${C_N= ORM}" exit 1 fi if [[ -n ${tomerge[@]} ]]; then echo -e "${C_BOLD}${C_GREEN}** Packages which I will emerge are:${C_NOR= M}" for pkg in ${tomerge[@]}; do echo -e "\t${pkg}" done fi if [[ -n ${toignore[@]} ]]; then echo -e "${C_BOLD}${C_GREEN}** Packages which I will ignore are:${C_NOR= M}" for pkg in ${toignore[@]}; do echo -e "\t${pkg}" done fi } db_module_populate() { local i x=3D0 pkg version list pad =09 # Lets find them all # chances are we will get a few dupes in here. version=3D`uname -r` for pkg in `grep -i /lib/modules/${version}/.*o ${R_VDBPATH}/*/*/CONTENT= S`; do pad=3D""; x=3D0; =09 if [[ -z ${pkg//${R_VDBPATH}*} ]]; then for((i=3D0;i<=3D${#pkg};i++)); do [[ ${pkg:${i}:1} =3D / ]] && x=3D$((${x} + 1)); [[ ${x} =3D=3D 4 ]] || [[ ${x} =3D=3D 5 ]] && pad=3D"${pad}${pkg:${i}= :1}"; done # Remove any dupes list=3D${list//${pad:1}} list=3D"${list} ${pad:1}" fi done =09 for pkg in ${list}; do db_module_add ${pkg}; done } db_module_merge() { local i pkg =09 echo -e "${C_BOLD}** Preparing to merge modules:${C_NORM}" db_module_list >/dev/null if [[ -z ${tomerge[@]} ]]; then echo -e "${C_BOLD}${C_RED}** No packages to merge. Quitting.${C_NORM}" exit 1 fi echo -e "${C_BOLD}${C_GREEN}** Packages which I will emerge are:"${C_NOR= M} for pkg in ${tomerge[@]}; do echo -e "\t${pkg}" done =09 for((i=3D1;i<6;i++)); do echo -en "${C_BOLD}${C_RED}$((6 - ${i})) ${C_NORM}" sleep 1 done echo case ${R_OPTION_PM} in portage) emerge --ignore-default-opts --oneshot --nodeps ${tomerge[@]};; paludis) paludis --install --preserve-world --continue-on-failure if-sat= isfied --dl-upgrade as-needed ${tomerge[@]};; *) echo "** Unsupported package manager"; phelp; exit 1;; esac } phelp() { cat << EOF module-rebuild [options] action [category/package] Version: ${R_VERSION} Where options are: -X - Emerge based on package names, not exact versions. -C - Disable all coloured output. -P foo - Specify package manager: portage(default) or paludis Where action is one of: add - Add package to moduledb. del - Delete a package from moduledb. toggle - Toggle auto-rebuild of Package. list - List packages to auto-rebuild. rebuild - Rebuild packages. populate - Populate the database with any packages which currently install drivers into the running kernel. EOF } check_validity() { local package=3D${1} strict=3D${2:-0} ret=3D1 [[ ${strict} =3D 0 ]] && package_valid ${package} && ret=3D0 [[ ${strict} =3D 1 ]] && package_valid_strict ${package} && ret=3D0 =09 if [[ ${ret} !=3D 0 ]]; then echo "** Please pass the fully qualified package. For example:" echo "** media-video/nvidia-kernel-1.0.7174" exit 1 fi } while getopts "XCP:" options; do case ${options} in X) R_OPTION_X=3D'1';; C) R_OPTION_C=3D'1';; P) R_OPTION_PM=3D"$OPTARG";; *) phelp; exit 1;; esac done if [[ ${R_OPTION_C} =3D=3D 0 ]]; then C_BOLD=3D'\e[1m' C_NORM=3D'\e[0m' C_GREEN=3D'\e[32m' C_RED=3D'\e[31m' else C_BOLD=3D'' C_NORM=3D'' C_GREEN=3D'' C_RED=3D'' fi x=3D0 for i in ${@:${OPTIND}}; do if [[ ${i:0:1} !=3D - ]]; then R_PARAMS[${x}]=3D${i} x=3D$((${x} + 1)) fi done unset i x # If the moduledb doesnt exist, lets populate it automatically. if [[ ! -f ${R_MODULES} ]]; then echo -e "${C_BOLD}${C_RED}No moduledb found...${C_NORM}" [[ ! -d ${ROOT}/var/lib/module-rebuild/ ]] && \ echo -e "${C_BOLD}Creating moduledb state directory.${C_NORM}"; \ mkdir -p ${ROOT}/var/lib/module-rebuild/ echo -e "${C_BOLD}Populating moduledb...${C_NORM}" touch ${R_MODULES} R_PARAMS[0]=3Dpopulate fi case ${R_PARAMS[0]} in add) check_validity ${R_PARAMS[1]} 1; db_module_add ${R_PARAMS[1]};; del) check_validity ${R_PARAMS[1]}; db_module_del ${R_PARAMS[1]};; toggle) check_validity ${R_PARAMS[1]}; db_module_toggle ${R_PARAMS[1]};= ; list) db_module_list;; rebuild) db_module_merge;; populate) db_module_populate;; *) phelp; exit 1;; esac