Gentoo Archives: gentoo-commits

From: Ian Stakenvicius <axs@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] dev/axs:master commit in: /, profiles/updates/, profiles/base/
Date: Sun, 01 Jul 2012 16:57:05
Message-Id: 1341161720.bd2318b2ecc9f7a68e321c9f2ddcbe08825ccaef.axs@gentoo
1 commit: bd2318b2ecc9f7a68e321c9f2ddcbe08825ccaef
2 Author: Ian Stakenvicius <axs <AT> gentoo <DOT> org>
3 AuthorDate: Sun Jul 1 16:55:20 2012 +0000
4 Commit: Ian Stakenvicius <axs <AT> gentoo <DOT> org>
5 CommitDate: Sun Jul 1 16:55:20 2012 +0000
6 URL: http://git.overlays.gentoo.org/gitweb/?p=dev/axs.git;a=commit;h=bd2318b2
7
8 Added script hack-4slotabi-into-portagedb.sh to upgrade any existing EAPI=4 packages to EAPI=4-slot-abi in /var/db/pkg
9
10 ---
11 hack-4slotabi-into-portagedb.sh | 151 +++++++++++++++++++++++++++++++++++++++
12 profiles/base/package.keywords | 1 -
13 profiles/updates/1Q-2099 | 15 ----
14 3 files changed, 151 insertions(+), 16 deletions(-)
15
16 diff --git a/hack-4slotabi-into-portagedb.sh b/hack-4slotabi-into-portagedb.sh
17 new file mode 100755
18 index 0000000..385d152
19 --- /dev/null
20 +++ b/hack-4slotabi-into-portagedb.sh
21 @@ -0,0 +1,151 @@
22 +#!/bin/sh
23 +
24 +if [ ! -e /var/lib/layman/axs/hack-4slotabi-into-portagedb.sh ]; then
25 + if [ ! -e "$1"/hack-4slotabi-into-portagedb.sh ]; then
26 + echo "Error - could not find axs developer overlay in layman repos."
27 + echo "Please 'layman -a axs' or specify path to the overlay as a parameter."
28 + exit 1
29 + else
30 + opath=$1
31 + fi
32 +else
33 + opath=/var/lib/layman/axs
34 +fi
35 +
36 +echo "checking to ensure a version of portage supporting 4-slot-abi is installed..."
37 +emerge -u =sys-apps/portage-9999 || exit 1
38 +
39 +echo ""
40 +echo "WARNING WARNING WARNING"
41 +echo "This script is about to modify your portage database ( /var/db/pkg ) directly"
42 +echo "There is a HIGH possiblity that anything going wrong here will completely"
43 +echo "and unrecoverably BORK your portage."
44 +echo ""
45 +echo "pausing for 5 seconds, break out to abort..."
46 +sleep 5
47 +echo "pausing for 5 more seconds, just in case..."
48 +sleep 5
49 +echo "last chance, will start in 3 seconds."
50 +sleep 3
51 +echo "Too late -- may the diety of your choosing have mercy on us all.."
52 +echo ""
53 +echo ""
54 +
55 +echo "Upgrading currently-installed entries with EAPI=4 to EAPI=4-slot-abi if applicable"
56 +didsomething=0
57 +processedatoms=
58 +cd /var/db/pkg
59 +for atom in `find -mindepth 2 -type d |sed -e 's#^\./##'`; do
60 + if [[ $(cat "$atom/EAPI") == "4" ]]; then
61 + ofile=${opath}/$(echo $atom |sed -e 's#/#/*/#').ebuild
62 + if grep '^EAPI.*4-slot-abi' ${ofile} &>/dev/null; then
63 + echo -n " updating $atom ..."
64 +
65 + # update the abi
66 + echo '4-slot-abi' >"${atom}/EAPI"
67 +
68 + # set the package as coming from this repos
69 + cat "${opath}/profiles/repo_name" >"${atom}/repository"
70 +
71 + # update the ebuild so it matches what's in the repos
72 + cp ${ofile} "${atom}/"
73 +
74 + # update the slot, if slot has changed
75 + if grep '^SLOT=' ${ofile} |grep '/' &>/dev/null; then
76 + grep '^SLOT=' ${ofile} \
77 + |sed -e 's/SLOT=//' -e 's/"//g' >"${atom}/SLOT"
78 + fi
79 +
80 + # update DEPEND, RDEPEND
81 + for dependitem in DEPEND RDEPEND PDEPEND; do
82 + if [ -e ${atom}/${dependitem} ]; then
83 + mydep=$(portageq metadata / ebuild ${atom} ${dependitem});
84 + # make a list of use flags not set for the package, so that DEPEND can be trimmed
85 + for ech in $mydep; do
86 + if echo $ech |grep '\?$' &>/dev/null; then
87 + echo $ech |sed -e 's/\?$//' >>/tmp/${dependitem}-fulluse
88 + fi
89 + done
90 + # make grep match lines for the flags in USE
91 + sed -e "s/ /\n/g" ${atom}/USE |sed -e 's/^/^/' >/tmp/${dependitem}-use
92 + # add inversions of use flags to remove disabled matches
93 + sed -e "s/ /\n/g" ${atom}/USE |sed -e 's/^/!/' >>/tmp/${dependitem}-fulluse
94 + # add inversions to the use mask so that we don't strip !use deps when that flag is off
95 + sed -e "s/ /\n/g" ${atom}/IUSE |sed -e 's/^[^a-z0-9]//' \
96 + |grep -v -f /tmp/${dependitem}-use |sed -e 's/^/^!/' >>/tmp/${dependitem}-use
97 +
98 + # trim the unset USE flag deps from the new DEPEND list
99 + for ech in $(grep -v -f /tmp/${dependitem}-use /tmp/${dependitem}-fulluse); do
100 + mydep=$(echo " $mydep " |sed -e "s/ ${ech}? ([^()]*) / /" -e "s/ ${ech}? ([^()]*\(([^()]*)\)*[^()]*) / /" -e "s/ ${ech}? ([^()]*\(([^()]*\(([^()]*)\)*[^()]*)\)*[^()]*) / /")
101 + done
102 +
103 + # remove the use flag stuff from remaining mydeps as they are enabled
104 + mydep=$(echo $mydep |sed -e 's/[^\?\ ]*? (\([^?()]*\(([^?()]*)\)*[^?()]*\))/\1/g' -e 's/[^\?\ ]*? (\([^?()]*\(([^?()]*)\)*[^?()]*\))/\1/g' -e 's/[^\?\ ]*? (\([^?()]*\(([^?()]*)\)*[^?()]*\))/\1/g' -e 's/[^\?\ ]*? (\([^?()]*\(([^?()]*)\)*[^?()]*\))/\1/g' |xargs echo)
105 +
106 + # print old and new for debugging
107 + echo ""
108 + sed -e "s/ /\n/g" ${atom}/${dependitem} >/tmp/${dependitem}-old
109 + echo $mydep |sed -e "s/ /\n/g" |diff -U 0 /tmp/${dependitem}-old - \
110 + |grep -v -e '^---' -e '^+++' -e '^@@' |sed -e "s/^/ ${dependitem}: /"
111 +
112 + echo $mydep >${atom}/${dependitem}
113 + rm -f /tmp/${dependitem}-fulluse /tmp/${dependitem}-use
114 + fi; done
115 +
116 + echo " done."
117 + didsomething=$(($didsomething + 1))
118 + processedatoms="${processedatoms} ${atom}"
119 + touch "${atom}"
120 + fi
121 + fi
122 +done
123 +if (( $didsomething > 0 )); then
124 + echo "Substituting proper slot value for any dependencies with slot operators..."
125 + # substitute the proper slot for := and :* deps when they exist in *DEPEND
126 + for atom in $processedatoms ; do for dependitem in DEPEND RDEPEND PDEPEND; do
127 + if [ -e ${atom}/${dependitem} ]; then
128 + for dep in $(sed -e "s/ /\n/g" ${atom}/${dependitem}); do
129 + if echo $dep |grep ':[^ /=*]*[*=]' &>/dev/null; then
130 + # get the base slot desired so we can find a match
131 + pkg=$(echo $dep |sed -e 's/:.*$//')
132 + if echo $pkg |grep '^[<>=!]' &>/dev/null; then
133 + pkgfile=$(echo $pkg |sed -e 's/^[<>=!]*//' |xargs qatom |awk '{print $1 "/" $2 "-[0-9]"}')
134 + else
135 + pkgfile=$pkg
136 + fi
137 + pkguse=$(echo $dep |sed -e 's/^[^:]*:[^ /=*]*[=*]//')
138 + baseslot=$(echo $dep |sed -e 's/^[^:]*:\([^ /=*]*\)[=*].*$/\1/')
139 + slotop=$(echo $dep |sed -e 's/^[^:]*:[^ /=*]*\([=*]\).*$/\1/')
140 + : ${baseslot:=0}
141 + for matchdep in ${pkgfile}*/ ; do
142 + if [[ $(cat ${matchdep}/SLOT |sed -e 's#/.*$##') == $baseslot ]]; then
143 + mdepslot=$(cat ${matchdep}/SLOT)
144 + # echo "...${atom} : changing $dependitem $dep to $pkg:$mdepslot$slotop$pkguse "
145 + echo "${pkg}:${mdepslot}${slotop}${pkguse}" >>/tmp/new-${dependitem}
146 + fi
147 + done
148 + else
149 + echo "$dep" >>/tmp/new-${dependitem}
150 + fi
151 + done
152 + sed -e "s/ /\n/g" ${atom}/${dependitem} >/tmp/${dependitem}-old
153 + diff -U 0 /tmp/${dependitem}-old /tmp/new-${dependitem} \
154 + |grep -v -e '^---' -e '^+++' -e '^@@' |sed -e "s#^# ${atom} ${dependitem}: #"
155 +
156 + cat /tmp/new-${dependitem} |xargs echo >${atom}/${dependitem}
157 + rm -f /tmp/new-${dependitem} /tmp/${dependitem}-old
158 + fi
159 + done; done
160 + echo ""
161 + echo "$didsomething packages processed."
162 +else
163 + echo "Nothing to do"
164 +fi
165 +
166 +
167 +
168 +#
169 +# Depend stuff needs to have actual slot value instead of just the := shortcut
170 +# zmedico said this can help (in python):
171 +# settings = portage.config(clone=portage.settings) ; settings.setcpv('dev-perl/URI-1.590.0', mydb=portage.db['/']['vartree'].dbapi)
172 +# evaluate_slot_abi_equal_deps() function for that in pym/portage/dep/_slot_abi.py
173
174 diff --git a/profiles/base/package.keywords b/profiles/base/package.keywords
175 deleted file mode 100644
176 index 70e1b67..0000000
177 --- a/profiles/base/package.keywords
178 +++ /dev/null
179 @@ -1 +0,0 @@
180 -=sys-apps/portage-9999 amd64 x86
181
182 diff --git a/profiles/updates/1Q-2099 b/profiles/updates/1Q-2099
183 deleted file mode 100644
184 index 418412e..0000000
185 --- a/profiles/updates/1Q-2099
186 +++ /dev/null
187 @@ -1,15 +0,0 @@
188 -dev-lang/perl-5.12.4 0 0/5.12
189 -dev-lang/perl-5.12.4-r1 0 0/5.12
190 -dev-lang/perl-5.12.4-r2 0 0/5.12
191 -dev-lang/perl-5.14.1 0 0/5.14
192 -dev-lang/perl-5.14.1-r1 0 0/5.14
193 -dev-lang/perl-5.14.2 0 0/5.14
194 -dev-lang/perl-5.16.0 0 0/5.16
195 -dev-lang/spidermonkey-1.8.5-r1 0 0/185
196 -dev-lang/spidermonkey-1.8.7 0 0/187
197 -dev-libs/libyaml-0.1.4 0 0/2.0
198 -x11-base/xorg-server-1.10.6-r1 0 0/1.10
199 -x11-base/xorg-server-1.11.4-r1 0 0/1.11
200 -x11-base/xorg-server-1.12.2 0 0/1.12
201 -x11-libs/xcb-util-0.3.8 0 0/0.0
202 -x11-libs/xcb-util-0.3.9 0 0/1.0