aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bpkg/manifest3
-rw-r--r--bpkg/manifest.cxx32
-rw-r--r--tests/manifest/repositories32
3 files changed, 61 insertions, 6 deletions
diff --git a/bpkg/manifest b/bpkg/manifest
index a6eeb05..d55e714 100644
--- a/bpkg/manifest
+++ b/bpkg/manifest
@@ -541,6 +541,7 @@ namespace bpkg
butl::optional<email_type> email;
butl::optional<std::string> summary;
butl::optional<std::string> description;
+ butl::optional<std::string> certificate;
// Return the effective role of the repository. If the role is not
// explicitly specified (see the role member above), then calculate
@@ -548,7 +549,7 @@ namespace bpkg
// empty, then the effective role is base. Otherwise -- prerequisite.
// If the role is specified, then verify that it is consistent with
// the location value (that is, base if the location is empty and
- // prerequisite or complete if not) and return that. Otherwise,
+ // prerequisite or complement if not) and return that. Otherwise,
// throw std::logic_error.
//
repository_role
diff --git a/bpkg/manifest.cxx b/bpkg/manifest.cxx
index 3f937a8..b94c2c6 100644
--- a/bpkg/manifest.cxx
+++ b/bpkg/manifest.cxx
@@ -1704,8 +1704,9 @@ namespace bpkg
// Canonical name <prefix>/<path> part.
//
string cp (
- strip_path (path_, remote () ? strip_mode::component : strip_mode::path).
- posix_string ());
+ strip_path (
+ path_, remote () ? strip_mode::component : strip_mode::path).
+ posix_string ());
// Note: allow empty paths (e.g., http://stable.cppget.org/1/).
//
@@ -1844,6 +1845,16 @@ namespace bpkg
description = move (v);
}
+ else if (n == "certificate")
+ {
+ if (certificate)
+ bad_name ("certificate redefinition");
+
+ if (v.empty ())
+ bad_value ("empty certificate");
+
+ certificate = move (v);
+ }
else if (!iu)
bad_name ("unknown name '" + n + "' in repository manifest");
}
@@ -1869,6 +1880,9 @@ namespace bpkg
if (description)
bad_value ("description not allowed");
+
+ if (certificate)
+ bad_value ("certificate not allowed");
}
}
@@ -1927,6 +1941,14 @@ namespace bpkg
s.next ("description", *description);
}
+ if (certificate)
+ {
+ if (!b)
+ bad_value ("certificate not allowed");
+
+ s.next ("certificate", *certificate);
+ }
+
s.next ("", ""); // End of manifest.
}
@@ -1984,9 +2006,9 @@ namespace bpkg
// Web interface URL path part.
//
- // It is important to call strip_path() before appending the relative path.
- // Otherwise the effective URL for the path ./../../.. and the repository
- // location http://a.com/foo/pkg/1/math will wrongly be
+ // It is important to call strip_path() before appending the relative
+ // path. Otherwise the effective URL for the path ./../../.. and the
+ // repository location http://a.com/foo/pkg/1/math will wrongly be
// http://a.com/foo/pkg instead of http://a.com.
//
dir_path ipath (
diff --git a/tests/manifest/repositories b/tests/manifest/repositories
index bae9c86..06eb8a0 100644
--- a/tests/manifest/repositories
+++ b/tests/manifest/repositories
@@ -10,3 +10,35 @@ email: repoman@cppget.org; General mailing list.
summary: General C++ package repository
description: This is the awesome C++ package repository full of exciting\
stuff.
+certificate: \
+-----BEGIN CERTIFICATE-----
+MIIFLzCCAxegAwIBAgIJAJ71rMp8mDy1MA0GCSqGSIb3DQEBCwUAMDMxFzAVBgNV
+BAoMDkNvZGUgU3ludGhlc2lzMRgwFgYDVQQDDA9uYW1lOmNwcGdldC5vcmcwHhcN
+MTYwNDA4MTc1NTUwWhcNMTcwNDA4MTc1NTUwWjAzMRcwFQYDVQQKDA5Db2RlIFN5
+bnRoZXNpczEYMBYGA1UEAwwPbmFtZTpjcHBnZXQub3JnMIICIjANBgkqhkiG9w0B
+AQEFAAOCAg8AMIICCgKCAgEAwj7lwxkr19ygfNIzQsiKkmyyRG0c5AwMrwvldEk7
+2UIwz5kNb04zveUzQcfNFhau60+xC980Y4TKA4/ScfinyaDfp1I3pmiv4OSDUoBw
+9e8a+4Jyo5fuiAXoAYaQyAdwvH1mIbYq1ObRfKW2MTrUXp/HRJAWHHBnv3VmCYBZ
+dllY1hasA+SBDMBv6iTXkKUIfEdNDk8cjUR3FjxaefIdip9pHR3G0y4iWctS1drq
+AKLE1J0KIJyPsJCvoZnzIeePaCNL/UtRup9mYi2vxHHFD4Ml5Bbp+gE6vq5XhcQz
+LeCcGYKB3UjVWuszcpFIoHACw9ja2JUumbTiclUDgLBk8WXJvLjOCNLp9i/MKQws
+p5CDfrNe2P6u63ZmtW2v0Qpj/6b6JQmqJaMgHQdDEBUFO3bjwm7yyXyvEjj/EAEJ
+pGziWZjan5NKGgKCX1JChQJloMHhzr42YMvceWTMJjAr07Es9vCsCS2KPvAKY7Mv
+yewAyK9ucFRDObZVuaFjU+WUTXB1munwO3Jso56EMxeFvu+W1B+m49XS3k/TlBvF
+HGnkiSaMwLEJvgFVgQPpG2gD39WDFqX28pWdLL4hM+hXUfdeH0OdXfq66CLu7P8d
+cgkZdHRs5UauxLzm1Qo06aLsm2HXrfDnmsd5ENi7RkiFMx1aLh3/cjZD0uHndQUC
+LEcCAwEAAaNGMEQwDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsGAQUF
+BwMDMBoGA1UdEQQTMBGBD2luZm9AY3BwZ2V0Lm9yZzANBgkqhkiG9w0BAQsFAAOC
+AgEAHLfv2w82bBMgDgsRX8GU/3eK6CnyfRu4Auto1XjyHCrD6qcIdmebC0hihpSg
+5xSlfVwjPRWBmg3z5/K8ln5jM6KKiWHd47OCfx+DW7wbesq2+6lS1btXpRR2pv7j
+zG+41Cncu/xVNs9F4CQluVn5xyWFVDUxQfkQqAE46EbkjAmq42y+1ZQnq2Zm47Wr
+iMRXQtg1yx7Fs2EpVU+sbW4ImuXgv0YbyYbI1lPhvmx8rIL6lybN3evEfIj7crh7
+5abWPDZzA+1aNL5tiaSNrn3nS/BfJyEYhGMyy0bsekPZiaqGB1q/mgv2rmR/2SRL
+Tx+T7sthy/IHTOUbDTY0lUhjc6thQMncgGTaD4TC3QaXhdLWzO9XTh0K7U8BOMwh
+wppr1G5aTXY0PUB0+Hs+IQZ4mVfBvKO0Wn6GgoDAs/mW9qvbWP3ZnpdvhB52a49P
+g07JQ+R0QgBNQY7t0lT0mOpAPx79Dwc5R8jQCkx4gTr1bWtgyCvza+gpTgUQDOH5
+nawOIIDOnRv4heFdvgfEQs2oKa3X4bM+BsgOx7OTvnWCzJy0IXo0uBbcTrMv9Z62
++KVwnghQdpURRnUpomt03cTwjqVJVrq287owGv8qqnuGcTTi1SgzNNYREFoljY58
+CCj4yYvTUzXjcAUXaNC5YNw3JEQp8vmciuJwhyUkbifLrHU=
+-----END CERTIFICATE-----
+\