def layman_check(): """Check basic layman config validity.""" dtd_loc = ('http://git.overlays.gentoo.org/gitweb/?' 'p=proj/repositories-xml-format.git;a=blob_plain;' 'f=schema/%s;hb=HEAD') if not lxml or not httplib2: raise CommandError(fail("Layman validity checks require the httplib2 " "and lxml Python packages")) http = httplib2.Http(cache='.http_cache') layman_dtd = http.request(dtd_loc % 'layman-global.dtd')[1] repos_dtd = http.request(dtd_loc % 'repositories.dtd')[1] failed = False for dtd, file in [(layman_dtd, 'layman.xml'), (repos_dtd, 'layman2.xml')]: dtd = etree.DTD(StringIO(dtd)) doc = etree.parse('support/%s' % file) if not dtd.validate(doc): print(fail('%s is invalid' % file)) failed = True if not failed: print(success('layman files valid!'))
def keyword_check(): """Check for missing keywords.""" for file in glob('metadata/md5-cache/*/*'): # Skip live packages, they shouldn't have stable keywords anyway if file.endswith('-9999'): continue meta = dict([line.strip().split('=', 1) for line in open(file)]) pkg = file.split('/', 2)[2] if 'amd64' not in meta['KEYWORDS']: print(fail('[~]amd64 keyword missing in %r' % pkg)) if 'x86' not in meta['KEYWORDS']: print(fail('[~]x86 keyword missing in %r' % pkg)) print(success('All packages checked for keywords'))
def cupage_check(): """Make sure a watch file exists for each package.""" failures = 0 packages = glob('*-*/*') for package in packages: if not os.path.isfile(os.path.join(package, 'watch')): print(fail('Missing watch file in %r' % package)) failures += 1 if failures == 0: print(success('All watch files present!')) else: print(fail('%d watch file%s missing!' % (failures, 's' if failures > 1 else ''))) exit(failures)
def gen_news_sigs(): """Generate news file signatures.""" news_files = glob('metadata/news/*/*.txt') dep(map(lambda s: s + '.asc', news_files), news_files, mapping=True) if not SIGN_KEY: raise CommandError(fail('No GnuPG key set!')) base_dir = os.path.abspath(os.curdir) for path in news_files: try: dir, file = os.path.split(path) os.chdir(dir) sign_file = file + '.asc' if newer(sign_file, file): continue # Delete up front, if we can't sign we shouldn't leave stale # signatures if os.path.exists(sign_file): os.unlink(sign_file) check_call(['gpg', '--local-user', SIGN_KEY, '--detach-sign', '--armor', file]) finally: os.chdir(base_dir)