Пример #1
0
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!'))
Пример #2
0
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'))
Пример #3
0
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)
Пример #4
0
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)