diff options
author | Roger Leigh <rleigh@debian.org> | 2013-04-27 14:44:16 +0100 |
---|---|---|
committer | Roger Leigh <rleigh@debian.org> | 2013-05-04 17:17:13 +0100 |
commit | 9aec47cdd14e894be28046046bf158a5febade8c (patch) | |
tree | 8083244a657ef50fdf28f6b9330bf7ed75af1f13 /lib/sbuild/chroot/lvm-snapshot.cc | |
parent | 1e38d7f36fda59456316393d7f1948ced5790eb5 (diff) | |
download | schroot-9aec47cdd14e894be28046046bf158a5febade8c.tar.gz |
sbuild::chroot: Migrate block-device and lvm-snapshot to facets
Diffstat (limited to 'lib/sbuild/chroot/lvm-snapshot.cc')
-rw-r--r-- | lib/sbuild/chroot/lvm-snapshot.cc | 183 |
1 files changed, 4 insertions, 179 deletions
diff --git a/lib/sbuild/chroot/lvm-snapshot.cc b/lib/sbuild/chroot/lvm-snapshot.cc index 87cda4ec..ad64d5f2 100644 --- a/lib/sbuild/chroot/lvm-snapshot.cc +++ b/lib/sbuild/chroot/lvm-snapshot.cc @@ -20,6 +20,7 @@ #include <sbuild/chroot/lvm-snapshot.h> #include <sbuild/chroot/block-device.h> +#include <sbuild/chroot/facet/lvm-snapshot.h> #include <sbuild/chroot/facet/session.h> #include <sbuild/chroot/facet/session-clonable.h> #include <sbuild/chroot/facet/source-clonable.h> @@ -41,17 +42,13 @@ namespace sbuild { lvm_snapshot::lvm_snapshot (): - block_device_base(), - snapshot_device(), - snapshot_options() + chroot() { - add_facet(facet::source_clonable::create()); + add_facet(facet::lvm_snapshot::create()); } lvm_snapshot::lvm_snapshot (const lvm_snapshot& rhs): - block_device_base(rhs), - snapshot_device(rhs.snapshot_device), - snapshot_options(rhs.snapshot_options) + chroot(rhs) { } @@ -95,177 +92,5 @@ namespace sbuild return clone; } - std::string const& - lvm_snapshot::get_snapshot_device () const - { - return this->snapshot_device; - } - - void - lvm_snapshot::set_snapshot_device (std::string const& snapshot_device) - { - if (!is_absname(snapshot_device)) - throw error(snapshot_device, DEVICE_ABS); - - this->snapshot_device = snapshot_device; - - facet::mountable::ptr pmnt - (get_facet<facet::mountable>()); - if (pmnt) - pmnt->set_mount_device(this->snapshot_device); - } - - std::string const& - lvm_snapshot::get_snapshot_options () const - { - return this->snapshot_options; - } - - void - lvm_snapshot::set_snapshot_options (std::string const& snapshot_options) - { - this->snapshot_options = snapshot_options; - } - - std::string const& - lvm_snapshot::get_chroot_type () const - { - static const std::string type("lvm-snapshot"); - - return type; - } - - void - lvm_snapshot::setup_env (chroot const& chroot, - environment& env) const - { - block_device_base::setup_env(chroot, env); - - env.add("CHROOT_LVM_SNAPSHOT_NAME", sbuild::basename(get_snapshot_device())); - env.add("CHROOT_LVM_SNAPSHOT_DEVICE", get_snapshot_device()); - env.add("CHROOT_LVM_SNAPSHOT_OPTIONS", get_snapshot_options()); - } - - void - lvm_snapshot::setup_lock (chroot::setup_type type, - bool lock, - int status) - { - std::string device; - - /* Lock is removed by setup script on setup stop. Unlocking here - would fail: the LVM snapshot device no longer exists. */ - if (!(type == SETUP_STOP && lock == false)) - { - if (type == SETUP_START) - device = get_device(); - else - device = get_snapshot_device(); - - if (device.empty()) - throw error(CHROOT_DEVICE); - - try - { - stat file_status(device); - if (!file_status.is_block()) - { - throw error(get_device(), DEVICE_NOTBLOCK); - } - } - catch (sbuild::stat::error const& e) // Failed to stat - { - // Don't throw if stopping a session and the device stat - // failed. This is because the setup scripts shouldn't fail - // to be run if the LVM snapshot no longer exists, which - // would prevent the session from being ended. - if (type != SETUP_STOP) - throw; - } - } - - /* Create or unlink session information. */ - if ((type == SETUP_START && lock == true) || - (type == SETUP_STOP && lock == false && status == 0)) - { - bool start = (type == SETUP_START); - get_facet_strict<facet::session>()->setup_session_info(start); - } - } - - chroot::chroot::session_flags - lvm_snapshot::get_session_flags (chroot const& chroot) const - { - session_flags flags = SESSION_NOFLAGS; - - if (get_facet<facet::session>()) - flags = flags | SESSION_PURGE; - - return flags; - } - - void - lvm_snapshot::get_details (chroot const& chroot, - format_detail& detail) const - { - block_device_base::get_details(chroot, detail); - - if (!this->snapshot_device.empty()) - detail.add(_("LVM Snapshot Device"), get_snapshot_device()); - if (!this->snapshot_options.empty()) - detail.add(_("LVM Snapshot Options"), get_snapshot_options()); - } - - void - lvm_snapshot::get_used_keys (string_list& used_keys) const - { - block_device_base::get_used_keys(used_keys); - - used_keys.push_back("lvm-snapshot-device"); - used_keys.push_back("lvm-snapshot-options"); - } - - void - lvm_snapshot::get_keyfile (chroot const& chroot, - keyfile& keyfile) const - { - block_device_base::get_keyfile(chroot, keyfile); - - bool session = static_cast<bool>(get_facet<facet::session>()); - - if (session) - keyfile::set_object_value(*this, - &lvm_snapshot::get_snapshot_device, - keyfile, get_name(), - "lvm-snapshot-device"); - - if (!session) - keyfile::set_object_value(*this, - &lvm_snapshot::get_snapshot_options, - keyfile, get_name(), - "lvm-snapshot-options"); - } - - void - lvm_snapshot::set_keyfile (chroot& chroot, - keyfile const& keyfile) - { - block_device_base::set_keyfile(chroot, keyfile); - - bool session = static_cast<bool>(get_facet<facet::session>()); - - keyfile::get_object_value(*this, &lvm_snapshot::set_snapshot_device, - keyfile, get_name(), "lvm-snapshot-device", - session ? - keyfile::PRIORITY_REQUIRED : - keyfile::PRIORITY_DISALLOWED); - - keyfile::get_object_value(*this, &lvm_snapshot::set_snapshot_options, - keyfile, get_name(), "lvm-snapshot-options", - session ? - keyfile::PRIORITY_DEPRECATED : - keyfile::PRIORITY_REQUIRED); // Only needed for creating snapshot, not using snapshot - } - } } |