Tôi đã viết một kịch bản python nhỏ chăm sóc vấn đề này. Logic nhìn vào từng dòng trong tệp package.accept_keywords
và chỉ hoạt động trên các dòng bắt đầu bằng =
hoặc <=
. Những dòng này có phiên bản ràng buộc tối đa để chúng tôi có thể kiểm tra xem chúng có cần thiết nữa không. Các dòng không có vòng loại hoặc a >=
được để nguyên như chúng ta không thể biết nếu chúng bị lỗi thời.
Các dòng mà chúng tôi quan tâm sau đó được phân tích cú pháp và phiên bản cài đặt của gói được kiểm tra. Nếu phiên bản đã cài đặt mới hơn phiên bản từ khóa hoặc hoàn toàn không được cài đặt, từ khóa sẽ bị coi là lỗi thời. Nếu gói đã cài đặt là phiên bản giống với phiên bản được từ khóa thì gói đã cài đặt sẽ được kiểm tra để xem liệu nó có còn bị khóa không. Nếu nó đã được ổn định, dòng bị lỗi thời, nếu không nó được giữ lại.
#!/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)
Điều này sẽ in các tập tin từ khóa mới để chuẩn ra. Lưu ý : không chuyển hướng đầu ra trở lại /etc/portage/package.accept_keywords
hoặc bạn sẽ ghi đè tệp và mất mọi thứ.
Điều này sẽ đi một chặng đường dài để làm sạch tệp từ khóa của bạn và cho các mối quan tâm khác của bạn, sắp xếp tệp và sau đó kiểm tra nó cho nhiều dòng cho cùng một gói sẽ giúp giải quyết hầu hết những gì còn lại.