diff options
| -rw-r--r-- | apt/progress.py | 2 | ||||
| -rw-r--r-- | python/depcache.cc | 11 | ||||
| -rw-r--r-- | python/progress.cc | 39 |
3 files changed, 38 insertions, 14 deletions
diff --git a/apt/progress.py b/apt/progress.py index 86cd6594..de675587 100644 --- a/apt/progress.py +++ b/apt/progress.py @@ -104,7 +104,7 @@ class TextFetchProgress(FetchProgress): sys.stdout.flush() return True def stop(self): - print "\rDone " + print "\rDone downloading " def mediaChange(self, medium, drive): """ react to media change events """ res = True; diff --git a/python/depcache.cc b/python/depcache.cc index c78d0077..df56da61 100644 --- a/python/depcache.cc +++ b/python/depcache.cc @@ -149,21 +149,20 @@ static PyObject *PkgDepCacheCommit(PyObject *Self,PyObject *Args) _system->UnLock(); 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) { - result = Py_BuildValue("b", false); - return result; + return Py_BuildValue("b", false); } if (Res == pkgPackageManager::Completed) { - result = Py_BuildValue("b", true); - return result; + return Py_BuildValue("b", true); } // Reload the fetcher object and loop again for media swapping Fetcher.Shutdown(); if (PM->GetArchives(&Fetcher,&List,&Recs) == false) { - result = Py_BuildValue("b", false); - return result; + return Py_BuildValue("b", false); } _system->Lock(); } 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(); |
