diff options
| author | Alexander Karatarakis <alkarata@microsoft.com> | 2016-09-18 20:50:08 -0700 |
|---|---|---|
| committer | Alexander Karatarakis <alkarata@microsoft.com> | 2016-09-18 20:54:03 -0700 |
| commit | ccca198c1b1730b0241911cb56dc8e3504958b2a (patch) | |
| tree | a2dd9b8b087a09afdcecc5cbb3377bed15127eb2 /toolsrc/src/StatusParagraph.cpp | |
| download | vcpkg-ccca198c1b1730b0241911cb56dc8e3504958b2a.tar.gz vcpkg-ccca198c1b1730b0241911cb56dc8e3504958b2a.zip | |
Initial commit
Diffstat (limited to 'toolsrc/src/StatusParagraph.cpp')
| -rw-r--r-- | toolsrc/src/StatusParagraph.cpp | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/toolsrc/src/StatusParagraph.cpp b/toolsrc/src/StatusParagraph.cpp new file mode 100644 index 000000000..09a3b4d45 --- /dev/null +++ b/toolsrc/src/StatusParagraph.cpp @@ -0,0 +1,87 @@ +#include "StatusParagraph.h" +#include "vcpkglib_helpers.h" + +using namespace vcpkg::details; + +namespace vcpkg +{ + StatusParagraph::StatusParagraph() : want(want_t::error), state(install_state_t::error) + { + } + + std::ostream& operator<<(std::ostream& os, const StatusParagraph& p) + { + os << p.package; + os << "Status: " << to_string(p.want) << " ok " << to_string(p.state) << "\n"; + return os; + } + + StatusParagraph::StatusParagraph(const std::unordered_map<std::string, std::string>& fields) + : package(fields) + { + std::string status_field; + required_field(fields, status_field, "Status"); + + auto b = status_field.begin(); + auto mark = b; + auto e = status_field.end(); + + // Todo: improve error handling + while (b != e && *b != ' ') + ++b; + + want = [](const std::string& text) + { + if (text == "unknown") + return want_t::unknown; + if (text == "install") + return want_t::install; + if (text == "hold") + return want_t::hold; + if (text == "deinstall") + return want_t::deinstall; + if (text == "purge") + return want_t::purge; + return want_t::error; + }(std::string(mark, b)); + + if (std::distance(b, e) < 4) + return; + b += 4; + + state = [](const std::string& text) + { + if (text == "not-installed") + return install_state_t::not_installed; + if (text == "installed") + return install_state_t::installed; + if (text == "half-installed") + return install_state_t::half_installed; + return install_state_t::error; + }(std::string(b, e)); + } + + std::string to_string(install_state_t f) + { + switch (f) + { + case install_state_t::half_installed: return "half-installed"; + case install_state_t::installed: return "installed"; + case install_state_t::not_installed: return "not-installed"; + default: return "error"; + } + } + + std::string to_string(want_t f) + { + switch (f) + { + case want_t::deinstall: return "deinstall"; + case want_t::hold: return "hold"; + case want_t::install: return "install"; + case want_t::purge: return "purge"; + case want_t::unknown: return "unknown"; + default: return "error"; + } + } +} |
