~maxb/udd/misc-tidying

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()