summaryrefslogtreecommitdiff
blob: 75b5f2295a95760914e2990b38ca0aeea6c7530b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#!/bin/bash
# Sync keywords with portdir where portdir is the target one.
# Author: Tomáš Chvátal <scarabeus@gentoo.org>
# Version: 0.1

# temfile where we output packages list
TMPPACKAGES="/tmp/$(basename $0).packages.$$.tmp"

###############################################################################
# get package names we have in overlay
###############################################################################
function get_packages() {
	local overlay=$1

	find "${overlay}" -name \*.ebuild | \
		sed -e "s:${overlay}::" | \
		awk -F/ '{print $1"/"$2}' | \
		sort | uniq > ${TMPPACKAGES}
}
###############################################################################
# get keywords for package | we always select latest version
###############################################################################
function get_keywords() {
	local package=$1
	local keywords

	# return false if package is not in portdir
	[[ -d "${PORTDIR}/${package}" ]] || return 1

	pushd "${PORTDIR}/${package}" > /dev/null
	# grep added to ignore live versions
	keywords=$(pquery --max ${package} --repo=${PORTDIR} | \
		awk -F/ '{print $2".ebuild"}' | \
		xargs sed -ne 's/^KEYWORDS="\(.*\)"/\1/p' | \
		tr '\n' ' ')
	popd > /dev/null

	echo ${keywords}
}
###############################################################################
# set keywords for all ebuilds in overlay for specified package
###############################################################################
function set_keywords() {
	local overlay=$1
	local package=$2

	# if keywords are not set then we return
	[[ "x${KEYWORDS}" == "x" ]] && return 1

	pushd "${overlay}/${package}" > /dev/null
	# first drop all keywords
	ekeyword ^all *.ebuild > /dev/null

	# then set our keywords set
	ekeyword ${KEYWORDS} *.ebuild > /dev/null
	ekeyword ~all *.ebuild > /dev/null
	popd > /dev/null

	echo "true"
}
###############################################################################
# regenerate manifest on specified package
###############################################################################
function regen_manifest() {
	local overlay=$1
	local package=$2

	pushd "${overlay}/${package}" > /dev/null
	repoman manifest > /dev/null
	popd > /dev/null
}
###############################################################################
# cleanup all temporary files
###############################################################################
function cleanup() {
	rm -rf ${TMPPACKAGES}
}
###############################################################################
# print out help function
###############################################################################
function help() {
	echo "Welcome to overlay KEYWORDS syncer"
	echo
	echo "!!!"
	echo "!!! THIS SCRIPT REQUIRES sys-apps/pkgcore !!!"
	echo "!!!"
	echo
	echo "For usage you just need to specify overlay you want to work."
	echo "Example:"
	echo "$0 -o /var/tmp/myoverlay/"
	echo
	echo "Optionally you can also specify location of portdir"
	echo "Example:"
	echo "$0 -p /var/tmp/portage/ -o /var/tmp/myoverlay/"
	exit 0
}
###############################################################################
# argument passing
###############################################################################
if [[ $1 == "--help" ]]; then
	help
fi
OVERLAY=
PORTDIR=$(portageq portdir)
while getopts o:p: arg ; do
	case ${arg} in
		o) OVERLAY="${OPTARG}" ;;
		p) PORTDIR="${OPTARG}" ;;
		*) help ;;
		?) help ;;
	esac
done
[[ -z "${OVERLAY}" ]] && help
###############################################################################
# main
###############################################################################
get_packages ${OVERLAY}
# loop throught all packages
cat ${TMPPACKAGES} | while read PACKAGE; do
	echo " >>> Working on: ${PACKAGE}"
	KEYWORDS=$(get_keywords ${PACKAGE})
	[[ "x$(set_keywords ${OVERLAY} ${PACKAGE})" == "x" ]] || \
		regen_manifest ${OVERLAY} ${PACKAGE}
done
cleanup