aboutsummaryrefslogtreecommitdiff
path: root/libbpkg
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2018-04-19 22:43:08 +0300
committerKaren Arutyunov <karen@codesynthesis.com>2018-04-19 22:43:08 +0300
commitbba520774fd6185f62a6bf52c61b98104a826f5f (patch)
tree4be19b347486932c7858349bb7a7c476e88dd5a4 /libbpkg
parent7cf0854121525747b438b7f94bf2d050f61fb615 (diff)
Add support for comma-separated list of git reference filter
Diffstat (limited to 'libbpkg')
-rw-r--r--libbpkg/manifest.cxx15
-rw-r--r--libbpkg/manifest.hxx10
2 files changed, 24 insertions, 1 deletions
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 [<name>][@<commit>] 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<git_ref_filter>;
+
+ // 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,