From c17e7730c128ea465d0e9581a2f87a4e0c4869d3 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Wed, 23 Feb 2005 11:07:56 +0000 Subject: * added basic depcache support --- python/depcache.cc | 149 +++++++++++++++++++++++++++++++++++++++++++++++++++++ python/makefile | 2 +- 2 files changed, 150 insertions(+), 1 deletion(-) create mode 100644 python/depcache.cc (limited to 'python') diff --git a/python/depcache.cc b/python/depcache.cc new file mode 100644 index 00000000..ea86bf3c --- /dev/null +++ b/python/depcache.cc @@ -0,0 +1,149 @@ +// -*- mode: cpp; mode: fold -*- +// Description /*{{{*/ +// $Id: depcache.cc,v 1.5 2003/06/03 03:03:23 mdz Exp $ +/* ###################################################################### + + DepCache - Wrapper for the depcache related functions + + ##################################################################### */ + /*}}}*/ +// Include Files /*{{{*/ +#include "generic.h" +#include "apt_pkgmodule.h" + +#include +#include +#include +#include + +#include + + +// DepCache Class /*{{{*/ +// --------------------------------------------------------------------- + +struct PkgDepCacheStruct +{ + pkgDepCache depcache; + + PkgDepCacheStruct(pkgCache *Cache, pkgPolicy *Policy) + : depcache(Cache,Policy) {}; + // FIXME: wrap pkgPolicy as well and remove this "new() memory leak" + PkgDepCacheStruct(pkgCache *Cache) + : depcache(Cache,new pkgPolicy(Cache) ) {}; + PkgDepCacheStruct() : depcache(NULL, NULL) {abort();}; +}; + +static PyObject *PkgDepCacheInit(PyObject *Self,PyObject *Args) +{ + PkgDepCacheStruct &Struct = GetCpp(Self); + + // FIXME: argument should be OpProgress +#if 0 + PyObject *PkgFObj; + long int Index; + if (PyArg_ParseTuple(Args,"(O!l)",&PackageFileType,&PkgFObj,&Index) == 0) + return 0; +#endif + + Struct.depcache.Init(0); + + return HandleErrors(Py_None); +} + +static PyObject *PkgDepCacheGetCandidateVer(PyObject *Self,PyObject *Args) +{ + PkgDepCacheStruct &Struct = GetCpp(Self); + PyObject *PackageObj; + PyObject *CandidateObj; + if (PyArg_ParseTuple(Args,"O!",&PackageType,&PackageObj) == 0) + return 0; + + pkgCache::PkgIterator &Pkg = GetCpp(PackageObj); + pkgCache::VerIterator I = Struct.depcache.GetCandidateVer(Pkg); + CandidateObj = CppOwnedPyObject_NEW(PackageObj,&VersionType,I); + + return CandidateObj; +} + +static PyMethodDef PkgDepCacheMethods[] = +{ + {"Init",PkgDepCacheInit,METH_VARARGS,"Init the depcache"}, + {"GetCandidateVer",PkgDepCacheGetCandidateVer,METH_VARARGS,"Get candidate version"}, + {} +}; + + +static PyObject *DepCacheAttr(PyObject *Self,char *Name) +{ + PkgDepCacheStruct &Struct = GetCpp(Self); + + // size querries + if(strcmp("KeepCount",Name) == 0) + return Py_BuildValue("i", Struct.depcache.KeepCount()); + else if(strcmp("InstCount",Name) == 0) + return Py_BuildValue("i", Struct.depcache.InstCount()); + else if(strcmp("DelCount",Name) == 0) + return Py_BuildValue("i", Struct.depcache.DelCount()); + else if(strcmp("BrokenCount",Name) == 0) + return Py_BuildValue("i", Struct.depcache.BrokenCount()); + else if(strcmp("UsrSize",Name) == 0) + return Py_BuildValue("i", Struct.depcache.UsrSize()); + else if(strcmp("DebSize",Name) == 0) + return Py_BuildValue("i", Struct.depcache.DebSize()); + + +#if 0 + if (strcmp("FileList",Name) == 0) + { + PyObject *List = PyList_New(0); + for (pkgCache::PkgFileIterator I = Cache->FileBegin(); I.end() == false; I++) + { + PyObject *Obj; + Obj = CppOwnedPyObject_NEW(Self,&PackageFileType,I); + PyList_Append(List,Obj); + Py_DECREF(Obj); + } + return List; + } +#endif + return Py_FindMethod(PkgDepCacheMethods,Self,Name); +} + + + + +PyTypeObject PkgDepCacheType = +{ + PyObject_HEAD_INIT(&PyType_Type) + 0, // ob_size + "pkgDepCache", // tp_name + sizeof(CppOwnedPyObject), // tp_basicsize + 0, // tp_itemsize + // Methods + CppOwnedDealloc, // tp_dealloc + 0, // tp_print + DepCacheAttr, // tp_getattr + 0, // tp_setattr + 0, // tp_compare + 0, // tp_repr + 0, // tp_as_number + 0, // tp_as_sequence + 0, // tp_as_mapping + 0, // tp_hash +}; + + +PyObject *GetDepCache(PyObject *Self,PyObject *Args) +{ + PyObject *Owner; + if (PyArg_ParseTuple(Args,"O!",&PkgCacheType,&Owner) == 0) + return 0; + + return HandleErrors(CppOwnedPyObject_NEW(Owner, + &PkgDepCacheType, + GetCpp(Owner))); +} + + + /*}}}*/ diff --git a/python/makefile b/python/makefile index b2f51372..0817c806 100644 --- a/python/makefile +++ b/python/makefile @@ -10,7 +10,7 @@ MODULE=apt_pkg SLIBS = -lapt-pkg LIB_MAKES = apt-pkg/makefile APT_PKG_SRC = apt_pkgmodule.cc configuration.cc generic.cc tag.cc string.cc \ - cache.cc pkgrecords.cc pkgsrcrecords.cc sourcelist.cc + cache.cc pkgrecords.cc pkgsrcrecords.cc sourcelist.cc depcache.cc SOURCE := $(APT_PKG_SRC) include $(PYTHON_H) -- cgit v1.2.3