From 098460199c35218979e207a1709111e477ab9567 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Thu, 1 Oct 2015 09:13:37 +0200 Subject: build command genesis, some re-factoring --- bpkg/manifest-utility.cxx | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) (limited to 'bpkg/manifest-utility.cxx') diff --git a/bpkg/manifest-utility.cxx b/bpkg/manifest-utility.cxx index 76c1957..e44936f 100644 --- a/bpkg/manifest-utility.cxx +++ b/bpkg/manifest-utility.cxx @@ -12,6 +12,45 @@ using namespace std; namespace bpkg { + string + parse_package_name (const char* s) + { + using traits = string::traits_type; + + size_t n (traits::length (s)); + + if (const char* p = traits::find (s, n, '/')) + n = static_cast (p - s); + + if (n == 0) + fail << "empty package name in '" << s << "'"; + + return string (s, n); + } + + version + parse_package_version (const char* s) + { + using traits = string::traits_type; + + if (const char* p = traits::find (s, traits::length (s), '/')) + { + if (*++p == '\0') + fail << "empty package version in '" << s << "'"; + + try + { + return version (p); + } + catch (const invalid_argument& e) + { + fail << "invalid package version '" << p << "': " << e.what (); + } + } + + return version (); + } + version parse_version (const char* s) try -- cgit v1.1