# Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: jak@debian.org-20100329112052-mb97clhwqajectzp # target_branch: lp:~ubuntu-core-dev/python-apt/ubuntu # testament_sha1: f823ecdfae42e2139b5ac80ec0d5e7b4e9336a7d # timestamp: 2010-03-29 13:25:19 +0200 # base_revision_id: michael.vogt@ubuntu.com-20100325094451-\ # 05miajpkyuzt2vo4 # # Begin patch === modified file 'apt/__init__.py' --- apt/__init__.py 2010-03-23 18:08:19 +0000 +++ apt/__init__.py 2010-03-29 11:20:52 +0000 @@ -17,11 +17,6 @@ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 # USA -import os -import warnings -if not "PYTHON_APT_DEPRECATION_WARNINGS" in os.environ: - warnings.simplefilter('ignore', DeprecationWarning) - # import the core of apt_pkg """High-Level Interface for working with apt.""" import apt_pkg === modified file 'apt/deprecation.py' --- apt/deprecation.py 2009-06-05 17:13:20 +0000 +++ apt/deprecation.py 2010-03-29 11:20:52 +0000 @@ -24,6 +24,7 @@ """ import re import operator +import os import warnings import apt_pkg @@ -49,12 +50,14 @@ """Issue a DeprecationWarning and return the requested value.""" if obj is None: return getattr(type_, self.attribute, self) - warnings.warn(self.__doc__, DeprecationWarning, stacklevel=2) + if "PYTHON_APT_DEPRECATION_WARNINGS" in os.environ: + warnings.warn(self.__doc__, DeprecationWarning, stacklevel=2) return self.getter(obj or type_) def __set__(self, obj, value): """Issue a DeprecationWarning and set the requested value.""" - warnings.warn(self.__doc__, DeprecationWarning, stacklevel=2) + if "PYTHON_APT_DEPRECATION_WARNINGS" in os.environ: + warnings.warn(self.__doc__, DeprecationWarning, stacklevel=2) setattr(obj, self.attribute, value) @@ -71,7 +74,8 @@ def deprecated_function(*args, **kwds): """Wrapper around a deprecated function.""" - warnings.warn(warning, DeprecationWarning, stacklevel=2) + if "PYTHON_APT_DEPRECATION_WARNINGS" in os.environ: + warnings.warn(warning, DeprecationWarning, stacklevel=2) if convert_names: for key in kwds.keys(): kwds[re.sub('([A-Z])', '_\\1', key).lower()] = kwds.pop(key) @@ -93,7 +97,8 @@ for key in kwds.keys(): new_key = re.sub('([A-Z])', '_\\1', key).lower() if new_key != key: - warnings.warn("Deprecated parameter %r" % key) + if "PYTHON_APT_DEPRECATION_WARNINGS" in os.environ: + warnings.warn("Deprecated parameter %r" % key) kwds[new_key] = kwds.pop(key) return func(*args, **kwds) === modified file 'apt/package.py' --- apt/package.py 2010-03-23 13:18:44 +0000 +++ apt/package.py 2010-03-29 11:20:52 +0000 @@ -120,7 +120,7 @@ self.__doc__ = (doc or fget.__doc__ or '') def __get__(self, obj, type_=None): - if obj is not None: + if obj is not None and "PYTHON_APT_DEPRECATION_WARNINGS" in os.environ: warnings.warn("Accessed deprecated property %s.%s, please see the " "Version class for alternatives." % ((obj.__class__.__name__ or type_.__name__), === modified file 'apt/progress/old.py' --- apt/progress/old.py 2010-03-23 13:18:44 +0000 +++ apt/progress/old.py 2010-03-29 11:20:52 +0000 @@ -42,8 +42,9 @@ def __init__(self): base.OpProgress.__init__(self) - warnings.warn("apt.progress.OpProgress is deprecated.", - DeprecationWarning, stacklevel=2) + if "PYTHON_APT_DEPRECATION_WARNINGS" in os.environ: + warnings.warn("apt.progress.OpProgress is deprecated.", + DeprecationWarning, stacklevel=2) subOp = AttributeDeprecatedBy('subop') Op = AttributeDeprecatedBy('op') @@ -54,8 +55,9 @@ def __init__(self): text.OpProgress.__init__(self) - warnings.warn("apt.progress.OpTextProgress is deprecated.", - DeprecationWarning, stacklevel=2) + if "PYTHON_APT_DEPRECATION_WARNINGS" in os.environ: + warnings.warn("apt.progress.OpTextProgress is deprecated.", + DeprecationWarning, stacklevel=2) class FetchProgress(object): @@ -75,8 +77,9 @@ self.totalBytes = 0 self.totalItems = 0 self.currentCPS = 0 - warnings.warn("apt.progress.FetchProgress is deprecated.", - DeprecationWarning, stacklevel=2) + if "PYTHON_APT_DEPRECATION_WARNINGS" in os.environ: + warnings.warn("apt.progress.FetchProgress is deprecated.", + DeprecationWarning, stacklevel=2) def start(self): """Called when the fetching starts.""" @@ -175,8 +178,9 @@ """Report the cdrom add progress.""" def __init__(self): - warnings.warn("apt.progress.CdromProgress is deprecated.", - DeprecationWarning, stacklevel=2) + if "PYTHON_APT_DEPRECATION_WARNINGS" in os.environ: + warnings.warn("apt.progress.CdromProgress is deprecated.", + DeprecationWarning, stacklevel=2) def askCdromName(self): """Ask for a cdrom name""" @@ -193,8 +197,9 @@ def __init__(self): base.InstallProgress.__init__(self) - warnings.warn("apt.progress.*InstallProgress are deprecated.", - DeprecationWarning, stacklevel=2) + if "PYTHON_APT_DEPRECATION_WARNINGS" in os.environ: + warnings.warn("apt.progress.*InstallProgress are deprecated.", + DeprecationWarning, stacklevel=2) def updateInterface(self): # *_stream were not available in the old progress reporting classes, === modified file 'debian/changelog' --- debian/changelog 2010-03-25 09:44:51 +0000 +++ debian/changelog 2010-03-29 11:20:52 +0000 @@ -1,3 +1,11 @@ +python-apt (0.7.94.2ubuntu4) lucid; urgency=low + + * If PYTHON_APT_DEPRECATION_WARNINGS is unset, also disable the + deprecation warnings in apt_pkg directly; and don't just + disable any deprecation warning in apt/__init__.py (LP: #548623) + + -- Julian Andres Klode Mon, 29 Mar 2010 13:18:20 +0200 + python-apt (0.7.94.2ubuntu3) lucid; urgency=low * python/indexfile.cc: === modified file 'python/acquire-item.cc' --- python/acquire-item.cc 2010-03-01 15:13:40 +0000 +++ python/acquire-item.cc 2010-03-29 11:20:52 +0000 @@ -279,9 +279,10 @@ "GetPkgAcqFile(pkgAquire, uri[, md5, size, descr, shortDescr, destDir, destFile]) -> PkgAcqFile\n"; PyObject *GetPkgAcqFile(PyObject *Self, PyObject *Args, PyObject * kwds) { - PyErr_WarnEx(PyExc_DeprecationWarning, "apt_pkg.GetPkgAcqFile() is " - "deprecated. Please see apt_pkg.AcquireFile() for the " - "replacement", 1); + if (getenv("PYTHON_APT_DEPRECATION_WARNINGS") != NULL) + PyErr_WarnEx(PyExc_DeprecationWarning, "apt_pkg.GetPkgAcqFile() is " + "deprecated. Please see apt_pkg.AcquireFile() for the " + "replacement", 1); PyObject *pyfetcher; char *uri, *md5, *descr, *shortDescr, *destDir, *destFile; int size = 0; === modified file 'python/acquire.cc' --- python/acquire.cc 2010-02-27 16:31:39 +0000 +++ python/acquire.cc 2010-03-29 11:20:52 +0000 @@ -372,8 +372,9 @@ #ifdef COMPAT_0_7 PyObject *GetAcquire(PyObject *Self,PyObject *Args) { - PyErr_WarnEx(PyExc_DeprecationWarning,"apt_pkg.GetAcquire() is deprecated." - " Please see apt_pkg.Acquire() for the replacement.", 1); + if (getenv("PYTHON_APT_DEPRECATION_WARNINGS") != NULL) + PyErr_WarnEx(PyExc_DeprecationWarning,"apt_pkg.GetAcquire() is deprecated." + " Please see apt_pkg.Acquire() for the replacement.", 1); return PkgAcquireNew(&PyAcquire_Type,Args,0); } #endif === modified file 'python/apt_pkgmodule.cc' --- python/apt_pkgmodule.cc 2010-03-10 14:57:58 +0000 +++ python/apt_pkgmodule.cc 2010-03-29 11:20:52 +0000 @@ -54,8 +54,9 @@ static char *doc_newConfiguration = "Construct a configuration instance"; static PyObject *newConfiguration(PyObject *self,PyObject *args) { - PyErr_WarnEx(PyExc_DeprecationWarning, "apt_pkg.newConfiguration() is " - "deprecated. Use apt_pkg.Configuration() instead.", 1); + if (getenv("PYTHON_APT_DEPRECATION_WARNINGS") != NULL) + PyErr_WarnEx(PyExc_DeprecationWarning, "apt_pkg.newConfiguration() is " + "deprecated. Use apt_pkg.Configuration() instead.", 1); return CppPyObject_NEW(NULL, &PyConfiguration_Type, new Configuration()); } #endif === modified file 'python/cache.cc' --- python/cache.cc 2010-02-27 16:31:39 +0000 +++ python/cache.cc 2010-03-29 11:20:52 +0000 @@ -105,8 +105,9 @@ #ifdef COMPAT_0_7 static PyObject *PkgCacheClose(PyObject *Self,PyObject *Args) { - PyErr_WarnEx(PyExc_DeprecationWarning, "Cache.Close() is deprecated, " - "because it causes segfaults. Delete the Cache instead.", 1); + if (getenv("PYTHON_APT_DEPRECATION_WARNINGS") != NULL) + PyErr_WarnEx(PyExc_DeprecationWarning, "Cache.Close() is deprecated, " + "because it causes segfaults. Delete the Cache instead.", 1); PyObject *CacheFilePy = GetOwner(Self); pkgCacheFile *Cache = GetCpp(CacheFilePy); Cache->Close(); @@ -117,9 +118,10 @@ static PyObject *PkgCacheOpen(PyObject *Self,PyObject *Args) { - PyErr_WarnEx(PyExc_DeprecationWarning, "Cache.Open() is deprecated, " - "because it causes memory leaks. Create a new Cache instead.", - 1); + if (getenv("PYTHON_APT_DEPRECATION_WARNINGS") != NULL) + PyErr_WarnEx(PyExc_DeprecationWarning, "Cache.Open() is deprecated, " + "because it causes memory leaks. Create a new Cache instead.", + 1); PyObject *CacheFilePy = GetOwner(Self); pkgCacheFile *Cache = GetCpp(CacheFilePy); @@ -1296,8 +1298,9 @@ #ifdef COMPAT_0_7 PyObject *TmpGetCache(PyObject *Self,PyObject *Args) { - PyErr_WarnEx(PyExc_DeprecationWarning, "apt_pkg.GetCache() is deprecated. " - "Please see apt_pkg.Cache() for the replacement.", 1); + if (getenv("PYTHON_APT_DEPRECATION_WARNINGS") != NULL) + PyErr_WarnEx(PyExc_DeprecationWarning, "apt_pkg.GetCache() is deprecated. " + "Please see apt_pkg.Cache() for the replacement.", 1); return PkgCacheNew(&PyCache_Type,Args,0); } #endif === modified file 'python/cdrom.cc' --- python/cdrom.cc 2010-02-27 16:31:39 +0000 +++ python/cdrom.cc 2010-03-29 11:20:52 +0000 @@ -78,9 +78,10 @@ #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); + if (getenv("PYTHON_APT_DEPRECATION_WARNINGS") != NULL) + PyErr_WarnEx(PyExc_DeprecationWarning, "Method 'Ident' of the " + "'apt_pkg.Cdrom' object is deprecated, use 'ident' instead.", + 1); pkgCdrom &Cdrom = GetCpp(Self); PyObject *pyCdromProgressInst = 0; @@ -164,8 +165,9 @@ #ifdef COMPAT_0_7 PyObject *GetCdrom(PyObject *Self,PyObject *Args) { - PyErr_WarnEx(PyExc_DeprecationWarning, "apt_pkg.GetCdrom() is deprecated. " - "Please see apt_pkg.Cdrom() for the replacement.", 1); + if (getenv("PYTHON_APT_DEPRECATION_WARNINGS") != NULL) + PyErr_WarnEx(PyExc_DeprecationWarning, "apt_pkg.GetCdrom() is deprecated. " + "Please see apt_pkg.Cdrom() for the replacement.", 1); return cdrom_new(&PyCdrom_Type,Args,0); } #endif === modified file 'python/depcache.cc' --- python/depcache.cc 2010-02-27 16:31:39 +0000 +++ python/depcache.cc 2010-03-29 11:20:52 +0000 @@ -694,8 +694,9 @@ #ifdef COMPAT_0_7 PyObject *GetDepCache(PyObject *Self,PyObject *Args) { - PyErr_WarnEx(PyExc_DeprecationWarning,"apt_pkg.GetDepCache() is deprecated" - ". Please see apt_pkg.DepCache() for the replacement.",1); + if (getenv("PYTHON_APT_DEPRECATION_WARNINGS") != NULL) + PyErr_WarnEx(PyExc_DeprecationWarning,"apt_pkg.GetDepCache() is deprecated" + ". Please see apt_pkg.DepCache() for the replacement.",1); return PkgDepCacheNew(&PyDepCache_Type,Args,0); } #endif @@ -728,9 +729,10 @@ #ifdef COMPAT_0_7 PyObject *GetPkgProblemResolver(PyObject *Self,PyObject *Args) { - PyErr_WarnEx(PyExc_DeprecationWarning, "apt_pkg.GetPkgProblemResolver() is" - " deprecated. Please see apt_pkg.ProblemResolver() for the " - "replacement.", 1); + if (getenv("PYTHON_APT_DEPRECATION_WARNINGS") != NULL) + PyErr_WarnEx(PyExc_DeprecationWarning, "apt_pkg.GetPkgProblemResolver() is" + " deprecated. Please see apt_pkg.ProblemResolver() for the " + "replacement.", 1); return PkgProblemResolverNew(&PyProblemResolver_Type,Args,0); } #endif @@ -989,9 +991,10 @@ #ifdef COMPAT_0_7 PyObject *GetPkgActionGroup(PyObject *Self,PyObject *Args) { - PyErr_WarnEx(PyExc_DeprecationWarning, "apt_pkg.GetPkgActionGroup() is " - "deprecated. Please see apt_pkg.ActionGroup() for the " - "replacement.", 1); + if (getenv("PYTHON_APT_DEPRECATION_WARNINGS") != NULL) + PyErr_WarnEx(PyExc_DeprecationWarning, "apt_pkg.GetPkgActionGroup() is " + "deprecated. Please see apt_pkg.ActionGroup() for the " + "replacement.", 1); return PkgActionGroupNew(&PyActionGroup_Type,Args,0); } #endif === modified file 'python/generic.cc' --- python/generic.cc 2010-03-23 08:09:23 +0000 +++ python/generic.cc 2010-03-29 11:20:52 +0000 @@ -101,7 +101,8 @@ 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); + if (getenv("PYTHON_APT_DEPRECATION_WARNINGS") != NULL) + PyErr_WarnEx(PyExc_DeprecationWarning, warning_string, 1); delete[] warning_string; } else { Py_XINCREF(ptype); === modified file 'python/generic.h' --- python/generic.h 2010-02-27 16:31:39 +0000 +++ python/generic.h 2010-03-29 11:20:52 +0000 @@ -31,6 +31,7 @@ #include #include #include +#include #if PYTHON_API_VERSION < 1013 typedef int Py_ssize_t; === modified file 'python/pkgmanager.cc' --- python/pkgmanager.cc 2010-02-27 16:31:39 +0000 +++ python/pkgmanager.cc 2010-03-29 11:20:52 +0000 @@ -39,9 +39,10 @@ #ifdef COMPAT_0_7 PyObject *GetPkgManager(PyObject *Self,PyObject *Args) { - PyErr_WarnEx(PyExc_DeprecationWarning, "apt_pkg.GetPackageManager() is " - "deprecated. Please see apt_pkg.PackageManager() for the " - "replacement.", 1); + if (getenv("PYTHON_APT_DEPRECATION_WARNINGS") != NULL) + PyErr_WarnEx(PyExc_DeprecationWarning, "apt_pkg.GetPackageManager() is " + "deprecated. Please see apt_pkg.PackageManager() for the " + "replacement.", 1); return PkgManagerNew(&PyPackageManager_Type,Args,0); } #endif === modified file 'python/pkgrecords.cc' --- python/pkgrecords.cc 2010-02-27 16:31:39 +0000 +++ python/pkgrecords.cc 2010-03-29 11:20:52 +0000 @@ -195,9 +195,10 @@ #ifdef COMPAT_0_7 PyObject *GetPkgRecords(PyObject *Self,PyObject *Args) { - PyErr_WarnEx(PyExc_DeprecationWarning, "apt_pkg.GetPkgRecords() is " - "deprecated. Please see apt_pkg.Records() for the " - "replacement.", 1); + if (getenv("PYTHON_APT_DEPRECATION_WARNINGS") != NULL) + PyErr_WarnEx(PyExc_DeprecationWarning, "apt_pkg.GetPkgRecords() is " + "deprecated. Please see apt_pkg.Records() for the " + "replacement.", 1); return PkgRecordsNew(&PyPackageRecords_Type,Args,0); } #endif === modified file 'python/pkgsrcrecords.cc' --- python/pkgsrcrecords.cc 2010-02-27 16:31:39 +0000 +++ python/pkgsrcrecords.cc 2010-03-29 11:20:52 +0000 @@ -292,9 +292,10 @@ #ifdef COMPAT_0_7 PyObject *GetPkgSrcRecords(PyObject *Self,PyObject *Args) { - PyErr_WarnEx(PyExc_DeprecationWarning, "apt_pkg.GetPkgSrcRecords() is " - "deprecated. Please see apt_pkg.SourceRecords() for the " - "replacement.", 1); + if (getenv("PYTHON_APT_DEPRECATION_WARNINGS") != NULL) + PyErr_WarnEx(PyExc_DeprecationWarning, "apt_pkg.GetPkgSrcRecords() is " + "deprecated. Please see apt_pkg.SourceRecords() for the " + "replacement.", 1); if (PyArg_ParseTuple(Args,"") == 0) return 0; === modified file 'python/sourcelist.cc' --- python/sourcelist.cc 2010-02-27 16:31:39 +0000 +++ python/sourcelist.cc 2010-03-29 11:20:52 +0000 @@ -157,9 +157,10 @@ #ifdef COMPAT_0_7 PyObject *GetPkgSourceList(PyObject *Self,PyObject *Args) { - PyErr_WarnEx(PyExc_DeprecationWarning, "apt_pkg.GetPkgSourceList() is " - "deprecated. Please see apt_pkg.SourceList() for the " - "replacement.", 1); + if (getenv("PYTHON_APT_DEPRECATION_WARNINGS") != NULL) + PyErr_WarnEx(PyExc_DeprecationWarning, "apt_pkg.GetPkgSourceList() is " + "deprecated. Please see apt_pkg.SourceList() for the " + "replacement.", 1); return PkgSourceListNew(&PySourceList_Type,Args,0); } #endif === modified file 'python/tag.cc' --- python/tag.cc 2010-03-05 17:14:43 +0000 +++ python/tag.cc 2010-03-29 11:20:52 +0000 @@ -349,9 +349,10 @@ char *doc_ParseSection ="ParseSection(Text) -> TagSection() object. Deprecated."; PyObject *ParseSection(PyObject *self,PyObject *Args) { - PyErr_WarnEx(PyExc_DeprecationWarning, "apt_pkg.ParseSection() is " - "deprecated. Please see apt_pkg.TagSection() for the " - "replacement.", 1); + if (getenv("PYTHON_APT_DEPRECATION_WARNINGS") != NULL) + PyErr_WarnEx(PyExc_DeprecationWarning, "apt_pkg.ParseSection() is " + "deprecated. Please see apt_pkg.TagSection() for the " + "replacement.", 1); return TagSecNew(&PyTagSection_Type,Args,0); } #endif @@ -388,9 +389,10 @@ #ifdef COMPAT_0_7 char *doc_ParseTagFile = "ParseTagFile(File) -> TagFile() object. Deprecated."; PyObject *ParseTagFile(PyObject *self,PyObject *Args) { - PyErr_WarnEx(PyExc_DeprecationWarning, "apt_pkg.ParseTagFile() is " - "deprecated. Please see apt_pkg.TagFile() for the " - "replacement.", 1); + if (getenv("PYTHON_APT_DEPRECATION_WARNINGS") != NULL) + PyErr_WarnEx(PyExc_DeprecationWarning, "apt_pkg.ParseTagFile() is " + "deprecated. Please see apt_pkg.TagFile() for the " + "replacement.", 1); return TagFileNew(&PyTagFile_Type,Args,0); } #endif === modified file 'tests/old/memleak.py' (properties changed: +x to -x) # Begin bundle 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