aboutsummaryrefslogtreecommitdiff
path: root/bpkg/system-package-manager-debian.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'bpkg/system-package-manager-debian.cxx')
-rw-r--r--bpkg/system-package-manager-debian.cxx29
1 files changed, 26 insertions, 3 deletions
diff --git a/bpkg/system-package-manager-debian.cxx b/bpkg/system-package-manager-debian.cxx
index b06487f..53d3a07 100644
--- a/bpkg/system-package-manager-debian.cxx
+++ b/bpkg/system-package-manager-debian.cxx
@@ -1849,13 +1849,36 @@ namespace bpkg
if (!no_build_metadata)
{
sv += '~';
- if (build_metadata)
- sv += *build_metadata;
- else
+
+ if (!build_metadata)
{
sv += os_release.name_id;
sv += os_release.version_id; // Could be empty.
}
+ else
+ {
+ const string& md (*build_metadata);
+
+ bool f (md.front () == '+');
+ bool b (md.back () == '+');
+
+ if (f && b) // Note: covers just `+`.
+ fail << "invalid build metadata '" << md << "'";
+
+ if (f || b)
+ {
+ if (b)
+ sv.append (md, 0, md.size () - 1);
+
+ sv += os_release.name_id;
+ sv += os_release.version_id;
+
+ if (f)
+ sv.append (md, 1, md.size () - 1);
+ }
+ else
+ sv += md;
+ }
}
return r;