From bba520774fd6185f62a6bf52c61b98104a826f5f Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Thu, 19 Apr 2018 22:43:08 +0300 Subject: Add support for comma-separated list of git reference filter --- libbpkg/manifest.cxx | 15 ++++++++++++++- libbpkg/manifest.hxx | 10 ++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) (limited to 'libbpkg') diff --git a/libbpkg/manifest.cxx b/libbpkg/manifest.cxx index e1dfb52..2374b77 100644 --- a/libbpkg/manifest.cxx +++ b/libbpkg/manifest.cxx @@ -2093,7 +2093,7 @@ namespace bpkg // Verify the URL fragment. // if (url_.fragment) - git_ref_filter r (*url_.fragment); + parse_git_ref_filters (*url_.fragment); break; } @@ -2327,6 +2327,19 @@ namespace bpkg "git repository commit id must be 40 characters long"); } + git_ref_filters + parse_git_ref_filters (const string& s) + { + git_ref_filters r; + for (size_t p (0); p != string::npos; ) + { + size_t e (s.find (',', p)); + r.emplace_back (string (s, p, e != string::npos ? e - p : e)); + p = e != string::npos ? e + 1 : e; + } + return r; + } + // repository_manifest // repository_role repository_manifest:: diff --git a/libbpkg/manifest.hxx b/libbpkg/manifest.hxx index fdec69e..f3223b6 100644 --- a/libbpkg/manifest.hxx +++ b/libbpkg/manifest.hxx @@ -849,6 +849,8 @@ namespace bpkg public: // Parse the [][@] repository URL fragment representation. + // Throw std::invalid_argument if the filter representation format is + // invalid. // explicit git_ref_filter (const std::string&); @@ -859,6 +861,14 @@ namespace bpkg commit (std::move (c)) {} }; + using git_ref_filters = std::vector; + + // Parse a comma-separated list of git reference filters. Throw + // std::invalid_argument if the filter list format is invalid. + // + LIBBPKG_EXPORT git_ref_filters + parse_git_ref_filters (const std::string&); + enum class repository_role { base, -- cgit v1.1