Skip to content

Commit

Permalink
Switch to external py-libversion module (fixes repology#576)
Browse files Browse the repository at this point in the history
Also rework travis script and enable postgresql libversion extension
(repology#577)
  • Loading branch information
AMDmi3 committed Apr 3, 2018
1 parent 369ad03 commit dfd6be5
Show file tree
Hide file tree
Showing 12 changed files with 53 additions and 345 deletions.
45 changes: 22 additions & 23 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,10 +1,17 @@
language: python
sudo: true
dist: trusty
services:
- postgresql
addons:
postgresql: "9.6"
postgresql: "10"
apt:
packages:
- postgresql-10
- postgresql-client-10
- postgresql-server-dev-10
- librpm-dev
env:
global:
- PGPORT=5433
- REPOLOGY_CONFIG=repology-test.conf.default
python:
- 3.6
before_install:
Expand All @@ -24,31 +31,23 @@ before_install:
- pip install rubymarshal
- pip install voluptuous

- sudo /etc/init.d/postgresql stop
- wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
- sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs 2>/dev/null)-pgdg main" >> /etc/apt/sources.list.d/postgresql.list'
- sudo apt-get update -qq
- sudo apt-get install -qq librpm-dev
- sudo apt-get install -qq postgresql-10 postgresql-client-10
- sudo cp /etc/postgresql/9.6/main/pg_hba.conf /etc/postgresql/10/main/pg_hba.conf
- sudo /etc/init.d/postgresql restart
- export PGPORT=5433
- wget -qO- https://github.com/repology/libversion/archive/master.tar.gz | tar -xzf- && ( cd libversion-master && cmake . && make && sudo make install && sudo ldconfig )
- pip install libversion

- wget -qO- https://github.com/repology/libversion/archive/2.5.0.tar.gz | tar -xzf- && ( cd libversion-2.5.0 && cmake . && make && sudo make install )

- git clone --depth=1 https://github.com/htacg/tidy-html5.git && ( cd tidy-html5 && cmake . && make && sudo make install )
- sudo ldconfig
- wget -qO- https://github.com/htacg/tidy-html5/archive/master.tar.gz | tar -xzf- && ( cd tidy-html5-master && cmake . && make && sudo make install && sudo ldconfig )
- wget -qO- https://github.com/repology/postgresql-libversion/archive/master.tar.gz | tar -xzf- && ( cd postgresql-libversion-master && sudo make install )

- git clone --depth=1 https://github.com/repology/repology-rules.git rules.d
before_script:
- psql -U postgres -c "CREATE DATABASE repology_test;"
- psql -U postgres -c "CREATE USER repology_test WITH PASSWORD 'repology_test'"
- psql -U postgres -c "GRANT ALL PRIVILEGES ON DATABASE repology_test TO repology_test"
- psql -U postgres -d repology_test -c "CREATE EXTENSION IF NOT EXISTS pg_trgm"
- export REPOLOGY_CONFIG=repology-test.conf.default
- sudo -u postgres psql -c "CREATE DATABASE repology_test;"
- sudo -u postgres psql -c "CREATE USER repology_test WITH PASSWORD 'repology_test'"
- sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE repology_test TO repology_test"
- sudo -u postgres psql -d repology_test -c "CREATE EXTENSION IF NOT EXISTS pg_trgm"
- sudo -u postgres psql -d repology_test -c "CREATE EXTENSION IF NOT EXISTS libversion"
- echo "BADGE_FONT = '/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf'" >> repology-test.conf.default
- sed -i -e 's|dbname=repology_test|& port=5433 host=localhost|' repology-test.conf.default
script:
# test buidling C utils
# test building C utils
- make

# check yaml schemas
Expand Down
8 changes: 1 addition & 7 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,7 @@ LDFLAGS+= `pkg-config --libs rpm`

STATICDIR= repologyapp/static

all: helpers/rpmcat/rpmcat repology/version.so gzip-static

repology/version.so: build/repology/version.so
cp build/repology/version*.so repology/version.so

build/repology/version.so: repology/version.c
env CFLAGS="${CFLAGS}" python3 setup.py build --build-lib build build
all: helpers/rpmcat/rpmcat gzip-static

gzip-static:
gzip -9 -f -k -v ${STATICDIR}/*.css ${STATICDIR}/*.js ${STATICDIR}/*.ico ${STATICDIR}/*.svg
Expand Down
5 changes: 3 additions & 2 deletions repology/fetchers/freshcode.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,11 @@
import json
import os

from libversion import version_compare

from repology.fetchers.helpers.fetch import Fetch
from repology.fetchers.helpers.state import StateFile
from repology.logger import NoopLogger
from repology.version import VersionCompare


class FreshcodeFetcher():
Expand Down Expand Up @@ -57,7 +58,7 @@ def Fetch(self, statepath, update=True, logger=NoopLogger()):
if entry['name'] in state:
oldentry = state[entry['name']]

if VersionCompare(entry['version'], oldentry['version']) > 0:
if version_compare(entry['version'], oldentry['version']) > 0:
logger.Log('replacing entry "{}", version changed {} -> {}'.format(entry['name'], oldentry['version'], entry['version']))
state[entry['name']] = entry
else:
Expand Down
12 changes: 6 additions & 6 deletions repology/package.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
import re


from repology.version import ANY_IS_PATCH_LEFT, ANY_IS_PATCH_RIGHT, P_IS_PATCH_LEFT, P_IS_PATCH_RIGHT, VersionCompare
from libversion import ANY_IS_PATCH, P_IS_PATCH, version_compare


class VersionClass:
Expand Down Expand Up @@ -299,13 +299,13 @@ def VersionCompare(self, other):
if self_metaorder > other_metaorder:
return 1

return VersionCompare(
return version_compare(
self.version,
other.version,
((self.flags & PackageFlags.p_is_patch) and P_IS_PATCH_LEFT) |
((other.flags & PackageFlags.p_is_patch) and P_IS_PATCH_RIGHT) |
((self.flags & PackageFlags.any_is_patch) and ANY_IS_PATCH_LEFT) |
((other.flags & PackageFlags.any_is_patch) and ANY_IS_PATCH_RIGHT)
((self.flags & PackageFlags.p_is_patch) and P_IS_PATCH) |
((self.flags & PackageFlags.any_is_patch) and ANY_IS_PATCH),
((other.flags & PackageFlags.p_is_patch) and P_IS_PATCH) |
((other.flags & PackageFlags.any_is_patch) and ANY_IS_PATCH)
)

@property
Expand Down
5 changes: 3 additions & 2 deletions repology/parsers/freshcode.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,9 @@

import json

from libversion import version_compare

from repology.package import Package
from repology.version import VersionCompare


class FreshcodeParser():
Expand Down Expand Up @@ -66,7 +67,7 @@ def Parse(self, path):
#if download
# pkg.downloads = [download]

if pkg.name not in result or VersionCompare(pkg.version, result[pkg.name].version) > 0:
if pkg.name not in result or version_compare(pkg.version, result[pkg.name].version) > 0:
result[pkg.name] = pkg

return result.values()
5 changes: 3 additions & 2 deletions repology/parsers/gobolinux.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,9 @@
import re
import sys

from libversion import version_compare

from repology.package import Package
from repology.version import VersionCompare


def ExpandDownloadUrlTemplates(url):
Expand All @@ -46,7 +47,7 @@ def Parse(self, path):

maxversion = None
for version_name in os.listdir(package_path):
if maxversion is None or VersionCompare(version_name, maxversion) > 0:
if maxversion is None or version_compare(version_name, maxversion) > 0:
maxversion = version_name

if maxversion is None:
Expand Down
7 changes: 4 additions & 3 deletions repology/parsers/hackage.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,9 @@
import re
import sys

from libversion import version_compare

from repology.package import Package
from repology.version import VersionCompare


class HackageParser():
Expand Down Expand Up @@ -83,7 +84,7 @@ def Parse(self, path):
if versiondir == 'preferred-versions':
continue

if maxversion is None or VersionCompare(versiondir, maxversion) > 0:
if maxversion is None or version_compare(versiondir, maxversion) > 0:
maxversion = versiondir
cabalpath = os.path.join(path, moduledir, maxversion, moduledir + '.cabal')

Expand All @@ -95,7 +96,7 @@ def Parse(self, path):

cabaldata = self.ParseCabal(cabalpath)

if cabaldata['name'] == pkg.name and VersionCompare(cabaldata['version'], pkg.version) == 0:
if cabaldata['name'] == pkg.name and version_compare(cabaldata['version'], pkg.version) == 0:
if 'synopsis' in cabaldata and cabaldata['synopsis']:
pkg.comment = cabaldata['synopsis'].strip()
# XXX: leave for later, need extra postprocessing, too much obfuscation
Expand Down
11 changes: 6 additions & 5 deletions repology/transformer.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,11 @@
import re
import sys

from libversion import version_compare

import yaml

from repology.package import PackageFlags
from repology.version import VersionCompare


class RuleApplyResult:
Expand Down Expand Up @@ -168,19 +169,19 @@ def ApplyRule(self, rule, package, context):

# compare versions
if 'vergt' in rule:
if VersionCompare(package.version, rule['vergt']) <= 0:
if version_compare(package.version, rule['vergt']) <= 0:
return RuleApplyResult.unmatched

if 'verge' in rule:
if VersionCompare(package.version, rule['verge']) < 0:
if version_compare(package.version, rule['verge']) < 0:
return RuleApplyResult.unmatched

if 'verlt' in rule:
if VersionCompare(package.version, rule['verlt']) >= 0:
if version_compare(package.version, rule['verlt']) >= 0:
return RuleApplyResult.unmatched

if 'verle' in rule:
if VersionCompare(package.version, rule['verle']) > 0:
if version_compare(package.version, rule['verle']) > 0:
return RuleApplyResult.unmatched

# match name patterns
Expand Down
68 changes: 0 additions & 68 deletions repology/version.c

This file was deleted.

5 changes: 3 additions & 2 deletions repologyapp/views/metapackage.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@

import flask

from libversion import version_compare

from repologyapp.globals import *
from repologyapp.metapackages import metapackages_to_summary_items
from repologyapp.template_helpers import AFKChecker
Expand All @@ -29,7 +31,6 @@
from repology.metapackageproc import PackagesToMetapackages
from repology.package import VersionClass
from repology.packageproc import PackagesetAggregateByVersion, PackagesetSortByNameVersion, PackagesetSortByVersion
from repology.version import VersionCompare


@ViewRegistrar('/metapackage/<name>')
Expand Down Expand Up @@ -156,7 +157,7 @@ def prepare_versions(versions):
return []

def version_compare_rev(v1, v2):
return VersionCompare(v2, v1)
return version_compare(v2, v1)

return sorted(versions, key=cmp_to_key(version_compare_rev))

Expand Down
24 changes: 2 additions & 22 deletions setup.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,6 @@
#!/usr/bin/env python3

import subprocess
from distutils.core import Extension, setup


def pkgconfig(package):
result = {}
for token in subprocess.check_output(['pkg-config', '--libs', '--cflags', package]).decode('utf-8').split():
if token.startswith('-I'):
result.setdefault('include_dirs', []).append(token[2:])
elif token.startswith('-L'):
result.setdefault('library_dirs', []).append(token[2:])
elif token.startswith('-l'):
result.setdefault('libraries', []).append(token[2:])
return result
from distutils.core import setup


setup(
Expand All @@ -22,7 +9,7 @@ def pkgconfig(package):
description='Compare package versions in many repositories',
author='Dmitry Marakasov',
author_email='[email protected]',
url='http://repology.org/',
url='https://repology.org/',
packages=[
'repology',
'repology.fetchers',
Expand All @@ -45,12 +32,5 @@ def pkgconfig(package):
'Programming Language :: Python :: 3 :: Only',
'Programming Language :: Python :: 3.6',
'Programming Language :: C',
],
ext_modules=[
Extension(
'repology.version',
sources=['repology/version.c'],
**pkgconfig('libversion')
)
]
)
Loading

0 comments on commit dfd6be5

Please sign in to comment.