From ec0d913bf1b9a3c070f4448087f43fe369603691 Mon Sep 17 00:00:00 2001 From: Roger Leigh Date: Sat, 4 May 2013 21:55:53 +0100 Subject: chroot::facet::factory: Add auto_install property --- lib/sbuild/chroot/facet/block-device.cc | 1 + lib/sbuild/chroot/facet/btrfs-snapshot.cc | 1 + lib/sbuild/chroot/facet/custom.cc | 1 + lib/sbuild/chroot/facet/directory.cc | 1 + lib/sbuild/chroot/facet/factory.cc | 16 +++++++++++++++- lib/sbuild/chroot/facet/factory.h | 8 ++++++++ lib/sbuild/chroot/facet/file.cc | 1 + lib/sbuild/chroot/facet/fsunion.cc | 1 + lib/sbuild/chroot/facet/loopback.cc | 1 + lib/sbuild/chroot/facet/lvm-snapshot.cc | 1 + lib/sbuild/chroot/facet/mountable.cc | 1 + lib/sbuild/chroot/facet/personality.cc | 1 + lib/sbuild/chroot/facet/plain.cc | 1 + lib/sbuild/chroot/facet/session-clonable.cc | 1 + lib/sbuild/chroot/facet/session.cc | 1 + lib/sbuild/chroot/facet/source-clonable.cc | 1 + lib/sbuild/chroot/facet/source.cc | 1 + lib/sbuild/chroot/facet/unshare.cc | 1 + lib/sbuild/chroot/facet/userdata.cc | 1 + 19 files changed, 40 insertions(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/sbuild/chroot/facet/block-device.cc b/lib/sbuild/chroot/facet/block-device.cc index 65fae0b9..735bd78b 100644 --- a/lib/sbuild/chroot/facet/block-device.cc +++ b/lib/sbuild/chroot/facet/block-device.cc @@ -53,6 +53,7 @@ namespace sbuild { "block-device", N_("Support for ‘block-device’ chroots"), + false, []() -> facet::ptr { return block_device::create(); } }; diff --git a/lib/sbuild/chroot/facet/btrfs-snapshot.cc b/lib/sbuild/chroot/facet/btrfs-snapshot.cc index 0ff674b3..494798e4 100644 --- a/lib/sbuild/chroot/facet/btrfs-snapshot.cc +++ b/lib/sbuild/chroot/facet/btrfs-snapshot.cc @@ -50,6 +50,7 @@ namespace sbuild { "btrfs-snapshot", N_("Support for ‘btrfs-snapshot’ chroots"), + false, []() -> facet::ptr { return btrfs_snapshot::create(); } }; diff --git a/lib/sbuild/chroot/facet/custom.cc b/lib/sbuild/chroot/facet/custom.cc index 49db9d5e..523df3dd 100644 --- a/lib/sbuild/chroot/facet/custom.cc +++ b/lib/sbuild/chroot/facet/custom.cc @@ -49,6 +49,7 @@ namespace sbuild { "custom", N_("Support for ‘custom’ chroots"), + false, []() -> facet::ptr { return custom::create(); } }; diff --git a/lib/sbuild/chroot/facet/directory.cc b/lib/sbuild/chroot/facet/directory.cc index deef1f97..2f62354b 100644 --- a/lib/sbuild/chroot/facet/directory.cc +++ b/lib/sbuild/chroot/facet/directory.cc @@ -48,6 +48,7 @@ namespace sbuild { "directory", N_("Support for ‘directory’ chroots"), + false, []() -> facet::ptr { return directory::create(); } }; diff --git a/lib/sbuild/chroot/facet/factory.cc b/lib/sbuild/chroot/facet/factory.cc index 8a842437..ce1a4c2f 100644 --- a/lib/sbuild/chroot/facet/factory.cc +++ b/lib/sbuild/chroot/facet/factory.cc @@ -18,7 +18,7 @@ #include -#include +#include #include #include @@ -68,6 +68,20 @@ namespace sbuild return ret; } + std::vector + factory::create_auto () + { + std::vector ret; + + for (const auto& facet : registered_facets()) + { + if (facet.second->auto_install) + ret.push_back(facet.second->create()); + } + + return ret; + } + factory::map_type& factory::registered_facets () { diff --git a/lib/sbuild/chroot/facet/factory.h b/lib/sbuild/chroot/facet/factory.h index 15e6ad4d..d487c6bf 100644 --- a/lib/sbuild/chroot/facet/factory.h +++ b/lib/sbuild/chroot/facet/factory.h @@ -38,8 +38,13 @@ namespace sbuild public: struct facet_info { + /// Facet name. std::string name; + /// Facet description. std::string description; + /// Install in a chroot automatically on chroot creation. + bool auto_install; + /// Function to create an instance of this facet. facet::ptr (*create)(); }; @@ -53,6 +58,9 @@ namespace sbuild static facet::ptr create (const std::string& name); + static std::vector + create_auto (); + private: typedef std::map map_type; diff --git a/lib/sbuild/chroot/facet/file.cc b/lib/sbuild/chroot/facet/file.cc index d71e32b4..05704b0f 100644 --- a/lib/sbuild/chroot/facet/file.cc +++ b/lib/sbuild/chroot/facet/file.cc @@ -49,6 +49,7 @@ namespace sbuild { "file", N_("Support for ‘file’ chroots"), + false, []() -> facet::ptr { return file::create(); } }; diff --git a/lib/sbuild/chroot/facet/fsunion.cc b/lib/sbuild/chroot/facet/fsunion.cc index a749b148..bb154a5e 100644 --- a/lib/sbuild/chroot/facet/fsunion.cc +++ b/lib/sbuild/chroot/facet/fsunion.cc @@ -53,6 +53,7 @@ namespace sbuild { "union", N_("Support for filesystem unioning"), + false, []() -> facet::ptr { return fsunion::create(); } }; diff --git a/lib/sbuild/chroot/facet/loopback.cc b/lib/sbuild/chroot/facet/loopback.cc index a66d3f4c..d8cd6651 100644 --- a/lib/sbuild/chroot/facet/loopback.cc +++ b/lib/sbuild/chroot/facet/loopback.cc @@ -48,6 +48,7 @@ namespace sbuild { "loopback", N_("Support for ‘loopback’ chroots"), + false, []() -> facet::ptr { return loopback::create(); } }; diff --git a/lib/sbuild/chroot/facet/lvm-snapshot.cc b/lib/sbuild/chroot/facet/lvm-snapshot.cc index f4ebdfbf..4822ea47 100644 --- a/lib/sbuild/chroot/facet/lvm-snapshot.cc +++ b/lib/sbuild/chroot/facet/lvm-snapshot.cc @@ -49,6 +49,7 @@ namespace sbuild { "lvm-snapshot", N_("Support for ‘lvm-snapshot’ chroots"), + false, []() -> facet::ptr { return lvm_snapshot::create(); } }; diff --git a/lib/sbuild/chroot/facet/mountable.cc b/lib/sbuild/chroot/facet/mountable.cc index 88e50c72..5ef62a78 100644 --- a/lib/sbuild/chroot/facet/mountable.cc +++ b/lib/sbuild/chroot/facet/mountable.cc @@ -45,6 +45,7 @@ namespace sbuild { "mountable", N_("Support for filesystem mounting"), + false, []() -> facet::ptr { return mountable::create(); } }; diff --git a/lib/sbuild/chroot/facet/personality.cc b/lib/sbuild/chroot/facet/personality.cc index 00e35dbe..7ba38c75 100644 --- a/lib/sbuild/chroot/facet/personality.cc +++ b/lib/sbuild/chroot/facet/personality.cc @@ -41,6 +41,7 @@ namespace sbuild { "personality", N_("Linux kernel Application Binary Interface switching"), + true, []() -> facet::ptr { return personality::create(); } }; diff --git a/lib/sbuild/chroot/facet/plain.cc b/lib/sbuild/chroot/facet/plain.cc index 645c6e72..fe00df37 100644 --- a/lib/sbuild/chroot/facet/plain.cc +++ b/lib/sbuild/chroot/facet/plain.cc @@ -47,6 +47,7 @@ namespace sbuild { "plain", N_("Support for ‘plain’ chroots"), + false, []() -> facet::ptr { return plain::create(); } }; diff --git a/lib/sbuild/chroot/facet/session-clonable.cc b/lib/sbuild/chroot/facet/session-clonable.cc index 4118e024..cb6b97e1 100644 --- a/lib/sbuild/chroot/facet/session-clonable.cc +++ b/lib/sbuild/chroot/facet/session-clonable.cc @@ -49,6 +49,7 @@ namespace sbuild { "session-clonable", N_("Support for session chroot cloning"), + false, []() -> facet::ptr { return session_clonable::create(); } }; diff --git a/lib/sbuild/chroot/facet/session.cc b/lib/sbuild/chroot/facet/session.cc index 014795e2..0e13ff29 100644 --- a/lib/sbuild/chroot/facet/session.cc +++ b/lib/sbuild/chroot/facet/session.cc @@ -53,6 +53,7 @@ namespace sbuild { "session", N_("Support for session chroots"), + false, []() -> facet::ptr { return session::create(); } }; diff --git a/lib/sbuild/chroot/facet/source-clonable.cc b/lib/sbuild/chroot/facet/source-clonable.cc index de1a1386..ff70e9b5 100644 --- a/lib/sbuild/chroot/facet/source-clonable.cc +++ b/lib/sbuild/chroot/facet/source-clonable.cc @@ -47,6 +47,7 @@ namespace sbuild { "source-clonable", N_("Support for source chroot cloning"), + false, []() -> facet::ptr { return source_clonable::create(); } }; diff --git a/lib/sbuild/chroot/facet/source.cc b/lib/sbuild/chroot/facet/source.cc index ef595b79..638f3d0f 100644 --- a/lib/sbuild/chroot/facet/source.cc +++ b/lib/sbuild/chroot/facet/source.cc @@ -42,6 +42,7 @@ namespace sbuild { "source", N_("Support for source chroots"), + false, []() -> facet::ptr { return source::create(); } }; diff --git a/lib/sbuild/chroot/facet/unshare.cc b/lib/sbuild/chroot/facet/unshare.cc index 33a6e751..9d421a51 100644 --- a/lib/sbuild/chroot/facet/unshare.cc +++ b/lib/sbuild/chroot/facet/unshare.cc @@ -57,6 +57,7 @@ namespace sbuild { "unshare", N_("Linux dissassociation of shared execution context"), + true, []() -> facet::ptr { return unshare::create(); } }; diff --git a/lib/sbuild/chroot/facet/userdata.cc b/lib/sbuild/chroot/facet/userdata.cc index 9af16eb9..b1c30a04 100644 --- a/lib/sbuild/chroot/facet/userdata.cc +++ b/lib/sbuild/chroot/facet/userdata.cc @@ -83,6 +83,7 @@ namespace sbuild { "userdata", N_("User setting of custom configuration parameters"), + true, []() -> facet::ptr { return userdata::create(); } }; -- cgit v1.2.3