~launchpad-pqm/launchpad/devel

« back to all changes in this revision

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

  • Committer: Jeroen Vermeulen
  • Date: 2011-12-21 07:06:05 UTC
  • mto: This revision was merged to the branch mainline in revision 14574.
  • Revision ID: jeroen.vermeulen@canonical.com-20111221070605-80ijtuvo1mu2ojgz
Lint.

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:
 
5
# Taken from:
6
6
#  https://code.edge.launchpad.net/~mvo/ubuntu-maintenance-check/python-port
7
7
# (where it will vanish once taken here)
8
8
 
9
 
# this warning filter is only needed on older versions of python-apt,
10
 
# once the machine runs lucid it can be removed
11
 
import warnings
12
 
 
13
 
 
14
 
warnings.filterwarnings("ignore", "apt API not stable yet")
15
 
import apt
16
 
warnings.resetwarnings()
17
 
 
18
 
import apt_pkg
19
9
import logging
 
10
from optparse import OptionParser
20
11
import os
21
12
import sys
22
13
import urllib2
23
14
import urlparse
24
15
 
25
 
from optparse import OptionParser
 
16
import apt
 
17
import apt_pkg
26
18
 
27
19
# This is fun! We have a bunch of cases for 10.04 LTS
28
20
#
84
76
 
85
77
# germinate output base directory
86
78
BASE_URL = os.environ.get(
87
 
    "MAINTENANCE_CHECK_BASE_URL", 
 
79
    "MAINTENANCE_CHECK_BASE_URL",
88
80
    "http://people.canonical.com/~ubuntu-archive/germinate-output/")
89
81
 
90
82
# hints dir url, hints file is "$distro.hints" by default
91
83
# (e.g. lucid.hints)
92
84
HINTS_DIR_URL = os.environ.get(
93
 
    "MAINTENANCE_CHECK_HINTS_DIR_URL", 
94
 
    "http://people.canonical.com/~ubuntu-archive/seeds/platform.%s/SUPPORTED_HINTS")
 
85
    "MAINTENANCE_CHECK_HINTS_DIR_URL",
 
86
    "http://people.canonical.com/"
 
87
        "~ubuntu-archive/seeds/platform.%s/SUPPORTED_HINTS")
95
88
 
96
89
# we need the archive root to parse the Sources file to support
97
90
# by-source hints
190
183
 
191
184
 
192
185
def expand_seeds(structure, seedname):
193
 
    """ Expand seed by its dependencies using the strucure file.
 
186
    """Expand seed by its dependencies using the strucure file.
194
187
 
195
188
    :param structure: The content of the STRUCTURE file as string list.
196
189
    :param seedname: The name of the seed as string that needs to be expanded.
197
 
    :return: a set() for the seed dependencies (excluding the original
198
 
             seedname)
 
190
    :return: A set() for the seed dependencies (excluding the original
 
191
        seedname).
199
192
    """
200
193
    seeds = []
201
194
    for line in structure:
208
201
 
209
202
def get_packages_for_seeds(name, distro, seeds):
210
203
    """
211
 
    get packages for the given name (e.g. ubuntu) and distro release
 
204
    Get packages for the given name (e.g. ubuntu) and distro release
212
205
    (e.g. lucid) that are in the given list of seeds
213
 
    returns a set() of package names
 
206
    returns a set() of package names.
214
207
    """
215
208
    pkgs_in_seeds = {}
216
 
    for bseed in seeds:
217
 
        for seed in [bseed]: #, bseed+".build-depends", bseed+".seed"]:
218
 
            pkgs_in_seeds[seed] = set()
219
 
            seedurl = "%s/%s.%s/%s" % (BASE_URL, name, distro, seed)
220
 
            logging.debug("looking for '%s'" % seedurl)
221
 
            try:
222
 
                f = urllib2.urlopen(seedurl)
223
 
                for line in f:
224
 
                    # ignore lines that are not a package name (headers etc)
225
 
                    if line[0] < 'a' or line[0] > 'z':
226
 
                        continue
227
 
                    # lines are (package,source,why,maintainer,size,inst-size)
228
 
                    if options.source_packages:
229
 
                        pkgname = line.split("|")[1]
230
 
                    else:
231
 
                        pkgname = line.split("|")[0]
232
 
                    pkgs_in_seeds[seed].add(pkgname.strip())
233
 
                f.close()
234
 
            except Exception, e:
235
 
                logging.error("seed %s failed (%s)" % (seedurl, e))
 
209
    for seed in seeds:
 
210
        pkgs_in_seeds[seed] = set()
 
211
        seedurl = "%s/%s.%s/%s" % (BASE_URL, name, distro, seed)
 
212
        logging.debug("looking for '%s'", seedurl)
 
213
        try:
 
214
            f = urllib2.urlopen(seedurl)
 
215
            for line in f:
 
216
                # Ignore lines that are not package names (headers etc).
 
217
                if line[0] < 'a' or line[0] > 'z':
 
218
                    continue
 
219
                # Each line contains these fields:
 
220
                # (package, source, why, maintainer, size, inst-size)
 
221
                if options.source_packages:
 
222
                    pkgname = line.split("|")[1]
 
223
                else:
 
224
                    pkgname = line.split("|")[0]
 
225
                pkgs_in_seeds[seed].add(pkgname.strip())
 
226
            f.close()
 
227
        except Exception as e:
 
228
            logging.error("seed %s failed (%s)" % (seedurl, e))
236
229
    return pkgs_in_seeds
237
230
 
238
231
 
294
287
                    pkg_support_time[pkg] += " (%s)" % ", ".join(
295
288
                        what_seeds(pkg, pkgs_in_seeds))
296
289
 
297
 
 
298
290
    return pkg_support_time
299
291
 
300
292
 
355
347
    # now go over the bits in main that we have not seen (because
356
348
    # they are not in any seed and got added manually into "main"
357
349
    for arch in PRIMARY_ARCHES:
358
 
        rootdir="./aptroot.%s" % distro
 
350
        rootdir = "./aptroot.%s" % distro
359
351
        apt_pkg.Config.Set("APT::Architecture", arch)
360
352
        cache = apt.Cache(rootdir=rootdir)
361
353
        try: