ฉันเขียนสคริปต์หลามขนาดเล็กที่ดูแลปัญหานี้ ตรรกะลักษณะที่แต่ละบรรทัดในแฟ้มpackage.accept_keywords
และมีเพียงทำหน้าที่บนเส้นที่เริ่มต้นด้วยหรือ=
<=
บรรทัดเหล่านี้มีเวอร์ชันที่ถูกผูกไว้สูงสุดเพื่อให้เราสามารถตรวจสอบว่ามีความจำเป็นอีกต่อไป บรรทัดที่ไม่มีตัวระบุหรือ a >=
จะถูกปล่อยให้เป็น - อย่างที่เราไม่สามารถรู้ได้ว่ามันล้าสมัยหรือไม่
บรรทัดที่เราสนใจนั้นจะถูกแยกวิเคราะห์และตรวจสอบแพ็คเกจที่ติดตั้ง หากเวอร์ชันที่ติดตั้งใหม่กว่าเวอร์ชันที่คีย์เวิร์ดหรือไม่ได้ติดตั้งอีกต่อไปคำหลักนั้นจะถือว่าล้าสมัย หากแพ็กเกจที่ติดตั้งเป็นเวอร์ชันเดียวกันกับเวอร์ชันที่คีย์เวิร์ดแพ็กเกจที่ติดตั้งจะถูกตรวจสอบเพื่อดูว่ายังคงเป็นคีย์เวิร์ดหรือไม่ หากมีการทำให้เสถียรสายจะล้าสมัยมิฉะนั้นจะคงไว้
#!/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)
การดำเนินการนี้จะพิมพ์ไฟล์คำหลักใหม่ออกเป็นมาตรฐาน หมายเหตุ : อย่าเปลี่ยนเส้นทางเอาต์พุตกลับเข้าไปมิ/etc/portage/package.accept_keywords
ฉะนั้นคุณจะปิดบังไฟล์และสูญเสียทุกอย่าง
วิธีนี้จะเป็นการทำความสะอาดไฟล์คำหลักของคุณและสำหรับข้อกังวลอื่น ๆ ของคุณเรียงลำดับไฟล์จากนั้นตรวจสอบไฟล์หลายบรรทัดสำหรับแพ็คเกจเดียวกันจะช่วยแก้ไขสิ่งที่เหลืออยู่ส่วนใหญ่