summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Vogt <michael.vogt@ubuntu.com>2010-03-12 11:42:37 +0100
committerMichael Vogt <michael.vogt@ubuntu.com>2010-03-12 11:42:37 +0100
commit85238ea03cd35b48a90a2fc1f63f2cf05d5b83b4 (patch)
treebb7fcce7e80cc45e807eab19a3c36f628c888bd3
parent62a7342edb16c38e3d646cc731a4a50ad6657b4f (diff)
parentc657b7a2a59e15a0c415ba94021c4de547a78e60 (diff)
downloadpython-apt-85238ea03cd35b48a90a2fc1f63f2cf05d5b83b4.tar.gz
merged from debian-sid
-rw-r--r--.bzr-builddeb/default.conf3
-rw-r--r--apt/cache.py37
-rw-r--r--apt/debfile.py22
-rw-r--r--apt/package.py34
-rw-r--r--apt/progress/base.py15
-rw-r--r--apt/progress/gtk2.py1
-rw-r--r--apt/progress/old.py92
-rw-r--r--apt/progress/text.py2
-rw-r--r--apt/utils.py20
-rw-r--r--aptsources/distro.py2
-rw-r--r--data/templates/Debian.mirrors853
-rw-r--r--data/templates/Ubuntu.info.in15
-rw-r--r--data/templates/Ubuntu.mirrors573
-rw-r--r--debian/changelog72
-rw-r--r--debian/control19
-rw-r--r--debian/python-apt-doc.doc-base (renamed from debian/python-apt.doc-base)4
-rw-r--r--debian/python-apt-doc.docs1
-rw-r--r--debian/python-apt-doc.links1
-rw-r--r--debian/python-apt.docs1
-rw-r--r--debian/python-apt.install2
-rwxr-xr-xdebian/rules9
-rw-r--r--doc/source/examples/apt-cdrom.py3
-rw-r--r--doc/source/examples/update-print-uris.py1
-rw-r--r--doc/source/library/apt_pkg.rst5
-rw-r--r--po/python-apt.pot140
-rwxr-xr-xpre-build.sh11
-rw-r--r--python/acquire-item.cc20
-rw-r--r--python/acquire.cc12
-rw-r--r--python/apt_pkgmodule.cc44
-rw-r--r--python/cache.cc115
-rw-r--r--python/cdrom.cc8
-rw-r--r--python/configuration.cc16
-rw-r--r--python/depcache.cc46
-rw-r--r--python/generic.cc63
-rw-r--r--python/generic.h6
-rw-r--r--python/indexfile.cc13
-rw-r--r--python/metaindex.cc8
-rw-r--r--python/pkgmanager.cc7
-rw-r--r--python/pkgrecords.cc19
-rw-r--r--python/pkgsrcrecords.cc14
-rw-r--r--python/sourcelist.cc10
-rw-r--r--python/tag.cc35
-rw-r--r--setup.py2
-rw-r--r--tests/data/aptsources/sources.list.testDistribution4
-rw-r--r--tests/test_all.py1
-rw-r--r--tests/test_deps.py119
-rwxr-xr-xutils/get_debian_mirrors.py78
-rwxr-xr-xutils/get_ubuntu_mirrors_from_lp.py72
-rwxr-xr-xutils/migrate-0.8.py131
49 files changed, 1559 insertions, 1222 deletions
diff --git a/.bzr-builddeb/default.conf b/.bzr-builddeb/default.conf
index 3a08d607..c39d2e3d 100644
--- a/.bzr-builddeb/default.conf
+++ b/.bzr-builddeb/default.conf
@@ -1,2 +1,5 @@
[BUILDDEB]
native = True
+
+[HOOKS]
+pre-build = ./pre-build.sh
diff --git a/apt/cache.py b/apt/cache.py
index b5733d98..2e6d24e5 100644
--- a/apt/cache.py
+++ b/apt/cache.py
@@ -46,17 +46,21 @@ class Cache(object):
"""Dictionary-like package cache.
This class has all the packages that are available in it's
- dictionary.
+ dictionary.
Keyword arguments:
progress -- a OpProgress object
- rootdir -- a alternative root directory. if that is given
- the system sources.list and system lists/ files are
+ rootdir -- a alternative root directory. if that is given
+ the system sources.list and system lists/ files are
not read, only files relative to the given rootdir
memonly -- build the cache in memory only
"""
def __init__(self, progress=None, rootdir=None, memonly=False):
+ self._cache = None
+ self._depcache = None
+ self._records = None
+ self._list = None
self._callbacks = {}
self._weakref = weakref.WeakValueDictionary()
self._set = set()
@@ -95,12 +99,12 @@ class Cache(object):
"/var/lib/apt/lists/partial",
]
for d in dirs:
- if not os.path.exists(rootdir+d):
- print "creating: ",rootdir+d
- os.makedirs(rootdir+d)
+ if not os.path.exists(rootdir + d):
+ print "creating: ", rootdir + d
+ os.makedirs(rootdir + d)
for f in files:
- if not os.path.exists(rootdir+f):
- open(rootdir+f,"w")
+ if not os.path.exists(rootdir + f):
+ open(rootdir + f, "w")
def _run_callbacks(self, name):
""" internal helper to run a callback """
@@ -125,12 +129,12 @@ class Cache(object):
self._weakref.clear()
progress.op = _("Building data structures")
- i=last=0
- size=len(self._cache.packages)
+ i = last = 0
+ size = len(self._cache.packages)
for pkg in self._cache.packages:
if progress is not None and last+100 < i:
progress.update(i/float(size)*100)
- last=i
+ last = i
# drop stuff with no versions (cruft)
if len(pkg.version_list) > 0:
self._set.add(pkg.name)
@@ -376,9 +380,10 @@ class Cache(object):
elif res == pm.RESULT_FAILED:
raise SystemError("installArchives() failed")
elif res == pm.RESULT_INCOMPLETE:
- pass
+ pass
else:
- raise SystemError("internal-error: unknown result code from InstallArchives: %s" % res)
+ raise SystemError("internal-error: unknown result code "
+ "from InstallArchives: %s" % res)
# reload the fetcher for media swaping
fetcher.shutdown()
return (res == pm.RESULT_COMPLETED)
@@ -623,9 +628,9 @@ def _test():
# see if fetching works
- for dir in ["/tmp/pytest", "/tmp/pytest/partial"]:
- if not os.path.exists(dir):
- os.mkdir(dir)
+ for dirname in ["/tmp/pytest", "/tmp/pytest/partial"]:
+ if not os.path.exists(dirname):
+ os.mkdir(dirname)
apt_pkg.config.set("Dir::Cache::Archives", "/tmp/pytest")
pm = apt_pkg.PackageManager(cache._depcache)
fetcher = apt_pkg.Acquire(apt.progress.text.AcquireProgress())
diff --git a/apt/debfile.py b/apt/debfile.py
index e27917d5..ccaa25e4 100644
--- a/apt/debfile.py
+++ b/apt/debfile.py
@@ -43,6 +43,9 @@ class DebPackage(object):
def __init__(self, filename=None, cache=None):
self._cache = cache
self._need_pkgs = []
+ self._debfile = None
+ self.pkgname = ""
+ self.filename = filename
self._sections = {}
self._installed_conflicts = set()
self._failure_string = ""
@@ -168,9 +171,6 @@ class DebPackage(object):
"""Check the or-group for conflicts with installed pkgs."""
self._dbg(2, "_check_conflicts_or_group(): %s " % (or_group))
- or_found = False
- virtual_pkg = None
-
for dep in or_group:
depname = dep[0]
ver = dep[1]
@@ -287,13 +287,13 @@ class DebPackage(object):
else:
cachever = self._cache[pkgname].candidate.version
if cachever is not None:
- cmp = apt_pkg.version_compare(cachever, debver)
- self._dbg(1, "CompareVersion(debver,instver): %s" % cmp)
- if cmp == 0:
+ cmpres = apt_pkg.version_compare(cachever, debver)
+ self._dbg(1, "CompareVersion(debver,instver): %s" % cmpres)
+ if cmpres == 0:
return VERSION_SAME
- elif cmp < 0:
+ elif cmpres < 0:
return VERSION_NEWER
- elif cmp > 0:
+ elif cmpres > 0:
return VERSION_OUTDATED
return VERSION_NONE
@@ -361,7 +361,7 @@ class DebPackage(object):
for pkg in self._need_pkgs:
try:
self._cache[pkg].mark_install(fromUser=False)
- except SystemError, e:
+ except SystemError:
self._failure_string = _("Cannot install '%s'" % pkg)
self._cache.clear()
return False
@@ -427,7 +427,8 @@ class DscSrcPackage(DebPackage):
DebPackage.__init__(self, None, cache)
self._depends = []
self._conflicts = []
- self._binaries = []
+ self.pkgname = ""
+ self.binaries = []
if filename is not None:
self.open(filename)
@@ -465,7 +466,6 @@ class DscSrcPackage(DebPackage):
if 'Version' in sec:
self._sections['Version'] = sec['Version']
finally:
- del sec
del tagfile
fobj.close()
diff --git a/apt/package.py b/apt/package.py
index 7f736583..0c026504 100644
--- a/apt/package.py
+++ b/apt/package.py
@@ -70,9 +70,18 @@ class BaseDependency(object):
pre_depend - Boolean value whether this is a pre-dependency.
"""
+ class __dstr(str):
+ """Helper to make > match >> and < match <<"""
+
+ def __eq__(self, other):
+ return str.__eq__(self, other) or str.__eq__(2 * self, other)
+
+ def __ne__(self, other):
+ return str.__eq__(self, other) and str.__ne__(2 * self, other)
+
def __init__(self, name, rel, ver, pre, rawtype=None):
self.name = name
- self.relation = rel
+ self.relation = len(rel) == 1 and self.__dstr(rel) or rel
self.version = ver
self.pre_depend = pre
self.rawtype = rawtype
@@ -528,9 +537,10 @@ class Version(object):
dsc = None
record = self._records
src.lookup(record.source_pkg)
+ source_version = record.source_ver or self._cand.ver_str
try:
- while record.source_ver != src.version:
+ while source_version != src.version:
src.lookup(record.source_pkg)
except AttributeError:
raise ValueError("No source for %r" % self)
@@ -971,7 +981,7 @@ class Package(object):
which if set, prevents the download.
"""
# Return a cached changelog if available
- if self._changelog != "":
+ if self._changelog != u"":
return self._changelog
if uri is None:
@@ -986,7 +996,8 @@ class Package(object):
"/%(src_section)s/%(prefix)s/%(src_pkg)s" \
"/%(src_pkg)s_%(src_ver)s/changelog"
else:
- return _("The list of changes is not available")
+ res = _("The list of changes is not available")
+ return res if isinstance(res, unicode) else res.decode("utf-8")
# get the src package name
src_pkg = self.candidate.source_name
@@ -1056,15 +1067,15 @@ class Package(object):
# Check if the download was canceled
if cancel_lock and cancel_lock.isSet():
- return ""
+ return u""
changelog_file = urllib2.urlopen(uri)
# do only get the lines that are new
- changelog = ""
+ changelog = u""
regexp = "^%s \((.*)\)(.*)$" % (re.escape(src_pkg))
while True:
# Check if the download was canceled
if cancel_lock and cancel_lock.isSet():
- return ""
+ return u""
# Read changelog line by line
line_raw = changelog_file.readline()
if line_raw == "":
@@ -1084,6 +1095,7 @@ class Package(object):
changelog_ver = match.group(1)
if changelog_ver and ":" in changelog_ver:
changelog_ver = changelog_ver.split(":", 1)[1]
+
if (installed and apt_pkg.version_compare(
changelog_ver, installed) <= 0):
break
@@ -1093,17 +1105,21 @@ class Package(object):
# Print an error if we failed to extract a changelog
if len(changelog) == 0:
changelog = _("The list of changes is not available")
+ if not isinstance(changelog, unicode):
+ changelog = changelog.decode("utf-8")
self._changelog = changelog
except urllib2.HTTPError:
- return _("The list of changes is not available yet.\n\n"
+ res = _("The list of changes is not available yet.\n\n"
"Please use http://launchpad.net/ubuntu/+source/%s/"
"%s/+changelog\n"
"until the changes become available or try again "
"later.") % (src_pkg, src_ver)
+ return res if isinstance(res, unicode) else res.decode("utf-8")
except (IOError, httplib.BadStatusLine):
- return _("Failed to download the list of changes. \nPlease "
+ res = _("Failed to download the list of changes. \nPlease "
"check your Internet connection.")
+ return res if isinstance(res, unicode) else res.decode("utf-8")
finally:
socket.setdefaulttimeout(timeout)
return self._changelog
diff --git a/apt/progress/base.py b/apt/progress/base.py
index 8075f790..6822b74a 100644
--- a/apt/progress/base.py
+++ b/apt/progress/base.py
@@ -16,6 +16,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
# USA
+# pylint: disable-msg = R0201
"""Base classes for progress reporting.
Custom progress classes should inherit from these classes. They can also be
@@ -28,7 +29,6 @@ import re
import select
import apt_pkg
-from apt.deprecation import function_deprecated_by
__all__ = ['AcquireProgress', 'CdromProgress', 'InstallProgress', 'OpProgress']
@@ -137,7 +137,7 @@ class CdromProgress(object):
class InstallProgress(object):
"""Class to report the progress of installing packages."""
- percent, select_timeout, status = 0.0, 0.1, ""
+ child_pid, percent, select_timeout, status = 0, 0.0, 0.1, ""
def __init__(self):
(self.statusfd, self.writefd) = os.pipe()
@@ -159,9 +159,6 @@ class InstallProgress(object):
def status_change(self, pkg, percent, status):
"""(Abstract) Called when the APT status changed."""
- # compat with 0.7
- if apt_pkg._COMPAT_0_7 and hasattr(self, "statusChange"):
- self.statusChange(pkg, percent, status)
def dpkg_status_change(self, pkg, status):
"""(Abstract) Called when the dpkg status changed."""
@@ -197,7 +194,8 @@ class InstallProgress(object):
os._exit(obj.do_install(self.write_stream.fileno()))
except AttributeError:
os._exit(os.spawnlp(os.P_WAIT, "dpkg", "dpkg", "--status-fd",
- str(self.write_stream.fileno()), "-i", obj))
+ str(self.write_stream.fileno()), "-i",
+ obj))
except Exception:
os._exit(apt_pkg.PackageManager.RESULT_FAILED)
@@ -266,8 +264,9 @@ class InstallProgress(object):
(pid, res) = (0, 0)
while True:
try:
- select.select([self.status_stream], [], [], self.select_timeout)
- except select.error, (errno_, errstr):
+ select.select([self.status_stream], [], [],
+ self.select_timeout)
+ except select.error, (errno_, _errstr):
if errno_ != errno.EINTR:
raise
diff --git a/apt/progress/gtk2.py b/apt/progress/gtk2.py
index 29e730a3..acb01eed 100644
--- a/apt/progress/gtk2.py
+++ b/apt/progress/gtk2.py
@@ -124,6 +124,7 @@ class GInstallProgress(gobject.GObject, base.InstallProgress):
base.InstallProgress.__init__(self)
gobject.GObject.__init__(self)
self.finished = False
+ self.apt_status = -1
self.time_last_update = time.time()
self.term = term
reaper = vte.reaper_get()
diff --git a/apt/progress/old.py b/apt/progress/old.py
index 15ead890..4bd79f2e 100644
--- a/apt/progress/old.py
+++ b/apt/progress/old.py
@@ -18,6 +18,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
# USA
+# pylint: disable-msg = C0103
"""Deprecated progress reporting classes.
This module provides classes for compatibility with python-apt 0.7. They are
@@ -39,6 +40,11 @@ __all__ = []
class OpProgress(base.OpProgress):
"""Abstract class to implement reporting on cache opening."""
+ def __init__(self):
+ base.OpProgress.__init__(self)
+ warnings.warn("apt.progress.OpProgress is deprecated.",
+ DeprecationWarning, stacklevel=2)
+
subOp = AttributeDeprecatedBy('subop')
Op = AttributeDeprecatedBy('op')
@@ -46,6 +52,11 @@ class OpProgress(base.OpProgress):
class OpTextProgress(OpProgress, text.OpProgress):
"""A simple text based cache open reporting class."""
+ def __init__(self):
+ text.OpProgress.__init__(self)
+ warnings.warn("apt.progress.OpTextProgress is deprecated.",
+ DeprecationWarning, stacklevel=2)
+
class FetchProgress(object):
"""Report the download/fetching progress."""
@@ -64,7 +75,8 @@ class FetchProgress(object):
self.totalBytes = 0
self.totalItems = 0
self.currentCPS = 0
- warnings.warn("FetchProgress() is deprecated.", DeprecationWarning)
+ warnings.warn("apt.progress.FetchProgress is deprecated.",
+ DeprecationWarning, stacklevel=2)
def start(self):
"""Called when the fetching starts."""
@@ -159,27 +171,55 @@ class TextFetchProgress(FetchProgress):
return raw_input() not in ('c', 'C')
-class CdromProgress(base.CdromProgress):
- """Report the cdrom add progress.
+class CdromProgress(object):
+ """Report the cdrom add progress."""
- This class has been replaced by apt_pkg.CdromProgress.
- """
- _basetype = base.CdromProgress
- askCdromName = function_deprecated_by(_basetype.ask_cdrom_name)
- changeCdrom = function_deprecated_by(_basetype.change_cdrom)
- del _basetype
+ def __init__(self):
+ warnings.warn("apt.progress.CdromProgress is deprecated.",
+ DeprecationWarning, stacklevel=2)
+
+ def askCdromName(self):
+ """Ask for a cdrom name"""
+
+ def changeCdrom(self):
+ """Change cdrom"""
+
+ def update(self, text, current):
+ """Update."""
class DumbInstallProgress(base.InstallProgress):
- """Report the install progress.
+ """Report the install progress."""
- Subclass this class to implement install progress reporting.
- """
+ def __init__(self):
+ base.InstallProgress.__init__(self)
+ warnings.warn("apt.progress.*InstallProgress are deprecated.",
+ DeprecationWarning, stacklevel=2)
- startUpdate = function_deprecated_by(base.InstallProgress.start_update)
- finishUpdate = function_deprecated_by(base.InstallProgress.finish_update)
- updateInterface = function_deprecated_by(
- base.InstallProgress.update_interface)
+ def updateInterface(self):
+ # *_stream were not available in the old progress reporting classes,
+ # create the attributes if they do not exist yet; as they are used
+ # in base.InstallProgress.update_interface().
+ if hasattr(self, "writefd") and not hasattr(self, "write_stream"):
+ self.write_stream = os.fdopen(self.writefd, "w")
+ if hasattr(self, "statusfd") and not hasattr(self, "status_stream"):
+ self.status_stream = os.fdopen(self.statusfd, "r")
+ return base.InstallProgress.update_interface(self)
+
+ def update_interface(self):
+ return self.updateInterface()
+
+ def startUpdate(self):
+ return base.InstallProgress.start_update(self)
+
+ def start_update(self):
+ return self.startUpdate()
+
+ def finishUpdate(self):
+ return base.InstallProgress.finish_update(self)
+
+ def finish_update(self):
+ return self.finishUpdate()
class InstallProgress(DumbInstallProgress, base.InstallProgress):
@@ -190,17 +230,29 @@ class InstallProgress(DumbInstallProgress, base.InstallProgress):
"""
selectTimeout = AttributeDeprecatedBy('select_timeout')
- statusChange = function_deprecated_by(base.InstallProgress.status_change)
- updateInterface = function_deprecated_by(base.InstallProgress.update_interface)
- waitChild = function_deprecated_by(base.InstallProgress.wait_child)
+
+ def statusChange(self, pkg, percent, status):
+ return base.InstallProgress.status_change(self, pkg, percent, status)
+
+ def status_change(self, pkg, percent, status):
+ return self.statusChange(pkg, percent, status)
+
+ def waitChild(self):
+ return base.InstallProgress.wait_child(self)
+
+ def wait_child(self):
+ return self.waitChild()
class DpkgInstallProgress(InstallProgress):
"""Progress handler for a local Debian package installation."""
+ debfile = ""
+ debname = ""
+
def run(self, debfile):
"""Start installing the given Debian package."""
# Deprecated stuff
self.debfile = debfile
self.debname = os.path.basename(debfile).split("_")[0]
- return base.InstallProgress(self, debfile)
+ return base.InstallProgress.run(self, debfile)
diff --git a/apt/progress/text.py b/apt/progress/text.py
index 5e45c1db..95f18831 100644
--- a/apt/progress/text.py
+++ b/apt/progress/text.py
@@ -257,5 +257,3 @@ class CdromProgress(base.CdromProgress, TextProgress):
return (raw_input() == '')
except KeyboardInterrupt:
return False
-
-InstallProgress = base.InstallProgress
diff --git a/apt/utils.py b/apt/utils.py
index 61d5d54f..80ba6d65 100644
--- a/apt/utils.py
+++ b/apt/utils.py
@@ -17,9 +17,11 @@
# this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-import apt_pkg
import os.path
+import apt_pkg
+
+
def get_maintenance_end_date(release_date, m_months):
"""
get the (year, month) tuple when the maintenance for the distribution
@@ -28,10 +30,12 @@ def get_maintenance_end_date(release_date, m_months):
"""
years = m_months / 12
months = m_months % 12
- support_end_year = release_date.year + years + (release_date.month + months)/12
+ support_end_year = (release_date.year + years +
+ (release_date.month + months)/12)
support_end_month = (release_date.month + months) % 12
return (support_end_year, support_end_month)
+
def get_release_date_from_release_file(path):
"""
return the release date as time_t for the given release file
@@ -45,6 +49,7 @@ def get_release_date_from_release_file(path):
date = section["Date"]
return apt_pkg.str_to_time(date)
+
def get_release_filename_for_pkg(cache, pkgname, label, release):
" get the release file that provides this pkg "
if pkgname not in cache:
@@ -54,9 +59,9 @@ def get_release_filename_for_pkg(cache, pkgname, label, release):
# look for the version that comes from the repos with
# the given label and origin
for aver in pkg._pkg.version_list:
- if aver == None or aver.file_list == None:
+ if aver is None or aver.file_list is None:
continue
- for ver_file, index in aver.file_list:
+ for ver_file, _index in aver.file_list:
#print verFile
if (ver_file.origin == label and
ver_file.label == label and
@@ -70,7 +75,8 @@ def get_release_filename_for_pkg(cache, pkgname, label, release):
if (indexfile and
indexfile.describe == m.describe and
indexfile.is_trusted):
- dir = apt_pkg.config.find_dir("Dir::State::lists")
- name = apt_pkg.uri_to_filename(metaindex.uri)+"dists_%s_Release" % metaindex.dist
- return dir+name
+ dirname = apt_pkg.config.find_dir("Dir::State::lists")
+ name = (apt_pkg.uri_to_filename(metaindex.uri) +
+ "dists_%s_Release" % metaindex.dist)
+ return dirname + name
return None
diff --git a/aptsources/distro.py b/aptsources/distro.py
index 1e60a0ed..e51fbe9f 100644
--- a/aptsources/distro.py
+++ b/aptsources/distro.py
@@ -437,6 +437,7 @@ class UbuntuDistribution(Distribution):
Distribution.get_mirrors(
self, mirror_template="http://%s.archive.ubuntu.com/ubuntu/")
+
def _lsb_release():
"""Call lsb_release --idrc and return a mapping."""
from subprocess import Popen, PIPE
@@ -454,6 +455,7 @@ def _lsb_release():
print 'WARNING: lsb_release failed, using defaults:', exc
return result
+
def get_distro(id=None, codename=None, description=None, release=None):
"""
Check the currently used distribution and return the corresponding
diff --git a/data/templates/Debian.mirrors b/data/templates/Debian.mirrors
index be6f4798..f7c24139 100644
--- a/data/templates/Debian.mirrors
+++ b/data/templates/Debian.mirrors
@@ -1,586 +1,693 @@
#LOC:AR
-http://debian.logiclinux.com/debian/
-ftp://ftp.ccc.uba.ar/pub/linux/debian/debian/
ftp://debian.torredehanoi.org/debian/
+ftp://ftp.ccc.uba.ar/pub/linux/debian/debian/
+http://debian.logiclinux.com/debian/
+http://debian.torredehanoi.org/debian/
+http://ftp.ccc.uba.ar/pub/linux/debian/debian/
#LOC:AT
-ftp://ftp.at.debian.org/debian/
-ftp://debian.sil.at/debian/
-ftp://ftp.debian.at/debian/
-ftp://gd.tuwien.ac.at/opsys/linux/debian/
-ftp://ftp.tuwien.ac.at/opsys/linux/debian/
+ftp://debian.inode.at/debian/
+ftp://debian.lagis.at/debian/
ftp://debian.mur.at/debian/
-ftp://algo.mur.at/debian/
-ftp://spider.mur.at/debian/
+ftp://ftp.at.debian.org/debian/
ftp://ftp.tu-graz.ac.at/mirror/debian/
-ftp://ftp.tugraz.at/mirror/debian/
ftp://ftp.univie.ac.at/systems/linux/debian/debian/
-ftp://debian.inode.at/debian/
-ftp://debian.lagis.at/debian/
+ftp://gd.tuwien.ac.at/opsys/linux/debian/
+http://debian.inode.at/debian/
+http://debian.lagis.at/debian/
+http://debian.mur.at/debian/
+http://ftp.at.debian.org/debian/
+http://ftp.tu-graz.ac.at/mirror/debian/
+http://ftp.univie.ac.at/systems/linux/debian/debian/
+http://gd.tuwien.ac.at/opsys/linux/debian/
#LOC:AU
ftp://ftp.au.debian.org/debian/
-ftp://mirror.linux.org.au/debian/
-ftp://mirror.aarnet.edu.au/debian/
+ftp://ftp.iinet.net.au/debian/debian/
ftp://ftp.monash.edu.au/pub/linux/debian/
+ftp://ftp.netspace.net.au/pub/debian/
ftp://ftp.uwa.edu.au/debian/
+ftp://mirror.aarnet.edu.au/debian/
+ftp://mirror.cse.unsw.edu.au/debian/
ftp://mirror.eftel.com/debian/
-ftp://mirror.q-net.net.au/debian/
-ftp://mirror.datafast.net.au/debian/
-ftp://mirror.pacific.net.au/debian/
-ftp://ftp.iinet.net.au/debian/debian/
ftp://mirror.optus.net/debian/
-ftp://mirror.optusnet.com.au/debian/
-ftp://mirror.cse.unsw.edu.au/debian/
-ftp://ftp.netspace.net.au/pub/debian/
+ftp://mirror.pacific.net.au/debian/
+ftp://mirror.transact.net.au/debian/
ftp://mirror.waia.asn.au/debian/
+http://ftp.au.debian.org/debian/
+http://ftp.iinet.net.au/debian/debian/
+http://ftp.monash.edu.au/pub/linux/debian/
+http://ftp.netspace.net.au/pub/debian/
+http://ftp.uwa.edu.au/debian/
+http://mirror.aarnet.edu.au/debian/
+http://mirror.cse.unsw.edu.au/debian/
+http://mirror.eftel.com/debian/
+http://mirror.optus.net/debian/
+http://mirror.pacific.net.au/debian/
+http://mirror.transact.net.au/debian/
+http://mirror.waia.asn.au/debian/
#LOC:BA
ftp://ftp.ba.debian.org/debian/
-ftp://mirror.debian.com.ba/debian/
+http://ftp.ba.debian.org/debian/
#LOC:BE
ftp://ftp.be.debian.org/debian/
-ftp://mirror.be.gbxs.net/debian/
-ftp://ftp.kulnet.kuleuven.ac.be/debian/
-ftp://ftp.easynet.be/debian/
ftp://ftp.belnet.be/debian/
ftp://ftp.debian.skynet.be/debian/
+ftp://ftp.easynet.be/debian/
+http://ftp.be.debian.org/debian/
+http://ftp.belnet.be/debian/
+http://ftp.debian.skynet.be/ftp/debian/
+http://ftp.easynet.be/ftp/debian/
#LOC:BG
-ftp://ftp.bg.debian.org/debian/
-ftp://debian.spnet.net/debian/
+ftp://debian.ipacct.com/debian/
ftp://debian.ludost.net/debian/
-ftp://marla.ludost.net/debian/
-ftp://ftp.uni-sofia.bg/debian/
-ftp://debian.telecoms.bg/debian/
ftp://debian.mnet.bg/debian/
ftp://debian.networx-bg.com/debian/
+ftp://debian.telecoms.bg/debian/
+ftp://ftp.bg.debian.org/debian/
+ftp://ftp.uni-sofia.bg/debian/
+http://debian.ipacct.com/debian/
+http://debian.ludost.net/debian/
+http://debian.mnet.bg/debian/
+http://debian.networx-bg.com/debian/
+http://debian.telecoms.bg/debian/
+http://ftp.bg.debian.org/debian/
+http://ftp.uni-sofia.bg/debian/
#LOC:BR
-ftp://ftp.br.debian.org/debian/
-ftp://debian.c3sl.ufpr.br/debian/
ftp://debian.das.ufsc.br/pub/debian/
-http://download.unesp.br/linux/debian/
-http://sft.if.usp.br/debian/
-http://fma.if.usp.br/debian/
-ftp://linorg.usp.br/debian/
-http://linux.iq.usp.br/debian/
-http://torio.iq.usp.br/debian/
-ftp://ftp.pucpr.br/debian/
ftp://debian.las.ic.unicamp.br/debian/
+ftp://debs.ifsul.edu.br/debian/
+ftp://ftp.br.debian.org/debian/
+ftp://ftp.pucpr.br/debian/
+ftp://linorg.usp.br/debian/
+http://debian.las.ic.unicamp.br/debian/
http://debian.pop-sc.rnp.br/debian/
-http://mirror.pop-sc.rnp.br/debian/
+http://debs.ifsul.edu.br/debian/
+http://download.unesp.br/linux/debian/
+http://ftp.br.debian.org/debian/
+http://linorg.usp.br/debian/
+http://linux.iq.usp.br/debian/
+http://sft.if.usp.br/debian/
#LOC:BY
-http://linux.org.by/debian/
ftp://ftp.mgts.by/debian/
+http://ftp.mgts.by/debian/
+http://linux.org.by/debian/
#LOC:CA
+ftp://debian.mirror.iweb.ca/debian/
+ftp://debian.mirror.rafal.ca/debian/
+ftp://debian.savoirfairelinux.net/debian/
ftp://ftp.ca.debian.org/debian/
-http://debian.yorku.ca/debian/
ftp://ftp3.nrc.ca/debian/
-ftp://ftp3.ca.debian.org/debian/
-ftp://gulus.usherbrooke.ca/debian/
-ftp://gulus.usherb.ca/debian/
-ftp://ftp1.ca.debian.org/debian/
ftp://mirror.cpsc.ucalgary.ca/debian/
-http://mirror.peer1.net/debian/
-ftp://debian.mirror.rafal.ca/debian/
-ftp://mirror.mountaincable.net/debian/
-ftp://ftp4.ca.debian.org/debian/
-ftp://debian.savoirfairelinux.net/debian/
-ftp://gpl.savoirfairelinux.net/debian/
-ftp://debian.mirror.iweb.ca/debian/
-ftp://ftp2.ca.debian.org/debian/
ftp://mirror.csclub.uwaterloo.ca/debian/
+ftp://mirror.its.dal.ca/debian/
+http://debian.mirror.iweb.ca/debian/
+http://debian.mirror.rafal.ca/debian/
+http://debian.savoirfairelinux.net/debian/
+http://debian.yorku.ca/debian/
+http://ftp.ca.debian.org/debian/
+http://ftp3.nrc.ca/debian/
+http://mirror.cpsc.ucalgary.ca/mirror/debian.org/debian/
+http://mirror.csclub.uwaterloo.ca/debian/
+http://mirror.its.dal.ca/debian/
+http://mirror.peer1.net/debian/
#LOC:CH
ftp://ftp.ch.debian.org/debian/
-ftp://debian.ethz.ch/debian/
ftp://mirror.switch.ch/mirror/debian/
http://debian.csg.uzh.ch/debian/
+http://ftp.ch.debian.org/debian/
+http://mirror.switch.ch/ftp/mirror/debian/
#LOC:CL
-http://debian.ubiobio.cl/debian/
+ftp://ftp.cl.debian.org/debian/
http://debian.ciencias.uchile.cl/debian/
+http://debian.ubiobio.cl/debian/
http://debian.utalca.cl/debian/
-http://mirror.debian.cl/debian/
-http://core.debian.cl/debian/
-ftp://debian.netlinux.cl/debian/
+http://ftp.cl.debian.org/debian/
#LOC:CN
ftp://mirrors.geekbone.org/debian/
ftp://www.anheng.com.cn/debian/
-ftp://debian.bjlx.org.cn/debian/
-ftp://www.watertest.com.cn/debian/
-ftp://www.anheng.com.cn/debian/
-#LOC:CO
+http://mirrors.geekbone.org/debian/
+http://www.anheng.com.cn/debian/
+#LOC:CR
+ftp://mirrors.ucr.ac.cr/debian/
+http://mirrors.ucr.ac.cr/debian/
#LOC:CZ
-ftp://ftp.cz.debian.org/debian/
-ftp://ftp.debian.cz/debian/
-ftp://www.debian.cz/debian/
-ftp://debian.sh.cvut.cz/debian/
-ftp://ftp.sh.cvut.cz/debian/
-ftp://ftp.zcu.cz/mirrors/debian/
-ftp://debian.mirror.web4u.cz/
-ftp://ftp.cvut.cz/debian/
-ftp://ftp.fs.cvut.cz/debian/
ftp://debian.ignum.cz/debian/
-ftp://ucho.ignum.cz/debian/
ftp://debian.mirror.dkm.cz/debian/
+ftp://debian.mirror.web4u.cz/
+ftp://debian.sh.cvut.cz/debian/
ftp://debian.superhosting.cz/debian/
+ftp://ftp.cvut.cz/debian/
+ftp://ftp.cz.debian.org/debian/
+ftp://ftp.zcu.cz/mirrors/debian/
+http://debian.ignum.cz/debian/
+http://debian.mirror.dkm.cz/debian/
+http://debian.mirror.web4u.cz/
+http://debian.sh.cvut.cz/debian/
+http://debian.superhosting.cz/debian/
+http://ftp.cvut.cz/debian/
+http://ftp.cz.debian.org/debian/
+http://ftp.zcu.cz/mirrors/debian/
#LOC:DE
-ftp://ftp.de.debian.org/debian/
-ftp://ftp1.de.debian.org/debian/
-ftp://debian.inf.tu-dresden.de/debian/
-ftp://ftp2.de.debian.org/debian/
-ftp://ftp.rfc822.org/debian/
-ftp://source.rfc822.org/debian/
-ftp://ftp.tu-clausthal.de/pub/linux/debian/
-ftp://pegasus.rz.tu-clausthal.de/pub/linux/debian/
+ftp://artfiles.org/debian/
+ftp://debian.cruisix.net/debian/
+ftp://debian.morphium.info/debian/
+ftp://debian.netcologne.de/debian/
+ftp://debian.tu-bs.de/debian/
ftp://debian.uni-duisburg-essen.de/debian/
-ftp://ftp.freenet.de/debian/
-ftp://ftp.informatik.rwth-aachen.de/pub/Linux/debian/
-ftp://sunsite.informatik.rwth-aachen.de/pub/Linux/debian/
ftp://ftp-stud.fht-esslingen.de/debian/
-ftp://ftp.stw-bonn.de/debian/
+ftp://ftp.de.debian.org/debian/
+ftp://ftp.freenet.de/debian/
ftp://ftp.fu-berlin.de/pub/unix/linux/mirrors/debian/
-ftp://Hefe.ZEDAT.FU-Berlin.DE/pub/unix/linux/mirrors/debian/
-ftp://debian.tu-bs.de/debian/
-ftp://ftp.uni-koeln.de/debian/
+ftp://ftp.hosteurope.de/pub/linux/debian/
+ftp://ftp.informatik.hu-berlin.de/pub/Linux/debian/
+ftp://ftp.informatik.rwth-aachen.de/pub/Linux/debian/
+ftp://ftp.informatik.uni-frankfurt.de/pub/Mirrors/debian.org/debian/
ftp://ftp.mpi-sb.mpg.de/pub/linux/debian/
+ftp://ftp.plusline.de/pub/debian/
+ftp://ftp.rrzn.uni-hannover.de/debian/debian/
+ftp://ftp.stw-bonn.de/debian/
ftp://ftp.tu-chemnitz.de/pub/linux/debian/debian/
-ftp://ftp.uni-kl.de/debian/
+ftp://ftp.tu-clausthal.de/pub/linux/debian/
ftp://ftp.uni-bayreuth.de/debian/
-ftp://btr0x2.rz.uni-bayreuth.de/debian/
-ftp://ftp.informatik.hu-berlin.de/pub/Linux/debian/
+ftp://ftp.uni-kl.de/debian/
+ftp://ftp.uni-koeln.de/debian/
+ftp://ftp2.de.debian.org/debian/
ftp://ftp5.gwdg.de/pub/linux/debian/debian/
-ftp://ftp.hosteurope.de/pub/linux/debian/
-ftp://ftp.informatik.uni-frankfurt.de/pub/Mirrors/debian.org/debian/
-ftp://ftp.cs.uni-frankfurt.de/pub/Mirrors/debian.org/debian/
-ftp://debian.netcologne.de/debian/
-ftp://artfiles.org/debian/
-http://debian.intergenia.de/debian/
-http://debian.server4you.de/debian/
-http://debian.vserver.de/debian/
-http://debian.plusserver.de/debian/
-ftp://debian.cruisix.net/debian/
-ftp://ftp.rrzn.uni-hannover.de/debian/debian/
-http://debian.charite.de/debian/
-ftp://ftp.plusline.de/pub/debian/
ftp://mirror.ayous.org/debian/
-ftp://debian.morphium.info/debian/
+ftp://mirror.giantix-server.de/debian/
+http://artfiles.org/debian/
+http://debian.charite.de/debian/
+http://debian.cruisix.net/debian/
+http://debian.intergenia.de/debian/
+http://debian.morphium.info/debian/
+http://debian.netcologne.de/debian/
+http://debian.tu-bs.de/debian/
+http://debian.uni-duisburg-essen.de/debian/
+http://ftp-stud.fht-esslingen.de/debian/
+http://ftp.de.debian.org/debian/
+http://ftp.freenet.de/debian/
+http://ftp.hosteurope.de/pub/linux/debian/
+http://ftp.informatik.rwth-aachen.de/ftp/pub/Linux/debian/
+http://ftp.informatik.uni-frankfurt.de/debian/
+http://ftp.plusline.de/debian/
+http://ftp.stw-bonn.de/debian/
+http://ftp.tu-chemnitz.de/pub/linux/debian/debian/
+http://ftp.tu-clausthal.de/pub/linux/debian/
+http://ftp.uni-bayreuth.de/debian/
+http://ftp.uni-kl.de/debian/
+http://ftp.uni-koeln.de/debian/
+http://ftp2.de.debian.org/debian/
+http://ftp5.gwdg.de/pub/linux/debian/debian/
+http://mirror.ayous.org/debian/
+http://mirror.giantix-server.de/debian/
#LOC:DK
ftp://ftp.dk.debian.org/debian/
-ftp://mirrors.dotsrc.org/debian/
-ftp://ftp.dkuug.dk/pub/debian/
-http://debian.uni-c.dk/debian/
-http://mirror.uni-c.dk/debian/
ftp://mirrors.telianet.dk/debian/
-ftp://mirrors.dk.telia.net/debian/
-http://debianmirror.wwi.dk/debian/
+http://ftp.dk.debian.org/debian/
+http://mirrors.telianet.dk/debian/
#LOC:EE
ftp://ftp.ee.debian.org/debian/
-ftp://ftp.aso.ee/debian/
-ftp://ftp.ria.ee/debian/
+http://ftp.ee.debian.org/debian/
#LOC:ES
-ftp://ftp.es.debian.org/debian/
-ftp://ftp.gul.uc3m.es/debian/
-ftp://ftp.gul.es/debian/
-ftp://ftp.rediris.es/debian/
-ftp://ftp.cica.es/debian/
+ftp://debian.grn.cat/debian/
ftp://ftp.caliu.cat/debian/
+ftp://ftp.cica.es/debian/
+ftp://ftp.es.debian.org/debian/
ftp://ftp.gva.es/mirror/debian/
-ftp://frigga.gva.es/mirror/debian/
-ftp://ftp.um.es/mirror/debian/
ftp://ftp.udc.es/debian/
-ftp://debian.grn.cat/debian/
-ftp://ftp.grn.es/debian/
-ftp://ftp.grn.cat/debian/
-http://debian.com.es/debian/
-http://selene.servytec.es/debian/
+http://debian.grn.cat/debian/
+http://ftp.caliu.cat/debian/
+http://ftp.cica.es/debian/
+http://ftp.es.debian.org/debian/
+http://ftp.gva.es/mirror/debian/
+http://ftp.udc.es/debian/
#LOC:FI
ftp://ftp.fi.debian.org/debian/
-ftp://trumpetti.atm.tut.fi/debian/
ftp://ftp.funet.fi/pub/linux/mirrors/debian/
ftp://ftp.jyu.fi/debian/
-ftp://lennon.cc.jyu.fi/debian/
ftp://ftp.seclan.com/debian/
+http://ftp.fi.debian.org/debian/
+http://ftp.funet.fi/pub/linux/mirrors/debian/
+http://ftp.jyu.fi/debian/
+http://ftp.seclan.com/debian/
#LOC:FR
+ftp://debian.advalem.net/debian/
+ftp://debian.cict.fr/debian/
+ftp://debian.ens-cachan.fr/debian/
+ftp://debian.med.univ-tours.fr/debian/
+ftp://debian.mines.inpl-nancy.fr/debian/
+ftp://debian.mirror.inra.fr/debian/
+ftp://debian.mirrors.easynet.fr/debian/
+ftp://debian.polytech-lille.fr/debian/
+ftp://debian.revolsys.fr/debian/
+ftp://debian.univ-reims.fr/debian/
+ftp://ftp.crihan.fr/debian/
ftp://ftp.fr.debian.org/debian/
-ftp://debian.proxad.net/debian/
-ftp://ftpmirror.proxad.net/debian/
-ftp://ftp2.fr.debian.org/debian/
-ftp://ftp.oleane.net/debian/
ftp://ftp.iut-bm.univ-fcomte.fr/debian/
-ftp://debian.iut-bm.univ-fcomte.fr/debian/
-ftp://ftp.eudil.fr/debian/
-ftp://ftp.proxad.net/mirrors/ftp.debian.org/
-ftp://ftp.free.fr/mirrors/ftp.debian.org/
-ftp://ftp.online.fr/mirrors/ftp.debian.org/
-ftp://ftp.proxad.fr/mirrors/ftp.debian.org/
ftp://ftp.lip6.fr/pub/linux/distributions/debian/
-ftp://debian.ens-cachan.fr/debian/
-ftp://ftp.ens-cachan.fr/debian/
+ftp://ftp.nerim.net/debian/
+ftp://ftp.proxad.net/mirrors/ftp.debian.org/
ftp://ftp.u-picardie.fr/mirror/debian/
-ftp://debian.mirrors.easynet.fr/debian/
-ftp://tengu.easynet.fr/debian/
ftp://ftp.u-strasbg.fr/debian/
-ftp://debian.cict.fr/debian/
+ftp://ftp.univ-nantes.fr/debian/
+ftp://ftp.univ-pau.fr/pub/mirrors/debian/
+ftp://ftp2.fr.debian.org/debian/
ftp://mir1.ovh.net/debian/
-http://mir2.ovh.net/debian/
-http://mirror.ovh.net/debian/
-ftp://ftp.nerim.net/debian/
-ftp://ftp.crihan.fr/debian/
-ftp://debian.mines.inpl-nancy.fr/debian/
-ftp://ftp.mines.inpl-nancy.fr/debian/
-ftp://webb.ens-cachan.fr/debian/
-ftp://debian.ens-cachan.fr/debian/
ftp://mirrors.ircam.fr/pub/debian/
-ftp://debian.mirror.inra.fr/debian/
-ftp://debian.med.univ-tours.fr/debian/
-ftp://ftp.univ-pau.fr/pub/mirrors/debian/
-ftp://ftp.univ-nantes.fr/debian/
-ftp://vacuum.univ-nantes.fr/debian/
+ftp://webb.ens-cachan.fr/debian/
+http://debian.advalem.net/debian/
+http://debian.cict.fr/debian/
+http://debian.ens-cachan.fr/ftp/debian/
+http://debian.med.univ-tours.fr/debian/
+http://debian.mines.inpl-nancy.fr/debian/
+http://debian.mirror.inra.fr/debian/
+http://debian.mirrors.easynet.fr/
+http://debian.polytech-lille.fr/debian/
+http://debian.revolsys.fr/debian/
+http://debian.univ-reims.fr/debian/
+http://ftp.crihan.fr/debian/
+http://ftp.fr.debian.org/debian/
+http://ftp.iut-bm.univ-fcomte.fr/debian/
+http://ftp.lip6.fr/pub/linux/distributions/debian/
+http://ftp.nerim.net/debian/
+http://ftp.u-picardie.fr/mirror/debian/
+http://ftp.u-strasbg.fr/debian/
+http://ftp.univ-pau.fr/linux/mirrors/debian/
+http://ftp2.fr.debian.org/debian/
+http://mir1.ovh.net/debian/
+http://mir2.ovh.net/debian/
http://mirrors.compuscene.org/debian/
-http://ns34892.ovh.net/debian/
-ftp://debian.univ-reims.fr/debian/
+http://mirrors.ircam.fr/pub/debian/
+http://webb.ens-cachan.fr/debian/
#LOC:GB
-ftp://ftp.uk.debian.org/debian/
-ftp://debian.hands.com/debian/
-ftp://open.hands.com/debian/
-http://debian.man.ac.uk/debian/
-http://www.mirrorservice.org/sites/ftp.debian.org/debian/
ftp://ftp.mirrorservice.org/sites/ftp.debian.org/debian/
ftp://ftp.ticklers.org/debian/
-ftp://rib.ticklers.org/debian/
-ftp://debian.virginmedia.com/mirrors/ftp.debian.org
-ftp://mirror2.blueyonder.co.uk debian.blueyonder.co.uk/mirrors/ftp.debian.org
+ftp://ftp.uk.debian.org/debian/
+ftp://mirror.ox.ac.uk/debian/
ftp://mirror.positive-internet.com/debian/
+ftp://mirror.sov.uk.goscomb.net/debian/
+ftp://mirrors.melbourne.co.uk/debian/
ftp://the.earth.li/debian/
ftp://ukdebian.mirror.anlx.net/debian/
-ftp://mirror.ox.ac.uk/debian/
-ftp://debian.zetnet.co.uk/debian/
-ftp://mirror.sov.uk.goscomb.net/debian/
+http://debian.man.ac.uk/debian/
+http://ftp.ticklers.org/debian/
+http://ftp.uk.debian.org/debian/
+http://mirror.ox.ac.uk/debian/
+http://mirror.positive-internet.com/debian/
+http://mirror.sov.uk.goscomb.net/debian/
+http://mirrors.melbourne.co.uk/debian/
+http://the.earth.li/debian/
+http://ukdebian.mirror.anlx.net/debian/
+http://www.mirrorservice.org/sites/ftp.debian.org/debian/
#LOC:GR
-ftp://ftp.gr.debian.org/debian/
-ftp://ftp.ntua.gr/debian/
ftp://debian.otenet.gr/pub/linux/debian/
-ftp://ftp.duth.gr/debian/
-ftp://stalker.duth.gr/debian/
-http://ftp.softnet.tuc.gr/ftp/linux/debian/
-http://antirix.softnet.tuc.gr/ftp/linux/debian/
ftp://ftp.cc.uoc.gr/mirrors/linux/debian/
+ftp://ftp.gr.debian.org/debian/
+ftp://ftp.uoi.gr/debian/
+http://debian.otenet.gr/debian/
+http://ftp.cc.uoc.gr/mirrors/linux/debian/
+http://ftp.gr.debian.org/debian/
+http://ftp.uoi.gr/debian/
#LOC:HK
ftp://ftp.hk.debian.org/debian/
+http://ftp.hk.debian.org/debian/
#LOC:HR
+ftp://debian.iskon.hr/debian/
+ftp://ftp.carnet.hr/debian/
ftp://ftp.hr.debian.org/debian/
-ftp://debian.carnet.hr/debian/
ftp://ftp.irb.hr/debian/
-ftp://ftp.carnet.hr/debian/
-ftp://debian.iskon.hr/debian/
+http://debian.iskon.hr/debian/
+http://ftp.carnet.hr/debian/
+http://ftp.hr.debian.org/debian/
+http://ftp.irb.hr/debian/
#LOC:HU
-ftp://ftp.hu.debian.org/debian/
-ftp://ftp.fsn.hu/debian/
-ftp://ftp.kfki.hu/pub/linux/debian/
-ftp://ftp.bme.hu/OS/Linux/dist/debian/
ftp://debian.mirrors.crysys.hu/debian/
ftp://debian.sth.sze.hu/debian/
-ftp://mirrors.sth.sze.hu/debian/
+ftp://ftp.bme.hu/debian/
+ftp://ftp.hu.debian.org/debian/
+ftp://ftp.kfki.hu/pub/linux/debian/
+http://debian.mirrors.crysys.hu/debian/
+http://debian.sth.sze.hu/debian/
+http://ftp.bme.hu/debian/
+http://ftp.hu.debian.org/debian/
+http://ftp.kfki.hu/linux/debian/
#LOC:ID
ftp://kebo.vlsm.org/debian/
-ftp://surabaya.vlsm.org/debian/
-ftp://katmai.its.ac.id/debian/
ftp://mirror.unej.ac.id/debian/
+http://kebo.vlsm.org/debian/
+http://mirror.unej.ac.id/debian/
#LOC:IE
-ftp://ftp.ie.debian.org/debian/
-ftp://debian.heanet.ie/debian/
-ftp://canyonero.heanet.ie/debian/
ftp://ftp.esat.net/pub/linux/debian/
+ftp://ftp.ie.debian.org/debian/
+http://ftp.esat.net/pub/linux/debian/
+http://ftp.ie.debian.org/debian/
#LOC:IL
http://debian.co.il/debian/
-http://debian.interhost.co.il/debian/
http://mirror.isoc.org.il/pub/debian/
#LOC:IN
ftp://ftp.iitm.ac.in/debian/
+ftp://mirror.cse.iitk.ac.in/debian/
+http://ftp.iitm.ac.in/debian/
+http://mirror.cse.iitk.ac.in/debian/
#LOC:IS
ftp://ftp.is.debian.org/debian/
-ftp://ftp.rhnet.is/debian/
+http://ftp.is.debian.org/debian/
#LOC:IT
+ftp://debian.bononia.it/debian/
+ftp://debian.dynamica.it/debian/
+ftp://debian.fastbull.org/debian/
+ftp://debian.fastweb.it/debian/
+ftp://freedom.dicea.unifi.it/pub/linux/debian/
ftp://ftp.it.debian.org/debian/
-ftp://ftp.bofh.it/debian/
-ftp://vlad-tepes.bofh.it/debian/
ftp://giano.com.dist.unige.it/debian/
-ftp://ftp.bononia.it/debian/
-ftp://freedom.dicea.unifi.it/pub/linux/debian/
ftp://mi.mirror.garr.it/mirrors/debian/
-ftp://debian.fastweb.it/debian/
-ftp://ftp.unina.it/pub/linux/distributions/debian/
-ftp://debian.fastbull.org/debian/
-ftp://debian.dynamica.it/debian/
+http://debian.bononia.it/debian/
+http://debian.dynamica.it/debian/
+http://debian.fastbull.org/debian/
+http://debian.fastweb.it/debian/
+http://freedom.dicea.unifi.it/ftp/pub/linux/debian/
+http://ftp.it.debian.org/debian/
+http://giano.com.dist.unige.it/debian/
+http://mi.mirror.garr.it/mirrors/debian/
http://mirror.units.it/debian/
#LOC:JP
-ftp://ftp2.jp.debian.org/debian/
-ftp://ftp.debian.or.jp/debian/
-ftp://http.debian.or.jp/debian/
-http://ftp.jp.debian.org/debian/
-http://cdn.debian.or.jp/debian/
-ftp://ftp.nara.wide.ad.jp/debian/
-ftp://ftp.aist-nara.ac.jp/debian/
-ftp://ftp.dti.ad.jp/pub/Linux/debian/
+ftp://dennou-h.gfd-dennou.org/debian/
ftp://dennou-k.gfd-dennou.org/debian/
-ftp://dennou-k.gaia.h.kyoto-u.ac.jp/debian/
ftp://dennou-q.gfd-dennou.org/debian/
-ftp://dennou-q.geo.kyushu-u.ac.jp/debian/
-ftp://ftp.yz.yamagata-u.ac.jp/debian/
-ftp://linux.yz.yamagata-u.ac.jp/debian/
-ftp://sb.itc.u-tokyo.ac.jp/DEBIAN/
-ftp://ftp.ecc.u-tokyo.ac.jp/DEBIAN/
-ftp://ftp.riken.jp/Linux/debian/debian/
-ftp://ftp.riken.go.jp/Linux/debian/debian/
-http://debian.shimpinomori.net/debian/
+ftp://ftp.dti.ad.jp/pub/Linux/debian/
ftp://ftp.jaist.ac.jp/pub/Linux/Debian/
+ftp://ftp.jp.debian.org/debian/
+ftp://ftp.nara.wide.ad.jp/debian/
+ftp://ftp.riken.jp/Linux/debian/debian/
+ftp://ftp.yz.yamagata-u.ac.jp/debian/
+ftp://ftp2.jp.debian.org/debian/
+http://dennou-h.gfd-dennou.org/debian/
+http://dennou-k.gfd-dennou.org/debian/
+http://dennou-q.gfd-dennou.org/debian/
+http://ftp.dti.ad.jp/pub/Linux/debian/
+http://ftp.jaist.ac.jp/pub/Linux/Debian/
+http://ftp.jp.debian.org/debian/
+http://ftp.nara.wide.ad.jp/debian/
+http://ftp.riken.jp/Linux/debian/debian/
+http://ftp.yz.yamagata-u.ac.jp/debian/
+http://ftp2.jp.debian.org/debian/
http://www.cohsoft.com/debian/
-ftp://dennou-h.gfd-dennou.org/debian/
-ftp://dennou-h.ees.hokudai.ac.jp/debian/
#LOC:KR
-ftp://ftp.kr.debian.org/debian/
-ftp://ftp.kaist.ac.kr/debian/
ftp://ftp.daum.net/debian/
+ftp://ftp.kr.debian.org/debian/
+http://ftp.daum.net/debian/
+http://ftp.kr.debian.org/debian/
#LOC:KZ
ftp://mirror.neolabs.kz/debian/
+http://mirror.neolabs.kz/debian/
#LOC:LT
-ftp://ftp.litnet.lt/debian/
-ftp://debina.ktu.lt/debian/
ftp://debian.balt.net/debian/
+ftp://ftp.litnet.lt/debian/
+http://debian.balt.net/debian/
+http://ftp.litnet.lt/debian/
#LOC:LU
-ftp://debian.lu.prunk.si/debian/
-ftp://lux.prunk.si/debian/
+ftp://debian.mirror.root.lu/debian/
+http://debian.mirror.root.lu/debian/
#LOC:LV
+ftp://debian.linux.edu.lv/debian/
ftp://koyanet.lv/debian/
-ftp://ftp.koyanet.lv/debian/
+http://debian.linux.edu.lv/debian/
+http://koyanet.lv/debian/
#LOC:MD
ftp://debian.md/debian/
+http://debian.md/debian/
#LOC:MN
ftp://mirror.debian.mn/debian/
+http://mirror.debian.mn/debian/
#LOC:MT
-http://debian.eng.um.edu.mt/debian/
+http://debian.res.um.edu.mt/debian/
#LOC:MX
ftp://ftp.mx.debian.org/debian/
-ftp://debian.unam.mx/debian/
-ftp://nisamox.fciencias.unam.mx/debian/
ftp://mmc.geofisica.unam.mx/debian/
-#LOC:MY
-ftp://mirror.publicns.net/debian/
+http://ftp.mx.debian.org/debian/
+http://mmc.geofisica.unam.mx/debian/
#LOC:NC
ftp://ftp.nc.debian.org/debian/
-ftp://debian.nautile.nc/debian/
+http://ftp.nc.debian.org/debian/
#LOC:NI
http://debian.uni.edu.ni/debian/
#LOC:NL
+ftp://debian.mirror.cambrium.nl/debian/
+ftp://ftp.debian.nl/debian/
ftp://ftp.nl.debian.org/debian/
-ftp://ftp.snt.utwente.nl/debian/
ftp://ftp.nluug.nl/pub/os/Linux/distr/debian/
-ftp://mirrors.nl.kernel.org/debian/
ftp://ftp.surfnet.nl/pub/os/Linux/distr/debian/
-ftp://ftp.debian.nl/debian/
-ftp://download.xs4all.nl/debian/
ftp://ftp.tiscali.nl/pub/mirrors/debian/
-ftp://debian.mirror.cambrium.nl/debian/
+ftp://mirrors.nl.kernel.org/debian/
+http://debian.mirror.cambrium.nl/debian/
+http://ftp.debian.nl/debian/
+http://ftp.nl.debian.org/debian/
+http://ftp.nluug.nl/pub/os/Linux/distr/debian/
+http://ftp.surfnet.nl/os/Linux/distr/debian/
+http://ftp.tiscali.nl/debian/
+http://mirrors.nl.kernel.org/debian/
#LOC:NO
ftp://ftp.no.debian.org/debian/
-ftp://ftp.uninett.no/debian/
-ftp://ftp.uio.no/debian/
+http://ftp.no.debian.org/debian/
#LOC:NZ
ftp://ftp.nz.debian.org/debian/
-ftp://ftp.citylink.co.nz/debian/
+http://ftp.nz.debian.org/debian/
#LOC:PF
ftp://repository.linux.pf/debian/
+http://repository.linux.pf/debian/
#LOC:PL
-ftp://ftp.pl.debian.org/debian/
-ftp://ftp.task.gda.pl/debian/
ftp://ftp.icm.edu.pl/pub/Linux/debian/
-ftp://sunsite.icm.edu.pl/pub/Linux/debian/
+ftp://ftp.man.poznan.pl/pub/linux/debian/debian/
ftp://ftp.man.szczecin.pl/pub/Linux/debian/
-ftp://rubycon.man.szczecin.pl/pub/Linux/debian/
-ftp://ftp.vectranet.pl/debian/
+ftp://ftp.pl.debian.org/debian/
ftp://ftp.pwr.wroc.pl/debian/
-ftp://ftp.man.poznan.pl/pub/linux/debian/debian/
+ftp://ftp.vectranet.pl/debian/
ftp://piotrkosoft.net/pub/mirrors/debian/
-ftp://ftp.man.oswiecim.pl/pub/mirrors/debian/
+http://ftp.icm.edu.pl/pub/Linux/debian/
+http://ftp.man.poznan.pl/pub/linux/debian/debian/
+http://ftp.pl.debian.org/debian/
+http://ftp.pwr.wroc.pl/debian/
+http://ftp.vectranet.pl/debian/
+http://piotrkosoft.net/pub/mirrors/debian/
#LOC:PT
-ftp://ftp.pt.debian.org/debian/
-ftp://ftp.uevora.pt/debian/
-ftp://ftp.eq.uc.pt/pub/software/Linux/debian/
-ftp://debian.ua.pt/debian/
-ftp://ftp.ua.pt/debian/
-ftp://mirrors.nfsi.pt/pub/debian/
-ftp://neacm.fe.up.pt/pub/debian/
ftp://cesium.di.uminho.pt/pub/debian/
ftp://debian.netvisao.pt/debian/
-http://debian.dcc.fc.up.pt/debian/
+ftp://debian.ua.pt/debian/
+ftp://ftp.eq.uc.pt/pub/software/Linux/debian/
+ftp://ftp.pt.debian.org/debian/
ftp://mirror.sim.ul.pt/debian/
+ftp://mirrors.fe.up.pt/debian/
+ftp://mirrors.nfsi.pt/debian/
+http://cesium.di.uminho.pt/pub/debian/
+http://debian.dcc.fc.up.pt/debian/
+http://debian.netvisao.pt/
+http://debian.ua.pt/debian/
+http://ftp.eq.uc.pt/software/Linux/debian/
+http://ftp.pt.debian.org/debian/
+http://mirror.sim.ul.pt/debian/
+http://mirrors.fe.up.pt/debian/
+http://mirrors.nfsi.pt/debian/
#LOC:RO
-ftp://ftp.ro.debian.org/debian/
-ftp://ftp.iasi.roedu.net/debian/
ftp://ftp.lug.ro/debian/
-ftp://ftp.mikesnet.ro/debian/
-ftp://debian.mikesnet.ro/debian/
+ftp://ftp.ro.debian.org/debian/
+http://ftp.lug.ro/debian/
+http://ftp.ro.debian.org/debian/
#LOC:RU
-ftp://ftp.ru.debian.org/debian/
-ftp://ftp.chg.ru/debian/
ftp://debian.nsu.ru/debian/
-ftp://ftp.psn.ru/debian/
-ftp://server.psn.ru/debian/
ftp://ftp.corbina.net/debian/
-ftp://ftp.mipt.ru/debian/
-ftp://petrel.telecom.mipt.ru/debian/
-ftp://mirror.yandex.ru/debian/
-ftp://ftp.yandex.ru/debian/
ftp://ftp.debian.chuvsu.ru/debian/
-ftp://debian.chuvsu.ru/debian/
+ftp://ftp.psn.ru/debian/
+ftp://ftp.ru.debian.org/debian/
+ftp://mirror.svk.su/debian/
+ftp://mirror.yandex.ru/debian/
+ftp://mirror2.corbina.ru/debian/
+http://debian.nsu.ru/debian/
+http://ftp.debian.chuvsu.ru/debian/
+http://ftp.psn.ru/debian/
+http://ftp.ru.debian.org/debian/
+http://mirror.svk.su/debian/
+http://mirror.yandex.ru/debian/
+http://mirror2.corbina.ru/debian/
#LOC:SE
-ftp://ftp.se.debian.org/debian/
-ftp://ftp.acc.umu.se/debian/
-ftp://ftp.sunet.se/pub/Linux/distributions/debian/
-ftp://mirrors.se.kernel.org/debian/
-ftp://ftp.port80.se/debian/
-ftp://ftp.ds.karen.hj.se/debian/
-ftp://ftp.ds.hj.se/debian/
ftp://debian.bsnet.se/debian/
-ftp://gelehallon.bsnet.se/debian/
ftp://debian.lth.se/debian/
-ftp://ftp.ddg.lth.se/debian/
ftp://ftp.df.lth.se/debian/
+ftp://ftp.ds.karen.hj.se/debian/
+ftp://ftp.port80.se/debian/
+ftp://ftp.se.debian.org/debian/
+ftp://ftp.sunet.se/pub/Linux/distributions/debian/
+ftp://mirrors.se.kernel.org/debian/
+http://debian.bsnet.se/debian/
+http://debian.lth.se/debian/
+http://ftp.df.lth.se/debian/
+http://ftp.ds.karen.hj.se/debian/
+http://ftp.port80.se/debian/
+http://ftp.se.debian.org/debian/
+http://ftp.sunet.se/pub/Linux/distributions/debian/
+http://mirrors.se.kernel.org/debian/
#LOC:SG
ftp://mirror.nus.edu.sg/pub/Debian/
-ftp://mirror.comp.nus.edu.sg/pub/Debian/
+http://mirror.nus.edu.sg/Debian/
#LOC:SI
-ftp://ftp.si.debian.org/debian/
-ftp://ftp.camtp.uni-mb.si/debian/
ftp://debian.camtp.uni-mb.si/debian/
ftp://ftp.arnes.si/packages/debian/
-ftp://debian.prunk.si/debian/
+ftp://ftp.si.debian.org/debian/
+http://debian.camtp.uni-mb.si/debian/
+http://ftp.arnes.si/pub/packages/debian/
+http://ftp.si.debian.org/debian/
#LOC:SK
-ftp://ftp.sk.debian.org/debian/
-ftp://ftp.debian.sk/debian/
-ftp://debian.sk/debian/
-ftp://mirrors.nextra.sk/debian/
ftp://debian.ynet.sk/debian/
-ftp://mirror.ynet.sk/debian/
ftp://ftp.antik.sk/debian/
-ftp://debian.antik.sk/debian/
-ftp://ubuntu.antik.sk/debian/
+ftp://ftp.sk.debian.org/debian/
+http://debian.ynet.sk/debian/
+http://ftp.antik.sk/debian/
+http://ftp.sk.debian.org/debian/
#LOC:SV
http://debian.ues.edu.sv/debian/
-http://linux.ues.edu.sv/debian/
#LOC:TH
-ftp://ftp.coe.psu.ac.th/debian/
-ftp://debian.coe.psu.ac.th/debian/
-http://debian.thaios.net/debian/
ftp://ftp.debianclub.org/debian/
+ftp://ftp.th.debian.org/debian/
+ftp://ftp.v6.coe.psu.ac.th/debian/
+http://debian.thaios.net/debian/
+http://ftp.debianclub.org/debian/
+http://ftp.th.debian.org/debian/
+http://ftp.v6.coe.psu.ac.th/debian/
#LOC:TR
-ftp://ftp.tr.debian.org/debian/
-ftp://debian.ankara.edu.tr/debian/
-ftp://ftp.ankara.edu.tr/debian/
+ftp://debian.comu.edu.tr/debian/
ftp://ftp.linux.org.tr/debian/
+ftp://ftp.metu.edu.tr/debian/
+ftp://ftp.tr.debian.org/debian/
ftp://godel.cs.bilgi.edu.tr/debian/
+http://debian.comu.edu.tr/debian/
http://debian.eso-es.net/debian/
-ftp://debian.comu.edu.tr/debian/
-ftp://ftp.metu.edu.tr/debian/
+http://ftp.linux.org.tr/debian/
+http://ftp.metu.edu.tr/debian/
+http://ftp.tr.debian.org/debian/
+http://godel.cs.bilgi.edu.tr/debian/
#LOC:TW
-ftp://ftp.tw.debian.org/debian/
-ftp://debian.linux.org.tw/debian/
+ftp://debian.csie.nctu.edu.tw/debian/
ftp://debian.csie.ntu.edu.tw/pub/debian/
-ftp://ftp.twaren.net/debian/
-ftp://linux.cdpa.nsysu.edu.tw/debian/
-ftp://opensource.nchc.org.tw/debian/
-ftp://os.nchc.org.tw/debian/
-ftp://ftp.isu.edu.tw/debian/
ftp://debian.nctu.edu.tw/debian/
-ftp://mirror.nttu.edu.tw/debian/
-ftp://debian.csie.nctu.edu.tw/debian/
-ftp://ftp.ncnu.edu.tw/debian/
-ftp://ftp4.ncnu.edu.tw/debian/
ftp://ftp.cse.yzu.edu.tw/pub/Linux/debian/debian/
-ftp://ftp.oss.tw/pub/Linux/debian/debian/
+ftp://ftp.isu.edu.tw/debian/
+ftp://ftp.ncnu.edu.tw/debian/
ftp://ftp.tcc.edu.tw/debian/
+ftp://ftp.tku.edu.tw/debian/
+ftp://ftp.tw.debian.org/debian/
+ftp://ftp.twaren.net/debian/
+ftp://mirror.nttu.edu.tw/debian/
+ftp://opensource.nchc.org.tw/debian/
+http://debian.csie.nctu.edu.tw/debian/
+http://debian.csie.ntu.edu.tw/debian/
+http://debian.nctu.edu.tw/debian/
+http://ftp.cse.yzu.edu.tw/pub/Linux/debian/debian/
+http://ftp.isu.edu.tw/debian/
+http://ftp.ncnu.edu.tw/debian/
+http://ftp.tcc.edu.tw/debian/
+http://ftp.tku.edu.tw/debian/
+http://ftp.tw.debian.org/debian/
+http://ftp.twaren.net/debian/
+http://mirror.nttu.edu.tw/debian/
+http://opensource.nchc.org.tw/debian/
#LOC:UA
-ftp://ftp.ua.debian.org/debian/
-ftp://debian.org.ua/debian/
-ftp://lumpy.3logic.net/debian/
ftp://debian.osdn.org.ua/pub/Debian/debian/
ftp://ftp.3logic.net/debian/
-ftp://borg.3logic.net/debian/
-ftp://mirror.mirohost.net/debian/
-ftp://deb.mirohost.net/debian/
+ftp://ftp.ua.debian.org/debian/
ftp://ftp2.debian.org.ua/debian/
-ftp://mirror.3logic.net/debian/
+ftp://mirror.mirohost.net/debian/
+http://debian.osdn.org.ua/debian/
+http://ftp.ua.debian.org/debian/
+http://ftp2.debian.org.ua/debian/
+http://mirror.mirohost.net/debian/
#LOC:US
-ftp://ftp.us.debian.org/debian/
-ftp://http.us.debian.org/debian/
-ftp://ftp.gtlib.gatech.edu/pub/debian/
-ftp://zaphod.gtlib.gatech.edu/pub/debian/
-ftp://ftp.egr.msu.edu/debian/
-ftp://ike.egr.msu.edu/debian/
+ftp://carroll.aset.psu.edu/pub/linux/distributions/debian/
+ftp://debian.cites.uiuc.edu/pub/debian/
+ftp://debian.cs.binghamton.edu/debian/
+ftp://debian.lcs.mit.edu/debian/
+ftp://debian.mirror.frontiernet.net/debian/
+ftp://debian.mirrors.tds.net/debian/
+ftp://debian.osuosl.org/debian/
+ftp://debian.secsup.org/pub/linux/debian/
+ftp://debian.uchicago.edu/debian/
ftp://distro.ibiblio.org/debian/
ftp://ftp-mirror.internap.com/pub/debian/
-ftp://mirror.cs.wisc.edu/debian/
-ftp://ftp.uwsg.indiana.edu/linux/debian/
-ftp://uwsg.iu.edu/linux/debian/
-ftp://ftp.ndlug.nd.edu/debian/
-ftp://debian.uchicago.edu/debian/
-ftp://linux.uchicago.edu/debian/
-ftp://carroll.aset.psu.edu/pub/linux/distributions/debian/
-ftp://carroll.cac.psu.edu/pub/linux/distributions/debian/
-ftp://gladiator.real-time.com/linux/debian/
-ftp://mirrors.kernel.org/debian/
-ftp://mirrors.xmission.com/debian/
-ftp://mirror.xmission.com/debian/
+ftp://ftp.egr.msu.edu/debian/
+ftp://ftp.grokthis.net/debian/
+ftp://ftp.gtlib.gatech.edu/pub/debian/
+ftp://ftp.keystealth.org/debian/
ftp://ftp.lug.udel.edu/pub/debian/
-ftp://debian.lcs.mit.edu/debian/
-ftp://debian.ipv6.lcs.mit.edu/debian/
-ftp://debian.csail.mit.edu/debian/
-http://linux.csua.berkeley.edu/debian/
-http://screwdriver.csua.berkeley.edu/debian/
+ftp://ftp.ndlug.nd.edu/debian/
ftp://ftp.silug.org/pub/debian/
-ftp://ftp.luci.org/pub/debian/
-ftp://ftp.kspei.com/pub/debian/
-ftp://debian.secsup.org/pub/linux/debian/
-ftp://debian.osuosl.org/debian/
-ftp://debian.oregonstate.edu/debian/
-ftp://ftp.oregonstate.edu/debian/
-ftp://ftp.osuosl.org/debian/
-ftp://mirror.anl.gov/pub/debian/
-http://sluglug.ucsc.edu/debian/
-ftp://mirrors.geeks.org/debian/
-ftp://mirrors.usc.edu/pub/linux/distributions/debian/
-ftp://debian.mirrors.pair.com/
+ftp://ftp.uga.edu/debian/
+ftp://ftp.us.debian.org/debian/
+ftp://ftp.uwsg.indiana.edu/linux/debian/
+ftp://gladiator.real-time.com/linux/debian/
ftp://lug.mtu.edu/debian/
-ftp://debian.mirrors.tds.net/debian/
-ftp://debian.cites.uiuc.edu/pub/debian/
-ftp://bazaar.cites.uiuc.edu/pub/debian/
-ftp://cosmos.cites.uiuc.edu/pub/debian/
-ftp://mirrors.tummy.com/debian/
-ftp://debian.mirror.frontiernet.net/debian/
-http://cudlug.cudenver.edu/debian/
+ftp://mirror.anl.gov/pub/debian/
ftp://mirror.cc.columbia.edu/pub/linux/debian/debian/
-ftp://ftp.grokthis.net/debian/
-http://mirrors.xenir.com/debian/
-http://debian.mirrors.easynews.com/linux/debian/
-http://mirrors.easynews.com/linux/debian/
-http://debian.ams.sunysb.edu/debian/
-http://mirrors.acm.jhu.edu/debian/
-http://astrolabe.acm.jhu.edu/debian/
-ftp://ftp.uga.edu/debian/
-ftp://linuxserv.uga.edu/debian/
-http://mirror.steadfast.net/debian/
-ftp://ftp.utexas.edu/pub/debian/
-ftp://ftp.the.net/pub/debian/
+ftp://mirror.cs.wisc.edu/debian/
ftp://mirror.fdcservers.net/debian/
+ftp://mirror.its.uidaho.edu/debian/
ftp://mirror.rit.edu/debian/
+ftp://mirrors.bloomu.edu/debian/
+ftp://mirrors.geeks.org/debian/
+ftp://mirrors.hosef.org/debian/
+ftp://mirrors.kernel.org/debian/
+ftp://mirrors.tummy.com/debian/
+ftp://mirrors.usc.edu/pub/linux/distributions/debian/
+ftp://mirrors.xmission.com/debian/
+http://carroll.aset.psu.edu/pub/linux/distributions/debian/
+http://debian.cites.uiuc.edu/pub/debian/
http://debian.corenetworks.net/debian/
-ftp://mirror.its.uidaho.edu/debian/
-ftp://debian.cs.binghamton.edu/debian/
+http://debian.cs.binghamton.edu/debian/
+http://debian.lcs.mit.edu/debian/
+http://debian.mirror.frontiernet.net/debian/
+http://debian.mirrors.easynews.com/linux/debian/
+http://debian.mirrors.tds.net/debian/
+http://debian.osuosl.org/debian/
+http://debian.secsup.org/
+http://debian.uchicago.edu/debian/
+http://debian.usu.edu/debian/
+http://distro.ibiblio.org/debian/
+http://ftp-mirror.internap.com/pub/debian/
+http://ftp.egr.msu.edu/debian/
+http://ftp.grokthis.net/debian/
+http://ftp.gtlib.gatech.edu/debian/
+http://ftp.keystealth.orgdebian/
+http://ftp.lug.udel.edu/pub/debian/
+http://ftp.ndlug.nd.edu/mirrors/debian/
+http://ftp.silug.org/pub/debian/
+http://ftp.uga.edu/debian/
+http://ftp.us.debian.org/debian/
+http://ftp.utexas.edu/debian/
+http://ftp.uwsg.indiana.edu/linux/debian/
+http://linux.csua.berkeley.edu/debian/
+http://lug.mtu.edu/debian/
+http://mirror.anl.gov/debian/
+http://mirror.cc.columbia.edu/pub/linux/debian/debian/
+http://mirror.cs.wisc.edu/debian/
+http://mirror.fdcservers.net/debian/
http://mirror.hmc.edu/debian/
-http://worblehat.math.hmc.edu/debian/
-ftp://mirrors.hosef.org/debian/
+http://mirror.its.uidaho.edu/pub/debian/
+http://mirror.rit.edu/debian/
+http://mirror.steadfast.net/debian/
+http://mirrors.bloomu.edu/debian/
+http://mirrors.geeks.org/debian/
+http://mirrors.hosef.org/debian/
+http://mirrors.kernel.org/debian/
+http://mirrors.modwest.com/debian/
+http://mirrors.tummy.com/debian/
+http://mirrors.usc.edu/pub/linux/distributions/debian/
+http://mirrors.xenir.com/debian/
+http://mirrors.xmission.com/debian/
+http://sluglug.ucsc.edu/debian/
#LOC:UZ
ftp://debian.stream.uz/debian/
-ftp://debian.uz/debian/
+http://debian.stream.uz/debian/
#LOC:VE
http://debian.unesr.edu.ve/debian/
#LOC:ZA
-ftp://ftp.sun.ac.za/debian/
ftp://debian.mirror.ac.za/debian/
ftp://ftp.is.co.za/debian/
+ftp://ftp.sun.ac.za/debian/
+http://debian.mirror.ac.za/debian/
+http://ftp.sun.ac.za/ftp/debian/
diff --git a/data/templates/Ubuntu.info.in b/data/templates/Ubuntu.info.in
index 1ca76927..a84cbc2b 100644
--- a/data/templates/Ubuntu.info.in
+++ b/data/templates/Ubuntu.info.in
@@ -8,8 +8,7 @@ BaseURI-powerpc: http://ports.ubuntu.com/
MatchURI-powerpc: ports.ubuntu.com|archive.ubuntu.com
BaseURI-lpia: http://ports.ubuntu.com/
MatchURI-lpia: ports.ubuntu.com|archive.ubuntu.com
-MirrorsFile-amd64: Ubuntu.mirrors
-MirrorsFile-i386: Ubuntu.mirrors
+MirrorsFile: Ubuntu.mirrors
_Description: Ubuntu 10.04 'Lucid Lynx'
Component: main
_CompDescription: Officially supported
@@ -69,8 +68,7 @@ BaseURI-powerpc: http://ports.ubuntu.com/
MatchURI-powerpc: ports.ubuntu.com|archive.ubuntu.com
BaseURI-lpia: http://ports.ubuntu.com/
MatchURI-lpia: ports.ubuntu.com|archive.ubuntu.com
-MirrorsFile-amd64: Ubuntu.mirrors
-MirrorsFile-i386: Ubuntu.mirrors
+MirrorsFile: Ubuntu.mirrors
_Description: Ubuntu 9.10 'Karmic Koala'
Component: main
_CompDescription: Officially supported
@@ -130,8 +128,7 @@ BaseURI-powerpc: http://ports.ubuntu.com/
MatchURI-powerpc: ports.ubuntu.com|archive.ubuntu.com
BaseURI-lpia: http://ports.ubuntu.com/
MatchURI-lpia: ports.ubuntu.com|archive.ubuntu.com
-MirrorsFile-amd64: Ubuntu.mirrors
-MirrorsFile-i386: Ubuntu.mirrors
+MirrorsFile: Ubuntu.mirrors
_Description: Ubuntu 9.04 'Jaunty Jackalope'
Component: main
_CompDescription: Officially supported
@@ -191,8 +188,7 @@ BaseURI-powerpc: http://ports.ubuntu.com/
MatchURI-powerpc: ports.ubuntu.com|archive.ubuntu.com
BaseURI-lpia: http://ports.ubuntu.com/
MatchURI-lpia: ports.ubuntu.com|archive.ubuntu.com
-MirrorsFile-amd64: Ubuntu.mirrors
-MirrorsFile-i386: Ubuntu.mirrors
+MirrorsFile: Ubuntu.mirrors
_Description: Ubuntu 8.10 'Intrepid Ibex'
Component: main
_CompDescription: Officially supported
@@ -253,8 +249,7 @@ BaseURI-powerpc: http://ports.ubuntu.com/
MatchURI-powerpc: ports.ubuntu.com|archive.ubuntu.com
BaseURI-lpia: http://ports.ubuntu.com/
MatchURI-lpia: ports.ubuntu.com|archive.ubuntu.com
-MirrorsFile-amd64: Ubuntu.mirrors
-MirrorsFile-i386: Ubuntu.mirrors
+MirrorsFile: Ubuntu.mirrors
_Description: Ubuntu 8.04 'Hardy Heron'
Component: main
_CompDescription: Officially supported
diff --git a/data/templates/Ubuntu.mirrors b/data/templates/Ubuntu.mirrors
index c6369d45..ee88b772 100644
--- a/data/templates/Ubuntu.mirrors
+++ b/data/templates/Ubuntu.mirrors
@@ -1,351 +1,416 @@
+#LOC:AR
+http://ftp.ccc.uba.ar/pub/linux/ubuntu/
+http://ubuntu.innova-red.net/ubuntu/
+http://ubuntu.patan.com.ar/ubuntu/
+#LOC:AT
+http://gd.tuwien.ac.at/opsys/linux/ubuntu/archive/
+http://ubuntu.inode.at/ubuntu/
+http://ubuntu.lagis.at/ubuntu/
+http://ubuntu.uni-klu.ac.at/ubuntu/
#LOC:AU
http://ftp.iinet.net.au/pub/ubuntu/
-ftp://ftp.iinet.net.au/pub/ubuntu
http://ftp.netspace.net.au/pub/ubuntu/
-ftp://ftp.netspace.net.au/pub/ubuntu/
http://mirror.aarnet.edu.au/pub/ubuntu/archive/
-ftp://mirror.aarnet.edu.au/pub/ubuntu/archive/
+http://mirror.files.bigpond.com/ubuntu/
http://mirror.internode.on.net/pub/ubuntu/ubuntu/
-ftp://mirror.internode.on.net/pub/ubuntu/ubuntu/
+http://mirror.netspace.net.au/pub/ubuntu/
http://mirror.optus.net/ubuntu/
http://mirror.pacific.net.au/linux/ubuntu/
-#LOC:AT
-http://esda.wu-wien.ac.at/pub/ubuntu-archive/
-ftp://esda.wu-wien.ac.at/pub/ubuntu-archive/
-http://ubuntu.inode.at/ubuntu/
-ftp://ubuntu.inode.at/ubuntu/
-http://gd.tuwien.ac.at/opsys/linux/ubuntu/archive/
-#LOC:BE
-http://ftp.belnet.be/pub/mirror/ubuntu.com/ubuntu/
-ftp://ftp.belnet.be/pub/mirror/ubuntu.com/ubuntu/
-http://ftp.belnet.be/linux/ubuntu/ubuntu/
-http://ubuntu.mirrors.skynet.be/pub/ubuntu.com/ubuntu/
+http://mirror.waia.asn.au/ubuntu/
#LOC:BA
http://archive.ubuntu.com.ba/ubuntu/
-#LOC:BW
-http://bw.archive.ubuntu.com/ubuntu/
-ftp://bw.archive.ubuntu.com/ubuntu
+#LOC:BE
+http://ftp.belnet.be/mirror/ubuntu.com/ubuntu/
+http://gaosu.rave.org/ubuntu/
+http://ubuntu.mirrors.skynet.be/pub/ubuntu.com/ubuntu/
+#LOC:BG
+http://ubuntu.hitsol.net/ubuntu/
+http://ubuntu.ipacct.com/ubuntu/
+http://ubuntu.linux-bg.org/ubuntu/
+http://ubuntu.nano-box.net/ubuntu/
+#LOC:BO
+http://espejo.softwarelibre.gob.bo/archive.ubuntu.com/ubuntu/
#LOC:BR
http://br.archive.ubuntu.com/ubuntu/
-ftp://br.archive.ubuntu.com/ubuntu
-http://sft.if.usp.br/ubuntu/
-ftp://sft.if.usp.br/ubuntu/
http://espelhos.edugraf.ufsc.br/ubuntu/
-http://ubuntu.c3sl.ufpr.br/ubuntu/
-#LOC:BG
-http://ubuntu.linux-bg.org/ubuntu/
-ftp://ubuntu.linux-bg.org/ubuntu/
-http://ubuntu.ipacct.com/ubuntu/
-ftp://ubuntu.ipacct.com/ubuntu/
+http://mirror.globo.com/ubuntu/archive/
+http://sft.if.usp.br/ubuntu/
+http://ubuntu.interlegis.gov.br/ubuntu/
+http://ubuntu.mirror.pop-sc.rnp.br/ubuntu/
+http://ubuntu.ufba.br/ubuntu/
+http://www.las.ic.unicamp.br/pub/ubuntu/
+#LOC:BY
+http://ftp.byfly.by/ubuntu/
+http://linux.org.by/ubuntu/
+http://mirror.datacenter.by/ubuntu/
#LOC:CA
-http://gulus.USherbrooke.ca/ubuntu/
-ftp://gulus.USherbrooke.ca/ubuntu/
-http://gulus.usherbrooke.ca/ubuntu/
-ftp://gulus.usherbrooke.ca/ubuntu/
-http://mirror.csclub.uwaterloo.ca/ubuntu/
-ftp://mirror.csclub.uwaterloo.ca/ubuntu/
-http://mirror.cpsc.ucalgary.ca/mirror/ubuntu.com/
-ftp://mirror.cpsc.ucalgary.ca/mirror/ubuntu.com/
ftp://ftp.cs.mun.ca/pub/mirror/ubuntu/
-http://mirror.arcticnetwork.ca/pub/ubuntu/packages/
+http://gpl.savoirfairelinux.net/pub/mirrors/ubuntu/
+http://mirror.cpsc.ucalgary.ca/mirror/ubuntu.com/packages/
+http://mirror.csclub.uwaterloo.ca/ubuntu/
+http://mirror.its.dal.ca/ubuntu/
+http://ubuntu.arcticnetwork.ca/
+http://ubuntu.mirror.iweb.ca/
http://ubuntu.mirror.rafal.ca/ubuntu/
+#LOC:CH
+http://mirror.switch.ch/ftp/mirror/ubuntu/
#LOC:CL
http://ftp.tecnoera.com/ubuntu/
-ftp://ftp.tecnoera.com/ubuntu/
-http://cl.archive.ubuntu.com/ubuntu/
-ftp://cl.archive.ubuntu.com/ubuntu/
+http://mirror.gnucv.cl/ubuntu/
#LOC:CN
-http://ubuntu.cn99.com/ubuntu/
+http://mirror.bjtu.edu.cn/ubuntu/
+http://mirror.lupaworld.com/ubuntu/
+http://mirror.rootguide.org/ubuntu/
+http://mirrors.163.com/ubuntu/
http://mirrors.shlug.org/ubuntu/
-ftp://mirrors.shlug.org/ubuntu/
+http://mirrors.sohu.com/ubuntu/
+http://ubuntu.cn99.com/ubuntu/
+http://ubuntu.dormforce.net/ubuntu/
+http://ubuntu.srt.cn/ubuntu/
+#LOC:CO
+http://matematicas.unal.edu.co/ubuntu/
#LOC:CR
-http://ftp.ucr.ac.cr/ubuntu/
-#LOC:HR
-http://hr.archive.ubuntu.com/ubuntu/
-ftp://hr.archive.ubuntu.com/ubuntu/
+http://mirrors.ucr.ac.cr/ubuntu/
+#LOC:CY
+http://mirrors.cytanet.com.cy/linux/ubuntu/archive/
#LOC:CZ
+http://archive.ubuntu.mirror.dkm.cz/
http://cz.archive.ubuntu.com/ubuntu/
-ftp://cz.archive.ubuntu.com/MIRRORS/archive.ubuntu.com/mirror/ubuntu/
-http://ubuntu.supp.name/ubuntu/
+http://ftp.cvut.cz/ubuntu/
+http://ftp.sh.cvut.cz/MIRRORS/ubuntu/
http://ubuntu.sh.cvut.cz/
+http://ucho.ignum.cz/ubuntu/
+#LOC:DE
+ftp://ftp.fu-berlin.de/linux/ubuntu/
+ftp://ftp.rrzn.uni-hannover.de/pub/mirror/linux/ubuntu
+http://archive.ubuntu.uasw.edu/
+http://debian.charite.de/ubuntu/
+http://ftp-stud.fht-esslingen.de/Mirrors/ubuntu/
+http://ftp-stud.hs-esslingen.de/ubuntu/
+http://ftp.hosteurope.de/mirror/archive.ubuntu.com/
+http://ftp.stw-bonn.de/ubuntu/
+http://ftp.tu-chemnitz.de/pub/linux/ubuntu/
+http://ftp.tu-ilmenau.de/mirror/ubuntu/
+http://ftp.uni-bayreuth.de/linux/ubuntu/ubuntu/
+http://ftp.uni-erlangen.de/mirrors/ubuntu/
+http://ftp.uni-kl.de/pub/linux/ubuntu/
+http://ftp.uni-muenster.de/pub/mirrors/ftp.ubuntu.com/ubuntu/
+http://ftp5.gwdg.de/pub/linux/debian/ubuntu/
+http://mirror.bauhuette.fh-aachen.de/ubuntu/
+http://mirror.netcologne.de/ubuntu/
+http://sunsite.informatik.rwth-aachen.de/ftp/pub/Linux/ubuntu/ubuntu/
+http://suse.uni-leipzig.de/pub/releases.ubuntu.com/ubuntu/
+http://swtsrv.informatik.uni-mannheim.de/pub/linux/distributions/ubuntu/
+http://ubuntu.intergenia.de/ubuntu/
+http://ubuntu.mirror.tudos.de/ubuntu/
+http://ubuntu.unitedcolo.de/ubuntu/
+http://www.osnt.org/ubuntu/
#LOC:DK
-http://dk.archive.ubuntu.com/ubuntu/
-http://klid.dk/ftp/ubuntu/
-ftp://klid.dk/ubuntu
-http://mirror.uni-c.dk/ubuntu/
+http://mirrors.dotsrc.org/ubuntu/
+http://mirrors.telianet.dk/ubuntu/
#LOC:EE
http://ftp.estpak.ee/ubuntu/
-ftp://ftp.estpak.ee/ubuntu/
+#LOC:ES
+http://dafi.inf.um.es/ubuntu/
+http://ftp.caliu.cat/pub/distribucions/ubuntu/archive/
+http://ftp.dat.etsit.upm.es/ubuntu/
+http://ftp.gui.uva.es/sites/ubuntu.com/ubuntu/
+http://ftp.udc.es/ubuntu/
+http://mirror.ousli.org/ubuntu/
+http://peloto.pantuflo.es/ubuntu/
+http://softlibre.unizar.es/ubuntu/archive/
+http://sunsite.rediris.es/mirror/ubuntu-archive/
+http://ubuntu.cica.es/ubuntu/
+http://ubuntu.grn.cat/ubuntu/
+http://ubuntu.uc3m.es/ubuntu/
#LOC:FI
-http://www.nic.funet.fi/pub/mirrors/archive.ubuntu.com/
-ftp://ftp.funet.fi/pub/mirrors/archive.ubuntu.com/
http://mirrors.nic.funet.fi/ubuntu/
+http://www.nic.funet.fi/pub/mirrors/archive.ubuntu.com/
#LOC:FR
-ftp://ftp.free.fr/mirrors/ftp.ubuntu.com/ubuntu/
+http://archive.monubuntu.fr/
+http://distrib-coffee.ipsl.jussieu.fr/ubuntu/
http://ftp.crihan.fr/ubuntu/
-ftp://ftp.crihan.fr/ubuntu/
+http://ftp.free.org/mirrors/archive.ubuntu.com/ubuntu/
http://ftp.oleane.net/ubuntu/
-ftp://ftp.oleane.net/ubuntu/
-http://wwwftp.ciril.fr/pub/linux/ubuntu/archives/
-ftp://ftp.ciril.fr/pub/linux/ubuntu/archives/
http://ftp.u-picardie.fr/mirror/ubuntu/ubuntu/
-ftp://ftp.u-picardie.fr/mirror/ubuntu/ubuntu/
-http://mir1.ovh.net/ubuntu/
-ftp://mir1.ovh.net/ubuntu/
+http://mirror.ovh.net/ubuntu/
+http://mirrors.ircam.fr/pub/ubuntu/archive/
+http://ubuntu-archive.mirrors.proxad.net/ubuntu/
http://ubuntu.univ-nantes.fr/ubuntu/
-ftp://ubuntu.univ-nantes.fr/ubuntu/
+http://ubuntu.univ-reims.fr/ubuntu/
+http://www-ftp.lip6.fr/pub/linux/distributions/Ubuntu/archive/
+http://wwwftp.ciril.fr/pub/linux/ubuntu/archives/
+#LOC:GB
+http://archive.ubuntu.com/ubuntu/
+http://ftp.ticklers.org/archive.ubuntu.org/ubuntu/
+http://mirror.as29550.net/archive.ubuntu.com/
+http://mirror.bytemark.co.uk/ubuntu/
+http://mirror.ox.ac.uk/sites/archive.ubuntu.com/ubuntu/
+http://mirror.sov.uk.goscomb.net/ubuntu/
+http://mirrors.melbourne.co.uk/sites/archive.ubuntu.com/ubuntu/
+http://ubuntu.datahop.net/ubuntu/
+http://ubuntu.positive-internet.com/ubuntu/
+http://ubuntu.retrosnub.co.uk/ubuntu/
+http://ubuntu.virginmedia.com/archive/
+http://www.mirrorservice.org/sites/archive.ubuntu.com/ubuntu/
#LOC:GE
http://ubuntu.eriders.ge/ubuntu/
-ftp://ubuntu.eriders.ge/ubuntu/
-#LOC:DE
-http://ftp-stud.hs-esslingen.de/ubuntu/
-ftp://ftp-stud.hs-esslingen.de/ubuntu/
-http://ubuntu.intergenia.de/ubuntu/
-http://de.archive.ubuntu.com/ubuntu/
-http://ftp.cw.net/ubuntu/
-ftp://ftp.cw.net/pub/linux/ftp.ubuntu.com/ubuntu/
-http://ftp.uni-muenster.de/pub/mirrors/ftp.ubuntu.com/ubuntu/
-ftp://ftp.uni-muenster.de/pub/mirrors/ftp.ubuntu.com/ubuntu/
-ftp://ftp.fu-berlin.de/linux/ubuntu/
-http://ftp.halifax.rwth-aachen.de/ubuntu/
-ftp://ftp.halifax.rwth-aachen.de/ubuntu/
-ftp://ftp.rrzn.uni-hannover.de/pub/mirror/linux/ubuntu
-http://ftp.stw-bonn.de/ubuntu/
-ftp://ftp.stw-bonn.de/ubuntu/
-http://ftp.uni-kl.de/pub/linux/ubuntu/
-ftp://ftp.uni-kl.de/pub/linux/ubuntu/
-http://ftp5.gwdg.de/pub/linux/debian/ubuntu/
-ftp://ftp5.gwdg.de/pub/linux/debian/ubuntu/
-http://sunsite.informatik.rwth-aachen.de/ftp/pub/Linux/ubuntu/ubuntu/
-ftp://sunsite.informatik.rwth-aachen.de/pub/linux/ubuntu/ubuntu/
-http://archive.ubuntu.uasw.edu/
-ftp://ftp.uasw.edu/linux/ubuntu/archive/
-http://debian.charite.de/ubuntu/
-http://ftp.hosteurope.de/mirror/archive.ubuntu.com/
-ftp://ftp.hosteurope.de/mirror/archive.ubuntu.com/
-http://ftp-stud.fht-esslingen.de/Mirrors/ubuntu/
-http://ftp.tu-chemnitz.de/pub/linux/ubuntu/
-http://snert.mi.hs-heilbronn.de/pub/ubuntu/ubuntu/
+#LOC:GL
+http://mirror.greennet.gl/ubuntu/
#LOC:GR
-http://ftp.duth.gr/pub/ubuntu/
-ftp://ftp.duth.gr/pub/ubuntu/
+http://ftp.cc.uoc.gr/mirrors/linux/ubuntu/packages/
http://ftp.ntua.gr/pub/linux/ubuntu/
-ftp://ftp.ntua.gr/pub/linux/ubuntu/
http://ubuntu.otenet.gr/
-ftp://ftp.otenet.gr/ubuntu/
#LOC:HK
http://ftp.hostrino.com/pub/ubuntu/archive/
-ftp://ftp.hostrino.com/pub/ubuntu/archive/
+#LOC:HR
+http://hr.archive.ubuntu.com/ubuntu/
#LOC:HU
http://ftp.freepark.org/ubuntu/
-ftp://ftp.freepark.org/ubuntu/
-http://packages.midian.hu//pub/linux/distributions/ubuntu/
http://ftp.kfki.hu/linux/ubuntu/
-ftp://ftp.kfki.hu/pub/linux/ubuntu/
-#LOC:IS
-http://ubuntu.lhi.is/ubuntu/
-#LOC:IN
-http://ftp.iitm.ac.in/ubuntu/
-ftp://ftp.iitm.ac.in/ubuntu
+http://ubuntu.mirrors.crysys.hu/
+http://ubuntu.sth.sze.hu/ubuntu/
#LOC:ID
http://dl2.foss-id.web.id/ubuntu/
+http://kambing.ui.ac.id/ubuntu/
+http://kebo.vlsm.org/ubuntu/
+http://mirror.unej.ac.id/ubuntu/
+http://repo.undip.ac.id/ubuntu/
http://ubuntu.indika.net.id/ubuntu/
-ftp://ubuntu.indika.net.id/ubuntu/
+http://ubuntu.pesat.net.id/archive/
#LOC:IE
-http://ie.archive.ubuntu.com/ubuntu/
-ftp://ie.archive.ubuntu.com/ubuntu/
http://ftp.esat.net/mirrors/archive.ubuntu.com/
http://ftp.heanet.ie/pub/ubuntu/
+#LOC:IL
+http://mirror.isoc.org.il/pub/ubuntu/
+#LOC:IN
+ftp://ftp.iitb.ac.in/distributions/ubuntu/archives/
+http://ftp.iitm.ac.in/ubuntu/
+http://mirror.cse.iitk.ac.in/ubuntu/
+http://ubuntuarchive.hnsdc.com/
+#LOC:IS
+http://ubuntu.lhi.is/ubuntu/
#LOC:IT
http://ubuntu.fastbull.org/ubuntu/
-ftp://ubuntu.fastbull.org/ubuntu/
-http://na.mirror.garr.it/mirrors/ubuntu-archive/
-ftp://na.mirror.garr.it/mirrors/ubuntu-archive/
+http://ubuntu.ictvalleumbra.it/ubuntu/
+http://ubuntu.mirror.garr.it/mirrors/ubuntu-archive/
#LOC:JP
-http://ftp.jaist.ac.jp/pub/Linux/ubuntu/
-ftp://ftp.jaist.ac.jp/pub/Linux/ubuntu/
-http://ftp.ecc.u-tokyo.ac.jp/ubuntu/
-ftp://ftp.ecc.u-tokyo.ac.jp/ubuntu/
+http://ftp.riken.jp/Linux/ubuntu/
http://ftp.yz.yamagata-u.ac.jp/pub/linux/ubuntu/archives/
-ftp://ftp.yz.yamagata-u.ac.jp/pub/linux/ubuntu/archives/
+http://ubuntu-ashisuto.ubuntulinux.jp/ubuntu/
http://ubuntu.mithril-linux.org/archives/
+http://ubuntutym.u-toyama.ac.jp/ubuntu/
+http://www.ftp.ne.jp/Linux/packages/ubuntu/archive/
+#LOC:KG
+http://ubuntu.mega.kg/ubuntu/
#LOC:KR
http://ftp.daum.net/ubuntu/
-ftp://ftp.daum.net/ubuntu/
http://kr.archive.ubuntu.com/ubuntu/
-ftp://kr.archive.ubuntu.com/ubuntu/
-http://mirror.letsopen.com/os/ubuntu/
+http://mirror.khlug.org/ubuntu/
+http://mirror.korea.ac.kr/ubuntu/
+#LOC:KW
+http://ubuntu.qualitynet.net/ubuntu/
+#LOC:KZ
+http://mirror.neolabs.kz/ubuntu/
+http://mirror.space.kz/ubuntu/
+#LOC:LK
+http://archive.ubuntu.schoolnet.lk/ubuntu/
+#LOC:LT
+http://ftp.litnet.lt/ubuntu/
+http://mirror.soften.ktu.lt/ubuntu/
#LOC:LV
-http://ftp.linux.edu.lv/ubuntu/
+http://ubuntu-arch.linux.edu.lv/ubuntu/
+http://ubuntu.load.lv/ubuntu/
+#LOC:MD
+http://mirrors.bsd.md/ubuntu/
+#LOC:MN
+http://archive.ubuntu.mnosi.org/ubuntu/
#LOC:MT
-http://mt.archive.ubuntu.com/ubuntu/
-ftp://mt.archive.ubuntu.com/ubuntu/
+http://mirror.linux.org.mt/ubuntu/
#LOC:MX
http://tezcatl.fciencias.unam.mx/ubuntu/
-ftp://tezcatl.fciencias.unam.mx/ubuntu/
+#LOC:MY
+http://archive.mmu.edu.my/ubuntu/
+http://mirror.oscc.org.my/ubuntu/
+http://ubuntu.bytecraft.com.my/ubuntu/
+http://ubuntu.mmu.edu.my/ubuntu/
+#LOC:NA
+http://ubuntu-archive.polytechnic.edu.na/ubuntu/
+#LOC:NC
+http://archive.ubuntu.nautile.nc/ubuntu/
#LOC:NL
+ftp://ftpserv.tudelft.nl/pub/Linux/archive.ubuntu.com/
+http://ftp.snt.utwente.nl/pub/os/linux/ubuntu-archive/
+http://ftp.telfort.nl/ubuntu/
+http://ftp.tudelft.nl/archive.ubuntu.com/
+http://mirror.leaseweb.com/ubuntu/
+http://mirror.liteserver.nl/pub/ubuntu/
+http://mirrors.nl.eu.kernel.org/ubuntu/
http://nl.archive.ubuntu.com/ubuntu/
-ftp://nl.archive.ubuntu.com/ubuntu/
-http://nl2.archive.ubuntu.com/ubuntu/
-ftp://nl2.archive.ubuntu.com/ubuntu/
-http://ftp.tiscali.nl/ubuntu/
-ftp://ftp.tiscali.nl/pub/mirror/ubuntu
-ftp://ftp.tudelft.nl/pub/Linux/archive.ubuntu.com/
+http://nl3.archive.ubuntu.com/ubuntu/
+http://osmirror.rug.nl/ubuntu/
+http://ubuntu.mirror.cambrium.nl/ubuntu/
http://ubuntu.tiscali.nl/
-ftp://ubuntu.tiscali.nl/
-ftp://ftpserv.tudelft.nl/pub/Linux/archive.ubuntu.com/
-#LOC:NC
-http://ubuntu.mls.nc/ubuntu/
-ftp://ubuntu.mls.nc/ubuntu/
-#LOC:NZ
-http://nz2.archive.ubuntu.com/ubuntu/
-ftp://nz2.archive.ubuntu.com/ubuntu/
-http://ftp.citylink.co.nz/ubuntu/
+http://ubuntuarchive.eweka.nl/ubuntu/
#LOC:NO
http://ftp.uninett.no/ubuntu/
-ftp://ftp.uninett.no/ubuntu/
+http://no.archive.ubuntu.com/ubuntu/
+http://ubuntu.uib.no/archive/
+#LOC:NP
+http://archive.mitra.net.np/ubuntu/
+#LOC:NZ
+http://ftp.citylink.co.nz/ubuntu/
+http://mirror.ihug.co.nz/ubuntu/
+http://nz2.archive.ubuntu.com/ubuntu/
+#LOC:PF
+http://pf.archive.ubuntu.com/ubuntu/
+#LOC:PH
+http://mirror.web.com.ph/ubuntu/
#LOC:PL
-http://ftp.vectranet.pl/ubuntu/
-ftp://ftp.vectranet.pl/ubuntu
ftp://ftp.man.szczecin.pl/pub/Linux/ubuntu/
+http://ftp.vectranet.pl/ubuntu/
+http://ftp.wcss.pl/ubuntu/
+http://piotrkosoft.net/pub/mirrors/ubuntu/
http://ubuntu.task.gda.pl/ubuntu/
#LOC:PT
-http://ftp.dei.uc.pt/pub/linux/ubuntu/archive/
-ftp://ftp.dei.uc.pt/pub/linux/ubuntu/archive/
-http://ubuntu.dcc.fc.up.pt/
-http://ftp.gil.di.uminho.pt/ubuntu/
-ftp://ftp.gil.di.uminho.pt/ubuntu/
+ftp://ftp.ua.pt/pub/ubuntu/
+http://archive.ubuntumirror.dei.uc.pt/ubuntu/
+http://darkstar.ist.utl.pt/ubuntu/archive/
+http://deis-mirrors.isec.pt/ubuntu/
+http://ftp.rnl.ist.utl.pt/pub/ubuntu/archive/
+http://mirrors.fe.up.pt/ubuntu/
+http://mirrors.nfsi.pt/ubuntu/
http://mosel.estg.ipleiria.pt/mirror/distros/ubuntu/archive/
-http://neacm.fe.up.pt/ubuntu/
-ftp://neacm.fe.up.pt/pub/ubuntu/
+http://pathfinder.ipcb.pt/ubuntu/
+http://ubuntu.dcc.fc.up.pt/
+#LOC:QA
+http://ubuntu.qatar.cmu.edu/ubuntu/
#LOC:RO
-http://ftp.astral.ro/mirrors/ubuntu.com/archive/
-ftp://ftp.astral.ro/mirrors/ubuntu.com/archive/
-http://ftp.lug.ro/ubuntu/
+http://ftp.astral.ro/mirrors/ubuntu.com/ubuntu/
+http://ftp.gts.lug.ro/ubuntu/
+http://ftp.info.uvt.ro/ubuntu/
+http://ftp.roedu.net/mirrors/ubuntulinux.org/ubuntu/
+http://mirror.arlug.ro/pub/ubuntu/ubuntu/
+http://mirror.pub.ro/ubuntu/
+#LOC:RS
+http://rpm.scl.rs/linux/ubuntu/archive/
+http://ubuntu.etf.bg.ac.rs/ubuntu/
#LOC:RU
-http://mirror.yandex.ru/ubuntu/
-ftp://mirror.yandex.ru/ubuntu/
+ftp://ftp.corbina.net/pub/Linux/ubuntu/
ftp://ftp.mipt.ru/mirror/ubuntu/
+http://89.148.222.236/ubuntu/
http://ftp.chg.ru/pub/Linux/ubuntu/archive/
-ftp://ftp.chg.ru/pub/Linux/ubuntu/archive/
-#LOC:Serbia and Montenegro
-http://mirror.etf.bg.ac.yu/distributions/ubuntu/ubuntu-archive/
-ftp://mirror.etf.bg.ac.yu/distributions/ubuntu/ubuntu-archive/
-http://mirror2.etf.bg.ac.yu/distributions/ubuntu/ubuntu-archive/
-ftp://mirror2.etf.bg.ac.yu/distributions/ubuntu/ubuntu-archive/
-http://yu.archive.ubuntu.com/ubuntu/
-ftp://yu.archive.ubuntu.com/ubuntu
+http://ftp.mtu.ru/pub/ubuntu/archive/
+http://linux.nsu.ru/ubuntu/
+http://mirror.rol.ru/ubuntu/
+http://mirror.yandex.ru/ubuntu/
+http://mirror2.corbina.ru/ubuntu/
+#LOC:SA
+http://ubuntu.mirrors.isu.net.sa/ubuntu/
+http://ubuntu.saudi.net.sa/
+#LOC:SE
+http://ftp.acc.umu.se/ubuntu/
+http://ftp.df.lth.se/ubuntu/
+http://ftp.ds.karen.hj.se/ubuntu/
+http://ftp.sunet.se/pub/os/Linux/distributions/ubuntu/ubuntu/
+http://mirrors.se.eu.kernel.org/ubuntu/
+http://ubuntu.mirror.su.se/ubuntu/
#LOC:SG
http://ftp.science.nus.edu.sg/ubuntu/
-ftp://ftp.science.nus.edu.sg/pub/ubuntu/
+http://linux.ntuoss.org/ubuntu/
+http://ubuntu.oss.eznetsols.org/ubuntu/
+#LOC:SI
+http://ftp.arnes.si/pub/mirrors/ubuntu/
+http://mirror.lihnidos.org/ubuntu/ubuntu/
#LOC:SK
+http://ftp.antik.sk/ubuntu/
+http://ftp.energotel.sk/pub/linux/ubuntu/
http://ubuntu.ynet.sk/ubuntu/
-http://ftp.tuke.sk/ubuntu/
-ftp://ftp.tuke.sk/ubuntu/
-#LOC:ZA
-http://ubuntu.mirror.ac.za/ubuntu-archive/
-ftp://ubuntu.mirror.ac.za/ubuntu-archive
-http://ftp.leg.uct.ac.za/pub/linux/ubuntu/
-ftp://ftp.leg.uct.ac.za/pub/linux/ubuntu/
-#LOC:ES
-http://es.archive.ubuntu.com/ubuntu/
-ftp://es.archive.ubuntu.com/ubuntu/
-http://ftp.udc.es/ubuntu/
-ftp://ftp.udc.es/ubuntu/
-http://ftp.dateleco.es/ubuntu/
-ftp://ftp.dateleco.es/ubuntu/
-http://ubuntu.grn.cat/ubuntu/
-ftp://ubuntu.grn.cat/ubuntu/
-http://ftp.caliu.info/pub/distribucions/ubuntu/ubuntu/
-http://ftp.gui.uva.es/sites/ubuntu.com/ubuntu/
-ftp://ftp.um.es/mirror/ubuntu/
-#LOC:SE
-http://se.archive.ubuntu.com/ubuntu/
-http://ftp.ds.karen.hj.se/pub/os/linux/ubuntu/
-ftp://ftp.ds.karen.hj.se/pub/os/linux/ubuntu/
-http://ftp.port80.se/ubuntu/
-#LOC:CH
-http://mirror.switch.ch/ftp/mirror/ubuntu/
-ftp://mirror.switch.ch/mirror/ubuntu/
-http://mirror.zhdk.ch/ubuntu/
-ftp://mirror.zhdk.ch/ubuntu/
+#LOC:TH
+http://mirror.in.th/osarchive/ubuntu/
+http://mirror1.ku.ac.th/ubuntu/
+http://ubuntu-archive.sit.kmutt.ac.th/
+#LOC:TR
+http://ftp.linux.org.tr/ubuntu/
+http://ftp.metu.edu.tr/ubuntu/
+http://russell.cs.bilgi.edu.tr/ubuntu/
+http://ubuntu.gnu.gen.tr/ubuntu/
#LOC:TW
+ftp://ftp.chu.edu.tw/Linux/Ubuntu/archives/
+http://debian.nctu.edu.tw/ubuntu/
http://free.nchc.org.tw/ubuntu/
-ftp://free.nchc.org.tw/ubuntu
+http://ftp.cs.pu.edu.tw/Linux/Ubuntu/ubuntu/
http://ftp.cse.yzu.edu.tw/pub/Linux/Ubuntu/ubuntu/
-ftp://ftp.cse.yzu.edu.tw/pub/Linux/Ubuntu/ubuntu/
+http://ftp.nchu.edu.tw/Linux/Ubuntu/
+http://ftp.ncnu.edu.tw/Linux/ubuntu/ubuntu/
+http://ftp.nsysu.edu.tw/Linux/Ubuntu/ubuntu/
+http://ftp.tcc.edu.tw/Linux/ubuntu/
+http://ftp.tku.edu.tw/ubuntu/
http://ftp.twaren.net/Linux/Ubuntu/ubuntu/
-ftp://ftp.twaren.net/Linux/Ubuntu/ubuntu/
http://mirror.nttu.edu.tw/ubuntu/
-ftp://mirror.nttu.edu.tw/ubuntu/
http://tw.archive.ubuntu.com/ubuntu/
-ftp://tw.archive.ubuntu.com/ubuntu/
-http://ftp.ncnu.edu.tw/Linux/ubuntu/ubuntu/
-ftp://ftp.ncnu.edu.tw/Linux/ubuntu/ubuntu/
-http://ubuntu.csie.nctu.edu.tw/ubuntu/
-ftp://ubuntu.csie.nctu.edu.tw/ubuntu/
-#LOC:TH
-http://th.archive.ubuntu.com/ubuntu/
-#LOC:TR
-ftp://ftp.linux.org.tr/pub/ubuntu/
-http://godel.cs.bilgi.edu.tr/ubuntu/
-ftp://godel.cs.bilgi.edu.tr/ubuntu/
+http://ubuntu.cs.nctu.edu.tw/ubuntu/
+http://ubuntu.stu.edu.tw/ubuntu/
+http://www.mirror.tw/pub/ubuntu/ubuntu/
#LOC:UA
+http://mirror.mirohost.net/ubuntu/
+http://mirrors.dnepr.com/pub/mirrors/ubuntu/
http://ubuntu.org.ua/ubuntu/
-ftp://ubuntu.org.ua/ubuntu/
-#LOC:GB
-http://ubuntu-archive.datahop.it/ubuntu/
-ftp://ubuntu-archive.datahop.it/ubuntu/
-http://www.mirrorservice.org/sites/archive.ubuntu.com/ubuntu/
-ftp://ftp.mirrorservice.org/sites/archive.ubuntu.com/ubuntu/
-http://archive.ubuntu.com/ubuntu/
-ftp://archive.ubuntu.com/ubuntu/
-http://mirror.ox.ac.uk/sites/archive.ubuntu.com/ubuntu/
-ftp://mirror.ox.ac.uk/sites/archive.ubuntu.com/ubuntu/
-http://ftp.ticklers.org/archive.ubuntu.org/ubuntu/
-ftp://ftp.ticklers.org/archive.ubuntu.org/ubuntu/
-http://ubuntu.positive-internet.com/ubuntu/
-http://ubuntu.virginmedia.com/archive/
-ftp://mirrors.virginmedia.com/mirrors/ubuntu/archive
#LOC:US
+ftp://ftp.egr.msu.edu/pub/ubuntu/archive/
+http://76.73.4.58/ubuntu/
+http://archive.linux.duke.edu/ubuntu/
+http://astromirror.uchicago.edu/ubuntu/
+http://cudlug.cudenver.edu/ubuntu/
http://ftp.usf.edu/pub/ubuntu/
-ftp://ftp.usf.edu/pub/ubuntu/
+http://ftp.ussg.iu.edu/linux/ubuntu/
+http://ftp.utexas.edu/ubuntu/
+http://lug.mtu.edu/ubuntu/
+http://mira.sunsite.utk.edu/ubuntu/
+http://mirror.anl.gov/pub/ubuntu/
+http://mirror.cc.columbia.edu/pub/linux/ubuntu/archive/
+http://mirror.clarkson.edu/ubuntu/
+http://mirror.cs.umn.edu/ubuntu/
+http://mirror.hosef.org/ubuntu/
+http://mirror.its.uidaho.edu/pub/ubuntu/
+http://mirror.math.ucdavis.edu/ubuntu/
+http://mirror.peer1.net/ubuntu/
+http://mirror.umoss.org/ubuntu/
+http://mirror.uoregon.edu/ubuntu/
+http://mirrors.acm.jhu.edu/ubuntu/
+http://mirrors.bloomu.edu/ubuntu/
http://mirrors.cat.pdx.edu/ubuntu/
-ftp://mirrors.cat.pdx.edu/ubuntu/
+http://mirrors.cavecreek.net/ubuntu/
+http://mirrors.ccs.neu.edu/ubuntu/
+http://mirrors.cs.wmich.edu/ubuntu/
http://mirrors.easynews.com/linux/ubuntu/
-ftp://mirrors.easynews.com/linux/ubuntu
-http://mirrors.kernel.org/ubuntu/
-ftp://mirrors.kernel.org/ubuntu/
+http://mirrors.jgi-psf.org/ubuntu/
+http://mirrors.pavlovmedia.net/ubuntu/
http://mirrors.rit.edu/ubuntu/
+http://mirrors.us.kernel.org/ubuntu/
http://mirrors.xmission.com/ubuntu/
-ftp://mirrors.xmission.com/ubuntu/
-http://ubuntu.mirrors.tds.net/pub/ubuntu/
-ftp://ubuntu.mirrors.tds.net/pub/ubuntu/
+http://samaritan.ucmerced.edu/ubuntu/
+http://ubuntu.cs.utah.edu/ubuntu/
+http://ubuntu.eecs.wsu.edu/
http://ubuntu.media.mit.edu/ubuntu/
-http://www.gtlib.gatech.edu/pub/ubuntu/
-ftp://ftp.gtlib.gatech.edu/pub/ubuntu
-http://mirror.cc.columbia.edu/pub/linux/ubuntu/archive/
-ftp://mirror.cc.columbia.edu/pub/linux/ubuntu/archive/
-http://mirror.imbrandon.com/ubuntu/
-http://mirrors.ccs.neu.edu/archive.ubuntu.com/
-ftp://mirrors.ccs.neu.edu/net/mirrors/archive.ubuntu.com/
http://ubuntu.mirror.frontiernet.net/ubuntu/
-ftp://ubuntu.mirror.frontiernet.net/ubuntu/
-http://mirror.cs.umn.edu/ubuntu/
-http://mirror.lcsee.wvu.edu/ubuntu/
-http://ubuntu.cs.uaf.edu/ubuntu/
-http://cudlug.cudenver.edu/ubuntu/
-ftp://cudlug.cudenver.edu/ubuntu/
-http://ftp.unina.it/pub/linux/distributions/ubuntu/
-http://ftp.ussg.iu.edu/linux/ubuntu/
-http://lug.mtu.edu/ubuntu/
-ftp://lug.mtu.edu/ubuntu/
-http://mirror.utdlug.org/linux/distributions/ubuntu/packages/
-ftp://mirror.utdlug.org/linux/distributions/ubuntu/packages/
-http://mirrors.cs.wmich.edu/ubuntu/
-http://san.csc.calpoly.edu/ubuntu/ubuntu/
-http://ubuntu.cs.utah.edu/ubuntu/
+http://ubuntu.mirrors.tds.net/pub/ubuntu/
+http://ubuntu.osuosl.org/ubuntu/
http://ubuntu.secs.oakland.edu/
+http://ubuntu.secsup.org/
+http://ubuntu.securedservers.com/
+http://ubuntu.wallawalla.edu/ubuntu/
+http://ubuntu.washdc-linux.com/ubuntu/
+http://ubuntu.wikimedia.org/ubuntu/
+http://www.club.cc.cmu.edu/pub/ubuntu/
+http://www.gtlib.gatech.edu/pub/ubuntu/
+http://www.lug.bu.edu/mirror/ubuntu/
#LOC:UZ
-http://ubuntu.snet.uz/ubuntu/
-ftp://ubuntu.snet.uz/ubuntu/
+http://ubuntu.uz/ubuntu/
+#LOC:VN
+http://mirror-fpt-telecom.fpt.net/ubuntu/
+#LOC:ZA
+http://ftp.leg.uct.ac.za/ubuntu/
+http://ftp.sun.ac.za/ftp/ubuntu/
+http://ubuntu.mirror.ac.za/ubuntu-archive/
+http://ubuntu.saix.net/ubuntu-archive/
diff --git a/debian/changelog b/debian/changelog
index ddb94ecf..d55c6246 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,4 +1,62 @@
-python-apt (0.7.93.2) UNRELEASED; urgency=low
+python-apt (0.7.94.1) UNRELEASED; urgency=low
+
+ * Pass --exclude=migrate-0.8.py to dh_pycentral; in order to not depend
+ on python2.6.
+ * Use dh_link instead of ln for python-apt-doc (Closes: #573523).
+
+ -- Julian Andres Klode <jak@debian.org> Thu, 11 Mar 2010 19:33:26 +0100
+
+python-apt (0.7.94) unstable; urgency=low
+
+ * Move documentation into python-apt-doc (Closes: #572617)
+ * Build documentation only once on the default Python version.
+ * python/acquire-item.cc:
+ - Add AcquireItem.partialsize member.
+ * python/apt_pkgmodule.cc:
+ - Treat '>>' and '>', '<<' and '<' as identical in check_dep (LP: #535667).
+ * python/generic.cc:
+ - Map UntranslatedDepType to dep_type_untranslated.
+ * python/tag.cc:
+ - Hack the TagFile iterator to not use shared storage (Closes: #572596):
+ Scan once, duplicate the section data, and scan again.
+ * apt/package.py:
+ - Create a string class BaseDependency.__dstr which makes '>' equal to
+ '>>' and '<' equal to '<<' (compatibility).
+ - Use the binary package version in Version.fetch_source() if the
+ source version is not specified (i.e. in the normal case).
+ - Always return unicode strings in Package.get_changelog (Closes: #572998).
+ * apt/progress/text.py:
+ - Drop InstallProgress, it's useless to keep this alias around.
+ * apt/progress/old.py:
+ - Let the new method call the old one; e.g. status_update() now calls
+ self.statusUpdate(). This improves compatibility for sub classes.
+ * Merge with Ubuntu:
+ - util/get_ubuntu_mirrors_from_lp.py:
+ + rewritten to use +archivemirrors-rss and feedburner
+ - pre-build.sh: update ubuntu mirrors on bzr-buildpackage (and also do this
+ for Debian mirrors)
+ - add break for packagekit-backend-apt (<= 0.4.8-0ubuntu4)
+ * tests:
+ - test_deps: Add tests for apt_pkg.CheckDep, apt_pkg.check_dep,
+ apt_pkg.parse_depends and apt_pkg.parse_src_depends.
+ * tests/data/aptsources/sources.list.testDistribution:
+ - change one mirror which is not on the mirror list anymore.
+ * utils/get_debian_mirrors.py:
+ - Parse Mirrors.masterlist instead of the HTML web page.
+ * utils/get_ubuntu_mirrors_from_lp.py:
+ - Sort the mirror list of each country.
+
+ -- Julian Andres Klode <jak@debian.org> Wed, 10 Mar 2010 16:10:27 +0100
+
+python-apt (0.7.93.3) unstable; urgency=low
+
+ * data/templates/Ubuntu.info.in:
+ - Use generic MirrorsFile key instead of per-architecture ones in
+ order to fix FTBFS on !amd64 !i386 (Closes: #571752)
+
+ -- Julian Andres Klode <jak@debian.org> Sat, 27 Feb 2010 23:26:45 +0100
+
+python-apt (0.7.93.2) unstable; urgency=low
[ Julian Andres Klode ]
* Fix some places where the old API was still used:
@@ -8,8 +66,16 @@ python-apt (0.7.93.2) UNRELEASED; urgency=low
* utils/migrate-0.8.py:
- Improve C++ parsing and add apt.progress.old to the modules, reduces
false positives.
+ - Ship the list of deprecated things in the apt_pkg and apt_inst modules
+ inside the script itself, so we don't have to parse the source code
+ anymore.
+ * python:
+ - Handle deprecated attributes and methods in the tp_gettattro slot, this
+ allows us to easily warn if a deprecated function is used.
* python/tagfile.cc:
- Implement the iterator protocol in TagFile.
+ * python/cache.cc:
+ - Implement Cache.__len__() and Cache.__contains__() (Closes: #571443).
* data/templates/Debian.info.in:
- Replace the MatchURI with one that really matches something.
* aptsources/distro.py:
@@ -22,6 +88,8 @@ python-apt (0.7.93.2) UNRELEASED; urgency=low
- aptsources/distinfo.py: Support relative filenames for MirrorsFile.
* debian/rules:
- Run tests during build time.
+ * debian/python-apt.install:
+ - Install utils/migrate-0.8.py to /usr/share/python-apt/.
[ Michael Vogt ]
* apt/cache.py:
@@ -33,7 +101,7 @@ python-apt (0.7.93.2) UNRELEASED; urgency=low
* python/progress.cc:
- try to call compatibility functions first, then new functions
- -- Julian Andres Klode <jak@debian.org> Sun, 07 Feb 2010 19:58:40 +0100
+ -- Julian Andres Klode <jak@debian.org> Sat, 27 Feb 2010 18:33:11 +0100
python-apt (0.7.93.1) unstable; urgency=low
diff --git a/debian/control b/debian/control
index 0c43f91e..af7aa055 100644
--- a/debian/control
+++ b/debian/control
@@ -23,10 +23,10 @@ Vcs-Browser: http://bzr.debian.org/loggerhead/apt/python-apt/debian-sid/changes
Package: python-apt
Architecture: any
Depends: ${python:Depends}, ${shlibs:Depends}, ${misc:Depends}
-Recommends: lsb-release, iso-codes, libjs-jquery
-Breaks: debdelta (<< 0.28~)
+Recommends: lsb-release, iso-codes
+Breaks: debdelta (<< 0.28~), packagekit-backend-apt (<= 0.4.8-0ubuntu4)
Provides: ${python:Provides}
-Suggests: python-apt-dbg, python-gtk2, python-vte
+Suggests: python-apt-dbg, python-gtk2, python-vte, python-apt-doc
XB-Python-Version: ${python:Versions}
Description: Python interface to libapt-pkg
The apt_pkg Python interface will provide full access to the internal
@@ -41,6 +41,19 @@ Description: Python interface to libapt-pkg
The included 'aptsources' Python interface provides an abstraction of
the sources.list configuration on the repository and the distro level.
+Package: python-apt-doc
+Architecture: all
+Section: doc
+Depends: libjs-jquery, ${misc:Depends}
+Enhances: python-apt
+Replaces: python-apt (<< 0.7.94)
+Description: Python interface to libapt-pkg (API documentation)
+ The apt_pkg Python interface will provide full access to the internal
+ libapt-pkg structures allowing Python programs to easily perform a
+ variety of functions.
+ .
+ This package contains the API documentation of python-apt.
+
Package: python-apt-dbg
Priority: extra
Architecture: any
diff --git a/debian/python-apt.doc-base b/debian/python-apt-doc.doc-base
index e9b2040c..4f3c4d31 100644
--- a/debian/python-apt.doc-base
+++ b/debian/python-apt-doc.doc-base
@@ -4,5 +4,5 @@ Abstract: API reference manual for Python bindings to libapt-pkg
Section: Programming/Python
Format: HTML
-Index: /usr/share/doc/python-apt/html/index.html
-Files: /usr/share/doc/python-apt/html/*
+Index: /usr/share/doc/python-apt-doc/html/index.html
+Files: /usr/share/doc/python-apt-doc/html/*
diff --git a/debian/python-apt-doc.docs b/debian/python-apt-doc.docs
new file mode 100644
index 00000000..f85adafd
--- /dev/null
+++ b/debian/python-apt-doc.docs
@@ -0,0 +1 @@
+build/sphinx/html/
diff --git a/debian/python-apt-doc.links b/debian/python-apt-doc.links
new file mode 100644
index 00000000..40f834f2
--- /dev/null
+++ b/debian/python-apt-doc.links
@@ -0,0 +1 @@
+usr/share/javascript/jquery/jquery.js usr/share/doc/python-apt-doc/html/_static/jquery.js
diff --git a/debian/python-apt.docs b/debian/python-apt.docs
index 1bfc7c1c..a53a1ccc 100644
--- a/debian/python-apt.docs
+++ b/debian/python-apt.docs
@@ -3,4 +3,3 @@ AUTHORS
TODO
apt/README.apt
data/templates/README.templates
-build/sphinx/html/
diff --git a/debian/python-apt.install b/debian/python-apt.install
index ca86ed11..29028531 100644
--- a/debian/python-apt.install
+++ b/debian/python-apt.install
@@ -4,3 +4,5 @@ usr/lib/python*/*/*/
usr/lib/python*/*/*.egg-info
usr/share/locale
usr/share/python-apt
+# Install the migration helper
+utils/migrate-0.8.py usr/share/python-apt
diff --git a/debian/rules b/debian/rules
index 24d0952e..6d1f07bf 100755
--- a/debian/rules
+++ b/debian/rules
@@ -7,10 +7,12 @@ export CFLAGS=-Wno-write-strings -DCOMPAT_0_7
%:
dh --with python-central $@
+override_dh_auto_build:
+ dh_auto_build
+ python setup.py build_sphinx
+
override_dh_installdocs:
dh_installdocs
- ln -sf ../../../../javascript/jquery/jquery.js \
- debian/python-apt/usr/share/doc/python-apt/html/_static/jquery.js
rm -rf debian/python-apt-dbg/usr/share/doc/python-apt-dbg
ln -s python-apt debian/python-apt-dbg/usr/share/doc/python-apt-dbg
@@ -24,3 +26,6 @@ override_dh_auto_test:
set -e; for python in $(shell pyversions -r); do \
$$python tests/test_all.py -q; \
done;
+
+override_dh_pycentral:
+ dh_pycentral --exclude=migrate-0.8.py
diff --git a/doc/source/examples/apt-cdrom.py b/doc/source/examples/apt-cdrom.py
index a20b0f12..cb23e97d 100644
--- a/doc/source/examples/apt-cdrom.py
+++ b/doc/source/examples/apt-cdrom.py
@@ -30,7 +30,8 @@ def show_help():
" -f Fast mode, don't check package files\n"
" -a Thorough scan mode\n"
" -c=? Read this configuration file\n"
- " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+ " -o=? Set an arbitrary configuration option, eg -o "
+ "dir::cache=/tmp\n"
"See fstab(5)")
return 0
diff --git a/doc/source/examples/update-print-uris.py b/doc/source/examples/update-print-uris.py
index f078cdc5..dbe1dfde 100644
--- a/doc/source/examples/update-print-uris.py
+++ b/doc/source/examples/update-print-uris.py
@@ -4,6 +4,7 @@
This behaves somewhat like apt-get --print-uris update."""
import apt_pkg
+
def main():
apt_pkg.init_config()
apt_pkg.init_system()
diff --git a/doc/source/library/apt_pkg.rst b/doc/source/library/apt_pkg.rst
index 05b3e1fc..bcdf2f7a 100644
--- a/doc/source/library/apt_pkg.rst
+++ b/doc/source/library/apt_pkg.rst
@@ -41,6 +41,11 @@ Working with the cache
Return the :class:`Package()` object for the package name given by
*pkgname*.
+ .. describe:: pkgname in cache
+
+ Check whether a package with the name given by *pkgname* exists in
+ the cache.
+
.. method:: update(progress, list[, pulse_interval])
Update the package cache.
diff --git a/po/python-apt.pot b/po/python-apt.pot
index 36a04eae..b67d7988 100644
--- a/po/python-apt.pot
+++ b/po/python-apt.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-31 17:09+0100\n"
+"POT-Creation-Date: 2010-03-03 19:34+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -23,257 +23,257 @@ msgid "http://changelogs.ubuntu.com/changelogs/pool/%s/%s/%s/%s_%s/changelog"
msgstr ""
#. Description
-#: ../data/templates/Ubuntu.info.in:13
+#: ../data/templates/Ubuntu.info.in:12
msgid "Ubuntu 10.04 'Lucid Lynx'"
msgstr ""
#. Description
-#: ../data/templates/Ubuntu.info.in:31
+#: ../data/templates/Ubuntu.info.in:30
msgid "Cdrom with Ubuntu 10.04 'Lucid Lynx'"
msgstr ""
#. Description
-#: ../data/templates/Ubuntu.info.in:74
+#: ../data/templates/Ubuntu.info.in:72
msgid "Ubuntu 9.10 'Karmic Koala'"
msgstr ""
#. Description
-#: ../data/templates/Ubuntu.info.in:92
+#: ../data/templates/Ubuntu.info.in:90
msgid "Cdrom with Ubuntu 9.10 'Karmic Koala'"
msgstr ""
#. Description
-#: ../data/templates/Ubuntu.info.in:135
+#: ../data/templates/Ubuntu.info.in:132
msgid "Ubuntu 9.04 'Jaunty Jackalope'"
msgstr ""
#. Description
-#: ../data/templates/Ubuntu.info.in:153
+#: ../data/templates/Ubuntu.info.in:150
msgid "Cdrom with Ubuntu 9.04 'Jaunty Jackalope'"
msgstr ""
#. Description
-#: ../data/templates/Ubuntu.info.in:196
+#: ../data/templates/Ubuntu.info.in:192
msgid "Ubuntu 8.10 'Intrepid Ibex'"
msgstr ""
#. Description
-#: ../data/templates/Ubuntu.info.in:214
+#: ../data/templates/Ubuntu.info.in:210
msgid "Cdrom with Ubuntu 8.10 'Intrepid Ibex'"
msgstr ""
#. Description
-#: ../data/templates/Ubuntu.info.in:258
+#: ../data/templates/Ubuntu.info.in:253
msgid "Ubuntu 8.04 'Hardy Heron'"
msgstr ""
#. Description
-#: ../data/templates/Ubuntu.info.in:276
+#: ../data/templates/Ubuntu.info.in:271
msgid "Cdrom with Ubuntu 8.04 'Hardy Heron'"
msgstr ""
#. Description
-#: ../data/templates/Ubuntu.info.in:313
+#: ../data/templates/Ubuntu.info.in:308
msgid "Ubuntu 7.10 'Gutsy Gibbon'"
msgstr ""
#. Description
-#: ../data/templates/Ubuntu.info.in:331
+#: ../data/templates/Ubuntu.info.in:326
msgid "Cdrom with Ubuntu 7.10 'Gutsy Gibbon'"
msgstr ""
#. Description
-#: ../data/templates/Ubuntu.info.in:366
+#: ../data/templates/Ubuntu.info.in:361
msgid "Ubuntu 7.04 'Feisty Fawn'"
msgstr ""
#. Description
-#: ../data/templates/Ubuntu.info.in:384
+#: ../data/templates/Ubuntu.info.in:379
msgid "Cdrom with Ubuntu 7.04 'Feisty Fawn'"
msgstr ""
#. Description
-#: ../data/templates/Ubuntu.info.in:418
+#: ../data/templates/Ubuntu.info.in:413
msgid "Ubuntu 6.10 'Edgy Eft'"
msgstr ""
#. CompDescription
-#: ../data/templates/Ubuntu.info.in:423
+#: ../data/templates/Ubuntu.info.in:418
msgid "Community-maintained"
msgstr ""
#. CompDescription
-#: ../data/templates/Ubuntu.info.in:429
+#: ../data/templates/Ubuntu.info.in:424
msgid "Restricted software"
msgstr ""
#. Description
-#: ../data/templates/Ubuntu.info.in:436
+#: ../data/templates/Ubuntu.info.in:431
msgid "Cdrom with Ubuntu 6.10 'Edgy Eft'"
msgstr ""
#. Description
-#: ../data/templates/Ubuntu.info.in:470
+#: ../data/templates/Ubuntu.info.in:465
msgid "Ubuntu 6.06 LTS 'Dapper Drake'"
msgstr ""
#. CompDescriptionLong
-#: ../data/templates/Ubuntu.info.in:473
+#: ../data/templates/Ubuntu.info.in:468
msgid "Canonical-supported Open Source software"
msgstr ""
#. CompDescription
-#: ../data/templates/Ubuntu.info.in:475
+#: ../data/templates/Ubuntu.info.in:470
msgid "Community-maintained (universe)"
msgstr ""
#. CompDescriptionLong
-#: ../data/templates/Ubuntu.info.in:476
+#: ../data/templates/Ubuntu.info.in:471
msgid "Community-maintained Open Source software"
msgstr ""
#. CompDescription
-#: ../data/templates/Ubuntu.info.in:478
+#: ../data/templates/Ubuntu.info.in:473
msgid "Non-free drivers"
msgstr ""
#. CompDescriptionLong
-#: ../data/templates/Ubuntu.info.in:479
+#: ../data/templates/Ubuntu.info.in:474
msgid "Proprietary drivers for devices"
msgstr ""
#. CompDescription
-#: ../data/templates/Ubuntu.info.in:481
+#: ../data/templates/Ubuntu.info.in:476
msgid "Restricted software (Multiverse)"
msgstr ""
#. CompDescriptionLong
-#: ../data/templates/Ubuntu.info.in:482
+#: ../data/templates/Ubuntu.info.in:477
msgid "Software restricted by copyright or legal issues"
msgstr ""
#. Description
-#: ../data/templates/Ubuntu.info.in:488
+#: ../data/templates/Ubuntu.info.in:483
msgid "Cdrom with Ubuntu 6.06 LTS 'Dapper Drake'"
msgstr ""
#. Description
-#: ../data/templates/Ubuntu.info.in:500
+#: ../data/templates/Ubuntu.info.in:495
msgid "Important security updates"
msgstr ""
#. Description
-#: ../data/templates/Ubuntu.info.in:505
+#: ../data/templates/Ubuntu.info.in:500
msgid "Recommended updates"
msgstr ""
#. Description
-#: ../data/templates/Ubuntu.info.in:510
+#: ../data/templates/Ubuntu.info.in:505
msgid "Pre-released updates"
msgstr ""
#. Description
-#: ../data/templates/Ubuntu.info.in:515
+#: ../data/templates/Ubuntu.info.in:510
msgid "Unsupported updates"
msgstr ""
#. Description
-#: ../data/templates/Ubuntu.info.in:522
+#: ../data/templates/Ubuntu.info.in:517
msgid "Ubuntu 5.10 'Breezy Badger'"
msgstr ""
#. Description
-#: ../data/templates/Ubuntu.info.in:536
+#: ../data/templates/Ubuntu.info.in:531
msgid "Cdrom with Ubuntu 5.10 'Breezy Badger'"
msgstr ""
#. Description
-#: ../data/templates/Ubuntu.info.in:548
+#: ../data/templates/Ubuntu.info.in:543
msgid "Ubuntu 5.10 Security Updates"
msgstr ""
#. Description
-#: ../data/templates/Ubuntu.info.in:553
+#: ../data/templates/Ubuntu.info.in:548
msgid "Ubuntu 5.10 Updates"
msgstr ""
#. Description
-#: ../data/templates/Ubuntu.info.in:558
+#: ../data/templates/Ubuntu.info.in:553
msgid "Ubuntu 5.10 Backports"
msgstr ""
#. Description
-#: ../data/templates/Ubuntu.info.in:565
+#: ../data/templates/Ubuntu.info.in:560
msgid "Ubuntu 5.04 'Hoary Hedgehog'"
msgstr ""
#. Description
-#: ../data/templates/Ubuntu.info.in:579
+#: ../data/templates/Ubuntu.info.in:574
msgid "Cdrom with Ubuntu 5.04 'Hoary Hedgehog'"
msgstr ""
#. CompDescription
-#: ../data/templates/Ubuntu.info.in:582 ../data/templates/Debian.info.in:148
+#: ../data/templates/Ubuntu.info.in:577 ../data/templates/Debian.info.in:149
msgid "Officially supported"
msgstr ""
#. Description
-#: ../data/templates/Ubuntu.info.in:591
+#: ../data/templates/Ubuntu.info.in:586
msgid "Ubuntu 5.04 Security Updates"
msgstr ""
#. Description
-#: ../data/templates/Ubuntu.info.in:596
+#: ../data/templates/Ubuntu.info.in:591
msgid "Ubuntu 5.04 Updates"
msgstr ""
#. Description
-#: ../data/templates/Ubuntu.info.in:601
+#: ../data/templates/Ubuntu.info.in:596
msgid "Ubuntu 5.04 Backports"
msgstr ""
#. Description
-#: ../data/templates/Ubuntu.info.in:607
+#: ../data/templates/Ubuntu.info.in:602
msgid "Ubuntu 4.10 'Warty Warthog'"
msgstr ""
#. CompDescription
-#: ../data/templates/Ubuntu.info.in:613
+#: ../data/templates/Ubuntu.info.in:608
msgid "Community-maintained (Universe)"
msgstr ""
#. CompDescription
-#: ../data/templates/Ubuntu.info.in:615
+#: ../data/templates/Ubuntu.info.in:610
msgid "Non-free (Multiverse)"
msgstr ""
#. Description
-#: ../data/templates/Ubuntu.info.in:621
+#: ../data/templates/Ubuntu.info.in:616
msgid "Cdrom with Ubuntu 4.10 'Warty Warthog'"
msgstr ""
#. CompDescription
-#: ../data/templates/Ubuntu.info.in:624
+#: ../data/templates/Ubuntu.info.in:619
msgid "No longer officially supported"
msgstr ""
#. CompDescription
-#: ../data/templates/Ubuntu.info.in:626
+#: ../data/templates/Ubuntu.info.in:621
msgid "Restricted copyright"
msgstr ""
#. Description
-#: ../data/templates/Ubuntu.info.in:633
+#: ../data/templates/Ubuntu.info.in:628
msgid "Ubuntu 4.10 Security Updates"
msgstr ""
#. Description
-#: ../data/templates/Ubuntu.info.in:638
+#: ../data/templates/Ubuntu.info.in:633
msgid "Ubuntu 4.10 Updates"
msgstr ""
#. Description
-#: ../data/templates/Ubuntu.info.in:643
+#: ../data/templates/Ubuntu.info.in:638
msgid "Ubuntu 4.10 Backports"
msgstr ""
@@ -324,17 +324,17 @@ msgid "Debian testing"
msgstr ""
#. Description
-#: ../data/templates/Debian.info.in:146
+#: ../data/templates/Debian.info.in:147
msgid "Debian 'Sid' (unstable)"
msgstr ""
#. CompDescription
-#: ../data/templates/Debian.info.in:150
+#: ../data/templates/Debian.info.in:151
msgid "DFSG-compatible Software with Non-Free Dependencies"
msgstr ""
#. CompDescription
-#: ../data/templates/Debian.info.in:152
+#: ../data/templates/Debian.info.in:153
msgid "Non-DFSG-compatible Software"
msgstr ""
@@ -356,39 +356,39 @@ msgstr ""
msgid "Custom servers"
msgstr ""
-#: ../apt/progress/gtk2.py:259 ../apt/progress/gtk2.py:315
+#: ../apt/progress/gtk2.py:260 ../apt/progress/gtk2.py:316
#, python-format
msgid "Downloading file %(current)li of %(total)li with %(speed)s/s"
msgstr ""
-#: ../apt/progress/gtk2.py:265 ../apt/progress/gtk2.py:321
+#: ../apt/progress/gtk2.py:266 ../apt/progress/gtk2.py:322
#, python-format
msgid "Downloading file %(current)li of %(total)li"
msgstr ""
#. Setup some child widgets
-#: ../apt/progress/gtk2.py:341
+#: ../apt/progress/gtk2.py:342
msgid "Details"
msgstr ""
-#: ../apt/progress/gtk2.py:429
+#: ../apt/progress/gtk2.py:430
msgid "Starting..."
msgstr ""
-#: ../apt/progress/gtk2.py:435
+#: ../apt/progress/gtk2.py:436
msgid "Complete"
msgstr ""
-#: ../apt/package.py:333
+#: ../apt/package.py:342
#, python-format
msgid "Invalid unicode in description for '%s' (%s). Please report."
msgstr ""
-#: ../apt/package.py:989 ../apt/package.py:1095
+#: ../apt/package.py:999 ../apt/package.py:1105
msgid "The list of changes is not available"
msgstr ""
-#: ../apt/package.py:1099
+#: ../apt/package.py:1109
#, python-format
msgid ""
"The list of changes is not available yet.\n"
@@ -397,23 +397,23 @@ msgid ""
"until the changes become available or try again later."
msgstr ""
-#: ../apt/package.py:1105
+#: ../apt/package.py:1115
msgid ""
"Failed to download the list of changes. \n"
"Please check your Internet connection."
msgstr ""
-#: ../apt/debfile.py:70
+#: ../apt/debfile.py:73
#, python-format
msgid "List of files for '%s' could not be read"
msgstr ""
-#: ../apt/debfile.py:138
+#: ../apt/debfile.py:141
#, python-format
msgid "Dependency is not satisfiable: %s\n"
msgstr ""
-#: ../apt/debfile.py:162
+#: ../apt/debfile.py:165
#, python-format
msgid "Conflicts with the installed package '%s'"
msgstr ""
@@ -437,12 +437,12 @@ msgstr ""
msgid "Cannot install '%s'"
msgstr ""
-#: ../apt/debfile.py:473
+#: ../apt/debfile.py:472
#, python-format
msgid "Install Build-Dependencies for source package '%s' that builds %s\n"
msgstr ""
-#: ../apt/debfile.py:483
+#: ../apt/debfile.py:482
msgid "An essential package would be removed"
msgstr ""
@@ -493,6 +493,6 @@ msgstr ""
msgid "Please insert a Disc in the drive and press enter"
msgstr ""
-#: ../apt/cache.py:127
+#: ../apt/cache.py:131
msgid "Building data structures"
msgstr ""
diff --git a/pre-build.sh b/pre-build.sh
new file mode 100755
index 00000000..026a491e
--- /dev/null
+++ b/pre-build.sh
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+echo "updating Ubuntu mirror list from launchpad"
+if [ -n "$https_proxy" ]; then
+ echo "disabling https_proxy as Python's urllib doesn't support it; see #94130"
+ unset https_proxy
+fi
+utils/get_ubuntu_mirrors_from_lp.py > data/templates/Ubuntu.mirrors
+
+echo "updating Debian mirror list"
+utils/get_debian_mirrors.py > data/templates/Debian.mirrors
diff --git a/python/acquire-item.cc b/python/acquire-item.cc
index d5f9ad10..cdb4a4bc 100644
--- a/python/acquire-item.cc
+++ b/python/acquire-item.cc
@@ -92,6 +92,12 @@ static PyObject *acquireitem_get_local(PyObject *self, void *closure)
return item ? PyBool_FromLong(item->Local) : 0;
}
+static PyObject *acquireitem_get_partialsize(PyObject *self, void *closure)
+{
+ pkgAcquire::Item *item = acquireitem_tocpp(self);
+ return item ? Py_BuildValue("i", item->PartialSize) : 0;
+}
+
static PyObject *acquireitem_get_status(PyObject *self, void *closure)
{
pkgAcquire::Item *item = acquireitem_tocpp(self);
@@ -127,18 +133,8 @@ static PyGetSetDef acquireitem_getset[] = {
{"mode",acquireitem_get_mode},
{"is_trusted",acquireitem_get_is_trusted},
{"local",acquireitem_get_local},
+ {"partialsize",acquireitem_get_partialsize},
{"status",acquireitem_get_status},
-#ifdef COMPAT_0_7
- {"Complete",acquireitem_get_complete},
- {"DescURI",acquireitem_get_desc_uri},
- {"DestFile",acquireitem_get_destfile},
- {"ErrorText",acquireitem_get_error_text},
- {"FileSize",acquireitem_get_filesize},
- {"ID",acquireitem_get_id},
- {"IsTrusted",acquireitem_get_is_trusted},
- {"Local",acquireitem_get_local},
- {"Status",acquireitem_get_status},
-#endif
{}
};
@@ -180,7 +176,7 @@ PyTypeObject PyAcquireItem_Type = {
0, // tp_hash
0, // tp_call
0, // tp_str
- 0, // tp_getattro
+ _PyAptObject_getattro, // tp_getattro
0, // tp_setattro
0, // tp_as_buffer
Py_TPFLAGS_DEFAULT |
diff --git a/python/acquire.cc b/python/acquire.cc
index 5e22280e..cc9ee310 100644
--- a/python/acquire.cc
+++ b/python/acquire.cc
@@ -229,10 +229,6 @@ static PyObject *PkgAcquireShutdown(PyObject *Self,PyObject *Args)
static PyMethodDef PkgAcquireMethods[] = {
{"run",PkgAcquireRun,METH_VARARGS,"Run the fetcher"},
{"shutdown",PkgAcquireShutdown, METH_VARARGS,"Shutdown the fetcher"},
-#ifdef COMPAT_0_7
- {"Run",PkgAcquireRun,METH_VARARGS,"Run the fetcher"},
- {"Shutdown",PkgAcquireShutdown, METH_VARARGS,"Shutdown the fetcher"},
-#endif
{}
};
@@ -284,12 +280,6 @@ static PyGetSetDef PkgAcquireGetSet[] = {
{"workers",PkgAcquireGetWorkers},
{"partial_present",PkgAcquireGetPartialPresent},
{"total_needed",PkgAcquireGetTotalNeeded},
-#ifdef COMPAT_0_7
- {"FetchNeeded",PkgAcquireGetFetchNeeded},
- {"Items",PkgAcquireGetItems},
- {"PartialPresent",PkgAcquireGetPartialPresent},
- {"TotalNeeded",PkgAcquireGetTotalNeeded},
-#endif
{}
};
@@ -354,7 +344,7 @@ PyTypeObject PyAcquire_Type = {
0, // tp_hash
0, // tp_call
0, // tp_str
- 0, // tp_getattro
+ _PyAptObject_getattro, // tp_getattro
0, // tp_setattro
0, // tp_as_buffer
(Py_TPFLAGS_DEFAULT | // tp_flags
diff --git a/python/apt_pkgmodule.cc b/python/apt_pkgmodule.cc
index e3da1820..3d40832b 100644
--- a/python/apt_pkgmodule.cc
+++ b/python/apt_pkgmodule.cc
@@ -83,7 +83,14 @@ static PyObject *VersionCompare(PyObject *Self,PyObject *Args)
return Py_BuildValue("i",_system->VS->DoCmpVersion(A,A+LenA,B,B+LenB));
}
-static char *doc_CheckDep = "CheckDep(PkgVer,DepOp,DepVer) -> int";
+static char *doc_CheckDep =
+ "check_dep(pkg_ver: str, dep_op: str, dep_ver: str) -> bool\n\n"
+ "Check that the given requirement is fulfilled; i.e. that the version\n"
+ "string given by 'pkg_ver' matches the version string 'dep_ver' under\n"
+ "the condition specified by the operator 'dep_op' (<,<=,=,>=,>).\n\n"
+ "This functions returns True if 'pkg_ver' matches 'dep_ver' under the\n"
+ "condition 'dep_op'; e.g. this returns True:\n\n"
+ " apt_pkg.check_dep('1', '<=', '2')";
static PyObject *CheckDep(PyObject *Self,PyObject *Args)
{
char *A;
@@ -93,6 +100,9 @@ static PyObject *CheckDep(PyObject *Self,PyObject *Args)
if (PyArg_ParseTuple(Args,"sss",&A,&OpStr,&B) == 0)
return 0;
+
+ if (strcmp(OpStr, ">") == 0) OpStr = ">>";
+ if (strcmp(OpStr, "<") == 0) OpStr = "<<";
if (*debListParser::ConvertRelation(OpStr,Op) != 0)
{
PyErr_SetString(PyExc_ValueError,"Bad comparision operation");
@@ -105,10 +115,36 @@ static PyObject *CheckDep(PyObject *Self,PyObject *Args)
return 0;
}
- return Py_BuildValue("i",_system->VS->CheckDep(A,Op,B));
-// return Py_BuildValue("i",pkgCheckDep(B,A,Op));
+ return PyBool_FromLong(_system->VS->CheckDep(A,Op,B));
}
+#ifdef COMPAT_0_7
+static char *doc_CheckDepOld = "CheckDep(PkgVer,DepOp,DepVer) -> bool";
+static PyObject *CheckDepOld(PyObject *Self,PyObject *Args)
+{
+ char *A;
+ char *B;
+ char *OpStr;
+ unsigned int Op = 0;
+
+ if (PyArg_ParseTuple(Args,"sss",&A,&OpStr,&B) == 0)
+ return 0;
+ if (*debListParser::ConvertRelation(OpStr,Op) != 0)
+ {
+ PyErr_SetString(PyExc_ValueError,"Bad comparision operation");
+ return 0;
+ }
+
+ if (_system == 0)
+ {
+ PyErr_SetString(PyExc_ValueError,"_system not initialized");
+ return 0;
+ }
+
+ return PyBool_FromLong(_system->VS->CheckDep(A,Op,B));
+}
+#endif
+
static char *doc_UpstreamVersion = "UpstreamVersion(a) -> string";
static PyObject *UpstreamVersion(PyObject *Self,PyObject *Args)
{
@@ -473,6 +509,7 @@ static PyMethodDef methods[] =
// DEPRECATED
#ifdef COMPAT_0_7
+ {"CheckDep",CheckDepOld,METH_VARARGS,doc_CheckDepOld},
{"newConfiguration",newConfiguration,METH_VARARGS,doc_newConfiguration},
{"InitConfig",InitConfig,METH_VARARGS,doc_InitConfig},
{"InitSystem",InitSystem,METH_VARARGS,doc_InitSystem},
@@ -491,7 +528,6 @@ static PyMethodDef methods[] =
{"ParseCommandLine",ParseCommandLine,METH_VARARGS,doc_ParseCommandLine},
{"VersionCompare",VersionCompare,METH_VARARGS,doc_VersionCompare},
- {"CheckDep",CheckDep,METH_VARARGS,doc_CheckDep},
{"UpstreamVersion",UpstreamVersion,METH_VARARGS,doc_UpstreamVersion},
{"ParseDepends",ParseDepends_old,METH_VARARGS,doc_ParseDepends},
diff --git a/python/cache.cc b/python/cache.cc
index fe6e8b68..3c9bc785 100644
--- a/python/cache.cc
+++ b/python/cache.cc
@@ -153,7 +153,6 @@ static PyMethodDef PkgCacheMethods[] =
{
{"update",PkgCacheUpdate,METH_VARARGS,"Update the cache"},
#ifdef COMPAT_0_7
- {"Update",PkgCacheUpdate,METH_VARARGS,"Update the cache"},
{"Open", PkgCacheOpen, METH_VARARGS,"Open the cache"},
{"Close", PkgCacheClose, METH_VARARGS,"Close the cache"},
#endif
@@ -216,16 +215,6 @@ static PyGetSetDef PkgCacheGetSet[] = {
{"provides_count",PkgCacheGetProvidesCount},
{"ver_file_count",PkgCacheGetVerFileCount},
{"version_count",PkgCacheGetVersionCount},
-#ifdef COMPAT_0_7
- {"DependsCount",PkgCacheGetDependsCount},
- {"FileList",PkgCacheGetFileList},
- {"PackageCount",PkgCacheGetPackageCount},
- {"PackageFileCount",PkgCacheGetPackageFileCount},
- {"Packages",PkgCacheGetPackages},
- {"ProvidesCount",PkgCacheGetProvidesCount},
- {"VerFileCount",PkgCacheGetVerFileCount},
- {"VersionCount",PkgCacheGetVersionCount},
-#endif
{}
};
@@ -253,6 +242,16 @@ static PyObject *CacheMapOp(PyObject *Self,PyObject *Arg)
return CppPyObject_NEW<pkgCache::PkgIterator>(Self,&PyPackage_Type,Pkg);
}
+// Check whether the cache contains a package with a given name.
+static int CacheContains(PyObject *Self,PyObject *Arg)
+{
+ // Get the name of the package, unicode and normal strings.
+ const char *Name = PyObject_AsString(Arg);
+ if (Name == NULL)
+ return 0;
+ return (GetCpp<pkgCache *>(Self)->FindPkg(Name).end() == false);
+}
+
static PyObject *PkgCacheNew(PyTypeObject *type,PyObject *Args,PyObject *kwds)
{
PyObject *pyCallbackInst = 0;
@@ -305,14 +304,21 @@ static PyObject *PkgCacheNew(PyTypeObject *type,PyObject *Args,PyObject *kwds)
return CacheObj;
}
+static Py_ssize_t CacheMapLen(PyObject *Self)
+{
+ return GetCpp<pkgCache*>(Self)->HeaderP->PackageCount;
+}
+
static char *doc_PkgCache = "Cache([progress]) -> Cache() object.\n\n"
"The cache provides access to the packages and other stuff.\n\n"
"The optional parameter *progress* can be used to specify an \n"
"apt.progress.OpProgress() object (or similar) which displays\n"
- "the opening progress.\n\n"
- "If not specified, the progress is displayed in simple text form.";
-
-static PyMappingMethods CacheMap = {0,CacheMapOp,0};
+ "the opening progress. If not specified, the progress is\n"
+ "displayed in simple text form.\n\n"
+ "The cache can be used like a mapping of package names to Package\n"
+ "objects.";
+static PySequenceMethods CacheSeq = {0,0,0,0,0,0,0,CacheContains,0,0};
+static PyMappingMethods CacheMap = {CacheMapLen,CacheMapOp,0};
PyTypeObject PyCache_Type =
{
PyVarObject_HEAD_INIT(&PyType_Type, 0)
@@ -327,12 +333,12 @@ PyTypeObject PyCache_Type =
0, // tp_compare
0, // tp_repr
0, // tp_as_number
- 0, // tp_as_sequence
+ &CacheSeq, // tp_as_sequence
&CacheMap, // tp_as_mapping
0, // tp_hash
0, // tp_call
0, // tp_str
- 0, // tp_getattro
+ _PyAptObject_getattro, // tp_getattro
0, // tp_setattro
0, // tp_as_buffer
(Py_TPFLAGS_DEFAULT | // tp_flags
@@ -526,21 +532,6 @@ static PyGetSetDef PackageGetSet[] = {
{"important",PackageGetImportant},
{"version_list",PackageGetVersionList},
{"current_ver",PackageGetCurrentVer},
- #ifdef COMPAT_0_7
- {"Name",PackageGetName},
- {"Section",PackageGetSection},
- {"RevDependsList",PackageGetRevDependsList},
- {"ProvidesList",PackageGetProvidesList},
- {"SelectedState",PackageGetSelectedState},
- {"InstState",PackageGetInstState},
- {"CurrentState",PackageGetCurrentState},
- {"ID",PackageGetID},
- {"Auto",PackageGetAuto},
- {"Essential",PackageGetEssential},
- {"Important",PackageGetImportant},
- {"VersionList",PackageGetVersionList},
- {"CurrentVer",PackageGetCurrentVer},
- #endif
{}
};
@@ -573,7 +564,7 @@ PyTypeObject PyPackage_Type =
0, // tp_hash
0, // tp_call
0, // tp_str
- 0, // tp_getattro
+ _PyAptObject_getattro, // tp_getattro
0, // tp_setattro
0, // tp_as_buffer
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, // tp_flags
@@ -624,10 +615,6 @@ static PyGetSetDef DescriptionGetSet[] = {
{"language_code",DescriptionGetLanguageCode},
{"md5",DescriptionGetMd5},
{"file_list",DescriptionGetFileList},
- #ifdef COMPAT_0_7
- {"LanguageCode",DescriptionGetLanguageCode},
- {"FileList",DescriptionGetFileList},
- #endif
{}
};
@@ -658,7 +645,7 @@ PyTypeObject PyDescription_Type =
0, // tp_hash
0, // tp_call
0, // tp_str
- 0, // tp_getattro
+ _PyAptObject_getattro, // tp_getattro
0, // tp_setattro
0, // tp_as_buffer
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, // tp_flags
@@ -869,24 +856,6 @@ static PyGetSetDef VersionGetSet[] = {
{"size",VersionGetSize},
{"translated_description",VersionGetTranslatedDescription},
{"ver_str",VersionGetVerStr},
-#ifdef COMPAT_0_7
- {"Arch",VersionGetArch},
- {"DependsList",VersionGetDependsList},
- {"DependsListStr",VersionGetDependsListStr},
- {"Downloadable",VersionGetDownloadable},
- {"FileList",VersionGetFileList},
- {"Hash",VersionGetHash},
- {"ID",VersionGetID},
- {"InstalledSize",VersionGetInstalledSize},
- {"ParentPkg",VersionGetParentPkg},
- {"Priority",VersionGetPriority},
- {"PriorityStr",VersionGetPriorityStr},
- {"ProvidesList",VersionGetProvidesList},
- {"Section",VersionGetSection},
- {"Size",VersionGetSize},
- {"TranslationDescription",VersionGetTranslatedDescription},
- {"VerStr",VersionGetVerStr},
-#endif
{}
};
@@ -909,7 +878,7 @@ PyTypeObject PyVersion_Type =
0, // tp_hash
0, // tp_call
0, // tp_str
- 0, // tp_getattro
+ _PyAptObject_getattro, // tp_getattro
0, // tp_setattro
0, // tp_as_buffer
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, // tp_flags
@@ -1036,21 +1005,6 @@ static PyGetSetDef PackageFileGetSet[] = {
{(char*)"site",PackageFile_GetSite},
{(char*)"size",PackageFile_GetSize},
{(char*)"version",PackageFile_GetVersion},
- #ifdef COMPAT_0_7
- {"Architecture",PackageFile_GetArchitecture},
- {"Archive",PackageFile_GetArchive},
- {"Component",PackageFile_GetComponent},
- {"FileName",PackageFile_GetFileName},
- {"ID",PackageFile_GetID},
- {"IndexType",PackageFile_GetIndexType},
- {"Label",PackageFile_GetLabel},
- {"NotAutomatic",PackageFile_GetNotAutomatic},
- {"NotSource",PackageFile_GetNotSource},
- {"Origin",PackageFile_GetOrigin},
- {"Site",PackageFile_GetSite},
- {"Size",PackageFile_GetSize},
- {"Version",PackageFile_GetVersion},
- #endif
{}
};
@@ -1071,7 +1025,7 @@ PyTypeObject PyPackageFile_Type = {
0, // tp_hash
0, // tp_call
0, // tp_str
- 0, // tp_getattro
+ _PyAptObject_getattro, // tp_getattro
0, // tp_setattro
0, // tp_as_buffer
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, // tp_flags
@@ -1141,10 +1095,6 @@ static PyMethodDef DependencyMethods[] =
{
{"smart_target_pkg",DepSmartTargetPkg,METH_VARARGS,"Returns the natural Target or None"},
{"all_targets",DepAllTargets,METH_VARARGS,"Returns all possible Versions that match this dependency"},
-#ifdef COMPAT_0_7
- {"SmartTargetPkg",DepSmartTargetPkg,METH_VARARGS,"Returns the natural Target or None"},
- {"AllTargets",DepAllTargets,METH_VARARGS,"Returns all possible Versions that match this dependency"},
-#endif
{}
};
@@ -1223,15 +1173,6 @@ static PyGetSetDef DependencyGetSet[] = {
{"parent_ver",DependencyGetParentVer},
{"target_pkg",DependencyGetTargetPkg},
{"target_ver",DependencyGetTargetVer},
-#ifdef COMPAT_0_7
- {"CompType",DependencyGetCompType},
- {"DepType",DependencyGetDepType},
- {"ID",DependencyGetID},
- {"ParentPkg",DependencyGetParentPkg},
- {"ParentVer",DependencyGetParentVer},
- {"TargetPkg",DependencyGetTargetPkg},
- {"TargetVer",DependencyGetTargetVer},
-#endif
{}
};
@@ -1255,7 +1196,7 @@ PyTypeObject PyDependency_Type =
0, // tp_hash
0, // tp_call
0, // tp_str
- 0, // tp_getattro
+ _PyAptObject_getattro, // tp_getattro
0, // tp_setattro
0, // tp_as_buffer
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, // tp_flags
diff --git a/python/cdrom.cc b/python/cdrom.cc
index 0b9ae578..9eae49dc 100644
--- a/python/cdrom.cc
+++ b/python/cdrom.cc
@@ -78,6 +78,9 @@ static PyObject *cdrom_ident(PyObject *Self,PyObject *Args)
#ifdef COMPAT_0_7
static PyObject *cdrom_ident_old(PyObject *Self,PyObject *Args)
{
+ PyErr_WarnEx(PyExc_DeprecationWarning, "Method 'Ident' of the "
+ "'apt_pkg.Cdrom' object is deprecated, use 'ident' instead.",
+ 1);
pkgCdrom &Cdrom = GetCpp<pkgCdrom>(Self);
PyObject *pyCdromProgressInst = 0;
@@ -101,8 +104,7 @@ static PyMethodDef cdrom_methods[] = {
{"add",cdrom_add,METH_VARARGS,cdrom_add_doc},
{"ident",cdrom_ident,METH_VARARGS,cdrom_ident_doc},
#ifdef COMPAT_0_7
- {"Add",cdrom_add,METH_VARARGS,"Add(progress) -> Add a cdrom"},
- {"Ident",cdrom_ident_old,METH_VARARGS,"Ident(progress) -> Ident a cdrom"},
+ {"Ident",cdrom_ident_old,METH_VARARGS,"DEPRECATED. DO NOT USE"},
#endif
{}
};
@@ -134,7 +136,7 @@ PyTypeObject PyCdrom_Type = {
0, // tp_hash
0, // tp_call
0, // tp_str
- 0, // tp_getattro
+ _PyAptObject_getattro, // tp_getattro
0, // tp_setattro
0, // tp_as_buffer
Py_TPFLAGS_DEFAULT | // tp_flags
diff --git a/python/configuration.cc b/python/configuration.cc
index 974f6f3d..299e06ec 100644
--- a/python/configuration.cc
+++ b/python/configuration.cc
@@ -446,20 +446,6 @@ static PyMethodDef CnfMethods[] =
{"value_list",CnfValueList,METH_VARARGS,doc_ValueList},
{"my_tag",CnfMyTag,METH_VARARGS,doc_MyTag},
{"clear",CnfClear,METH_VARARGS,doc_Clear},
-#ifdef COMPAT_0_7
- {"Find",CnfFind,METH_VARARGS,doc_Find},
- {"FindFile",CnfFindFile,METH_VARARGS,doc_FindFile},
- {"FindDir",CnfFindDir,METH_VARARGS,doc_FindDir},
- {"FindI",CnfFindI,METH_VARARGS,doc_FindI},
- {"FindB",CnfFindB,METH_VARARGS,doc_FindB},
- {"Set",CnfSet,METH_VARARGS,doc_Set},
- {"Exists",CnfExists,METH_VARARGS,doc_Exists},
- {"SubTree",CnfSubTree,METH_VARARGS,doc_SubTree},
- {"List",CnfList,METH_VARARGS,doc_List},
- {"ValueList",CnfValueList,METH_VARARGS,doc_ValueList},
- {"MyTag",CnfMyTag,METH_VARARGS,doc_MyTag},
- {"Clear",CnfClear,METH_VARARGS,doc_Clear},
-#endif
// Python Special
{"keys",CnfKeys,METH_VARARGS,doc_Keys},
#if PY_MAJOR_VERSION < 3
@@ -498,7 +484,7 @@ PyTypeObject PyConfiguration_Type =
0, // tp_hash
0, // tp_call
0, // tp_str
- 0, // tp_getattro
+ _PyAptObject_getattro, // tp_getattro
0, // tp_setattro
0, // tp_as_buffer
(Py_TPFLAGS_DEFAULT | // tp_flags
diff --git a/python/depcache.cc b/python/depcache.cc
index 53459c32..8b4e02b5 100644
--- a/python/depcache.cc
+++ b/python/depcache.cc
@@ -569,34 +569,8 @@ static PyMethodDef PkgDepCacheMethods[] =
{"marked_keep",PkgDepCacheMarkedKeep,METH_VARARGS,"Is pkg marked for keep"},
{"marked_reinstall",PkgDepCacheMarkedReinstall,METH_VARARGS,"Is pkg marked for reinstall"},
{"marked_downgrade",PkgDepCacheMarkedDowngrade,METH_VARARGS,"Is pkg marked for downgrade"},
-
// Action
{"commit", PkgDepCacheCommit, METH_VARARGS, "Commit pending changes"},
-#ifdef COMPAT_0_7
- {"Init",PkgDepCacheInit,METH_VARARGS,"Init the depcache (done on construct automatically)"},
- {"GetCandidateVer",PkgDepCacheGetCandidateVer,METH_VARARGS,"Get candidate version"},
- {"SetCandidateVer",PkgDepCacheSetCandidateVer,METH_VARARGS,"Set candidate version"},
- {"Upgrade",PkgDepCacheUpgrade,METH_VARARGS,"Perform Upgrade (optional boolean argument if dist-upgrade should be performed)"},
- {"FixBroken",PkgDepCacheFixBroken,METH_VARARGS,"Fix broken packages"},
- {"ReadPinFile",PkgDepCacheReadPinFile,METH_VARARGS,"Read the pin policy"},
- {"MinimizeUpgrade",PkgDepCacheMinimizeUpgrade, METH_VARARGS,"Go over the entire set of packages and try to keep each package marked for upgrade. If a conflict is generated then the package is restored."},
- {"MarkKeep",PkgDepCacheMarkKeep,METH_VARARGS,"Mark package for keep"},
- {"MarkDelete",PkgDepCacheMarkDelete,METH_VARARGS,"Mark package for delete (optional boolean argument if it should be purged)"},
- {"MarkInstall",PkgDepCacheMarkInstall,METH_VARARGS,"Mark package for Install"},
- {"SetReInstall",PkgDepCacheSetReInstall,METH_VARARGS,"Set if the package should be reinstalled"},
- {"IsUpgradable",PkgDepCacheIsUpgradable,METH_VARARGS,"Is pkg upgradable"},
- {"IsNowBroken",PkgDepCacheIsNowBroken,METH_VARARGS,"Is pkg is now broken"},
- {"IsInstBroken",PkgDepCacheIsInstBroken,METH_VARARGS,"Is pkg broken on the current install"},
- {"IsGarbage",PkgDepCacheIsGarbage,METH_VARARGS,"Is pkg garbage (mark-n-sweep)"},
- {"IsAutoInstalled",PkgDepCacheIsAutoInstalled,METH_VARARGS,"Is pkg marked as auto installed"},
- {"MarkedInstall",PkgDepCacheMarkedInstall,METH_VARARGS,"Is pkg marked for install"},
- {"MarkedUpgrade",PkgDepCacheMarkedUpgrade,METH_VARARGS,"Is pkg marked for upgrade"},
- {"MarkedDelete",PkgDepCacheMarkedDelete,METH_VARARGS,"Is pkg marked for delete"},
- {"MarkedKeep",PkgDepCacheMarkedKeep,METH_VARARGS,"Is pkg marked for keep"},
- {"MarkedReinstall",PkgDepCacheMarkedReinstall,METH_VARARGS,"Is pkg marked for reinstall"},
- {"MarkedDowngrade",PkgDepCacheMarkedDowngrade,METH_VARARGS,"Is pkg marked for downgrade"},
- {"Commit", PkgDepCacheCommit, METH_VARARGS, "Commit pending changes"},
-#endif
{}
};
@@ -641,14 +615,6 @@ static PyGetSetDef PkgDepCacheGetSet[] = {
{"keep_count",PkgDepCacheGetKeepCount},
{"usr_size",PkgDepCacheGetUsrSize},
{"policy",PkgDepCacheGetPolicy},
- #ifdef COMPAT_0_7
- {"BrokenCount",PkgDepCacheGetBrokenCount},
- {"DebSize",PkgDepCacheGetDebSize},
- {"DelCount",PkgDepCacheGetDelCount},
- {"InstCount",PkgDepCacheGetInstCount},
- {"KeepCount",PkgDepCacheGetKeepCount},
- {"UsrSize",PkgDepCacheGetUsrSize},
- #endif
{}
};
@@ -699,7 +665,7 @@ PyTypeObject PyDepCache_Type =
0, // tp_hash
0, // tp_call
0, // tp_str
- 0, // tp_getattro
+ _PyAptObject_getattro, // tp_getattro
0, // tp_setattro
0, // tp_as_buffer
(Py_TPFLAGS_DEFAULT | // tp_flags
@@ -856,14 +822,6 @@ static PyMethodDef PkgProblemResolverMethods[] =
// Actions
{"resolve", PkgProblemResolverResolve, METH_VARARGS, "Try to intelligently resolve problems by installing and removing packages"},
{"resolve_by_keep", PkgProblemResolverResolveByKeep, METH_VARARGS, "Try to resolv problems only by using keep"},
- #ifdef COMPAT_0_7
- {"Protect", PkgProblemResolverProtect, METH_VARARGS, "Protect(PkgIterator)"},
- {"Remove", PkgProblemResolverRemove, METH_VARARGS, "Remove(PkgIterator)"},
- {"Clear", PkgProblemResolverClear, METH_VARARGS, "Clear(PkgIterator)"},
- {"InstallProtect", PkgProblemResolverInstallProtect, METH_VARARGS, "ProtectInstalled()"},
- {"Resolve", PkgProblemResolverResolve, METH_VARARGS, "Try to intelligently resolve problems by installing and removing packages"},
- {"ResolveByKeep", PkgProblemResolverResolveByKeep, METH_VARARGS, "Try to resolv problems only by using keep"},
- #endif
{}
};
@@ -886,7 +844,7 @@ PyTypeObject PyProblemResolver_Type =
0, // tp_hash
0, // tp_call
0, // tp_str
- 0, // tp_getattro
+ _PyAptObject_getattro, // tp_getattro
0, // tp_setattro
0, // tp_as_buffer
(Py_TPFLAGS_DEFAULT | // tp_flags
diff --git a/python/generic.cc b/python/generic.cc
index b0770e02..5db1e490 100644
--- a/python/generic.cc
+++ b/python/generic.cc
@@ -48,6 +48,69 @@ PyObject *HandleErrors(PyObject *Res)
PyErr_SetString(PyExc_SystemError,Err.c_str());
return 0;
}
+
+# ifdef COMPAT_0_7
+// Helpers for deprecation.
+
+// Given the name of the old attribute, return the name of the new attribute
+// in a PyObject.
+static PyObject *_PyApt_NewNameForAttribute(const char *attr) {
+ // Some exceptions from the standard algorithm.
+ if (strcasecmp(attr, "FileName") == 0) return PyString_FromString("filename");
+ if (strcasecmp(attr, "DestFile") == 0) return PyString_FromString("destfile");
+ if (strcasecmp(attr, "FileSize") == 0) return PyString_FromString("filesize");
+ if (strcasecmp(attr, "SubTree") == 0) return PyString_FromString("subtree");
+ if (strcasecmp(attr, "ReadPinFile") == 0) return PyString_FromString("read_pinfile");
+ if (strcasecmp(attr, "SetReInstall") == 0) return PyString_FromString("set_reinstall");
+ if (strcasecmp(attr, "URI") == 0) return PyString_FromString("uri");
+ if (strcasecmp(attr, "MD5Hash") == 0) return PyString_FromString("md5_hash");
+ if (strcasecmp(attr, "SHA1Hash") == 0) return PyString_FromString("sha1_hash");
+ if (strcasecmp(attr, "SHA256Hash") == 0) return PyString_FromString("sha256_hash");
+ if (strcasecmp(attr, "UntranslatedDepType") == 0) return PyString_FromString("dep_type_untranslated");
+ size_t attrlen = strlen(attr);
+ // Reserve the old name + 5, this should reduce resize to a minimum.
+ string new_name;
+ new_name.reserve(attrlen + 5);
+ for(unsigned int i=0; i < attrlen; i++) {
+ // Replace all uppercase ASCII characters with their lower-case ones.
+ if (attr[i] > 64 && attr[i] < 91) {
+ if (i > 0)
+ new_name += "_";
+ new_name += attr[i] + 32;
+ } else {
+ new_name += attr[i];
+ }
+ }
+ return CppPyString(new_name);
+}
+
+// Handle deprecated attributes by setting a warning and returning the new
+// attribute.
+PyObject *_PyAptObject_getattro(PyObject *self, PyObject *attr) {
+ PyObject *value = PyObject_GenericGetAttr(self, attr);
+ if (value == NULL) {
+ PyObject *ptype, *pvalue, *ptraceback;
+ PyErr_Fetch(&ptype, &pvalue, &ptraceback);
+ const char *attrname = PyObject_AsString(attr);
+ PyObject *newattr = _PyApt_NewNameForAttribute(attrname);
+ value = PyObject_GenericGetAttr(self, newattr);
+ if (value != NULL) {
+ const char *newattrname = PyString_AsString(newattr);
+ const char *cls = self->ob_type->tp_name;
+ char *warning_string = new char[strlen(newattrname) + strlen(cls) +
+ strlen(attrname) + 66];
+ sprintf(warning_string, "Attribute '%s' of the '%s' object is "
+ "deprecated, use '%s' instead.", attrname, cls, newattrname);
+ PyErr_WarnEx(PyExc_DeprecationWarning, warning_string, 1);
+ delete[] warning_string;
+ } else {
+ PyErr_Restore(ptype, pvalue, ptraceback);
+ }
+ Py_DECREF(newattr);
+ }
+ return value;
+}
+# endif //COMPAT_0_7
/*}}}*/
// ListToCharChar - Convert a list to an array of char char /*{{{*/
// ---------------------------------------------------------------------
diff --git a/python/generic.h b/python/generic.h
index 7d2d6d3e..31c1bc2d 100644
--- a/python/generic.h
+++ b/python/generic.h
@@ -227,4 +227,10 @@ PyObject *HandleErrors(PyObject *Res = 0);
const char **ListToCharChar(PyObject *List,bool NullTerm = false);
PyObject *CharCharToList(const char **List,unsigned long Size = 0);
+# ifdef COMPAT_0_7
+PyObject *_PyAptObject_getattro(PyObject *self, PyObject *attr);
+# else
+# define _PyAptObject_getattro 0
+# endif
+
#endif
diff --git a/python/indexfile.cc b/python/indexfile.cc
index e8df9cf2..c6d0b1cc 100644
--- a/python/indexfile.cc
+++ b/python/indexfile.cc
@@ -28,9 +28,6 @@ static PyObject *IndexFileArchiveURI(PyObject *Self,PyObject *Args)
static PyMethodDef IndexFileMethods[] =
{
{"archive_uri",IndexFileArchiveURI,METH_VARARGS,"Returns the ArchiveURI"},
- #ifdef COMPAT_0_7
- {"ArchiveURI",IndexFileArchiveURI,METH_VARARGS,"Returns the ArchiveURI"},
- #endif
{}
};
@@ -76,14 +73,6 @@ static PyGetSetDef IndexFileGetSet[] = {
{"is_trusted",IndexFileGetIsTrusted},
{"label",IndexFileGetLabel},
{"size",IndexFileGetSize},
- #ifdef COMPAT_0_7
- {"Describe",IndexFileGetDescribe},
- {"Exists",IndexFileGetExists},
- {"HasPackages",IndexFileGetHasPackages},
- {"IsTrusted",IndexFileGetIsTrusted},
- {"Label",IndexFileGetLabel},
- {"Size",IndexFileGetSize},
- #endif
{}
};
@@ -107,7 +96,7 @@ PyTypeObject PyIndexFile_Type =
0, // tp_hash
0, // tp_call
0, // tp_str
- 0, // tp_getattro
+ _PyAptObject_getattro, // tp_getattro
0, // tp_setattro
0, // tp_as_buffer
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, // tp_flags
diff --git a/python/metaindex.cc b/python/metaindex.cc
index dee54521..2dcade7d 100644
--- a/python/metaindex.cc
+++ b/python/metaindex.cc
@@ -52,12 +52,6 @@ static PyGetSetDef MetaIndexGetSet[] = {
{"index_files",MetaIndexGetIndexFiles},
{"is_trusted",MetaIndexGetIsTrusted},
{"uri",MetaIndexGetURI},
- #ifdef COMPAT_0_7
- {"Dist",MetaIndexGetDist},
- {"IndexFiles",MetaIndexGetIndexFiles},
- {"IsTrusted",MetaIndexGetIsTrusted},
- {"URI",MetaIndexGetURI},
- #endif
{}
};
@@ -91,7 +85,7 @@ PyTypeObject PyMetaIndex_Type =
0, // tp_hash
0, // tp_call
0, // tp_str
- 0, // tp_getattro
+ _PyAptObject_getattro, // tp_getattro
0, // tp_setattro
0, // tp_as_buffer
Py_TPFLAGS_DEFAULT, // tp_flags
diff --git a/python/pkgmanager.cc b/python/pkgmanager.cc
index 9b4a9ab7..2fda14ee 100644
--- a/python/pkgmanager.cc
+++ b/python/pkgmanager.cc
@@ -100,11 +100,6 @@ static PyMethodDef PkgManagerMethods[] =
{"get_archives",PkgManagerGetArchives,METH_VARARGS,"Load the selected archives into the fetcher"},
{"do_install",PkgManagerDoInstall,METH_VARARGS,"Do the actual install"},
{"fix_missing",PkgManagerFixMissing,METH_VARARGS,"Fix the install if a pkg couldn't be downloaded"},
-#ifdef COMPAT_0_7
- {"GetArchives",PkgManagerGetArchives,METH_VARARGS,"Load the selected archives into the fetcher"},
- {"DoInstall",PkgManagerDoInstall,METH_VARARGS,"Do the actual install"},
- {"FixMissing",PkgManagerFixMissing,METH_VARARGS,"Fix the install if a pkg couldn't be downloaded"},
-#endif
{}
};
@@ -128,7 +123,7 @@ PyTypeObject PyPackageManager_Type =
0, // tp_hash
0, // tp_call
0, // tp_str
- 0, // tp_getattro
+ _PyAptObject_getattro, // tp_getattro
0, // tp_setattro
0, // tp_as_buffer
(Py_TPFLAGS_DEFAULT | // tp_flags
diff --git a/python/pkgrecords.cc b/python/pkgrecords.cc
index 1e43b2e8..0e00edcd 100644
--- a/python/pkgrecords.cc
+++ b/python/pkgrecords.cc
@@ -50,9 +50,6 @@ static PyObject *PkgRecordsLookup(PyObject *Self,PyObject *Args)
static PyMethodDef PkgRecordsMethods[] =
{
{"lookup",PkgRecordsLookup,METH_VARARGS,"Changes to a new package"},
- #ifdef COMPAT_0_7
- {"Lookup",PkgRecordsLookup,METH_VARARGS,"Changes to a new package"},
- #endif
{}
};
@@ -132,20 +129,6 @@ static PyGetSetDef PkgRecordsGetSet[] = {
{"short_desc",PkgRecordsGetShortDesc},
{"source_pkg",PkgRecordsGetSourcePkg},
{"source_ver",PkgRecordsGetSourceVer},
-#ifdef COMPAT_0_7
- {"FileName",PkgRecordsGetFileName},
- {"Homepage",PkgRecordsGetHomepage},
- {"LongDesc",PkgRecordsGetLongDesc},
- {"MD5Hash",PkgRecordsGetMD5Hash},
- {"Maintainer",PkgRecordsGetMaintainer},
- {"Name",PkgRecordsGetName},
- {"Record",PkgRecordsGetRecord},
- {"SHA1Hash",PkgRecordsGetSHA1Hash},
- {"SHA256Hash",PkgRecordsGetSHA256Hash},
- {"ShortDesc",PkgRecordsGetShortDesc},
- {"SourcePkg",PkgRecordsGetSourcePkg},
- {"SourceVer",PkgRecordsGetSourceVer},
-#endif
{}
};
@@ -180,7 +163,7 @@ PyTypeObject PyPackageRecords_Type =
0, // tp_hash
0, // tp_call
0, // tp_str
- 0, // tp_getattro
+ _PyAptObject_getattro, // tp_getattro
0, // tp_setattro
0, // tp_as_buffer
(Py_TPFLAGS_DEFAULT | // tp_flags
diff --git a/python/pkgsrcrecords.cc b/python/pkgsrcrecords.cc
index 41ee6276..95f35f23 100644
--- a/python/pkgsrcrecords.cc
+++ b/python/pkgsrcrecords.cc
@@ -71,10 +71,6 @@ static PyMethodDef PkgSrcRecordsMethods[] =
{
{"lookup",PkgSrcRecordsLookup,METH_VARARGS,doc_PkgSrcRecordsLookup},
{"restart",PkgSrcRecordsRestart,METH_VARARGS,doc_PkgSrcRecordsRestart},
-#ifdef COMPAT_0_7
- {"Lookup",PkgSrcRecordsLookup,METH_VARARGS,doc_PkgSrcRecordsLookup},
- {"Restart",PkgSrcRecordsRestart,METH_VARARGS,doc_PkgSrcRecordsRestart},
-#endif
{}
};
@@ -234,15 +230,7 @@ static PyGetSetDef PkgSrcRecordsGetSet[] = {
{"section",PkgSrcRecordsGetSection},
{"version",PkgSrcRecordsGetVersion},
#ifdef COMPAT_0_7
- {"Binaries",PkgSrcRecordsGetBinaries},
{"BuildDepends",PkgSrcRecordsGetBuildDepends_old,0,"Deprecated function and deprecated output format."},
- {"Files",PkgSrcRecordsGetFiles},
- {"Index",PkgSrcRecordsGetIndex},
- {"Maintainer",PkgSrcRecordsGetMaintainer},
- {"Package",PkgSrcRecordsGetPackage},
- {"Record",PkgSrcRecordsGetRecord},
- {"Section",PkgSrcRecordsGetSection},
- {"Version",PkgSrcRecordsGetVersion},
#endif
{}
};
@@ -274,7 +262,7 @@ PyTypeObject PySourceRecords_Type =
0, // tp_hash
0, // tp_call
0, // tp_str
- 0, // tp_getattro
+ _PyAptObject_getattro, // tp_getattro
0, // tp_setattro
0, // tp_as_buffer
(Py_TPFLAGS_DEFAULT | // tp_flags
diff --git a/python/sourcelist.cc b/python/sourcelist.cc
index b705d8b8..6184fee3 100644
--- a/python/sourcelist.cc
+++ b/python/sourcelist.cc
@@ -77,11 +77,6 @@ static PyMethodDef PkgSourceListMethods[] =
{"find_index",PkgSourceListFindIndex,METH_VARARGS,doc_PkgSourceListFindIndex},
{"read_main_list",PkgSourceListReadMainList,METH_VARARGS,doc_PkgSourceListReadMainList},
{"get_indexes",PkgSourceListGetIndexes,METH_VARARGS,doc_PkgSourceListGetIndexes},
-#ifdef COMPAT_0_7
- {"FindIndex",PkgSourceListFindIndex,METH_VARARGS,doc_PkgSourceListFindIndex},
- {"ReadMainList",PkgSourceListReadMainList,METH_VARARGS,doc_PkgSourceListReadMainList},
- {"GetIndexes",PkgSourceListGetIndexes,METH_VARARGS,doc_PkgSourceListGetIndexes},
-#endif
{}
};
@@ -104,9 +99,6 @@ static PyObject *PkgSourceListGetList(PyObject *Self,void*)
static PyGetSetDef PkgSourceListGetSet[] = {
{"list",PkgSourceListGetList,0,"A list of MetaIndex() objects.",0},
-#ifdef COMPAT_0_7
- {"List",PkgSourceListGetList,0,"A list of MetaIndex() objects.",0},
-#endif
{}
};
@@ -137,7 +129,7 @@ PyTypeObject PySourceList_Type =
0, // tp_hash
0, // tp_call
0, // tp_str
- 0, // tp_getattro
+ _PyAptObject_getattro, // tp_getattro
0, // tp_setattro
0, // tp_as_buffer
(Py_TPFLAGS_DEFAULT | // tp_flags
diff --git a/python/tag.cc b/python/tag.cc
index 4971a03d..c7edcb31 100644
--- a/python/tag.cc
+++ b/python/tag.cc
@@ -271,6 +271,22 @@ static PyObject *TagFileNext(PyObject *Self)
Obj.Section->Data = 0;
if (Obj.Object.Step(Obj.Section->Object) == false)
return HandleErrors(NULL);
+
+ // Bug-Debian: http://bugs.debian.org/572596
+ // Duplicate the data here and scan the duplicated section data; in order
+ // to not use any shared storage.
+ // TODO: Provide an API in apt-pkg to do this; this is really ugly.
+
+ // Fetch old section data
+ const char *Start;
+ const char *Stop;
+ Obj.Section->Object.GetSection(Start,Stop);
+ // Duplicate the data
+ Obj.Section->Data = new char[Stop-Start];
+ strncpy(Obj.Section->Data, Start, Stop-Start);
+ // Rescan it
+ Obj.Section->Object.Scan(Obj.Section->Data, Stop-Start);
+
Py_INCREF(Obj.Section);
return HandleErrors(Obj.Section);
}
@@ -458,12 +474,6 @@ static PyMethodDef TagSecMethods[] =
{"find_raw",TagSecFindRaw,METH_VARARGS,doc_FindRaw},
{"find_flag",TagSecFindFlag,METH_VARARGS,doc_FindFlag},
{"bytes",TagSecBytes,METH_VARARGS,doc_Bytes},
-#ifdef COMPAT_0_7
- {"Find",TagSecFind,METH_VARARGS,doc_Find},
- {"FindRaw",TagSecFindRaw,METH_VARARGS,doc_FindRaw},
- {"FindFlag",TagSecFindFlag,METH_VARARGS,doc_FindFlag},
- {"Bytes",TagSecBytes,METH_VARARGS,doc_Bytes},
-#endif
// Python Special
{"keys",TagSecKeys,METH_VARARGS,doc_Keys},
@@ -503,7 +513,7 @@ PyTypeObject PyTagSection_Type =
0, // tp_hash
0, // tp_call
TagSecStr, // tp_str
- 0, // tp_getattro
+ _PyAptObject_getattro, // tp_getattro
0, // tp_setattro
0, // tp_as_buffer
(Py_TPFLAGS_DEFAULT | // tp_flags
@@ -536,11 +546,6 @@ static PyMethodDef TagFileMethods[] =
{"step",TagFileStep,METH_VARARGS,doc_Step},
{"offset",TagFileOffset,METH_VARARGS,doc_Offset},
{"jump",TagFileJump,METH_VARARGS,doc_Jump},
-#ifdef COMPAT_0_7
- {"Step",TagFileStep,METH_VARARGS,doc_Step},
- {"Offset",TagFileOffset,METH_VARARGS,doc_Offset},
- {"Jump",TagFileJump,METH_VARARGS,doc_Jump},
-#endif
{}
};
@@ -554,12 +559,10 @@ static PyObject *TagFileGetSection(PyObject *Self,void*) {
static PyGetSetDef TagFileGetSet[] = {
{"section",TagFileGetSection,0,"Return a TagSection.",0},
-#ifdef COMPAT_0_7
- {"Section",TagFileGetSection,0,"Return a TagSection.",0},
-#endif
{}
};
+
static char *doc_TagFile = "TagFile(file) -> TagFile() object. \n\n"
"TagFile() objects provide access to debian control files, which consists\n"
"of multiple RFC822-like formatted sections.\n\n"
@@ -593,7 +596,7 @@ PyTypeObject PyTagFile_Type =
0, // tp_hash
0, // tp_call
0, // tp_str
- 0, // tp_getattro
+ _PyAptObject_getattro, // tp_getattro
0, // tp_setattro
0, // tp_as_buffer
(Py_TPFLAGS_DEFAULT | // tp_flags
diff --git a/setup.py b/setup.py
index b285fcee..9c6eda60 100644
--- a/setup.py
+++ b/setup.py
@@ -14,8 +14,6 @@ try:
cmdclass['build'] = build_extra.build_extra
cmdclass['build_i18n'] = build_i18n.build_i18n
cmdclass['clean'] = clean_build_tree
- build_extra.build_extra.sub_commands.append(("build_sphinx",
- lambda x: 'build_sphinx' in cmdclass))
except ImportError:
print('W: [python%s] DistUtilsExtra import error.' % sys.version[:3])
diff --git a/tests/data/aptsources/sources.list.testDistribution b/tests/data/aptsources/sources.list.testDistribution
index 4ff0fae6..79224a34 100644
--- a/tests/data/aptsources/sources.list.testDistribution
+++ b/tests/data/aptsources/sources.list.testDistribution
@@ -6,8 +6,8 @@ deb http://de.archive.ubuntu.com/ubuntu/ hardy-updates restricted
deb http://de.archive.ubuntu.com/ubuntu/ hardy-security main
deb http://de.archive.ubuntu.com/ubuntu/ hardy-security multiverse
deb http://ftp.debian.org/debian sid main
-deb http://ubuntu.cs.uaf.edu/ubuntu/ hardy main
-deb http://ubuntu.cs.uaf.edu/ubuntu/ hardy-backports main
+deb http://ftp.hosteurope.de/mirror/archive.ubuntu.com/ hardy main
+deb http://ftp.hosteurope.de/mirror/archive.ubuntu.com/ hardy-backports main
deb http://archive.ubuntu.com/ubuntu/ intrepid main
deb cdrom:[Ubuntu 8.10 _Intrepid Ibex_ - Alpha]/ intrepid main
deb cdrom:[Ubuntu 8.04 _Hardy Heron_] hardy main
diff --git a/tests/test_all.py b/tests/test_all.py
index 6900e0ad..dc603dfd 100644
--- a/tests/test_all.py
+++ b/tests/test_all.py
@@ -10,6 +10,7 @@ import unittest
import sys
if __name__ == '__main__':
+ print("[tests] Running on %s" % sys.version.replace("\n", ""))
os.chdir(os.path.dirname(__file__))
# Find the path to the built apt_pkg and apt_inst extensions
if os.path.exists("../build"):
diff --git a/tests/test_deps.py b/tests/test_deps.py
new file mode 100644
index 00000000..674c9485
--- /dev/null
+++ b/tests/test_deps.py
@@ -0,0 +1,119 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2010 Julian Andres Klode <jak@debian.org>
+#
+# Copying and distribution of this file, with or without modification,
+# are permitted in any medium without royalty provided the copyright
+# notice and this notice are preserved.
+"""Unit tests for verifying the correctness of check_dep, etc in apt_pkg."""
+import unittest
+
+import apt_pkg
+
+
+class TestDependencies(unittest.TestCase):
+
+ def setUp(self):
+ apt_pkg.init()
+
+ def testCheckDep(self):
+ """dependencies: Test apt_pkg.CheckDep() for '<' and '>'
+
+ The CheckDep function should treat '<' as '<=' and '>' as '>=', for
+ compatibility reasons."""
+ if not hasattr(apt_pkg, 'CheckDep'):
+ return
+ self.assertFalse(apt_pkg.CheckDep("1", "<", "0"))
+ self.assertTrue(apt_pkg.CheckDep("1", "<", "1"))
+ self.assertTrue(apt_pkg.CheckDep("1", "<", "2"))
+
+ self.assertFalse(apt_pkg.CheckDep("0", ">", "1"))
+ self.assertTrue(apt_pkg.CheckDep("1", ">", "1"))
+ self.assertTrue(apt_pkg.CheckDep("2", ">", "1"))
+
+ def test_check_dep(self):
+ "dependencies: Test apt_pkg.check_dep()"
+ self.assertFalse(apt_pkg.check_dep("1", "<<", "0"))
+ self.assertFalse(apt_pkg.check_dep("1", "<<", "1"))
+ self.assertTrue(apt_pkg.check_dep("1", "<<", "2"))
+
+ self.assertFalse(apt_pkg.check_dep("1", "<", "0"))
+ self.assertFalse(apt_pkg.check_dep("1", "<", "1"))
+ self.assertTrue(apt_pkg.check_dep("1", "<", "2"))
+
+ self.assertFalse(apt_pkg.check_dep("1", "<=", "0"))
+ self.assertTrue(apt_pkg.check_dep("1", "<=", "1"))
+ self.assertTrue(apt_pkg.check_dep("1", "<=", "2"))
+
+ self.assertFalse(apt_pkg.check_dep("0", "=", "1"))
+ self.assertTrue(apt_pkg.check_dep("1", "=", "1"))
+ self.assertFalse(apt_pkg.check_dep("2", "=", "1"))
+
+ self.assertFalse(apt_pkg.check_dep("0", ">=", "1"))
+ self.assertTrue(apt_pkg.check_dep("1", ">=", "1"))
+ self.assertTrue(apt_pkg.check_dep("2", ">=", "1"))
+
+ self.assertFalse(apt_pkg.check_dep("0", ">", "1"))
+ self.assertFalse(apt_pkg.check_dep("1", ">", "1"))
+ self.assertTrue(apt_pkg.check_dep("2", ">", "1"))
+
+ self.assertFalse(apt_pkg.check_dep("0", ">>", "1"))
+ self.assertFalse(apt_pkg.check_dep("1", ">>", "1"))
+ self.assertTrue(apt_pkg.check_dep("2", ">>", "1"))
+
+ def test_parse_depends(self):
+ """dependencies: Test apt_pkg.parse_depends()"""
+ deps = apt_pkg.parse_depends("p1a (<< 1a) | p1b (>> 1b)")
+ self.assertTrue(isinstance(deps, list))
+ self.assertEqual(len(deps), 1)
+ self.assertTrue(isinstance(deps[0], list))
+ self.assertEqual(len(deps[0]), 2)
+ self.assertEqual(len(deps[0][0]), 3)
+ self.assertEqual(len(deps[0][1]), 3)
+ self.assertEqual(deps[0][0][0], "p1a")
+ self.assertEqual(deps[0][0][1], "1a")
+ self.assertEqual(deps[0][0][2], "<")
+ self.assertEqual(deps[0][1][0], "p1b")
+ self.assertEqual(deps[0][1][1], "1b")
+ self.assertEqual(deps[0][1][2], ">")
+
+ # Check that the type of comparison is parsed correctly.
+ self.assertEqual("<", apt_pkg.parse_depends("p1 (<< 1)")[0][0][2])
+ self.assertEqual("<=", apt_pkg.parse_depends("p1 (< 1)")[0][0][2])
+ self.assertEqual("<=", apt_pkg.parse_depends("p1 (<= 1)")[0][0][2])
+ self.assertEqual("=", apt_pkg.parse_depends("p1 (= 1)")[0][0][2])
+ self.assertEqual(">=", apt_pkg.parse_depends("p1 (>= 1)")[0][0][2])
+ self.assertEqual(">=", apt_pkg.parse_depends("p1 (> 1)")[0][0][2])
+ self.assertEqual(">", apt_pkg.parse_depends("p1 (>> 1)")[0][0][2])
+
+ def test_parse_src_depends(self):
+ """dependencies: Test apt_pkg.parse_src_depends()."""
+ # Check that architecture exclusion works
+ # depends_this: Current architecture is included
+ # depends_this_too: Another architecture is excluded
+ # depends_other: The current architecture is excluded
+ # depends_other: Another architecture is requested.
+ architecture = apt_pkg.config["APT::Architecture"]
+ depends_this = apt_pkg.parse_src_depends("p [%s]" % architecture)
+ depends_this_too = apt_pkg.parse_src_depends("p [!not-existing-arch]")
+ depends_other = apt_pkg.parse_src_depends("p [!%s]" % architecture)
+ depends_other_too = apt_pkg.parse_src_depends("p [not-existing-arch]")
+
+ self.assertEqual(len(depends_this), len(depends_this_too), 1)
+ self.assertEqual(len(depends_other), len(depends_other_too), 0)
+
+ def testParseDepends(self):
+ """dependencies: Test apt_pkg.ParseDepends()."""
+ if not hasattr(apt_pkg, 'ParseDepends'):
+ return
+ # Check that the type of comparison is parsed correctly.
+ self.assertEqual("<<", apt_pkg.ParseDepends("p1 (<< 1)")[0][0][2])
+ self.assertEqual("<=", apt_pkg.ParseDepends("p1 (< 1)")[0][0][2])
+ self.assertEqual("<=", apt_pkg.ParseDepends("p1 (<= 1)")[0][0][2])
+ self.assertEqual("=", apt_pkg.ParseDepends("p1 (= 1)")[0][0][2])
+ self.assertEqual(">=", apt_pkg.ParseDepends("p1 (>= 1)")[0][0][2])
+ self.assertEqual(">=", apt_pkg.ParseDepends("p1 (> 1)")[0][0][2])
+ self.assertEqual(">>", apt_pkg.ParseDepends("p1 (>> 1)")[0][0][2])
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/utils/get_debian_mirrors.py b/utils/get_debian_mirrors.py
index 9fb783bd..395c21da 100755
--- a/utils/get_debian_mirrors.py
+++ b/utils/get_debian_mirrors.py
@@ -1,13 +1,7 @@
-#!/usr/bin/env python
+#!/usr/bin/python
+# get_debian_mirrors.py - Parse Mirrors.masterlist and create a mirror list.
#
-# get_debian_mirrors.py
-#
-# Download the latest list with available mirrors from the Debian
-# website and extract the hosts from the raw page
-#
-# Copyright (c) 2006, 2009 Free Software Foundation Europe
-#
-# Author: Sebastian Heinlein <glatzor@ubuntu.com>
+# Copyright (c) 2010 Julian Andres Klode <jak@debian.org>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
@@ -23,52 +17,22 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
# USA
-
+import collections
import urllib2
-import re
-import os
-import commands
-import sys
-
-# the list of official Ubuntu servers
-mirrors = []
-# path to the local mirror list
-list_path = "../data/templates/Debian.mirrors"
-
-req = urllib2.Request("http://www.debian.org/mirror/mirrors_full")
-match = re.compile("^.*>([A-Za-z0-9-.\/_]+)<\/a>.*\n$")
-match_location = re.compile('^<h3><a name="([A-Z]+)">.*')
-match_sites = re.compile('^Site: <tt>([A-Za-z0-9-.\ \/_,]+)<\/tt>.*\n$')
-
-
-def add_sites(line, proto, sites, mirror_type):
- path = match.sub(r"\1", line)
- for site in sites:
- mirror_type.append("%s://%s%s\n" % (proto, site.lstrip(), path))
-
-
-try:
- print "Downloading mirrors list from the Debian website..."
- uri=urllib2.urlopen(req)
- for line in uri.readlines():
- if line.startswith('<h3><a name="'):
- location = match_location.sub(r"\1", line)
- if location:
- mirrors.append("#LOC:%s" % location)
- if line.startswith("Site:"):
- sites = match_sites.sub(r"\1", line).split(",")
- elif line.startswith('<br>Packages over HTTP'):
- add_sites(line, "http", sites, mirrors)
- elif line.startswith('<br>Packages over FTP'):
- add_sites(line, "ftp", sites, mirrors)
- uri.close()
-except:
- print "Failed to download or to extract the mirrors list!"
- sys.exit(1)
-
-print "Writing local mirrors list: %s" % list_path
-list = open(list_path, "w")
-for mirror in mirrors:
- list.write("%s" % mirror)
-list.close()
-print "Done."
+from debian_bundle import deb822
+
+mirrors = collections.defaultdict(set)
+masterlist = urllib2.urlopen("http://cvs.debian.org/webwml/webwml/english/"
+ "mirror/Mirrors.masterlist?revision=HEAD")
+
+for mirror in deb822.Deb822.iter_paragraphs(masterlist):
+ country = mirror["Country"].split(None, 1)[0]
+ site = mirror["Site"]
+ for proto in 'http', 'ftp':
+ if "Archive-%s" % proto in mirror:
+ mirrors[country].add("%s://%s%s" % (proto, site,
+ mirror["Archive-%s" % proto]))
+
+for country in sorted(mirrors):
+ print "#LOC:%s" % country
+ print "\n".join(sorted(mirrors[country]))
diff --git a/utils/get_ubuntu_mirrors_from_lp.py b/utils/get_ubuntu_mirrors_from_lp.py
index b912f28d..341dba8a 100755
--- a/utils/get_ubuntu_mirrors_from_lp.py
+++ b/utils/get_ubuntu_mirrors_from_lp.py
@@ -24,68 +24,24 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
# USA
-import urllib2
-import re
+import feedparser
import sys
-# the list of official Ubuntu servers
-mirrors = []
-# path to the local mirror list
-list_path = "../data/templates/Ubuntu.mirrors"
-
-
-try:
- f = open("/usr/share/iso-codes/iso_3166.tab", "r")
- lines = f.readlines()
- f.close()
-except:
- print "Could not read country information"
- sys.exit(1)
+d = feedparser.parse("https://launchpad.net/ubuntu/+archivemirrors-rss")
+#d = feedparser.parse(open("+archivemirrors-rss"))
countries = {}
-for line in lines:
- parts = line.split("\t")
- countries[parts[1].strip()] = parts[0].lower()
-
-req = urllib2.Request("https://launchpad.net/ubuntu/+archivemirrors")
-print "Downloading mirrors list from Launchpad..."
-try:
- uri=urllib2.urlopen(req)
- content = uri.read()
- uri.close()
-except:
- print "Failed to download or extract the mirrors list!"
- sys.exit(1)
-
-content = content.replace("\n", "")
-
-content_splits = re.split(r'<tr class="highlighted"',
- re.findall(r'<table class="listing" '
- 'id="mirrors_list">.+?</table>',
- content)[0])
-lines=[]
-
-
-def find(split):
- country = re.search(r"<strong>(.+?)</strong>", split)
- if not country:
- return
- if country.group(1) in countries:
- lines.append("#LOC:%s" % countries[country.group(1)].upper())
- else:
- lines.append("#LOC:%s" % country.group(1))
- # FIXME: currently the protocols are hardcoded: ftp http
- urls = re.findall(r'<a href="(?![a-zA-Z:/_\-]+launchpad.+?">)'
- '(((http)|(ftp)).+?)">',
- split)
- map(lambda u: lines.append(u[0]), urls)
+for entry in d.entries:
+ countrycode = entry.mirror_countrycode
+ if not countrycode in countries:
+ countries[countrycode] = set()
+ for link in entry.links:
+ countries[countrycode].add(link.href)
-map(find, content_splits)
-print "Writing local mirrors list: %s" % list_path
-list = open(list_path, "w")
-for line in lines:
- list.write("%s\n" % line)
-list.close()
-print "Done."
+keys = countries.keys()
+keys.sort()
+for country in keys:
+ print "#LOC:%s" % country
+ print "\n".join(sorted(countries[country]))
diff --git a/utils/migrate-0.8.py b/utils/migrate-0.8.py
index 61059b2a..d0d8e9a1 100755
--- a/utils/migrate-0.8.py
+++ b/utils/migrate-0.8.py
@@ -44,7 +44,7 @@ from collections import defaultdict
from textwrap import fill
color=False
-if sys.argv[1] in ('-c', '--color', '--colour'):
+if len(sys.argv) > 1 and sys.argv[1] in ('-c', '--color', '--colour'):
color=True
del sys.argv[1]
@@ -55,6 +55,75 @@ if '-h' in sys.argv or '--help' in sys.argv or not sys.argv[1:]:
if os.path.dirname(__file__).endswith('utils'):
sys.path.insert(0, os.path.dirname(os.path.dirname(__file__)))
+deprecated_cpp_stuff = set([
+ '.Add', '.AllTargets', '.Arch', '.Architecture', '.Archive',
+ '.ArchiveURI', '.Auto', '.Base64Encode', '.Binaries', '.BrokenCount',
+ '.BuildDepends', '.Bytes', '.CheckDep', '.CheckDomainList', '.Clear',
+ '.Close', '.Commit', '.CompType', '.Complete', '.Component', '.Config',
+ '.CurStateConfigFiles', '.CurStateHalfConfigured',
+ '.CurStateHalfInstalled', '.CurStateInstalled', '.CurStateNotInstalled',
+ '.CurStateUnPacked', '.CurrentState', '.CurrentVer', '.Date',
+ '.DeQuoteString', '.DebSize', '.DelCount', '.DepType', '.DependsCount',
+ '.DependsList', '.DependsListStr', '.DescURI', '.Describe', '.DestFile',
+ '.Dist', '.DoInstall', '.Downloadable', '.ErrorText', '.Essential',
+ '.Exists', '.FetchNeeded', '.FileList', '.FileName', '.FileSize',
+ '.Files', '.Find', '.FindB', '.FindDir', '.FindFile', '.FindFlag',
+ '.FindI', '.FindIndex', '.FindRaw', '.FixBroken', '.FixMissing',
+ '.GetAcquire', '.GetArchives', '.GetCache', '.GetCandidateVer',
+ '.GetCdrom', '.GetDepCache', '.GetIndexes', '.GetLock',
+ '.GetPackageManager', '.GetPkgAcqFile', '.GetPkgActionGroup',
+ '.GetPkgProblemResolver', '.GetPkgRecords', '.GetPkgSourceList',
+ '.GetPkgSrcRecords', '.HasPackages', '.Hash', '.Homepage', '.ID',
+ '.Ident', '.Important', '.Index', '.IndexFiles', '.IndexType', '.Init',
+ '.InitConfig', '.InitSystem', '.InstCount', '.InstState',
+ '.InstStateHold', '.InstStateHoldReInstReq', '.InstStateOk',
+ '.InstStateReInstReq', '.InstallProtect', '.InstalledSize',
+ '.IsAutoInstalled', '.IsGarbage', '.IsInstBroken', '.IsNowBroken',
+ '.IsTrusted', '.IsUpgradable', '.Items', '.Jump', '.KeepCount',
+ '.Label', '.LanguageCode', '.LibVersion', '.List', '.Local',
+ '.LongDesc', '.Lookup', '.MD5Hash', '.Maintainer', '.MarkDelete',
+ '.MarkInstall', '.MarkKeep', '.MarkedDelete', '.MarkedDowngrade',
+ '.MarkedInstall', '.MarkedKeep', '.MarkedReinstall', '.MarkedUpgrade',
+ '.MinimizeUpgrade', '.MyTag', '.Name', '.NotAutomatic', '.NotSource',
+ '.Offset', '.Open', '.Origin', '.Package', '.PackageCount',
+ '.PackageFileCount', '.Packages', '.ParentPkg', '.ParentVer',
+ '.ParseCommandLine', '.ParseDepends', '.ParseSection',
+ '.ParseSrcDepends', '.ParseTagFile', '.PartialPresent',
+ '.PkgSystemLock', '.PkgSystemUnLock', '.PriExtra', '.PriImportant',
+ '.PriOptional', '.PriRequired', '.PriStandard', '.Priority',
+ '.PriorityStr', '.Protect', '.ProvidesCount', '.ProvidesList',
+ '.QuoteString', '.ReadConfigDir', '.ReadConfigFile',
+ '.ReadConfigFileISC', '.ReadMainList', '.ReadPinFile', '.Record',
+ '.Remove', '.Resolve', '.ResolveByKeep', '.Restart', '.RevDependsList',
+ '.RewriteSection', '.RewriteSourceOrder', '.Run', '.SHA1Hash',
+ '.SHA256Hash', '.Section', '.SelStateDeInstall', '.SelStateHold',
+ '.SelStateInstall', '.SelStatePurge', '.SelStateUnknown',
+ '.SelectedState', '.Set', '.SetCandidateVer', '.SetReInstall',
+ '.ShortDesc', '.Shutdown', '.Site', '.Size', '.SizeToStr',
+ '.SmartTargetPkg', '.SourcePkg', '.SourceVer', '.Status', '.Step',
+ '.StrToTime', '.StringToBool', '.SubTree', '.TargetPkg', '.TargetVer',
+ '.Time', '.TimeRFC1123', '.TimeToStr', '.TotalNeeded',
+ '.TranslationDescription', '.URI', '.URItoFileName', '.Update',
+ '.Upgrade', '.UpstreamVersion', '.UsrSize', '.ValueList',
+ '.VerFileCount', '.VerStr', '.Version', '.VersionCompare',
+ '.VersionCount', '.VersionList', '.newConfiguration', 'Base64Encode',
+ 'CheckDep', 'CheckDomainList', 'Config', 'CurStateConfigFiles',
+ 'CurStateHalfConfigured', 'CurStateHalfInstalled', 'CurStateInstalled',
+ 'CurStateNotInstalled', 'CurStateUnPacked', 'Date', 'DeQuoteString',
+ 'GetAcquire', 'GetCache', 'GetCdrom', 'GetDepCache', 'GetLock',
+ 'GetPackageManager', 'GetPkgAcqFile', 'GetPkgActionGroup',
+ 'GetPkgProblemResolver', 'GetPkgRecords', 'GetPkgSourceList',
+ 'GetPkgSrcRecords', 'InitConfig', 'InitSystem', 'InstStateHold',
+ 'InstStateHoldReInstReq', 'InstStateOk', 'InstStateReInstReq',
+ 'LibVersion', 'ParseCommandLine', 'ParseDepends', 'ParseSection',
+ 'ParseSrcDepends', 'ParseTagFile', 'PkgSystemLock', 'PkgSystemUnLock',
+ 'PriExtra', 'PriImportant', 'PriOptional', 'PriRequired', 'PriStandard',
+ 'QuoteString', 'ReadConfigDir', 'ReadConfigFile', 'ReadConfigFileISC',
+ 'RewriteSection', 'RewriteSourceOrder', 'SelStateDeInstall',
+ 'SelStateHold', 'SelStateInstall', 'SelStatePurge', 'SelStateUnknown',
+ 'SizeToStr', 'StrToTime', 'StringToBool', 'Time', 'TimeRFC1123',
+ 'TimeToStr', 'URItoFileName', 'UpstreamVersion', 'VersionCompare',
+ 'newConfiguration'])
def do_color(string, words):
"""Colorize (red) the given words in the given string."""
@@ -66,61 +135,13 @@ def do_color(string, words):
r"\2" + "\033[0m\\3", string)
return string
-
-def find_deprecated_cpp():
- """Find all the deprecated functions and attributes."""
- is_open=False
- all_old = set()
- for fname in glob.glob('python/*.cc'):
- lines = list(open(fname, 'r'))
- while lines:
- line = lines.pop(0)
- while lines and not ('static PyMethodDef' in line or
- 'static PyGetSetDef' in line):
- line = lines.pop(0)
- if not lines:
- break
-
- while lines and not ';' in line:
- while lines and not 'COMPAT_0_7' in line and not ';' in line:
- line = lines.pop(0)
- if ';' in line:
- continue
- if lines:
- line = lines.pop(0)
- while lines and not '#endif' in line:
- name = line.split(",")[0].strip().strip('{"')
- if not 'module' in fname:
- name = '.' + name
- else:
- all_old.add('.' + name)
- all_old.add(name)
- line = lines.pop(0)
- # Let's handle constants in the apt_pkg module
- lines = list(open('python/apt_pkgmodule.cc'))
- while lines:
- while lines and not 'COMPAT_0_7' in line:
- line = lines.pop(0)
- if lines:
- lines.pop(0)
- while lines and not '#endif' in line:
- if 'PyModule_Add' in line:
- name = line.split(",")[1].strip().strip('"')
- if name != '_COMPAT_0_7':
- all_old.add('.' + name)
- all_old.add(name)
- line = lines.pop(0)
- return all_old
-
-
def find_deprecated_py():
- """Same as find_deprecated_cpp(), but for apt and aptsources.
-
- We import apt_pkg, set _COMPAT_0_7 to 0, import apt and aptsources and
- create a list of all attributes.
+ """Find all the deprecated functions and attributes.
- No we remove the imported modules, reimport them (with _COMPAT_0_7=1),
- and see which functions have been removed.
+ Import apt_pkg, set _COMPAT_0_7 to 0, import apt and aptsources and
+ create a list of all attributes. Then remove the imported modules,
+ reimport them (with _COMPAT_0_7=1), and see which functions do not
+ exist anymore.
"""
modules = ('apt', 'apt.package', 'apt.cdrom', 'apt.cache', 'apt.debfile',
@@ -204,7 +225,7 @@ if color:
'simply highlight the matched words (like grep).', 79)
print
-all_old = find_deprecated_cpp()
+all_old = deprecated_cpp_stuff
if not '-P' in sys.argv:
all_old |= find_deprecated_py()