diff options
-rw-r--r-- | bpkg/bpkg-options.cli | 7 | ||||
-rw-r--r-- | bpkg/bpkg.cxx | 2 | ||||
-rw-r--r-- | bpkg/buildfile | 2 | ||||
-rw-r--r-- | bpkg/cfg-create.cxx | 2 | ||||
-rw-r--r-- | bpkg/pkg-configure.cxx | 2 | ||||
-rw-r--r-- | bpkg/pkg-disfigure.cxx | 2 | ||||
-rw-r--r-- | bpkg/pkg-update | 17 | ||||
-rw-r--r-- | bpkg/pkg-update-options.cli | 33 | ||||
-rw-r--r-- | bpkg/pkg-update.cxx | 64 | ||||
-rwxr-xr-x | bpkg/test.sh | 29 | ||||
-rw-r--r-- | bpkg/utility | 7 | ||||
-rw-r--r-- | bpkg/utility.cxx | 6 |
12 files changed, 165 insertions, 8 deletions
diff --git a/bpkg/bpkg-options.cli b/bpkg/bpkg-options.cli index e694c3b..9e2e6b2 100644 --- a/bpkg/bpkg-options.cli +++ b/bpkg/bpkg-options.cli @@ -70,6 +70,13 @@ namespace bpkg "" }; + bool pkg-update + { + "<pkg>", + "Update package.", + "" + }; + bool cfg-create { "[<conf>]", diff --git a/bpkg/bpkg.cxx b/bpkg/bpkg.cxx index a6862c4..0df2613 100644 --- a/bpkg/bpkg.cxx +++ b/bpkg/bpkg.cxx @@ -22,6 +22,7 @@ #include <bpkg/pkg-purge> #include <bpkg/pkg-configure> #include <bpkg/pkg-disfigure> +#include <bpkg/pkg-update> #include <bpkg/cfg-create> #include <bpkg/rep-create> @@ -179,6 +180,7 @@ try PKG_COMMAND (purge); PKG_COMMAND (configure); PKG_COMMAND (disfigure); + PKG_COMMAND (update); // cfg-* commands // diff --git a/bpkg/buildfile b/bpkg/buildfile index b24fedb..e8f156e 100644 --- a/bpkg/buildfile +++ b/bpkg/buildfile @@ -20,6 +20,7 @@ exe{bpkg}: cxx{package package-odb database diagnostics utility} \ cxx{pkg-purge} cli.cxx{pkg-purge-options} \ cxx{pkg-configure} cli.cxx{pkg-configure-options} \ cxx{pkg-disfigure} cli.cxx{pkg-disfigure-options} \ + cxx{pkg-update} cli.cxx{pkg-update-options} \ cxx{cfg-create} cli.cxx{cfg-create-options} \ cxx{rep-create} cli.cxx{rep-create-options} \ $libs @@ -47,5 +48,6 @@ cli.cxx{pkg-unpack-options}: cli{pkg-unpack-options} cli.cxx{pkg-purge-options}: cli{pkg-purge-options} cli.cxx{pkg-configure-options}: cli{pkg-configure-options} cli.cxx{pkg-disfigure-options}: cli{pkg-disfigure-options} +cli.cxx{pkg-update-options}: cli{pkg-update-options} cli.cxx{cfg-create-options}: cli{cfg-create-options} cli.cxx{rep-create-options}: cli{rep-create-options} diff --git a/bpkg/cfg-create.cxx b/bpkg/cfg-create.cxx index d780657..44728b8 100644 --- a/bpkg/cfg-create.cxx +++ b/bpkg/cfg-create.cxx @@ -112,7 +112,7 @@ namespace bpkg // Configure. // - run_b ("configure(" + c.string () + "/)", vars); + run_b ("configure(" + c.string () + "/)", true, vars); // Run quiet. // Create the database. // diff --git a/bpkg/pkg-configure.cxx b/bpkg/pkg-configure.cxx index 65355ba..169772c 100644 --- a/bpkg/pkg-configure.cxx +++ b/bpkg/pkg-configure.cxx @@ -90,7 +90,7 @@ namespace bpkg // try { - run_b (bspec); + run_b (bspec, true, vars); // Run quiet. } catch (const failed&) { diff --git a/bpkg/pkg-disfigure.cxx b/bpkg/pkg-disfigure.cxx index fca5dd7..e064cba 100644 --- a/bpkg/pkg-disfigure.cxx +++ b/bpkg/pkg-disfigure.cxx @@ -69,7 +69,7 @@ namespace bpkg try { if (exists (out_root)) - run_b (bspec); + run_b (bspec, true); // Run quiet. // Make sure the out directory is gone unless it is the same as src. // diff --git a/bpkg/pkg-update b/bpkg/pkg-update new file mode 100644 index 0000000..0ff4b0d --- /dev/null +++ b/bpkg/pkg-update @@ -0,0 +1,17 @@ +// file : bpkg/pkg-update -*- C++ -*- +// copyright : Copyright (c) 2014-2015 Code Synthesis Ltd +// license : MIT; see accompanying LICENSE file + +#ifndef BPKG_PKG_UPDATE +#define BPKG_PKG_UPDATE + +#include <bpkg/types> +#include <bpkg/pkg-update-options> + +namespace bpkg +{ + void + pkg_update (const pkg_update_options&, cli::scanner& args); +} + +#endif // BPKG_PKG_UPDATE diff --git a/bpkg/pkg-update-options.cli b/bpkg/pkg-update-options.cli new file mode 100644 index 0000000..e9fbbb2 --- /dev/null +++ b/bpkg/pkg-update-options.cli @@ -0,0 +1,33 @@ +// file : bpkg/pkg-update-options.cli +// copyright : Copyright (c) 2014-2015 Code Synthesis Ltd +// license : MIT; see accompanying LICENSE file + +include <bpkg/common-options.cli>; + +/* +"\section=1" +"\name=bpkg-pkg-update" + +"\h{SYNOPSIS} + +bpkg pkg-update <pkg>" + +"\h{DESCRIPTION} + +The \cb{pkg-update} command updates the previously configured +(\cb{pkg-configure}) package. Underneath, this command doesn't +do much more than run (\cb{b update})." +*/ + +namespace bpkg +{ + class pkg_update_options: common_options + { + dir_path --directory|-d (".") + { + "<dir>", + "Assume configuration is in <dir> rather than in the current working + directory." + }; + }; +} diff --git a/bpkg/pkg-update.cxx b/bpkg/pkg-update.cxx new file mode 100644 index 0000000..015a628 --- /dev/null +++ b/bpkg/pkg-update.cxx @@ -0,0 +1,64 @@ +// file : bpkg/pkg-update.cxx -*- C++ -*- +// copyright : Copyright (c) 2014-2015 Code Synthesis Ltd +// license : MIT; see accompanying LICENSE file + +#include <bpkg/pkg-update> + +#include <bpkg/types> +#include <bpkg/package> +#include <bpkg/package-odb> +#include <bpkg/utility> +#include <bpkg/database> +#include <bpkg/diagnostics> + +using namespace std; +using namespace butl; + +namespace bpkg +{ + void + pkg_update (const pkg_update_options& o, cli::scanner& args) + { + tracer trace ("pkg_update"); + + const dir_path& c (o.directory ()); + level4 ([&]{trace << "configuration: " << c;}); + + if (!args.more ()) + fail << "package name argument expected" << + info << "run 'bpkg help pkg-update' for more information"; + + string n (args.next ()); + + database db (open (c, trace)); + + transaction t (db.begin ()); + shared_ptr<package> p (db.find<package> (n)); + t.commit (); + + if (p == nullptr) + fail << "package " << n << " does not exist in configuration " << c; + + if (p->state != state::configured) + fail << "package " << n << " is " << p->state << + info << "expected it to be configured"; + + level4 ([&]{trace << p->name << " " << p->version;}); + + assert (p->out_root); // Should be present since configured. + dir_path out_root (c / *p->out_root); // Always relative. + level4 ([&]{trace << "out_root: " << out_root;}); + + // Form the buildspec. + // + string bspec ("update(" + out_root.string () + "/)"); + level4 ([&]{trace << "buildspec: " << bspec;}); + + // Update. + // + run_b (bspec); + + if (verb) + text << "updated " << p->name << " " << p->version; + } +} diff --git a/bpkg/test.sh b/bpkg/test.sh index 66ff1ad..b7282b6 100755 --- a/bpkg/test.sh +++ b/bpkg/test.sh @@ -262,3 +262,32 @@ chmod 755 $out $out/build rm -r $out test pkg-purge -f $pkg stat unknown + +## +## pkg-update +## + +fail pkg-update # package name expected +fail pkg-update $pkg # no such package +test pkg-fetch -e $pkga +fail pkg-update $pkg # wrong package state +test pkg-purge $pkg + +# src == out +# +test pkg-fetch -e $pkga +test pkg-unpack $pkg +test pkg-configure $pkg +test pkg-update $pkg +test pkg-update $pkg +test pkg-disfigure $pkg +test pkg-purge $pkg + +# src != out +# +test pkg-unpack -e $pkgd +test pkg-configure $pkg +test pkg-update $pkg +test pkg-update $pkg +test pkg-disfigure $pkg +test pkg-purge $pkg diff --git a/bpkg/utility b/bpkg/utility index ffe5b94..32ae252 100644 --- a/bpkg/utility +++ b/bpkg/utility @@ -48,10 +48,13 @@ namespace bpkg inline void run (const cstrings& args) {run (args.data ());} - // Run build2, mapping verbosity levels. + // Run build2, mapping verbosity levels. If quiet is true, then + // run build2 quiet if our verbosity level is 1. // void - run_b (const string& buildspec, const strings& vars = strings ()); + run_b (const string& buildspec, + bool quiet = false, + const strings& vars = strings ()); // Call a function if there is an exception. // diff --git a/bpkg/utility.cxx b/bpkg/utility.cxx index b122545..db47476 100644 --- a/bpkg/utility.cxx +++ b/bpkg/utility.cxx @@ -151,7 +151,7 @@ namespace bpkg } void - run_b (const string& bspec, const strings& vars) + run_b (const string& bspec, bool quiet, const strings& vars) { cstrings args {"b"}; @@ -160,11 +160,11 @@ namespace bpkg // as us. // string vl; - if (verb <= 1) + if (verb <= (quiet ? 1 : 0)) args.push_back ("-q"); else if (verb == 2) args.push_back ("-v"); - else + else if (verb > 2) { vl = to_string (verb); args.push_back ("--verbose"); |