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
|