~launchpad-pqm/launchpad/devel

« back to all changes in this revision

Viewing changes to cronscripts/publishing/maintenance-check.py

  • Committer: William Grant
  • Date: 2012-01-03 07:30:21 UTC
  • mto: This revision was merged to the branch mainline in revision 14621.
  • Revision ID: william.grant@canonical.com-20120103073021-qvprj6kbnpg0h1qv
Update a few templates.

Show diffs side-by-side

added added

removed removed

Lines of Context:
2
2
#
3
3
# python port of the nice maintainace-check script by  Nick Barcet
4
4
#
 
5
# Taken from:
 
6
#  https://code.edge.launchpad.net/~mvo/ubuntu-maintenance-check/python-port
 
7
# (where it will vanish once taken here)
5
8
 
6
9
import logging
7
10
from optparse import OptionParser
13
16
import apt
14
17
import apt_pkg
15
18
 
16
 
 
17
 
class UbuntuMaintenance(object):
18
 
    """ Represents the support timeframe for a regular ubuntu release """
19
 
 
20
 
    # architectures that are full supported (including LTS time)
21
 
    PRIMARY_ARCHES = [
22
 
        "i386",
23
 
        "amd64",
24
 
        ]
25
 
 
26
 
    # architectures we support (but not for LTS time)
27
 
    SUPPORTED_ARCHES = PRIMARY_ARCHES + ["armel"]
28
 
 
29
 
    # what defines the seeds is documented in wiki.ubuntu.com/SeedManagement
30
 
    SERVER_SEEDS = [
31
 
        "server-ship",
32
 
        "supported-server",
33
 
        ]
34
 
    DESKTOP_SEEDS = [
35
 
        "ship",
36
 
        "supported-desktop",
37
 
        "supported-desktop-extra",
38
 
        ]
39
 
    SUPPORTED_SEEDS = ["all"]
40
 
 
41
 
    # normal support timeframe
42
 
    # time, seeds
43
 
    SUPPORT_TIMEFRAME = [
44
 
        ("18m", SUPPORTED_SEEDS),
45
 
        ]
46
 
 
47
 
    # distro names that we check the seeds for
48
 
    DISTRO_NAMES = [
49
 
        "ubuntu",
50
 
        ]
51
 
 
52
 
 
53
19
# This is fun! We have a bunch of cases for 10.04 LTS
54
20
#
55
21
#  - distro "ubuntu" follows SUPPORT_TIMEFRAME_LTS but only for
58
24
#    considered *but* only follow SUPPORT_TIMEFRAME
59
25
#  - anything that is in armel follows SUPPORT_TIMEFRAME
60
26
#
61
 
class LucidUbuntuMaintenance(UbuntuMaintenance):
62
 
    """ Represents the support timeframe for a 10.04 (lucid) LTS release,
63
 
        the exact rules differ from LTS release to LTS release
64
 
    """
65
 
 
66
 
    # lts support timeframe, order is important, least supported must be last
67
 
    # time, seeds
68
 
    SUPPORT_TIMEFRAME = [
69
 
        ("5y",  UbuntuMaintenance.SERVER_SEEDS),
70
 
        ("3y",  UbuntuMaintenance.DESKTOP_SEEDS),
71
 
        ("18m", UbuntuMaintenance.SUPPORTED_SEEDS),
72
 
        ]
73
 
 
74
 
    # on a LTS this is significant, it defines what names get LTS support
75
 
    DISTRO_NAMES = [
76
 
        "ubuntu",
77
 
        "kubuntu",
78
 
        ]
79
 
 
80
 
 
81
 
class PreciseUbuntuMaintenance(UbuntuMaintenance):
82
 
    """ The support timeframe for the 12.04 (precise) LTS release.
83
 
        This changes the timeframe for desktop packages from 3y to 5y
84
 
    """
85
 
 
86
 
    # lts support timeframe, order is important, least supported must be last
87
 
    # time, seeds
88
 
    SUPPORT_TIMEFRAME = [
89
 
        ("5y", UbuntuMaintenance.SERVER_SEEDS),
90
 
        ("5y", UbuntuMaintenance.DESKTOP_SEEDS),
91
 
        ("18m", UbuntuMaintenance.SUPPORTED_SEEDS),
92
 
        ]
93
 
 
94
 
    # on a LTS this is significant, it defines what names get LTS support
95
 
    DISTRO_NAMES = [
96
 
        "ubuntu",
97
 
        ]
98
 
 
 
27
 
 
28
# codename of the lts releases
 
29
LTS_RELEASES = ["dapper", "hardy", "lucid"]
 
30
 
 
31
# architectures that are full supported (including LTS time)
 
32
PRIMARY_ARCHES = ["i386", "amd64"]
 
33
 
 
34
# architectures we support (but not for LTS time)
 
35
SUPPORTED_ARCHES = PRIMARY_ARCHES + ["armel"]
 
36
 
 
37
# what defines the seeds is documented in wiki.ubuntu.com/SeedManagement
 
38
SERVER_SEEDS = ["supported-server", "server-ship"]
 
39
DESKTOP_SEEDS = ["ship", "supported-desktop", "supported-desktop-extra"]
 
40
SUPPORTED_SEEDS = ["all"]
 
41
 
 
42
# normal support timeframe
 
43
# time, seeds, arches
 
44
SUPPORT_TIMEFRAME = [
 
45
    ("18m", SUPPORTED_SEEDS),
 
46
]
 
47
 
 
48
# lts support timeframe
 
49
# time, seeds, arches
 
50
SUPPORT_TIMEFRAME_LTS = [
 
51
    ("5y", SERVER_SEEDS),
 
52
    ("3y", DESKTOP_SEEDS),
 
53
    ("18m", SUPPORTED_SEEDS),
 
54
]
 
55
 
 
56
# distro names and if they get LTS support (order is important)
 
57
DISTRO_NAMES_AND_LTS_SUPPORT = [
 
58
    ("ubuntu", True),
 
59
    ("kubuntu", True),
 
60
    ("netbook", False),
 
61
    ]
99
62
 
100
63
# Names of the distribution releases that are not supported by this
101
64
# tool. All later versions are supported.
139
102
    :return: A list of binary package names.
140
103
    """
141
104
    pkgnames = set()
142
 
    recs = apt_pkg.SourceRecords()
143
 
    while recs.lookup(srcname):
144
 
        for binary in recs.binaries:
 
105
    recs = apt_pkg.GetPkgSrcRecords()
 
106
    while recs.Lookup(srcname):
 
107
        for binary in recs.Binaries:
145
108
            pkgnames.add(binary)
146
109
    return pkgnames
147
110
 
200
163
    # open cache with our just prepared rootdir
201
164
    cache = apt.Cache(rootdir=rootdir)
202
165
    try:
203
 
        cache.update()
 
166
        cache.update(apt.progress.FetchProgress())
204
167
    except SystemError:
205
168
        logging.exception("cache.update() failed")
206
169
 
349
312
    else:
350
313
        distro = "lucid"
351
314
 
352
 
    # maintenance class to use
353
 
    klass = globals().get("%sUbuntuMaintenance" % distro.capitalize())
354
 
    if klass is None:
355
 
        klass = UbuntuMaintenance
356
 
    ubuntu_maintenance = klass()
357
 
 
358
315
    # make sure our deb-src information is up-to-date
359
316
    create_and_update_deb_src_source_list(distro)
360
317
 
369
326
 
370
327
    # go over the distros we need to check
371
328
    pkg_support_time = {}
372
 
    for name in ubuntu_maintenance.DISTRO_NAMES:
 
329
    for (name, lts_supported) in DISTRO_NAMES_AND_LTS_SUPPORT:
373
330
 
374
331
        # get basic structure file
375
332
        try:
379
336
            continue
380
337
 
381
338
        # get dicts of pkgname -> support timeframe string
382
 
        support_timeframe = ubuntu_maintenance.SUPPORT_TIMEFRAME
 
339
        support_timeframe = SUPPORT_TIMEFRAME
 
340
        if lts_supported and distro in LTS_RELEASES:
 
341
            support_timeframe = SUPPORT_TIMEFRAME_LTS
 
342
        else:
 
343
            support_timeframe = SUPPORT_TIMEFRAME
383
344
        get_packages_support_time(
384
345
            structure, name, pkg_support_time, support_timeframe)
385
346
 
386
347
    # now go over the bits in main that we have not seen (because
387
348
    # they are not in any seed and got added manually into "main"
388
 
    for arch in ubuntu_maintenance.PRIMARY_ARCHES:
 
349
    for arch in PRIMARY_ARCHES:
389
350
        rootdir = "./aptroot.%s" % distro
390
 
        apt_pkg.config.set("APT::Architecture", arch)
 
351
        apt_pkg.Config.Set("APT::Architecture", arch)
391
352
        cache = apt.Cache(rootdir=rootdir)
392
353
        try:
393
 
            cache.update()
 
354
            cache.update(apt.progress.FetchProgress())
394
355
        except SystemError:
395
356
            logging.exception("cache.update() failed")
396
 
        cache.open()
 
357
        cache.open(apt.progress.OpProgress())
397
358
        for pkg in cache:
398
 
            # ignore multiarch package names
399
 
            if ":" in pkg.name:
400
 
                continue
401
359
            if not pkg.name in pkg_support_time:
402
360
                pkg_support_time[pkg.name] = support_timeframe[-1][0]
403
361
                logging.warn(
446
404
            # go over the supported arches, they are divided in
447
405
            # first-class (PRIMARY) and second-class with different
448
406
            # support levels
449
 
            for arch in ubuntu_maintenance.SUPPORTED_ARCHES:
 
407
            for arch in SUPPORTED_ARCHES:
450
408
                # ensure we do not overwrite arch-specific overwrites
451
409
                pkgname_and_arch = "%s/%s" % (pkgname, arch)
452
410
                if pkgname_and_arch in pkg_support_time:
453
411
                    break
454
 
                if arch in ubuntu_maintenance.PRIMARY_ARCHES:
 
412
                if arch in PRIMARY_ARCHES:
455
413
                    # arch with full LTS support
456
414
                    print "%s %s %s" % (
457
415
                        pkgname_and_arch, SUPPORT_TAG,
461
419
                    # support_timeframe
462
420
                    print "%s %s %s" % (
463
421
                        pkgname_and_arch, SUPPORT_TAG,
464
 
                        ubuntu_maintenance.SUPPORT_TIMEFRAME[-1][0])
 
422
                        SUPPORT_TIMEFRAME[0][0])