summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Vogt <michael.vogt@ubuntu.com>2005-10-24 17:07:22 +0000
committerMichael Vogt <michael.vogt@ubuntu.com>2005-10-24 17:07:22 +0000
commitaeac7fa849373c7a6fddd5daeddc5bfba7e6eba1 (patch)
tree4664149d8d59d4c6154e91223a6da3d9a6809e49
parentbd6df1d8419eb3403e64191681b32fbd1f3accac (diff)
downloadpython-apt-aeac7fa849373c7a6fddd5daeddc5bfba7e6eba1.tar.gz
* custom waitChild() added in installProgress
-rw-r--r--apt/progress.py2
-rw-r--r--python/depcache.cc11
-rw-r--r--python/progress.cc39
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();