From 410ee70f54f462f72ac4993c608b34cd9fac1bd6 Mon Sep 17 00:00:00 2001
From: Alexander Sulfrian <alexander@sulfrian.net>
Date: Thu, 18 Dec 2008 15:22:05 +0100
Subject: 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.
---
 bashrc                    | 100 ++++++++++++++++++++++++++++++++++++++++++++++
 postsync.d/50-eix-update  |  33 +++++++++++++++
 postsync.d/regen-overlays |  62 ++++++++++++++++++++++++++++
 3 files changed, 195 insertions(+)
 create mode 100644 bashrc
 create mode 100755 postsync.d/50-eix-update
 create mode 100755 postsync.d/regen-overlays

diff --git a/bashrc b/bashrc
new file mode 100644
index 0000000..04c88bd
--- /dev/null
+++ b/bashrc
@@ -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
-- 
cgit v1.2.3