From c9be77204a96b7ccf3c0e4c3d25e7c268810c3ad Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Sun, 10 Jan 2016 03:08:11 +0200 Subject: Support new revision of repository name specification, /pkg/ stripping --- bpkg/manifest.cxx | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'bpkg') diff --git a/bpkg/manifest.cxx b/bpkg/manifest.cxx index ac746e6..7f847a3 100644 --- a/bpkg/manifest.cxx +++ b/bpkg/manifest.cxx @@ -1407,7 +1407,10 @@ namespace bpkg // Finish calculating the canonical name, unless we are relative. // if (relative ()) + { + assert (canonical_name_.empty ()); return; + } // Search for the version path component preceeding canonical name // component. @@ -1432,9 +1435,21 @@ namespace bpkg if (stoul (*i) != 1) throw invalid_argument ("unsupported repository version"); + dir_path p (rb, i); // Canonical name path part. + + // Prefix ends with "pkg" component. + // + bool pc (++i != re && (*i == "pkg" || *i == "bpkg")); + + if (pc) + ++i; // Skip "pkg" component from prefix. + + if (!host_.empty () || !pc) + p = dir_path (i, re) / p; // Concatenate prefix and path. + // Note: allow empty paths (e.g., http://stable.cppget.org/1/). // - string d (dir_path (rb, i).posix_string ()); + string d (p.posix_string ()); if (!canonical_name_.empty () && !d.empty ()) // If we have host and dir. canonical_name_ += '/'; -- cgit v1.1