diff options
| author | Michael Vogt <michael.vogt@ubuntu.com> | 2010-03-12 11:42:37 +0100 |
|---|---|---|
| committer | Michael Vogt <michael.vogt@ubuntu.com> | 2010-03-12 11:42:37 +0100 |
| commit | 85238ea03cd35b48a90a2fc1f63f2cf05d5b83b4 (patch) | |
| tree | bb7fcce7e80cc45e807eab19a3c36f628c888bd3 | |
| parent | 62a7342edb16c38e3d646cc731a4a50ad6657b4f (diff) | |
| parent | c657b7a2a59e15a0c415ba94021c4de547a78e60 (diff) | |
| download | python-apt-85238ea03cd35b48a90a2fc1f63f2cf05d5b83b4.tar.gz | |
merged from debian-sid
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 @@ -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() |
