Skip to content

Commit aa87217

Browse files
Eduard Čubaj-mracek
authored andcommitted
[swdb]: expose interface for database transformation
We need to call database transformer from dnf-plugins-core to perform yum->swdb transformation
1 parent c5a8f66 commit aa87217

File tree

3 files changed

+33
-19
lines changed

3 files changed

+33
-19
lines changed

dnf.spec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
%global _docdir_fmt %{name}
2525

2626
Name: dnf
27-
Version: 2.8.0
27+
Version: 2.8.1
2828
Release: 1%{?dist}
2929
Summary: Package manager forked from Yum, using libsolv as a dependency resolver
3030
# For a breakdown of the licensing, see PACKAGE-LICENSING

dnf/db/history.py

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,15 @@
1717
# James Antill <[email protected]>
1818
# Eduard Cuba <[email protected]>
1919

20-
from dnf.i18n import ucd
20+
from dnf.i18n import ucd, _
2121
import time
2222
import os
2323
from dnf.yum import misc
2424
from hawkey import Swdb, SwdbPkg, SwdbItem, convert_reason
25-
from .swdb_transformer import run as transformdb
25+
from .swdb_transformer import transformSwdb
2626
from .addondata import AddonData
2727
from .group import GroupPersistor
28+
from dnf.util import logger
2829

2930

3031
class SwdbInterface(object):
@@ -51,20 +52,36 @@ def addon_data(self):
5152
self._addon_data = AddonData(self._db_dir, self._root)
5253
return self._addon_data
5354

55+
def _createdb(self, input_dir):
56+
""" Create SWDB database if necessary and perform transformation """
57+
if not self._swdb.exist():
58+
dbdir = os.path.dirname(self.path)
59+
if not os.path.exists(dbdir):
60+
os.makedirs(dbdir)
61+
self._swdb.create_db()
62+
# transformation may only run on empty database
63+
output_file = self._swdb.get_path()
64+
transformSwdb(input_dir, output_file)
65+
66+
def _initSwdb(self, input_dir='/var/lib/dnf/'):
67+
""" Create SWDB object and create database if necessary """
68+
self._swdb = Swdb.new(self.path, self.releasever)
69+
self._createdb(input_dir)
70+
5471
@property
5572
def swdb(self):
73+
""" Lazy initialize Swdb object """
5674
if not self._swdb:
57-
self._swdb = Swdb.new(self.path, self.releasever)
58-
if not self._swdb.exist():
59-
dbdir = os.path.dirname(self.path)
60-
if not os.path.exists(dbdir):
61-
os.makedirs(dbdir)
62-
self._swdb.create_db()
63-
# does nothing when there is nothing to transform
64-
if self._transform:
65-
transformdb(output_file=self._swdb.get_path())
75+
self._initSwdb()
6676
return self._swdb
6777

78+
def transform(self, input_dir):
79+
""" Interface for database transformation """
80+
if not self._swdb:
81+
self._initSwdb(input_dir)
82+
else:
83+
logger.error(_('Error: database is already initialized'))
84+
6885
def group_active(self):
6986
return self._group is not None
7087

dnf/db/swdb_transformer.py

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,12 @@
1717

1818
import glob
1919
import json
20-
import logging
2120
import os
2221
import sqlite3
23-
22+
from dnf.util import logger
2423
from dnf.i18n import _
2524
from hawkey import SwdbItem, convert_reason
2625

27-
logger = logging.getLogger('dnf')
28-
2926

3027
def PACKAGE_DATA_INSERT(cursor, data):
3128
cursor.execute('INSERT INTO PACKAGE_DATA VALUES (null,?,?,?,?,?,?)', data)
@@ -160,7 +157,7 @@ def get_yumdb_packages(cursor, yumdb_path, repo_fn):
160157
(command_line, tid))
161158

162159

163-
def run(input_dir='/var/lib/dnf/', output_file='/var/lib/dnf/history/swdb.sqlite'):
160+
def transformSwdb(input_dir, output_file):
164161
yumdb_path = os.path.join(input_dir, 'yumdb')
165162
history_path = os.path.join(input_dir, 'history')
166163
groups_path = os.path.join(input_dir, 'groups.json')
@@ -203,13 +200,13 @@ def bind_repo(cursor, name):
203200

204201
# check path to history dir
205202
if not os.path.isdir(history_path):
206-
logger.write(_('Error: history directory not valid'))
203+
logger.error(_('Error: history directory not valid'))
207204
return False
208205

209206
# check historyDB file and pick newest one
210207
historydb_file = glob.glob(os.path.join(history_path, "history*"))
211208
if len(historydb_file) < 1:
212-
logger.write(_('Error: history database file not valid'))
209+
logger.error(_('Error: history database file not valid'))
213210
return False
214211
historydb_file.sort()
215212
historydb_file = historydb_file[0]

0 commit comments

Comments
 (0)