1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
#!/usr/bin/python
import datetime
import os
import pickle
import shutil
import sys
sys.path.insert(0, os.path.dirname(__file__))
import icommon
def create_tables(c):
c.execute(icommon.RevidDatabase.REVID_TABLE_CREATE
% icommon.RevidDatabase.REVID_TABLE)
c.execute(icommon.RevidDatabase.REVID_TABLE_CREATE
% icommon.RevidDatabase.REVID_WORKING_TABLE)
c.execute(icommon.StatusDatabase.FAILURES_TABLE_CREATE)
c.execute(icommon.StatusDatabase.JOBS_TABLE_CREATE)
c.execute(icommon.StatusDatabase.IMPORT_TABLE_CREATE)
c.execute(icommon.CommitDatabase.COMMIT_TABLE_CREATE)
def migrate_revids(c):
for package in os.listdir(icommon.revids_dir):
if package == ".bzr":
continue
if package.endswith(".new"):
continue
if package.endswith(".old"):
package = package[:-4]
c.execute(icommon.CommitDatabase.COMMIT_TABLE_INSERT, (package,))
continue
revid_dir = os.path.join(icommon.revids_dir, package)
for suite in os.listdir(revid_dir):
suite_file = os.path.join(revid_dir, suite)
f = open(suite_file)
try:
for line in f:
version, revid, sha = line.split()
c.execute(icommon.RevidDatabase.REVID_TABLE_INSERT
% icommon.RevidDatabase.REVID_TABLE,
(package, version, suite, revid, sha))
finally:
f.close()
def migrate_retries(c):
for package in os.listdir(icommon.retry_dir):
c.execute(icommon.StatusDatabase.JOBS_TABLE_INSERT,
(None, package, 1, icommon.StatusDatabase.JOB_TYPE_RETRY,
datetime.datetime.utcnow(), None, None))
for package in os.listdir(icommon.priority_dir):
c.execute(icommon.StatusDatabase.JOBS_TABLE_INSERT,
(None, package, 1, icommon.StatusDatabase.JOB_TYPE_PRIORITY,
datetime.datetime.utcnow()))
def migrate_failures(c):
failures_dir = os.path.join(icommon.logs_dir, "failures")
for package in os.listdir(failures_dir):
if package == ".bzr":
continue
f = open(os.path.join(failures_dir, package))
try:
reason = f.read().decode("utf-8", "ignore").encode("utf-8", "ignore")
finally:
f.close()
c.execute('insert into %s values (?, ?)'
% icommon.StatusDatabase.FAILURES_TABLE,
(package, reason))
def migrate_import_time(c):
f = open(icommon.last_time_file)
last_run = pickle.load(f)
c.execute('insert into %s values (?)'
% icommon.StatusDatabase.IMPORT_TABLE, (last_run,))
def migrate_locks():
for package in os.listdir(icommon.locks_dir):
shutil.rmtree(os.path.join(icommon.locks_dir, package))
lock = icommon.lock_main()
assert lock is not None
conn = icommon.get_sqlite_connection(icommon.sqlite_file)
c = conn.cursor()
try:
create_tables(c)
migrate_revids(c)
migrate_retries(c)
migrate_failures(c)
migrate_import_time(c)
migrate_locks()
conn.commit()
except:
conn.rollback()
raise
finally:
c.close()
|