Saya menulis skrip python kecil yang menangani masalah ini. Logika terlihat pada setiap baris dalam file package.accept_keywords
dan hanya bertindak pada baris yang dimulai dengan =
atau <=
. Baris-baris ini memiliki versi terikat maksimum sehingga kami dapat memeriksa apakah diperlukan lagi. Garis tanpa kualifikasi atau a >=
dibiarkan apa adanya karena kita tidak bisa tahu apakah itu usang.
Baris-baris yang kita pedulikan kemudian diurai dan versi paket yang terinstal diperiksa. Jika versi yang terinstal lebih baru dari versi yang dikata, atau tidak diinstal sama sekali, kata kunci dianggap usang. Jika paket yang diinstal adalah versi yang sama dengan versi kata kunci maka paket yang diinstal diperiksa untuk melihat apakah masih kata kunci. Jika telah distabilkan, saluran sudah usang, jika tidak dipertahankan.
#!/bin/env python
import re
import portage
vartree = portage.db[portage.root]['vartree']
with open('/etc/portage/package.accept_keywords') as f:
for x in f:
# eat newline
x = x.rstrip()
# we only want lines with a bounded max version
if re.match('^(=|<=)',x):
# get the package cpv atom -- strip the =|<= and the trailing keyword(s)
cpv_masked = re.sub('[<=]','',x.split(' ',1)[0])
cat, pkg, ver, rev = portage.catpkgsplit(cpv_masked)
# get cpv for all installed versions of the package
cpv_installed = vartree.dep_match(cat+'/'+pkg)
for cpv in cpv_installed:
cmp = portage.pkgcmp(portage.pkgsplit(cpv), portage.pkgsplit(cpv_masked))
# if the installed version is not newer than the masked version
if (cmp <= 0):
# check if this version is still keyworded
cpv_keywords = vartree.dbapi.aux_get(cpv, ['KEYWORDS'])
# keep keyword if the package has no keywords (**)
if not cpv_keywords[0]:
print(x)
break
# check if the installed package is still keyworded
for cpv_keyword in cpv_keywords[0].split(' '):
if cpv_masked_keyword == cpv_keyword:
# it is, keep the atom and move on to the next one
print(x)
break
else:
# keep atoms that have an unbounded max version
print(x)
Ini akan mencetak file kata kunci baru ke standar keluar. Catatan : jangan mengarahkan kembali output ke /etc/portage/package.accept_keywords
atau Anda akan merusak file dan kehilangan segalanya.
Ini akan sangat membantu membersihkan file kata kunci Anda dan untuk masalah Anda yang lain, mengurutkan file dan kemudian memeriksanya untuk beberapa baris untuk paket yang sama akan membantu menyelesaikan sebagian besar dari apa yang tersisa.