Exemplo n.º 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
Exemplo n.º 2
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
Exemplo n.º 3
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
Exemplo n.º 4
0
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