summaryrefslogtreecommitdiff
path: root/sbuild/sbuild-chroot-session.h
diff options
context:
space:
mode:
Diffstat (limited to 'sbuild/sbuild-chroot-session.h')
-rw-r--r--sbuild/sbuild-chroot-session.h140
1 files changed, 140 insertions, 0 deletions
diff --git a/sbuild/sbuild-chroot-session.h b/sbuild/sbuild-chroot-session.h
new file mode 100644
index 00000000..8a66b637
--- /dev/null
+++ b/sbuild/sbuild-chroot-session.h
@@ -0,0 +1,140 @@
+/* Copyright © 2005-2009 Roger Leigh <rleigh@debian.org>
+ *
+ * schroot is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * schroot is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ *********************************************************************/
+
+#ifndef SBUILD_CHROOT_SESSION_H
+#define SBUILD_CHROOT_SESSION_H
+
+#include <sbuild/sbuild-chroot.h>
+
+namespace sbuild
+{
+
+ /**
+ * A chroot may offer a "session" chroot in addition to its inactive
+ * copy. This interface may be implemented by any chroot wishing to
+ * provide such functionality.
+ *
+ * While this is effectively an interface, in practice this derives
+ * from sbuild::chroot, to allow setting and getting of data from a
+ * keyfile, including storing the keyfile options.
+ *
+ * Chroot types implementing chroot_session should, at a minimum,
+ * implement clone_session(). This should create and return a session
+ * chroot, and must call clone_session_setup() to set up the session
+ * chroot.
+ */
+ class chroot_session
+ {
+ protected:
+ /// The constructor.
+ chroot_session ();
+
+ friend class chroot;
+
+ public:
+ /// The destructor.
+ virtual ~chroot_session ();
+
+ /**
+ * Create a session chroot.
+ *
+ * @param session_id the identifier for the new session.
+ * @returns a session chroot.
+ */
+ virtual chroot::ptr
+ clone_session (std::string const& session_id) const = 0;
+
+ protected:
+ /**
+ * Set the defaults in the cloned session chroot.
+ *
+ * @param clone the chroot to set up.
+ * @param session_id the identifier for the new session.
+ */
+ virtual void
+ clone_session_setup (chroot::ptr& clone,
+ std::string const& session_id) const;
+
+ public:
+ /**
+ * Get if the chroot is a session manageable chroot or not.
+ *
+ * @returns true if the chroot is a session manageable chroot,
+ * otherwise false.
+ */
+ virtual bool
+ get_session_manageable () const;
+
+ /**
+ * Set if the chroot is a session manageable chroot or not.
+ *
+ * @param session true if a session chroot, manageable or false if
+ * not.
+ */
+ virtual void
+ set_session_manageable (bool manageable);
+
+ /**
+ * Get if the chroot is an active session or not.
+ *
+ * @returns true if the chroot is an active session, otherwise false.
+ */
+ virtual bool
+ get_session_active () const;
+
+ /**
+ * Set if the chroot is an active session or not.
+ *
+ * @param session true if an active session, or false if not.
+ */
+ virtual void
+ set_session_active (bool active);
+
+ void
+ setup_env (environment& env);
+
+ protected:
+ virtual chroot::session_flags
+ get_session_flags () const;
+
+ virtual void
+ get_details (format_detail& detail) const;
+
+ void
+ get_keyfile (keyfile& keyfile) const;
+
+ void
+ set_keyfile (keyfile const& keyfile,
+ string_list& used_keys);
+
+ private:
+ /// Is the chroot session or clone?
+ bool session_manageable;
+ /// Is the session active?
+ bool session_active;
+ };
+
+}
+
+#endif /* SBUILD_CHROOT_SESSION_H */
+
+/*
+ * Local Variables:
+ * mode:C++
+ * End:
+ */