From aeac7fa849373c7a6fddd5daeddc5bfba7e6eba1 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Mon, 24 Oct 2005 17:07:22 +0000 Subject: * custom waitChild() added in installProgress --- python/progress.cc | 39 ++++++++++++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 7 deletions(-) (limited to 'python/progress.cc') diff --git a/python/progress.cc b/python/progress.cc index 12f9c7a8..61343a0b 100644 --- a/python/progress.cc +++ b/python/progress.cc @@ -218,7 +218,7 @@ pkgPackageManager::OrderResult PyInstallProgress::Run(pkgPackageManager *pm) // support custom fork methods if(PyObject_HasAttrString(callbackInst, "fork")) { PyObject *method = PyObject_GetAttrString(callbackInst, "fork"); - //std::cerr << "custom fork found" << std::endl; + std::cerr << "custom fork found" << std::endl; PyObject *arglist = Py_BuildValue("()"); PyObject *result = PyEval_CallObject(method, arglist); Py_DECREF(arglist); @@ -227,11 +227,13 @@ pkgPackageManager::OrderResult PyInstallProgress::Run(pkgPackageManager *pm) PyErr_Print(); return pkgPackageManager::Failed; } - if(!PyArg_Parse(result, "i", &child_id) ) + if(!PyArg_Parse(result, "i", &child_id) ) { std::cerr << "custom fork() result could not be parsed?"<< std::endl; - //std::cerr << "got: " << child_id << std::endl; + return pkgPackageManager::Failed; + } + std::cerr << "got pid: " << child_id << std::endl; } else { - //std::cerr << "using build-in fork()" << std::endl; + std::cerr << "using build-in fork()" << std::endl; child_id = fork(); } @@ -251,15 +253,38 @@ pkgPackageManager::OrderResult PyInstallProgress::Run(pkgPackageManager *pm) } else { res = pm->DoInstall(); } + std::cout << "res: " << res << std::endl; _exit(res); } StartUpdate(); - while (waitpid(child_id, &ret, WNOHANG) == 0) - UpdateInterface(); - res = (pkgPackageManager::OrderResult) WEXITSTATUS(ret); + if(PyObject_HasAttrString(callbackInst, "waitChild")) { + PyObject *method = PyObject_GetAttrString(callbackInst, "waitChild"); + std::cerr << "custom waitChild found" << std::endl; + PyObject *arglist = Py_BuildValue("(i)",child_id); + PyObject *result = PyEval_CallObject(method, arglist); + Py_DECREF(arglist); + if (result == NULL) { + std::cerr << "waitChild method invalid" << std::endl; + PyErr_Print(); + return pkgPackageManager::Failed; + } + int child_res; + if(!PyArg_Parse(result, "i", &res) ) { + std::cerr << "custom waitChild() result could not be parsed?"<< std::endl; + return pkgPackageManager::Failed; + } + std::cerr << "got child_res: " << res << std::endl; + } else { + std::cerr << "using build-in waitpid()" << std::endl; + + while (waitpid(child_id, &ret, WNOHANG) == 0) + UpdateInterface(); + + res = (pkgPackageManager::OrderResult) WEXITSTATUS(ret); + } FinishUpdate(); -- cgit v1.2.3 From c26431eebbd6d9b90bba2498355e1874a15aba60 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Tue, 22 Nov 2005 09:04:05 +0000 Subject: * less debug messages --- python/cache.cc | 2 -- python/depcache.cc | 6 +++--- python/progress.cc | 11 ++++++----- 3 files changed, 9 insertions(+), 10 deletions(-) (limited to 'python/progress.cc') diff --git a/python/cache.cc b/python/cache.cc index 5c1760d4..5e2d9819 100644 --- a/python/cache.cc +++ b/python/cache.cc @@ -637,8 +637,6 @@ static PyObject *PackageFileAttr(PyObject *Self,char *Name) return Py_BuildValue("i",(File->Flags & pkgCache::Flag::NotAutomatic) != 0); else if (strcmp("ID",Name) == 0) return Py_BuildValue("i",File->ID); - /* mtime is really a cookie these days and has no meaning outside the - list handlers */ PyErr_SetString(PyExc_AttributeError,Name); return 0; diff --git a/python/depcache.cc b/python/depcache.cc index 6d5e9fcd..51c25080 100644 --- a/python/depcache.cc +++ b/python/depcache.cc @@ -160,16 +160,16 @@ static PyObject *PkgDepCacheCommit(PyObject *Self,PyObject *Args) //FIXME: make this more flexible, e.g. with a failedDl handler if(Failed) return Py_BuildValue("b", false); - _system->UnLock(); + _system->UnLock(true); pkgPackageManager::OrderResult Res = iprogress.Run(PM); //std::cout << "iprogress.Run() returned: " << (int)Res << std::endl; - //FIXME: return usefull values here if (Res == pkgPackageManager::Failed || _error->PendingError() == true) { - return Py_BuildValue("b", false); + return HandleErrors(Py_BuildValue("b", false)); } if (Res == pkgPackageManager::Completed) { + //std::cout << "iprogress.Run() returned Completed " << std::endl; return Py_BuildValue("b", true); } diff --git a/python/progress.cc b/python/progress.cc index 61343a0b..d0c97839 100644 --- a/python/progress.cc +++ b/python/progress.cc @@ -233,7 +233,7 @@ pkgPackageManager::OrderResult PyInstallProgress::Run(pkgPackageManager *pm) } std::cerr << "got pid: " << child_id << std::endl; } else { - std::cerr << "using build-in fork()" << std::endl; + //std::cerr << "using build-in fork()" << std::endl; child_id = fork(); } @@ -253,7 +253,7 @@ pkgPackageManager::OrderResult PyInstallProgress::Run(pkgPackageManager *pm) } else { res = pm->DoInstall(); } - std::cout << "res: " << res << std::endl; + //std::cout << "res: " << res << std::endl; _exit(res); } @@ -262,7 +262,7 @@ pkgPackageManager::OrderResult PyInstallProgress::Run(pkgPackageManager *pm) if(PyObject_HasAttrString(callbackInst, "waitChild")) { PyObject *method = PyObject_GetAttrString(callbackInst, "waitChild"); - std::cerr << "custom waitChild found" << std::endl; + //std::cerr << "custom waitChild found" << std::endl; PyObject *arglist = Py_BuildValue("(i)",child_id); PyObject *result = PyEval_CallObject(method, arglist); Py_DECREF(arglist); @@ -276,14 +276,15 @@ pkgPackageManager::OrderResult PyInstallProgress::Run(pkgPackageManager *pm) std::cerr << "custom waitChild() result could not be parsed?"<< std::endl; return pkgPackageManager::Failed; } - std::cerr << "got child_res: " << res << std::endl; + //std::cerr << "got child_res: " << res << std::endl; } else { - std::cerr << "using build-in waitpid()" << std::endl; + //std::cerr << "using build-in waitpid()" << std::endl; while (waitpid(child_id, &ret, WNOHANG) == 0) UpdateInterface(); res = (pkgPackageManager::OrderResult) WEXITSTATUS(ret); + //std::cerr << "build-in waitpid() got: " << res << std::endl; } FinishUpdate(); -- cgit v1.2.3 From 86878ca7de8c4b14da7e10a82b26905de80a6c98 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Fri, 9 Dec 2005 20:40:55 +0000 Subject: * CdromProgress.totalSteps added --- debian/changelog | 1 + python/cdrom.cc | 6 ++---- python/progress.cc | 4 ++++ 3 files changed, 7 insertions(+), 4 deletions(-) (limited to 'python/progress.cc') diff --git a/debian/changelog b/debian/changelog index 5f4c0856..d8a8527a 100644 --- a/debian/changelog +++ b/debian/changelog @@ -6,6 +6,7 @@ python-apt (0.6.16) unstable; urgency=low * rewrote apt.cache.update() to use the improved aquire interface * apt/ API change: apt.Package.candidateOrigin returns a list of origins now instead of a single one + * apt_pkg.Cdrom.Add() returns a boolean now, CdromProgress has totalSteps -- Michael Vogt Thu, 1 Dec 2005 14:01:39 +0100 diff --git a/python/cdrom.cc b/python/cdrom.cc index 13889b31..aca1be26 100644 --- a/python/cdrom.cc +++ b/python/cdrom.cc @@ -30,10 +30,9 @@ static PyObject *PkgCdromAdd(PyObject *Self,PyObject *Args) PyCdromProgress progress; progress.setCallbackInst(pyCdromProgressInst); - Struct.cdrom.Add(&progress); + bool res = Struct.cdrom.Add(&progress); - Py_INCREF(Py_None); - return HandleErrors(Py_None); + return HandleErrors(Py_BuildValue("b", res)); } static PyObject *PkgCdromIdent(PyObject *Self,PyObject *Args) @@ -69,7 +68,6 @@ static PyObject *CdromAttr(PyObject *Self,char *Name) { PkgCdromStruct &Struct = GetCpp(Self); - return Py_FindMethod(PkgCdromMethods,Self,Name); } diff --git a/python/progress.cc b/python/progress.cc index d0c97839..f00058c9 100644 --- a/python/progress.cc +++ b/python/progress.cc @@ -299,6 +299,10 @@ pkgPackageManager::OrderResult PyInstallProgress::Run(pkgPackageManager *pm) void PyCdromProgress::Update(string text, int current) { PyObject *arglist = Py_BuildValue("(si)", text.c_str(), current); + + PyObject *o = Py_BuildValue("i", totalSteps); + PyObject_SetAttrString(callbackInst, "totalSteps", o); + RunSimpleCallback("update", arglist); } -- cgit v1.2.3