mirror of
https://abf.rosa.ru/djam/repo-analyzer.git
synced 2025-02-23 18:12:54 +00:00
Retry database operation; Modify versions compare
This commit is contained in:
parent
2f2b1bc865
commit
31f3f31e36
1 changed files with 46 additions and 20 deletions
|
@ -372,12 +372,30 @@ def process_package_worker(num, queue_in, generator, gen_lock, db_struct,
|
||||||
remove_cached_file(pkg)
|
remove_cached_file(pkg)
|
||||||
queue_in.task_done()
|
queue_in.task_done()
|
||||||
|
|
||||||
|
conn = None
|
||||||
|
retryCnt = 0
|
||||||
|
retry = True
|
||||||
|
while retry:
|
||||||
|
retry = False
|
||||||
|
try:
|
||||||
conn = sqlite3.connect(DB, timeout=30)
|
conn = sqlite3.connect(DB, timeout=30)
|
||||||
conn.executemany("""
|
conn.executemany("""
|
||||||
INSERT INTO packages (%s) VALUES (%s)""" %
|
INSERT INTO packages (%s) VALUES (%s)""" %
|
||||||
(db_struct['packages_field_names'],
|
(db_struct['packages_field_names'],
|
||||||
db_struct['packages_values_template']),
|
db_struct['packages_values_template']),
|
||||||
data['packages'])
|
data['packages'])
|
||||||
|
except sqlite3.OperationalError as ex:
|
||||||
|
if (str(ex) == 'database is locked'):
|
||||||
|
print 'Database is locked. Retrying...'
|
||||||
|
conn.close()
|
||||||
|
time.sleep(10)
|
||||||
|
retryCnt += 1
|
||||||
|
if retryCnt < 3:
|
||||||
|
retry = True
|
||||||
|
else:
|
||||||
|
raise ex
|
||||||
|
else:
|
||||||
|
raise ex
|
||||||
|
|
||||||
for table in db_struct['dep_tables']:
|
for table in db_struct['dep_tables']:
|
||||||
conn.executemany("""
|
conn.executemany("""
|
||||||
|
@ -793,7 +811,7 @@ def import_repositories(options, conn):
|
||||||
### Post-process repo.db after data import
|
### Post-process repo.db after data import
|
||||||
################################################
|
################################################
|
||||||
|
|
||||||
def version_ok(required_version, compare_flag, candidate_version):
|
def version_ok(required_version, compare_flag, candidate_version, context=''):
|
||||||
def sep_version(version):
|
def sep_version(version):
|
||||||
vrem = re.match(r'\A(.+)(\-[^\-\:]+)(\:[^\:]+|)\Z', version)
|
vrem = re.match(r'\A(.+)(\-[^\-\:]+)(\:[^\:]+|)\Z', version)
|
||||||
if vrem:
|
if vrem:
|
||||||
|
@ -878,6 +896,10 @@ def version_ok(required_version, compare_flag, candidate_version):
|
||||||
epoch = None
|
epoch = None
|
||||||
if e1_m:
|
if e1_m:
|
||||||
(epoch, verstring) = (e1_m.group(1), e1_m.group(2))
|
(epoch, verstring) = (e1_m.group(1), e1_m.group(2))
|
||||||
|
j = verstring.find(':')
|
||||||
|
if j != -1:
|
||||||
|
# ignore ":2012.0" in 2014-10:2012.0
|
||||||
|
verstring = verstring[:j]
|
||||||
j = verstring.find('-')
|
j = verstring.find('-')
|
||||||
if j != -1:
|
if j != -1:
|
||||||
if verstring[:j] == '':
|
if verstring[:j] == '':
|
||||||
|
@ -911,14 +933,14 @@ def version_ok(required_version, compare_flag, candidate_version):
|
||||||
candidate_version == required_version:
|
candidate_version == required_version:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
cmp_res = None
|
#cmp_res = None
|
||||||
try:
|
#try:
|
||||||
cmp_res = cmp_versions(candidate_version, required_version)
|
# cmp_res = cmp_versions(candidate_version, required_version)
|
||||||
except ValueError as ex:
|
#except ValueError as ex:
|
||||||
print ('Error when comparing versions: "%s" and "%s"\n%s' %
|
# print ('Error when comparing versions (%s): "%s" and "%s"\n%s' %
|
||||||
(candidate_version, required_version, str(ex)))
|
# (context, candidate_version, required_version, str(ex)))
|
||||||
return False
|
# return False
|
||||||
rpm_cmp_res = rpm_cmp_versions(candidate_version, required_version)
|
cmp_res = rpm_cmp_versions(candidate_version, required_version)
|
||||||
#if (cmp_res != rpm_cmp_res):
|
#if (cmp_res != rpm_cmp_res):
|
||||||
# print >> sys.stderr, (('Invalid compare: "%s" vs "%s"! '
|
# print >> sys.stderr, (('Invalid compare: "%s" vs "%s"! '
|
||||||
# 'Results: rc: %d, rpm: %d.') %
|
# 'Results: rc: %d, rpm: %d.') %
|
||||||
|
@ -972,7 +994,8 @@ SELECT packages.id AS package_id, packages.name AS package_name, packages.nvra,
|
||||||
'(flags = %d, version = %s)!' %
|
'(flags = %d, version = %s)!' %
|
||||||
(provides_flags, provides_version))
|
(provides_flags, provides_version))
|
||||||
if version_ok(dep_version, dep_flags & RPMSENSE_SENSEMASK,
|
if version_ok(dep_version, dep_flags & RPMSENSE_SENSEMASK,
|
||||||
provides_version):
|
provides_version, '%s %s %s' %
|
||||||
|
(package_nvra, dep_type, dep_name)):
|
||||||
dep_res.append({'prov_id': provides_id, 'pkg_id': pkg_id})
|
dep_res.append({'prov_id': provides_id, 'pkg_id': pkg_id})
|
||||||
if len(dep_res) > 0:
|
if len(dep_res) > 0:
|
||||||
for res_rec in dep_res:
|
for res_rec in dep_res:
|
||||||
|
@ -1033,7 +1056,8 @@ SELECT packages.id AS package_id, packages.name AS package_name, packages.nvra,
|
||||||
(provides_flags, provides_version))
|
(provides_flags, provides_version))
|
||||||
if version_ok(requires_version,
|
if version_ok(requires_version,
|
||||||
requires_flags & RPMSENSE_SENSEMASK,
|
requires_flags & RPMSENSE_SENSEMASK,
|
||||||
provides_version):
|
provides_version,
|
||||||
|
'%s requires %s' % (package_nvra, requires_name)):
|
||||||
if pkg_id == cpackage_id:
|
if pkg_id == cpackage_id:
|
||||||
# the same package is preferred over any other
|
# the same package is preferred over any other
|
||||||
req_res.append({'prov_id': provides_id,
|
req_res.append({'prov_id': provides_id,
|
||||||
|
@ -1045,7 +1069,8 @@ SELECT packages.id AS package_id, packages.name AS package_name, packages.nvra,
|
||||||
if not better_version:
|
if not better_version:
|
||||||
better_version = version_ok(provides_version,
|
better_version = version_ok(provides_version,
|
||||||
RPMSENSE_GREATER,
|
RPMSENSE_GREATER,
|
||||||
preferred_version)
|
preferred_version,
|
||||||
|
'%s requires %s' % (package_nvra, requires_name))
|
||||||
if better_version:
|
if better_version:
|
||||||
preferred_version = provides_version
|
preferred_version = provides_version
|
||||||
|
|
||||||
|
@ -1055,7 +1080,8 @@ SELECT packages.id AS package_id, packages.name AS package_name, packages.nvra,
|
||||||
(dep_cand[0], dep_cand[3], dep_cand[6])
|
(dep_cand[0], dep_cand[3], dep_cand[6])
|
||||||
if provides_version == preferred_version or \
|
if provides_version == preferred_version or \
|
||||||
version_ok(provides_version, RPMSENSE_EQUAL,
|
version_ok(provides_version, RPMSENSE_EQUAL,
|
||||||
preferred_version):
|
preferred_version,
|
||||||
|
'%s requires %s' % (package_nvra, requires_name)):
|
||||||
req_res.append({'prov_id': provides_id,
|
req_res.append({'prov_id': provides_id,
|
||||||
'pkg_id': pkg_id})
|
'pkg_id': pkg_id})
|
||||||
|
|
||||||
|
@ -1089,7 +1115,7 @@ INSERT INTO package_requires_res(package_id, requires_id,
|
||||||
VALUES (?, ?, ?, ?)
|
VALUES (?, ?, ?, ?)
|
||||||
""", [cpackage_id, requires_id, res_rec.get('prov_id'), res_rec.get('pkg_id')])
|
""", [cpackage_id, requires_id, res_rec.get('prov_id'), res_rec.get('pkg_id')])
|
||||||
else:
|
else:
|
||||||
print requires_name, ' ', requires_version, ' (required by %s)' % package_nvra, ' not found!!!'
|
print requires_name, requires_version, '(required by %s)' % package_nvra, 'not found!!!'
|
||||||
broken_dep += 1
|
broken_dep += 1
|
||||||
print 'broken_deps: ', broken_dep
|
print 'broken_deps: ', broken_dep
|
||||||
print ''
|
print ''
|
||||||
|
|
Loading…
Add table
Reference in a new issue