コード例 #1
0
def Main():
    parser = ArgumentParser()
    parser.add_argument('-s',
                        '--statedir',
                        help='path to directory with repository state')
    parser.add_argument('-U',
                        '--rules',
                        default='rules.yaml',
                        help='path to name transformation rules yaml')
    parser.add_argument('-l', '--logfile', help='path to log file')

    parser.add_argument('-t',
                        '--tag',
                        action='append',
                        help='only process repositories with this tag')
    parser.add_argument('-r',
                        '--repository',
                        action='append',
                        help='only process repositories with this name')
    parser.add_argument('-S',
                        '--no-shadow',
                        action='store_true',
                        help='treat shadow repositories as normal')

    parser.add_argument('-o', '--output', help='path to output directory')
    options = parser.parse_args()

    if not options.statedir:
        raise RuntimeError("please set --statedir")
    if not options.tag and not options.repository:
        raise RuntimeError("please set --tag or --repository")

    logger = StderrLogger()
    if options.logfile:
        logger = FileLogger(options.logfile)

    tags = [tag.split(',') for tag in options.tag] if options.tag else []

    nametrans = NameTransformer(options.rules)
    repoman = RepositoryManager(options.statedir,
                                enable_shadow=not options.no_shadow)
    packages = repoman.Deserialize(nametrans,
                                   tags=tags,
                                   repositories=options.repository,
                                   logger=logger)

    RepologyOrg(options.output, packages,
                repoman.GetNames(tags=tags, repositories=options.repository),
                repoman.GetMetadata(), logger)

    unmatched = nametrans.GetUnmatchedRules()
    if len(unmatched):
        wlogger = logger.GetPrefixed("WARNING: ")
        wlogger.Log("unmatched rules detected!")

        for rule in unmatched:
            wlogger.Log(rule)

    return 0
コード例 #2
0
ファイル: repology-report.py プロジェクト: lugnsk/repology
def Main():
    parser = ArgumentParser()
    parser.add_argument('-s',
                        '--statedir',
                        help='path to directory with repository state')
    parser.add_argument('-U',
                        '--rules',
                        default='rules.yaml',
                        help='path to name transformation rules yaml')
    parser.add_argument('-l', '--logfile', help='path to log file')

    parser.add_argument('-t',
                        '--tag',
                        action='append',
                        help='only process repositories with this tag')
    parser.add_argument('-r',
                        '--repository',
                        action='append',
                        help='only process repositories with this name')
    parser.add_argument('-S',
                        '--no-shadow',
                        action='store_true',
                        help='treat shadow repositories as normal')

    parser.add_argument('-m', '--maintainer', help='filter by maintainer')
    parser.add_argument('-c', '--category', help='filter by category')
    parser.add_argument('-n',
                        '--little-repos',
                        help='filter by number of repos')
    parser.add_argument('-N', '--many-repos', help='filter by number of repos')
    parser.add_argument('-i',
                        '--in-repository',
                        help='filter by presence in repository')
    parser.add_argument('-x',
                        '--not-in-repository',
                        help='filter by absence in repository')
    parser.add_argument('-O',
                        '--outdated-in-repository',
                        help='filter by outdatedness in repository')

    parser.add_argument('-o', '--output', help='path to output file')
    options = parser.parse_args()

    if not options.statedir:
        raise RuntimeError("please set --statedir")
    if not options.tag and not options.repository:
        raise RuntimeError("please set --tag or --repository")

    logger = StderrLogger()
    if options.logfile:
        logger = FileLogger(options.logfile)

    tags = [tag.split(',') for tag in options.tag] if options.tag else []

    nametrans = NameTransformer(options.rules)
    repoman = RepositoryManager(options.statedir,
                                enable_shadow=not options.no_shadow)
    packages = repoman.Deserialize(nametrans,
                                   tags=tags,
                                   repositories=options.repository,
                                   logger=logger)

    packages = FilterPackages(
        packages, options.maintainer, options.category,
        int(options.many_repos) if options.many_repos is not None else None,
        int(options.little_repos)
        if options.little_repos is not None else None, options.in_repository,
        options.not_in_repository, options.outdated_in_repository)

    template = Template()
    rp = ReportProducer(template, "table.html")
    rp.RenderToFile(options.output,
                    packages,
                    repoman.GetNames(tags=tags,
                                     repositories=options.repository),
                    repositories=repoman.GetMetadata())

    unmatched = nametrans.GetUnmatchedRules()
    if len(unmatched):
        wlogger = logger.GetPrefixed("WARNING: ")
        wlogger.Log("unmatched rules detected!")

        for rule in unmatched:
            wlogger.Log(rule)

    return 0