aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2019-06-06 23:37:23 +0300
committerKaren Arutyunov <karen@codesynthesis.com>2019-06-07 13:59:01 +0300
commitefece35aa05ef7f89e3deb0c0017687ddd960af0 (patch)
treee5c0412cf3ed9b9eeaf014c1bd0e8234bb6076b6
parentf03160395525ac7e56be5de25544de6032910819 (diff)
Fix uncaught invalid_argument thrown by pkg-build for package like 'foo/1.0.0-'
-rw-r--r--bpkg/manifest-utility.cxx13
-rw-r--r--bpkg/pkg-build.cxx2
-rw-r--r--tests/pkg-build.testscript25
-rw-r--r--tests/pkg-fetch.testscript2
4 files changed, 38 insertions, 4 deletions
diff --git a/bpkg/manifest-utility.cxx b/bpkg/manifest-utility.cxx
index 8ff2090..74daf6b 100644
--- a/bpkg/manifest-utility.cxx
+++ b/bpkg/manifest-utility.cxx
@@ -82,11 +82,20 @@ namespace bpkg
try
{
- return version (p);
+ version r (p);
+
+ if (r.release && r.release->empty ())
+ throw invalid_argument ("earliest version");
+
+ if (r.compare (wildcard_version, true /* ignore_revision */) == 0)
+ throw invalid_argument ("stub version");
+
+ return r;
}
catch (const invalid_argument& e)
{
- fail << "invalid package version '" << p << "': " << e;
+ fail << "invalid package version '" << p << "' in '" << s << "': "
+ << e;
}
}
diff --git a/bpkg/pkg-build.cxx b/bpkg/pkg-build.cxx
index 590dbe9..0844ae9 100644
--- a/bpkg/pkg-build.cxx
+++ b/bpkg/pkg-build.cxx
@@ -1777,7 +1777,7 @@ namespace bpkg
return dependency_constraint ("~" + vs);
}
// Note that the only possible reason for invalid_argument exception to
- // be thrown is that minor version reached the 999 limit (see
+ // be thrown is that minor version reached the 99999 limit (see
// standard-version.cxx for details).
//
catch (const invalid_argument&)
diff --git a/tests/pkg-build.testscript b/tests/pkg-build.testscript
index 7ef78ff..17fa313 100644
--- a/tests/pkg-build.testscript
+++ b/tests/pkg-build.testscript
@@ -172,6 +172,31 @@ test.options += --no-progress
info: run 'bpkg help pkg-build' for more information
EOE
+ : version
+ :
+ {
+ : empty
+ :
+ $clone_root_cfg;
+ $* libfoo/ 2>>EOE != 0
+ error: empty package version in 'libfoo/'
+ EOE
+
+ : earliest
+ :
+ $clone_root_cfg;
+ $* libfoo/1.0.0- 2>>EOE != 0
+ error: invalid package version '1.0.0-' in 'libfoo/1.0.0-': earliest version
+ EOE
+
+ : stub
+ :
+ $clone_root_cfg;
+ $* libfoo/0+1 2>>EOE != 0
+ error: invalid package version '0+1' in 'libfoo/0+1': stub version
+ EOE
+ }
+
: unknown-package
:
$clone_root_cfg;
diff --git a/tests/pkg-fetch.testscript b/tests/pkg-fetch.testscript
index fe14662..22fcc0c 100644
--- a/tests/pkg-fetch.testscript
+++ b/tests/pkg-fetch.testscript
@@ -79,7 +79,7 @@ $* libfoo 2>>EOE != 0
:
$clone_cfg;
$* libfoo/1/2/3 2>>EOE != 0
- error: invalid package version '1/2/3': alpha-numeric characters expected in a component
+ error: invalid package version '1/2/3' in 'libfoo/1/2/3': alpha-numeric characters expected in a component
EOE
: no-repositories