আমি একটি ছোট অজগর লিপি লিখেছি যা এই সমস্যার যত্ন নেয়। যুক্তিবিজ্ঞান ফাইলে প্রতিটি লাইনে এ দেখায় package.accept_keywords
এবং শুধুমাত্র যে সব লাইন দিয়ে শুরু উপর কাজ করে =
বা <=
। এই রেখাগুলির সর্বাধিক সীমাবদ্ধ সংস্করণ রয়েছে তাই সেগুলির আর প্রয়োজন হয় কিনা তা আমরা পরীক্ষা করতে পারি। কোনও বাছাইকারী বা একটি ছাড়া লাইনগুলি >=
যেমন রয়েছে তেমনি আমরা জানি না যে তারা অপ্রচলিত কিনা।
আমরা যে লাইনের বিষয়ে যত্নশীল সেগুলি পরে বিশ্লেষণ করা হয় এবং প্যাকেজের ইনস্টল করা সংস্করণটি চেক করা হয়। যদি ইনস্টল করা সংস্করণটি কীওয়ার্ডযুক্ত সংস্করণের চেয়ে নতুন হয় বা এটি আর ইনস্টল না করা হয় তবে কীওয়ার্ডটি অচল মনে করা হয়। যদি ইনস্টল করা প্যাকেজটি কীওয়ার্ড সংস্করণ হিসাবে একই সংস্করণ হয় তবে ইনস্টল করা প্যাকেজটি কীওয়ার্ড করা আছে কিনা তা পরীক্ষা করে নেওয়া হয়। এটি স্থিতিশীল করা থাকলে, লাইনটি অপ্রচলিত হয়, অন্যথায় এটি বজায় রাখা হয়।
#!/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
বা আপনি ফাইলটি ক্লোবার করবেন এবং সমস্ত কিছু হারাবেন।
এটি আপনার কীওয়ার্ড ফাইল পরিষ্কার করতে এবং আপনার অন্যান্য উদ্বেগের জন্য, ফাইলটি বাছাই করা এবং তারপরে একই প্যাকেজের জন্য একাধিক লাইনের জন্য পরীক্ষা করা অনেকাংশে যা বাকী রয়েছে তা সমাধানে সহায়তা করবে।