type = "Install";
else if (section.Exists("Remove") == true)
type = "Remove";
- //FIXME: handle progress
- else
+ else if (section.Exists("Progress") == true) {
+ ioprintf(std::clog, "[ %3d%% ] ", section.FindI("Percentage", 0));
+ std::clog << section.FindS("Progress") << " - ";
+ string const msg = section.FindS("Message");
+ if (msg.empty() == true)
+ std::clog << "Solver is still working on the solution" << std::endl;
+ else
+ std::clog << msg << std::endl;
+ continue;
+ } else
continue;
size_t const id = section.FindULL(type.c_str(), VersionCount);
return true;
}
/*}}}*/
+// EDSP::WriteProgess - pulse to the given file descriptor /*{{{*/
+bool EDSP::WriteProgress(unsigned short const percent, const char* const message, FILE* output) {
+ fprintf(output, "Progress: %s\n", TimeRFC1123(time(NULL)).c_str());
+ fprintf(output, "Percentage: %d\n", percent);
+ fprintf(output, "Message: %s\n\n", message);
+ fflush(output);
+ return true;
+}
+ /*}}}*/
bool EDSP::WriteError(std::string const &message, FILE* output) { return false; }
std::list<std::string> const &remove,
pkgDepCache &Cache);
bool static WriteSolution(pkgDepCache &Cache, FILE* output);
+ bool static WriteProgress(unsigned short const percent, const char* const message, FILE* output);
bool static WriteError(std::string const &message, FILE* output);
};
FILE* output = stdout;
SetNonBlock(input, false);
+ EDSP::WriteProgress(0, "Start up solver…", output);
+
if (pkgInitSystem(*_config,_system) == false) {
std::cerr << "System could not be initialized!" << std::endl;
return 1;
}
+ EDSP::WriteProgress(1, "Read request…", output);
+
if (WaitFd(input, false, 5) == false)
std::cerr << "WAIT timed out in the resolver" << std::endl;
return 2;
}
+ EDSP::WriteProgress(5, "Read scenario…", output);
+
pkgCacheFile CacheFile;
CacheFile.Open(NULL, false);
+ EDSP::WriteProgress(50, "Apply request on scenario…", output);
+
if (EDSP::ApplyRequest(install, remove, CacheFile) == false) {
std::cerr << "Failed to apply request to depcache!" << std::endl;
return 3;
i != install.end(); ++i)
CacheFile->MarkInstall(CacheFile->FindPkg(*i), true);
+ EDSP::WriteProgress(60, "Call problemresolver on current scenario…", output);
if (Fix.Resolve() == false) {
EDSP::WriteError("An error occured", output);
return 0;
}
+ EDSP::WriteProgress(95, "Write solution…", output);
+
if (EDSP::WriteSolution(CacheFile, output) == false) {
std::cerr << "Failed to output the solution!" << std::endl;
return 4;
}
+ EDSP::WriteProgress(100, "Done", output);
+
bool const Errors = _error->PendingError();
if (_config->FindI("quiet",0) > 0)
_error->DumpErrors(std::cerr);