aboutsummaryrefslogtreecommitdiff
path: root/bdep/fetch.cxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2018-03-14 14:34:12 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2018-03-14 14:34:12 +0200
commit7acf8ce6111e3740decd39b92c3383fcbdd00e21 (patch)
tree2c9c6d75bbac9b3b8a4dc9e7b46df01ba0ca3bf2 /bdep/fetch.cxx
parentc8f2a2c0776aee57af6af10d4a0128befbc1fdeb (diff)
Implement fetch command
Diffstat (limited to 'bdep/fetch.cxx')
-rw-r--r--bdep/fetch.cxx59
1 files changed, 59 insertions, 0 deletions
diff --git a/bdep/fetch.cxx b/bdep/fetch.cxx
new file mode 100644
index 0000000..6231d8b
--- /dev/null
+++ b/bdep/fetch.cxx
@@ -0,0 +1,59 @@
+// file : bdep/fetch.cxx -*- C++ -*-
+// copyright : Copyright (c) 2014-2017 Code Synthesis Ltd
+// license : MIT; see accompanying LICENSE file
+
+#include <bdep/fetch.hxx>
+
+#include <bdep/database.hxx>
+#include <bdep/diagnostics.hxx>
+
+using namespace std;
+
+namespace bdep
+{
+ int
+ cmd_fetch (const cmd_fetch_options& o, cli::scanner&)
+ {
+ tracer trace ("fetch");
+
+ dir_path prj (
+ find_project_packages (o, true /* ignore_packages */).project);
+
+ database db (open (prj, trace));
+
+ transaction t (db.begin ());
+ configurations cfgs (find_configurations (prj, t, o));
+ t.commit ();
+
+ bool first (true);
+ for (const shared_ptr<configuration>& c: cfgs)
+ {
+ if (c->packages.empty ())
+ {
+ info << "no packages initialized in configuration " << *c;
+ continue;
+ }
+
+ // If we are fetching in multiple configurations, separate them with a
+ // blank line and print the configuration name/directory.
+ //
+ if (verb && cfgs.size () > 1)
+ {
+ text << (first ? "" : "\n")
+ << "fetching in configuration " << *c;
+
+ first = false;
+ }
+
+ // Let's use the repository name rather than the location as a sanity
+ // check (the repository must have been added as part of init).
+ //
+ run_bpkg (o,
+ "fetch",
+ "-d", c->path,
+ (o.full () ? nullptr : ("dir:" + prj.string ()).c_str ()));
+ }
+
+ return 0;
+ }
+}