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
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
# (at your option) any later version. # # repology is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with repology. If not, see <http://www.gnu.org/licenses/>. import flask from repology.config import config from repology.database import Database from repology.repoman import RepositoryManager __all__ = ['get_db', 'repometadata', 'reponames'] repoman = RepositoryManager(config['REPOS_DIR'], 'dummy') repometadata = repoman.GetMetadata(config['REPOSITORIES']) reponames = repoman.GetNames(config['REPOSITORIES']) def get_db(): # XXX: this is not really a persistent DB connection! if not hasattr(flask.g, 'database'): flask.g.database = Database(config['DSN'], readonly=False, autocommit=True) return flask.g.database
from repology.repoman import RepositoryManager from repology.template_helpers import * from repology.version import VersionCompare # create application and handle configuration app = flask.Flask(__name__) app.config.from_pyfile('repology.conf.default') app.config.from_pyfile('repology.conf', silent=True) app.config.from_envvar('REPOLOGY_CONFIG', silent=True) # global repology objects repoman = RepositoryManager( app.config['REPOS_DIR'], 'dummy') # XXX: should not construct fetchers and parsers here repometadata = repoman.GetMetadata() reponames = repoman.GetNames(app.config['REPOSITORIES']) # templates: tuning app.jinja_env.trim_blocks = True app.jinja_env.lstrip_blocks = True # templates: custom filters app.jinja_env.filters['pkg_format'] = pkg_format app.jinja_env.filters[ 'css_for_package_versionclass'] = css_for_package_versionclass app.jinja_env.filters[ 'css_for_summary_versionclass'] = css_for_summary_versionclass app.jinja_env.filters['maintainer_to_links'] = maintainer_to_links app.jinja_env.filters[ 'maintainers_to_group_mailto'] = maintainers_to_group_mailto