return false;
}
/*}}}*/
+// EDSP::StringToBool - convert yes/no to bool /*{{{*/
+// ---------------------------------------------------------------------
+/* we are not as lazy as we are in the global StringToBool as we really
+ only accept yes/no here - but we will ignore leading spaces */
+bool EDSP::StringToBool(char const *answer, bool const defValue) {
+ for (; isspace(*answer) != 0; ++answer);
+ if (strncasecmp(answer, "yes", 3) == 0)
+ return true;
+ else if (strncasecmp(answer, "no", 2) == 0)
+ return false;
+ else
+ _error->Warning("Value '%s' is not a boolean 'yes' or 'no'!", answer);
+ return defValue;
+}
+ /*}}}*/
// EDSP::ReadRequest - first stanza from the given file descriptor /*{{{*/
bool EDSP::ReadRequest(int const input, std::list<std::string> &install,
- std::list<std::string> &remove)
+ std::list<std::string> &remove, bool &upgrade,
+ bool &distUpgrade, bool &autoRemove)
{
+ install.clear();
+ remove.clear();
+ upgrade = false;
+ distUpgrade = false;
+ autoRemove = false;
std::string line;
while (ReadLine(input, line) == true)
{
if (line.empty() == true)
continue;
// The first Tag must be a request, so search for it
- if (line.compare(0,8, "Request:") != 0)
+ if (line.compare(0, 8, "Request:") != 0)
continue;
while (ReadLine(input, line) == true)
return true;
std::list<std::string> *request = NULL;
- if (line.compare(0,8, "Install:") == 0)
+ if (line.compare(0, 8, "Install:") == 0)
{
- line.erase(0,8);
+ line.erase(0, 8);
request = &install;
}
- if (line.compare(0,7, "Remove:") == 0)
+ else if (line.compare(0, 7, "Remove:") == 0)
{
- line.erase(0,7);
+ line.erase(0, 7);
request = &remove;
}
+ else if (line.compare(0, 8, "Upgrade:") == 0)
+ upgrade = EDSP::StringToBool(line.c_str() + 9, false);
+ else if (line.compare(0, 13, "Dist-Upgrade:") == 0)
+ distUpgrade = EDSP::StringToBool(line.c_str() + 14, false);
+ else if (line.compare(0, 11, "Autoremove:") == 0)
+ autoRemove = EDSP::StringToBool(line.c_str() + 12, false);
+ else
+ _error->Warning("Unknown line in EDSP Request stanza: %s", line.c_str());
+
if (request == NULL)
continue;
size_t end = line.length();
size_t begin = line.rfind(' ');
if (begin == std::string::npos)
{
- request->push_back(line.substr(0,end));
+ request->push_back(line.substr(0, end));
break;
}
else if (begin < end)
class EDSP /*{{{*/
{
bool static ReadLine(int const input, std::string &line);
+ bool static StringToBool(char const *answer, bool const defValue);
public:
bool static WriteRequest(pkgDepCache &Cache, FILE* output,
- bool const Upgrade = false,
- bool const DistUpgrade = false,
- bool const AutoRemove = false);
+ bool const upgrade = false,
+ bool const distUpgrade = false,
+ bool const autoRemove = false);
bool static WriteScenario(pkgDepCache &Cache, FILE* output);
bool static ReadResponse(FILE* input, pkgDepCache &Cache);
// ReadScenario is provided by the listparser infrastructure
bool static ReadRequest(int const input, std::list<std::string> &install,
- std::list<std::string> &remove);
+ std::list<std::string> &remove, bool &upgrade,
+ bool &distUpgrade, bool &autoRemove);
bool static ApplyRequest(std::list<std::string> const &install,
std::list<std::string> const &remove,
pkgDepCache &Cache);