[Collab-qa-commits] r2088 - multi-arch
Jakub Wilk
jwilk at alioth.debian.org
Tue Nov 22 23:39:55 UTC 2011
Author: jwilk
Date: 2011-11-22 23:39:55 +0000 (Tue, 22 Nov 2011)
New Revision: 2088
Added:
multi-arch/misc.py
Modified:
multi-arch/md5sum-validator
Log:
Move some code to a separate module.
Modified: multi-arch/md5sum-validator
===================================================================
--- multi-arch/md5sum-validator 2011-11-22 22:24:14 UTC (rev 2087)
+++ multi-arch/md5sum-validator 2011-11-22 23:39:55 UTC (rev 2088)
@@ -13,47 +13,13 @@
import collections
import dbm
import os
-import pipes
import re
import sys
-import subprocess as ipc
import apt_pkg
-default_mirror = 'http://ftp.debian.org/debian'
-default_distribution = 'unstable'
-log_file = None
+import misc
-def setup_proxies():
- apt_pkg.init_config()
- os.environ['http_proxy'] = apt_pkg.config.get('Acquire::http::Proxy', '')
- os.environ['ftp_proxy'] = apt_pkg.config.get('Acquire::ftp::Proxy', '')
-
-def setup_locale():
- os.environ['LC_ALL'] = 'C'
-
-def setup_log_file(file):
- global log_file
- log_file = file
-
-def log_download(url):
- print('D: {url}'.format(url=url), file=log_file)
-
-def log_action(package, version, action):
- print(
- 'I: {pkg} {ver} => {action}'.format(pkg=package, ver=version, action=action),
- file=log_file
- )
-
-def log_error(package, version, message):
- print(
- 'E: {pkg} {ver} => {message}'.format(pkg=package, ver=version, message=message),
- file=log_file
- )
-
-class DownloadError(IOError):
- pass
-
class DummyCache(object):
def __getitem__(self, key):
@@ -65,35 +31,6 @@
def close(self):
pass
-class download:
-
- def __init__(self, url, pipe=None):
- self._url = url
- self._pipe = pipe
-
- def __enter__(self):
- log_download(self._url)
- quoted_url = pipes.quote(self._url)
- if self._url.startswith(('/', '.')):
- if self._pipe is not None:
- commandline = '< {url} {pipe}'.format(url=quoted_url, pipe=self._pipe)
- else:
- commandline = 'cat {url}'.format(url=quoted_url)
- else:
- commandline = 'wget -O- -q {url}'.format(url=quoted_url)
- if self._pipe is not None:
- commandline += ' | ' + self._pipe
- self._child = ipc.Popen(commandline, shell=True,
- stdout=ipc.PIPE, stderr=ipc.PIPE
- )
- return self._child.stdout
-
- def __exit__(self, exc_type, exc_val, exc_tb):
- stderr = self._child.stderr.read()
- if self._child.wait() != 0:
- stderr = stderr.decode('ASCII', 'replace').strip()
- raise DownloadError(stderr)
-
def parse_md5sums_line(pkgdata, line, architecture):
md5sum = line[:32]
filename = line[34:-1]
@@ -117,7 +54,7 @@
mirror=options.mirror,
dist=release_dist
)
- with download(url) as release_tags:
+ with misc.download(url) as release_tags:
for para in apt_pkg.TagFile(release_tags):
options.architectures = para['Architectures'].split()
for architecture in options.architectures:
@@ -128,7 +65,7 @@
section=section,
arch=architecture
)
- with download(url, pipe='gzip -dc') as package_tags:
+ with misc.download(url, pipe='gzip -dc') as package_tags:
for pkgdata in apt_pkg.TagFile(package_tags):
if pkgdata.get('Multi-Arch', '') == 'same':
pkgname = pkgdata['Package']
@@ -140,9 +77,9 @@
last = None
for (pkgname, pkgversion), urls in data.items():
if len(urls) <= 1:
- log_action(pkgname, pkgversion, 'skip')
+ misc.log_action(pkgname, pkgversion, 'skip')
continue
- log_action(pkgname, pkgversion, 'download ({archs})'.format(archs=' '.join(urls.keys())))
+ misc.log_action(pkgname, pkgversion, 'download ({archs})'.format(archs=' '.join(urls.keys())))
pkgdata = collections.defaultdict(
lambda: collections.defaultdict(set)
)
@@ -155,14 +92,14 @@
except KeyError:
try:
cache_item = []
- with download(url, pipe='dpkg-deb -I /dev/stdin md5sums') as md5sums_file:
+ with misc.download(url, pipe='dpkg-deb -I /dev/stdin md5sums') as md5sums_file:
for line in md5sums_file:
parse_md5sums_line(pkgdata, line, architecture)
cache_item += [line]
cache[cache_key] = b''.join(cache_item)
- except DownloadError as exc:
+ except misc.DownloadError as exc:
if 'contains no control component `md5sums\'' in str(exc):
- log_error(pkgname, pkgversion, 'missing md5sums for {arch}'.format(arch=architecture))
+ misc.log_error(pkgname, pkgversion, 'missing md5sums for {arch}'.format(arch=architecture))
continue
else:
raise
@@ -191,16 +128,16 @@
return True
def main():
- setup_proxies()
- setup_locale()
+ misc.setup_proxies()
+ misc.setup_locale()
parser = argparse.ArgumentParser(description=__doc__)
- parser.add_argument('--mirror', default=default_mirror,
+ parser.add_argument('--mirror', default=misc.default_mirror,
metavar='<mirror>',
- help='use this mirror (default: {mirror})'.format(mirror=default_mirror)
+ help='use this mirror (default: {mirror})'.format(mirror=misc.default_mirror)
)
- parser.add_argument('--distribution', default=default_distribution,
+ parser.add_argument('--distribution', default=misc.default_distribution,
metavar='<dist>',
- help='check this distribution (default: {dist})'.format(dist=default_distribution)
+ help='check this distribution (default: {dist})'.format(dist=misc.default_distribution)
)
parser.add_argument('--architectures', nargs='+',
metavar='<arch>',
@@ -222,7 +159,7 @@
help='log progress into this file (default: stderr)'
)
options = parser.parse_args()
- setup_log_file(options.log_file)
+ misc.setup_log_file(options.log_file)
if isinstance(options.packages, list):
options.packages = frozenset(options.packages)
if options.cache is None:
Copied: multi-arch/misc.py (from rev 2087, multi-arch/md5sum-validator)
===================================================================
--- multi-arch/misc.py (rev 0)
+++ multi-arch/misc.py 2011-11-22 23:39:55 UTC (rev 2088)
@@ -0,0 +1,76 @@
+# Copyright © 2011 Jakub Wilk <jwilk at debian.org>
+
+# Redistribution and use in source and compiled forms, with or without
+# modification, are permitted under any circumstances. No warranty.
+
+import os
+import pipes
+import subprocess as ipc
+
+import apt_pkg
+
+default_mirror = 'http://ftp.debian.org/debian'
+default_distribution = 'unstable'
+
+def setup_proxies():
+ apt_pkg.init_config()
+ os.environ['http_proxy'] = apt_pkg.config.get('Acquire::http::Proxy', '')
+ os.environ['ftp_proxy'] = apt_pkg.config.get('Acquire::ftp::Proxy', '')
+
+def setup_locale():
+ os.environ['LC_ALL'] = 'C'
+
+log_file = None
+
+def setup_log_file(file):
+ global log_file
+ log_file = file
+
+def log_download(url):
+ print('D: {url}'.format(url=url), file=log_file)
+
+def log_action(package, version, action):
+ print(
+ 'I: {pkg} {ver} => {action}'.format(pkg=package, ver=version, action=action),
+ file=log_file
+ )
+
+def log_error(package, version, message):
+ print(
+ 'E: {pkg} {ver} => {message}'.format(pkg=package, ver=version, message=message),
+ file=log_file
+ )
+
+class DownloadError(IOError):
+ pass
+
+class download:
+
+ def __init__(self, url, pipe=None):
+ self._url = url
+ self._pipe = pipe
+
+ def __enter__(self):
+ log_download(self._url)
+ quoted_url = pipes.quote(self._url)
+ if self._url.startswith(('/', '.')):
+ if self._pipe is not None:
+ commandline = '< {url} {pipe}'.format(url=quoted_url, pipe=self._pipe)
+ else:
+ commandline = 'cat {url}'.format(url=quoted_url)
+ else:
+ commandline = 'wget -O- -q {url}'.format(url=quoted_url)
+ if self._pipe is not None:
+ commandline += ' | ' + self._pipe
+ self._child = ipc.Popen(commandline, shell=True,
+ stdout=ipc.PIPE, stderr=ipc.PIPE
+ )
+ return self._child.stdout
+
+ def __exit__(self, exc_type, exc_val, exc_tb):
+ stderr = self._child.stderr.read()
+ if self._child.wait() != 0:
+ stderr = stderr.decode('ASCII', 'replace').strip()
+ raise DownloadError(stderr)
+
+# vim:ts=4 sw=4 et
More information about the Collab-qa-commits
mailing list