~launchpad-pqm/launchpad/devel

« back to all changes in this revision

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

  • Committer: Launchpad Patch Queue Manager
  • Date: 2012-01-03 15:32:37 UTC
  • mfrom: (14291.4.8 maintenance-check-precise)
  • Revision ID: launchpad@pqm.canonical.com-20120103153237-m0pvu6lz9bc1qm71
[r=gmb][bug=911175] Make the support-timeframe information that gets
        added to the 'Packages' file in ubuntu more flexible for the
        upcomming 12.04 LTS release

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)
8
5
 
9
6
import logging
10
7
from optparse import OptionParser
16
13
import apt
17
14
import apt_pkg
18
15
 
 
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
 
19
53
# This is fun! We have a bunch of cases for 10.04 LTS
20
54
#
21
55
#  - distro "ubuntu" follows SUPPORT_TIMEFRAME_LTS but only for
24
58
#    considered *but* only follow SUPPORT_TIMEFRAME
25
59
#  - anything that is in armel follows SUPPORT_TIMEFRAME
26
60
#
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
 
    ]
 
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
 
62
99
 
63
100
# Names of the distribution releases that are not supported by this
64
101
# tool. All later versions are supported.
312
349
    else:
313
350
        distro = "lucid"
314
351
 
 
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
 
315
358
    # make sure our deb-src information is up-to-date
316
359
    create_and_update_deb_src_source_list(distro)
317
360
 
326
369
 
327
370
    # go over the distros we need to check
328
371
    pkg_support_time = {}
329
 
    for (name, lts_supported) in DISTRO_NAMES_AND_LTS_SUPPORT:
 
372
    for name in ubuntu_maintenance.DISTRO_NAMES:
330
373
 
331
374
        # get basic structure file
332
375
        try:
336
379
            continue
337
380
 
338
381
        # get dicts of pkgname -> support timeframe string
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
 
382
        support_timeframe = ubuntu_maintenance.SUPPORT_TIMEFRAME
344
383
        get_packages_support_time(
345
384
            structure, name, pkg_support_time, support_timeframe)
346
385
 
347
386
    # now go over the bits in main that we have not seen (because
348
387
    # they are not in any seed and got added manually into "main"
349
 
    for arch in PRIMARY_ARCHES:
 
388
    for arch in ubuntu_maintenance.PRIMARY_ARCHES:
350
389
        rootdir = "./aptroot.%s" % distro
351
390
        apt_pkg.config.set("APT::Architecture", arch)
352
391
        cache = apt.Cache(rootdir=rootdir)
356
395
            logging.exception("cache.update() failed")
357
396
        cache.open()
358
397
        for pkg in cache:
 
398
            # ignore multiarch package names
 
399
            if ":" in pkg.name:
 
400
                continue
359
401
            if not pkg.name in pkg_support_time:
360
402
                pkg_support_time[pkg.name] = support_timeframe[-1][0]
361
403
                logging.warn(
404
446
            # go over the supported arches, they are divided in
405
447
            # first-class (PRIMARY) and second-class with different
406
448
            # support levels
407
 
            for arch in SUPPORTED_ARCHES:
 
449
            for arch in ubuntu_maintenance.SUPPORTED_ARCHES:
408
450
                # ensure we do not overwrite arch-specific overwrites
409
451
                pkgname_and_arch = "%s/%s" % (pkgname, arch)
410
452
                if pkgname_and_arch in pkg_support_time:
411
453
                    break
412
 
                if arch in PRIMARY_ARCHES:
 
454
                if arch in ubuntu_maintenance.PRIMARY_ARCHES:
413
455
                    # arch with full LTS support
414
456
                    print "%s %s %s" % (
415
457
                        pkgname_and_arch, SUPPORT_TAG,
419
461
                    # support_timeframe
420
462
                    print "%s %s %s" % (
421
463
                        pkgname_and_arch, SUPPORT_TAG,
422
 
                        SUPPORT_TIMEFRAME[0][0])
 
464
                        ubuntu_maintenance.SUPPORT_TIMEFRAME[-1][0])