summaryrefslogtreecommitdiff
path: root/migrations/003-arch-armv5.py
blob: 58eb79de08aa585c7f51cb562421b9e3c626607f (plain)
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
#!/usr/bin/env python
# Copyright (C) 2015  Codethink Limited
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program.  If not, see <http://www.gnu.org/licenses/>.


'''Migration to Baserock Definitions format version 3.

In version 3, there were two additions:

    - the 'armv5' architecture
    - the install-essential-files.configure configuration extension

This migration checks that neither of these are in use in the input (version 2)
definitions. Which isn't particularly useful.

'''


import sys
import warnings

import migrations


TO_VERSION = 3


def check_arch(contents, filename):
    assert contents['kind'] == 'system'

    valid = True

    if contents['arch'] == 'armv5':
        warnings.warn(
            "%s uses armv5 architecture that is not understood until version "
            "3." % filename)
        valid = False

    return valid


def check_configuration_extensions(contents, filename):
    assert contents['kind'] == 'system'

    valid = True

    for extension in contents.get('configuration-extensions', []):
        if extension == 'install-essential-files':
            warnings.warn(
                "%s uses install-essential-files.configure extension, which "
                "was not present in morph.git until commit 423dc974a61f1c0 "
                "(tag baserock-definitions-v3)." % filename)
            valid = False

    return valid


try:
    if migrations.check_definitions_version(TO_VERSION - 1):
        safe_to_migrate = migrations.process_definitions(
            kinds=['system'], validate_cb=check_arch)
        safe_to_migrate = migrations.process_definitions(
            kinds=['system'], validate_cb=check_configuration_extensions)

        if not safe_to_migrate:
            sys.stderr.write(
                "Migration failed due to one or more warnings.\n")
            sys.exit(1)
        else:
            migrations.set_definitions_version(TO_VERSION)
            sys.stdout.write("Migration completed successfully.\n")
            sys.exit(0)
    else:
        sys.stdout.write("Nothing to do.\n")
        sys.exit(0)
except RuntimeError as e:
    sys.stderr.write("Error: %s\n" % e.message)
    sys.exit(1)