diff options
author | Alexander Sulfrian <alexander@sulfrian.net> | 2008-12-18 15:22:05 +0100 |
---|---|---|
committer | Alexander Sulfrian <alexander@sulfrian.net> | 2008-12-18 15:22:05 +0100 |
commit | 410ee70f54f462f72ac4993c608b34cd9fac1bd6 (patch) | |
tree | 45a621acd2eeac74bf27d337e64513f6b403aefb | |
download | portage-ext-410ee70f54f462f72ac4993c608b34cd9fac1bd6.tar.gz portage-ext-410ee70f54f462f72ac4993c608b34cd9fac1bd6.tar.xz portage-ext-410ee70f54f462f72ac4993c608b34cd9fac1bd6.zip |
initial commit
currently supports:
auto-patch
add overlay to eix index
show diff to old eix index on emerge --sync
Add this to your make.conf:
# portage autopatch
PATCH_OVERLAY="/var/lib/portage/patches"
# portage overlays
source /etc/portage/overlays/make.conf
and create configs for the overlays in /etc/portage/overlays.
Currently the only supported options are LOCATION and
CACHE_FORMAT (for eix) in bash syntax like:
LOCATION="/var/portage/repositories/proaudio"
CACHE_FORMAT="parse*"
or something like this. If CACHE_FORMAT is missing the default
of eix is used.
For autopatch you have to put the patches in the subdir:
${PATCH_OVERLAY}/CATEGORY/PACKAGE/
All files in that directory with .patch extension are applied
during ebuild execution.
-rw-r--r-- | bashrc | 100 | ||||
-rwxr-xr-x | postsync.d/50-eix-update | 33 | ||||
-rwxr-xr-x | postsync.d/regen-overlays | 62 |
3 files changed, 195 insertions, 0 deletions
@@ -0,0 +1,100 @@ +#!/bin/bash + +# error +eecho() { + case "x${NOCOLOR}" in + x[y,Y][e,E][s,S]|x-[t,T][r,R][u,U][e,E]|x) + echo -ne '\e[1;31m * \e[0m';; + x*) + echo -n " * ";; + esac + + echo "$*" +} + +# warning +wecho() { + case "x${NOCOLOR}" in + x[y,Y][e,E][s,S]|x-[t,T][r,R][u,U][e,E]|x) + echo -ne '\e[1;33m * \e[0m';; + x*) + echo -n " * ";; + esac + + echo "$*" +} + +# positiv echo +pecho() { + case "x${NOCOLOR}" in + x[y,Y][e,E][s,S]|x-[t,T][r,R][u,U][e,E]|x) + echo -ne '\e[1;32m * \e[0m';; + x*) + echo -n " * ";; + esac + + echo "$*" +} + +# info +iecho() { + echo ">>> $*" +} + +autopatch() { + local diff level p patches patched + + [[ ! -d "$PATCH_OVERLAY" ]] && return 0 + + patches=$(ls -1 ${PATCH_OVERLAY}/${CATEGORY}/${PN}/${PN}-*.{patch,diff} 2>/dev/null) + [[ $patches == "" ]] && return 0 + + if ! cd ${S}; then + eecho "FAILED TO cd $S" + return 1 + fi + + for p in ${patches}; do + p=$(basename $p) + diff=${PATCH_OVERLAY}/${CATEGORY}/${PN}/${p} + if [[ -e $diff ]] && [ ! -e ${S}/.${p} ]; then + patched=0 + for level in 0 1 2 3 4; do + if [[ $patched == 0 ]]; then + patch -g0 --dry -p${level} >/dev/null < $diff + if [ $? = 0 ]; then + pecho "auto patching (-p${level}) ${p}" + patch -g0 -p${level} < $diff > /dev/null && patched=1 + touch ${S}/.${p} + fi + fi + done + [[ $patched != 1 ]] && eecho "FAILED auto patching $p" + else + [[ ! -e $diff ]] && eecho "$diff does not exist, unable to auto patch" + fi + done + cd $OLDPWD +} + + +wecho "at $EBUILD_PHASE" + +case $EBUILD_PHASE in + compile) + if [[ ! -d "$PATCH_OVERLAY" ]]; then + eecho "PATCH_OVERLAY=$PATCH_OVERLAY is not a dir" + else + iecho "Checking for auto patches in ${PATCH_OVERLAY}/${CATEGORY}/${PN} ..." + PATH=$PATH:/usr/sbin:/usr/bin:/bin:/sbin + autopatch + fi + ;; + + post_sync) + OVERLAY_CONFIG_DIR="$(update-eix --print EIXCFGDIR)/overlays" + PORTDIR_OVERLAY="$(sed -ne 's/LOCATION="\([^"]*\)"/\1 /;t print; d; :print p' ${OVERLAY_CONFIG_DIR}/* | xargs echo)" + ;; +esac + + diff --git a/postsync.d/50-eix-update b/postsync.d/50-eix-update new file mode 100755 index 0000000..e9eb5ac --- /dev/null +++ b/postsync.d/50-eix-update @@ -0,0 +1,33 @@ +EIXCACHE=$(update-eix --print EIX_CACHEFILE) +OVERLAY_CONFIG_DIR="$(update-eix --print EIXCFGDIR)/overlays" + +TMPFILE="" +if [ -r "${EIXCACHE}" ]; then + TMPFILE=$(mktemp -t eix.cache.XXXXXXXX) + cp "${EIXCACHE}" "${TMPFILE}" +fi + +OVERLAY_PARAM="" +for overlay_config in $(ls ${OVERLAY_CONFIG_DIR}); do + unset LOCATION + unset SYNC + unset CACHE_FORMAT + + source ${OVERLAY_CONFIG_DIR}/${overlay_config} + if [[ -n ${LOCATION} ]]; then + OVERLAY_PARAM="${OVERLAY_PARAM} --add-overlay ${LOCATION}" + + if [[ -n ${CACHE_FORMAT} ]]; then + OVERLAY_PARAM="${OVERLAY_PARAM} -m ${LOCATION} ${CACHE_FORMAT}" + fi + fi +done + +[ -x /usr/bin/update-eix ] && /usr/bin/update-eix ${OVERLAY_PARAM} + +if [ -r "${EIXCACHE}" -a -r "${TMPFILE}" ]; then + echo + diff-eix "${TMPFILE}" + echo + rm -f "${TMPFILE}" +fi diff --git a/postsync.d/regen-overlays b/postsync.d/regen-overlays new file mode 100755 index 0000000..4788e85 --- /dev/null +++ b/postsync.d/regen-overlays @@ -0,0 +1,62 @@ +#!/bin/bash +OVERLAY_CONFIG_DIR="$(update-eix --print EIXCFGDIR)/overlays" + +# error +eecho() { + case "x${NOCOLOR}" in + x[y,Y][e,E][s,S]|x-[t,T][r,R][u,U][e,E]|x) + echo -ne '\e[1;31m * \e[0m';; + x*) + echo -n " * ";; + esac + + echo "$*" +} + +# warning +wecho() { + case "x${NOCOLOR}" in + x[y,Y][e,E][s,S]|x-[t,T][r,R][u,U][e,E]|x) + echo -ne '\e[1;33m * \e[0m';; + x*) + echo -n " * ";; + esac + + echo "$*" +} + +# info +iecho() { + echo ">>> $*" +} + +iecho "Regenerating overlay config ..." + +if [ ! -d "${OVERLAY_CONFIG_DIR}" ] ; then + eecho "${OVERLAY_CONFIG_DIR} does not exists!" + return 1 +fi + +if [ ! -f "${OVERLAY_CONFIG_DIR}/make.conf" ] ; then + wecho "${OVERLAY_CONFIG_DIR}/make.conf does not exists, creating..." + touch "${OVERLAY_CONFIG_DIR}/make.conf" +fi + +echo "PORTDIR_OVERLAY=\"\${PORTDIR_OVERLAY}" > "${OVERLAY_CONFIG_DIR}/make.conf" + +for overlay_config in $(ls ${OVERLAY_CONFIG_DIR}); do + unset LOCATION + + if [[ "${overlay_config}" != "make.conf" ]] ; then + source ${OVERLAY_CONFIG_DIR}/${overlay_config} + if [[ -n "${LOCATION}" ]]; then + echo " ${LOCATION}" >> "${OVERLAY_CONFIG_DIR}/make.conf" + fi + fi +done + +echo "\"" >> "${OVERLAY_CONFIG_DIR}/make.conf" + +if [[ -z "$(grep "^[ \t]*source ${OVERLAY_CONFIG_DIR}/make.conf" /etc/make.conf)" ]] ; then + wecho "\"source ${OVERLAY_CONFIG_DIR}/make.conf\" not found in /etc/make.conf" +fi |