aboutsummaryrefslogtreecommitdiff
path: root/bpkg/pkg-fetch.cxx
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2018-05-21 21:10:09 +0300
committerKaren Arutyunov <karen@codesynthesis.com>2018-05-24 17:39:13 +0300
commit3a6c4ab1b6fc79a6a543088553cdd6bc8cb0a1dd (patch)
tree1ca0c3b9ef763276ff45c20a62d2504833e5f67d /bpkg/pkg-fetch.cxx
parent1cab4fbd051ee5a71f073446ad5ad1b3d79f1031 (diff)
Adapt to inventing package_name type
Diffstat (limited to 'bpkg/pkg-fetch.cxx')
-rw-r--r--bpkg/pkg-fetch.cxx28
1 files changed, 22 insertions, 6 deletions
diff --git a/bpkg/pkg-fetch.cxx b/bpkg/pkg-fetch.cxx
index e157bd9..0ce6d9e 100644
--- a/bpkg/pkg-fetch.cxx
+++ b/bpkg/pkg-fetch.cxx
@@ -22,10 +22,12 @@ using namespace butl;
namespace bpkg
{
+ // Can return a new selected package object, replacing the existing one.
+ //
static shared_ptr<selected_package>
pkg_fetch (dir_path c,
transaction& t,
- string n,
+ package_name n,
version v,
path a,
repository_location rl,
@@ -56,6 +58,20 @@ namespace bpkg
//
pkg_purge_fs (c, t, p, simulate);
+ // Note that if the package name spelling changed then we need to update
+ // it, to make sure that the subsequent commands don't fail and the
+ // diagnostics is not confusing. However, we cannot update the object
+ // id, so have to erase it and persist afterwards.
+ //
+ if (p->name.string () != n.string ())
+ {
+ db.erase (p);
+ p = nullptr;
+ }
+ }
+
+ if (p != nullptr)
+ {
p->version = move (v);
p->state = package_state::fetched;
p->repository_fragment = move (rl);
@@ -100,7 +116,7 @@ namespace bpkg
static void
pkg_fetch_check (const dir_path& c,
transaction& t,
- const string& n,
+ const package_name& n,
bool replace)
{
tracer trace ("pkg_fetch_check");
@@ -170,7 +186,7 @@ namespace bpkg
pkg_fetch (const common_options& co,
const dir_path& c,
transaction& t,
- string n,
+ package_name n,
version v,
bool replace,
bool simulate)
@@ -299,9 +315,9 @@ namespace bpkg
fail << "package name/version argument expected" <<
info << "run 'bpkg help pkg-fetch' for more information";
- const char* arg (args.next ());
- string n (parse_package_name (arg));
- version v (parse_package_version (arg));
+ const char* arg (args.next ());
+ package_name n (parse_package_name (arg));
+ version v (parse_package_version (arg));
if (v.empty ())
fail << "package version expected" <<