tags 718127 + patch pending
thanks

On Sun, Jul 13, 2014 at 10:49:46PM +0100, Roger Leigh wrote:
> On Thu, Jul 10, 2014 at 10:36:28PM +0100, Roger Leigh wrote:
> > To implement this, we need session and source facets to have a
> > pointer to the parent chroot.  So we query a session chroot
> > and ask if its parent was a source chroot, and also link from
> > a source chroot to plain chroot for generality and
> > completeness.  Initial scoping for 1.7 (1.6 will be backported):
> > 
> > - chroot to inherit enable_shared_from_this and/or switch to
> >   using weak_ptr rather than bare pointers for the facet->chroot
> >   back reference
> > - session and source need "shared_ptr<chroot> parent" fields
> > - session::create and source::create constructors to take a
> >   "shared_ptr<chroot> parent" argument.  This will be passed by
> >   session_clonable::clone_session and source_clonable::clone_source,
> >   respectively
> > - session can check for the presence of a source facet in its
> >   parent and set SESSION_SOURCE if parent is not null and the
> >   facet is present.
> > - chroot will set CHROOT_SESSION_SOURCE=true if the SESSION_SOURCE
> >   flag is set, otherwise set to false.
> 
> Initial implementation here:
> 
> http://anonscm.debian.org/gitweb/?p=users/rleigh/schroot.git;a=shortlog;h=refs/heads/source-env
> 
> (last three commits).  Works as above.
> Now needs backporting to 1.6.

Now rewritten for 1.6.  I'd very much appreciate it if you could
try rebuilding 1.6.10 with these patches applied, and let me know
if it's doing what you want.  Run with -v to see the value of
CHROOT_SESSION_SOURCE for source and non-source chroots.

http://anonscm.debian.org/gitweb/?p=users/rleigh/schroot.git;a=shortlog;h=refs/heads/source-env-1.6

Thanks,
Roger

-- 
  .''`.  Roger Leigh
 : :' :  Debian GNU/Linux    http://people.debian.org/~rleigh/
 `. `'   schroot and sbuild  http://alioth.debian.org/projects/buildd-tools
   `-    GPG Public Key      F33D 281D 470A B443 6756 147C 07B3 C8BC 4083 E800
>From 60175439a842d2bc96c56986409fbf1c2ad4acce Mon Sep 17 00:00:00 2001
From: Roger Leigh <rle...@codelibre.net>
Date: Mon, 14 Jul 2014 21:17:37 +0100
Subject: [PATCH 1/3] sbuild::chroot::chroot: Inherit from
 enable_shared_from_this

---
 sbuild/sbuild-chroot.cc  | 2 ++
 sbuild/sbuild-chroot.h   | 2 +-
 sbuild/sbuild-tr1types.h | 2 ++
 3 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/sbuild/sbuild-chroot.cc b/sbuild/sbuild-chroot.cc
index 6ec7088..e808551 100644
--- a/sbuild/sbuild-chroot.cc
+++ b/sbuild/sbuild-chroot.cc
@@ -105,6 +105,7 @@ error<sbuild::chroot::error_code>::error_strings
  init_errors + (sizeof(init_errors) / sizeof(init_errors[0])));
 
 sbuild::chroot::chroot ():
+  std::enable_shared_from_this<chroot>(),
   name(),
   description(),
   users(),
@@ -132,6 +133,7 @@ sbuild::chroot::chroot ():
 }
 
 sbuild::chroot::chroot (const chroot& rhs):
+  std::enable_shared_from_this<chroot>(),
   name(rhs.name),
   description(rhs.description),
   users(rhs.users),
diff --git a/sbuild/sbuild-chroot.h b/sbuild/sbuild-chroot.h
index e3f1cf7..98ed958 100644
--- a/sbuild/sbuild-chroot.h
+++ b/sbuild/sbuild-chroot.h
@@ -42,7 +42,7 @@ namespace sbuild
    * configuration file, and may be initialised directly from an open
    * keyfile.
    */
-  class chroot
+  class chroot : public std::enable_shared_from_this<chroot>
   {
   public:
     /// Type of setup to perform.
diff --git a/sbuild/sbuild-tr1types.h b/sbuild/sbuild-tr1types.h
index 2739a50..a3b3191 100644
--- a/sbuild/sbuild-tr1types.h
+++ b/sbuild/sbuild-tr1types.h
@@ -39,6 +39,7 @@ namespace std {
     using std::tr1::static_pointer_cast;
     using std::tr1::const_pointer_cast;
     using std::tr1::dynamic_pointer_cast;
+    using std::tr1::enable_shared_from_this;
 }
 # elif HAVE_BOOST_SHARED_PTR_HPP
 #  include <boost/shared_ptr.hpp>
@@ -48,6 +49,7 @@ namespace std {
     using boost::static_pointer_cast;
     using boost::const_pointer_cast;
     using boost::dynamic_pointer_cast;
+    using boost::enable_shared_from_this;
 }
 # else
 #  error A shared_ptr implementation is not available
-- 
2.0.1

>From 7608267215790c1d7459c50773667f15785a942d Mon Sep 17 00:00:00 2001
From: Roger Leigh <rle...@codelibre.net>
Date: Mon, 14 Jul 2014 22:22:28 +0100
Subject: [PATCH 2/3] sbuild::chroot: Add SESSION_SOURCE and
 CHROOT_SESSION_SOURCE

- add new SESSION_SOURCE session flag
- store session parent chroot in session facet when cloning
  a session
- set CHROOT_SESSION_SOURCE in setup environment if the
  session parent chroot had a source facet
---
 sbuild/sbuild-chroot-facet-session-clonable.cc |  2 +-
 sbuild/sbuild-chroot-facet-session.cc          | 28 ++++++++++++++++++++-----
 sbuild/sbuild-chroot-facet-session.h           | 29 ++++++++++++++++++++++++--
 sbuild/sbuild-chroot.cc                        |  2 ++
 sbuild/sbuild-chroot.h                         |  3 ++-
 test/sbuild-chroot-block-device.cc             | 24 +++++++++++++++++++++
 test/sbuild-chroot-btrfs-snapshot.cc           | 12 ++++++++---
 test/sbuild-chroot-custom.cc                   |  1 +
 test/sbuild-chroot-directory.cc                |  6 ++++++
 test/sbuild-chroot-file.cc                     |  5 +++++
 test/sbuild-chroot-loopback.cc                 |  6 ++++++
 test/sbuild-chroot-lvm-snapshot.cc             |  4 ++++
 test/sbuild-chroot-plain.cc                    |  1 +
 13 files changed, 111 insertions(+), 12 deletions(-)

diff --git a/sbuild/sbuild-chroot-facet-session-clonable.cc b/sbuild/sbuild-chroot-facet-session-clonable.cc
index b74f14b..ca208b4 100644
--- a/sbuild/sbuild-chroot-facet-session-clonable.cc
+++ b/sbuild/sbuild-chroot-facet-session-clonable.cc
@@ -90,7 +90,7 @@ chroot_facet_session_clonable::clone_session_setup (chroot const&      parent,
   clone->remove_facet<chroot_facet_session_clonable>();
   // Disable source cloning.
   clone->remove_facet<chroot_facet_source_clonable>();
-  clone->add_facet(chroot_facet_session::create());
+  clone->add_facet(chroot_facet_session::create(owner->shared_from_this()));
 
   // Disable session, delete aliases.
   chroot_facet_session::ptr psess(clone->get_facet<chroot_facet_session>());
diff --git a/sbuild/sbuild-chroot-facet-session.cc b/sbuild/sbuild-chroot-facet-session.cc
index a3114bc..477f4bd 100644
--- a/sbuild/sbuild-chroot-facet-session.cc
+++ b/sbuild/sbuild-chroot-facet-session.cc
@@ -21,7 +21,7 @@
 #include "sbuild-chroot.h"
 #include "sbuild-chroot-config.h"
 #include "sbuild-chroot-facet-session.h"
-#include "sbuild-chroot-facet-source-clonable.h"
+#include "sbuild-chroot-facet-source.h"
 #include "sbuild-chroot-plain.h"
 #ifdef SBUILD_FEATURE_LVMSNAP
 #include "sbuild-chroot-lvm-snapshot.h"
@@ -39,10 +39,11 @@ using boost::format;
 using std::endl;
 using namespace sbuild;
 
-chroot_facet_session::chroot_facet_session ():
+chroot_facet_session::chroot_facet_session (const chroot::ptr& parent_chroot):
   chroot_facet(),
   original_chroot_name(),
-  selected_chroot_name()
+  selected_chroot_name(),
+  parent_chroot(parent_chroot)
 {
 }
 
@@ -53,7 +54,13 @@ chroot_facet_session::~chroot_facet_session ()
 chroot_facet_session::ptr
 chroot_facet_session::create ()
 {
-  return ptr(new chroot_facet_session());
+  return ptr(new chroot_facet_session(chroot::ptr()));
+}
+
+chroot_facet_session::ptr
+chroot_facet_session::create (const chroot::ptr& parent_chroot)
+{
+  return ptr(new chroot_facet_session(parent_chroot));
 }
 
 chroot_facet::ptr
@@ -97,6 +104,12 @@ chroot_facet_session::set_selected_name (std::string const& name)
   this->selected_chroot_name = shortname;
 }
 
+const chroot::ptr&
+chroot_facet_session::get_parent_chroot() const
+{
+  return parent_chroot;
+}
+
 void
 chroot_facet_session::setup_env (chroot const& chroot,
                                  environment&  env) const
@@ -113,7 +126,12 @@ chroot_facet_session::setup_env (chroot const& chroot,
 sbuild::chroot::session_flags
 chroot_facet_session::get_session_flags (chroot const& chroot) const
 {
-  return chroot::SESSION_NOFLAGS;
+  sbuild::chroot::session_flags flags = sbuild::chroot::SESSION_NOFLAGS;
+
+  if (parent_chroot && parent_chroot->get_facet<chroot_facet_source>())
+    flags = flags | sbuild::chroot::SESSION_SOURCE;
+
+  return flags;
 }
 
 void
diff --git a/sbuild/sbuild-chroot-facet-session.h b/sbuild/sbuild-chroot-facet-session.h
index bc90738..49d8f34 100644
--- a/sbuild/sbuild-chroot-facet-session.h
+++ b/sbuild/sbuild-chroot-facet-session.h
@@ -42,8 +42,12 @@ namespace sbuild
     typedef std::shared_ptr<const chroot_facet_session> const_ptr;
 
   private:
-    /// The constructor.
-    chroot_facet_session ();
+    /** The constructor.
+     *
+     * @param parent_chroot the chroot from which this session was
+     * cloned.
+     */
+    chroot_facet_session (const chroot::ptr& parent_chroot);
 
   public:
     /// The destructor.
@@ -57,6 +61,16 @@ namespace sbuild
     static ptr
     create ();
 
+    /**
+     * Create a chroot facet.
+     *
+     * @param parent_chroot the chroot from which this session was
+     * cloned.
+     * @returns a shared_ptr to the new chroot facet.
+     */
+    static ptr
+    create (const chroot::ptr& parent_chroot);
+
     virtual chroot_facet::ptr
     clone () const;
 
@@ -96,6 +110,15 @@ namespace sbuild
     void
     set_selected_name (std::string const& name);
 
+    /**
+     * Get parent chroot.
+     *
+     * @returns a pointer to the chroot; may be null if no parent
+     * exists.
+     */
+    const chroot::ptr&
+    get_parent_chroot() const;
+
     virtual void
     setup_env (chroot const& chroot,
                environment&  env) const;
@@ -121,6 +144,8 @@ namespace sbuild
     std::string  original_chroot_name;
     /// Selected chroot name.
     std::string  selected_chroot_name;
+    /// Parent chroot.
+    const chroot::ptr parent_chroot;
   };
 
 }
diff --git a/sbuild/sbuild-chroot.cc b/sbuild/sbuild-chroot.cc
index e808551..8f31e9f 100644
--- a/sbuild/sbuild-chroot.cc
+++ b/sbuild/sbuild-chroot.cc
@@ -566,6 +566,8 @@ sbuild::chroot::setup_env (chroot const& chroot,
           static_cast<bool>(chroot.get_session_flags() & SESSION_CLONE));
   env.add("CHROOT_SESSION_PURGE",
           static_cast<bool>(chroot.get_session_flags() & SESSION_PURGE));
+  env.add("CHROOT_SESSION_SOURCE",
+          static_cast<bool>(chroot.get_session_flags() & SESSION_SOURCE));
 }
 
 void
diff --git a/sbuild/sbuild-chroot.h b/sbuild/sbuild-chroot.h
index 98ed958..ba7271c 100644
--- a/sbuild/sbuild-chroot.h
+++ b/sbuild/sbuild-chroot.h
@@ -59,7 +59,8 @@ namespace sbuild
         SESSION_NOFLAGS = 0,      ///< No flags are set.
         SESSION_CREATE  = 1 << 0, ///< The chroot supports session creation.
         SESSION_CLONE   = 1 << 1, ///< The chroot supports cloning.
-        SESSION_PURGE   = 1 << 2  ///< The chroot should be purged.
+        SESSION_PURGE   = 1 << 2, ///< The chroot should be purged.
+        SESSION_SOURCE  = 1 << 3  ///< The chroot is a source chroot.
       };
 
     /// Message verbosity.
diff --git a/test/sbuild-chroot-block-device.cc b/test/sbuild-chroot-block-device.cc
index addcf97..ce16f37 100644
--- a/test/sbuild-chroot-block-device.cc
+++ b/test/sbuild-chroot-block-device.cc
@@ -152,6 +152,7 @@ public:
     expected.add("CHROOT_SESSION_CLONE",  "false");
     expected.add("CHROOT_SESSION_CREATE", "true");
     expected.add("CHROOT_SESSION_PURGE",  "false");
+    expected.add("CHROOT_SESSION_SOURCE", "false");
 #ifdef SBUILD_FEATURE_UNION
     expected.add("CHROOT_UNION_TYPE",     "none");
 #endif // SBUILD_FEATURE_UNION
@@ -169,6 +170,7 @@ public:
     expected.add("CHROOT_SESSION_CLONE",  "false");
     expected.add("CHROOT_SESSION_CREATE", "false");
     expected.add("CHROOT_SESSION_PURGE",  "false");
+    expected.add("CHROOT_SESSION_SOURCE", "false");
     expected.add("CHROOT_MOUNT_DEVICE",   "/dev/testdev");
 #ifdef SBUILD_FEATURE_UNION
     expected.add("CHROOT_UNION_TYPE",     "none");
@@ -184,6 +186,7 @@ public:
     expected.add("CHROOT_SESSION_CLONE",  "true");
     expected.add("CHROOT_SESSION_CREATE", "true");
     expected.add("CHROOT_SESSION_PURGE",  "false");
+    expected.add("CHROOT_SESSION_SOURCE", "false");
     expected.add("CHROOT_UNION_TYPE",     "aufs");
     expected.add("CHROOT_UNION_MOUNT_OPTIONS",      "union-mount-options");
     expected.add("CHROOT_UNION_OVERLAY_DIRECTORY",  "/overlay");
@@ -202,6 +205,7 @@ public:
     expected.add("CHROOT_SESSION_CLONE",  "false");
     expected.add("CHROOT_SESSION_CREATE", "false");
     expected.add("CHROOT_SESSION_PURGE",  "true");
+    expected.add("CHROOT_SESSION_SOURCE", "false");
     expected.add("CHROOT_MOUNT_DEVICE",   "/dev/testdev");
     expected.add("CHROOT_UNION_TYPE",     "aufs");
     expected.add("CHROOT_UNION_MOUNT_OPTIONS",      "union-mount-options");
@@ -220,9 +224,29 @@ public:
     expected.add("CHROOT_SESSION_CLONE",  "false");
     expected.add("CHROOT_SESSION_CREATE", "true");
     expected.add("CHROOT_SESSION_PURGE",  "false");
+    expected.add("CHROOT_SESSION_SOURCE", "false");
 
     test_chroot_base<chroot_block_device>::test_setup_env(source_union, expected);
   }
+
+  void test_setup_env_session_source_union()
+  {
+    sbuild::environment expected;
+    setup_env_gen(expected);
+    expected.add("SESSION_ID",            "test-union-session-name");
+    expected.add("CHROOT_ALIAS",          "test-union-session-name");
+    expected.add("CHROOT_DESCRIPTION",     chroot->get_description() + ' ' + _("(source chroot)") + ' ' + _("(session chroot)"));
+    expected.add("CHROOT_SESSION_CLONE",  "false");
+    expected.add("CHROOT_SESSION_CREATE", "false");
+    expected.add("CHROOT_SESSION_PURGE",  "true");
+    expected.add("CHROOT_SESSION_SOURCE", "true");
+    expected.add("CHROOT_MOUNT_DEVICE",   "/dev/testdev");
+    expected.add("CHROOT_UNION_TYPE",     "aufs");
+    expected.add("CHROOT_UNION_MOUNT_OPTIONS",      "union-mount-options");
+    expected.add("CHROOT_UNION_OVERLAY_DIRECTORY",  "/overlay/test-union-session-name");
+    expected.add("CHROOT_UNION_UNDERLAY_DIRECTORY", "/underlay/test-union-session-name");
+    test_chroot_base<chroot_block_device>::test_setup_env(source_union, expected);
+  }
 #endif // SBUILD_FEATURE_UNION
 
   void setup_keyfile_block(sbuild::keyfile &expected, std::string group)
diff --git a/test/sbuild-chroot-btrfs-snapshot.cc b/test/sbuild-chroot-btrfs-snapshot.cc
index dc29525..195ccb5 100644
--- a/test/sbuild-chroot-btrfs-snapshot.cc
+++ b/test/sbuild-chroot-btrfs-snapshot.cc
@@ -166,6 +166,7 @@ public:
     expected.add("CHROOT_SESSION_CLONE",  "true");
     expected.add("CHROOT_SESSION_CREATE", "true");
     expected.add("CHROOT_SESSION_PURGE",  "false");
+    expected.add("CHROOT_SESSION_SOURCE", "false");
 
     test_chroot_base<chroot_btrfs_snapshot>::test_setup_env(chroot, expected);
   }
@@ -186,6 +187,7 @@ public:
     expected.add("CHROOT_SESSION_CLONE",  "false");
     expected.add("CHROOT_SESSION_CREATE", "false");
     expected.add("CHROOT_SESSION_PURGE",  "true");
+    expected.add("CHROOT_SESSION_SOURCE", "false");
 
     test_chroot_base<chroot_btrfs_snapshot>::test_setup_env(session, expected);
   }
@@ -201,6 +203,7 @@ public:
     expected.add("CHROOT_SESSION_CLONE",  "false");
     expected.add("CHROOT_SESSION_CREATE", "true");
     expected.add("CHROOT_SESSION_PURGE",  "false");
+    expected.add("CHROOT_SESSION_SOURCE", "false");
 
     test_chroot_base<chroot_btrfs_snapshot>::test_setup_env(source, expected);
   }
@@ -210,14 +213,17 @@ public:
     sbuild::environment expected;
     setup_env_gen(expected);
     expected.add("CHROOT_TYPE",           "directory");
+    expected.add("SESSION_ID",            "test-session-name");
     expected.add("CHROOT_NAME",           "test-name");
-    expected.add("CHROOT_DESCRIPTION",     chroot->get_description() + ' ' + _("(source chroot)"));
+    expected.add("CHROOT_ALIAS",          "test-session-name");
+    expected.add("CHROOT_DESCRIPTION",     chroot->get_description() + ' ' + _("(source chroot)") + ' ' + _("(session chroot)"));
     expected.add("CHROOT_DIRECTORY",       "/srv/chroot/sid");
     expected.add("CHROOT_SESSION_CLONE",  "false");
-    expected.add("CHROOT_SESSION_CREATE", "true");
+    expected.add("CHROOT_SESSION_CREATE", "false");
     expected.add("CHROOT_SESSION_PURGE",  "false");
+    expected.add("CHROOT_SESSION_SOURCE", "true");
 
-    test_chroot_base<chroot_btrfs_snapshot>::test_setup_env(source, expected);
+    test_chroot_base<chroot_btrfs_snapshot>::test_setup_env(session_source, expected);
   }
 
   void setup_keyfile_btrfs(sbuild::keyfile &expected, std::string group)
diff --git a/test/sbuild-chroot-custom.cc b/test/sbuild-chroot-custom.cc
index 971f1ef..7b56bda 100644
--- a/test/sbuild-chroot-custom.cc
+++ b/test/sbuild-chroot-custom.cc
@@ -111,6 +111,7 @@ public:
     expected.add("CHROOT_SESSION_CLONE",  "false");
     expected.add("CHROOT_SESSION_CREATE", "true");
     expected.add("CHROOT_SESSION_PURGE",  "false");
+    expected.add("CHROOT_SESSION_SOURCE", "false");
     expected.add("CUSTOM_DIRECTORY",      "/srv/chroots/sid");
     expected.add("CUSTOM_OPTIONS",        "foobar");
   }
diff --git a/test/sbuild-chroot-directory.cc b/test/sbuild-chroot-directory.cc
index 346fd96..470a082 100644
--- a/test/sbuild-chroot-directory.cc
+++ b/test/sbuild-chroot-directory.cc
@@ -135,6 +135,7 @@ public:
     expected.add("CHROOT_SESSION_CLONE",  "false");
     expected.add("CHROOT_SESSION_CREATE", "true");
     expected.add("CHROOT_SESSION_PURGE",  "false");
+    expected.add("CHROOT_SESSION_SOURCE", "false");
 #ifdef SBUILD_FEATURE_UNION
     expected.add("CHROOT_UNION_TYPE",     "none");
 #endif // SBUILD_FEATURE_UNION
@@ -153,6 +154,7 @@ public:
     expected.add("CHROOT_SESSION_CLONE",  "false");
     expected.add("CHROOT_SESSION_CREATE", "false");
     expected.add("CHROOT_SESSION_PURGE",  "false");
+    expected.add("CHROOT_SESSION_SOURCE", "false");
 #ifdef SBUILD_FEATURE_UNION
     expected.add("CHROOT_UNION_TYPE",     "none");
 #endif // SBUILD_FEATURE_UNION
@@ -169,6 +171,7 @@ public:
     expected.add("CHROOT_SESSION_CLONE",  "true");
     expected.add("CHROOT_SESSION_CREATE", "true");
     expected.add("CHROOT_SESSION_PURGE",  "false");
+    expected.add("CHROOT_SESSION_SOURCE", "false");
     expected.add("CHROOT_UNION_TYPE",     "aufs");
     expected.add("CHROOT_UNION_MOUNT_OPTIONS",      "union-mount-options");
     expected.add("CHROOT_UNION_OVERLAY_DIRECTORY",  "/overlay");
@@ -188,6 +191,7 @@ public:
     expected.add("CHROOT_SESSION_CLONE",  "false");
     expected.add("CHROOT_SESSION_CREATE", "false");
     expected.add("CHROOT_SESSION_PURGE",  "true");
+    expected.add("CHROOT_SESSION_SOURCE", "false");
     expected.add("CHROOT_UNION_TYPE",     "aufs");
     expected.add("CHROOT_UNION_MOUNT_OPTIONS",      "union-mount-options");
     expected.add("CHROOT_UNION_OVERLAY_DIRECTORY",  "/overlay/test-union-session-name");
@@ -205,6 +209,7 @@ public:
     expected.add("CHROOT_SESSION_CLONE",  "false");
     expected.add("CHROOT_SESSION_CREATE", "true");
     expected.add("CHROOT_SESSION_PURGE",  "false");
+    expected.add("CHROOT_SESSION_SOURCE", "false");
 
     test_chroot_base<chroot_directory>::test_setup_env(source_union, expected);
   }
@@ -220,6 +225,7 @@ public:
     expected.add("CHROOT_SESSION_CLONE",  "false");
     expected.add("CHROOT_SESSION_CREATE", "false");
     expected.add("CHROOT_SESSION_PURGE",  "false");
+    expected.add("CHROOT_SESSION_SOURCE", "true");
 
     test_chroot_base<chroot_directory>::test_setup_env(session_source_union, expected);
   }
diff --git a/test/sbuild-chroot-file.cc b/test/sbuild-chroot-file.cc
index 5949920..1f834b9 100644
--- a/test/sbuild-chroot-file.cc
+++ b/test/sbuild-chroot-file.cc
@@ -155,6 +155,7 @@ public:
     expected.add("CHROOT_SESSION_CLONE",   "true");
     expected.add("CHROOT_SESSION_CREATE",  "true");
     expected.add("CHROOT_SESSION_PURGE",   "false");
+    expected.add("CHROOT_SESSION_SOURCE", "false");
 
     test_chroot_base<chroot_file>::test_setup_env(chroot, expected);
   }
@@ -167,6 +168,7 @@ public:
     expected.add("CHROOT_SESSION_CLONE",  "true");
     expected.add("CHROOT_SESSION_CREATE", "true");
     expected.add("CHROOT_SESSION_PURGE",  "false");
+    expected.add("CHROOT_SESSION_SOURCE", "false");
 
     test_chroot_base<chroot_file>::test_setup_env(chroot, expected);
   }
@@ -182,6 +184,7 @@ public:
     expected.add("CHROOT_SESSION_CLONE",  "false");
     expected.add("CHROOT_SESSION_CREATE", "false");
     expected.add("CHROOT_SESSION_PURGE",  "true");
+    expected.add("CHROOT_SESSION_SOURCE", "false");
 
     test_chroot_base<chroot_file>::test_setup_env(session, expected);
   }
@@ -195,6 +198,7 @@ public:
     expected.add("CHROOT_SESSION_CLONE",  "false");
     expected.add("CHROOT_SESSION_CREATE", "true");
     expected.add("CHROOT_SESSION_PURGE",  "false");
+    expected.add("CHROOT_SESSION_SOURCE", "false");
 
     test_chroot_base<chroot_file>::test_setup_env(source, expected);
   }
@@ -210,6 +214,7 @@ public:
     expected.add("CHROOT_SESSION_CLONE",  "false");
     expected.add("CHROOT_SESSION_CREATE", "false");
     expected.add("CHROOT_SESSION_PURGE",  "true");
+    expected.add("CHROOT_SESSION_SOURCE", "true");
 
     test_chroot_base<chroot_file>::test_setup_env(session_source, expected);
   }
diff --git a/test/sbuild-chroot-loopback.cc b/test/sbuild-chroot-loopback.cc
index 8517dfc..5f04dff 100644
--- a/test/sbuild-chroot-loopback.cc
+++ b/test/sbuild-chroot-loopback.cc
@@ -151,6 +151,7 @@ public:
     expected.add("CHROOT_SESSION_CLONE",  "false");
     expected.add("CHROOT_SESSION_CREATE", "true");
     expected.add("CHROOT_SESSION_PURGE",  "false");
+    expected.add("CHROOT_SESSION_SOURCE", "false");
 #ifdef SBUILD_FEATURE_UNION
     expected.add("CHROOT_UNION_TYPE",     "none");
 #endif // SBUILD_FEATURE_UNION
@@ -169,6 +170,7 @@ public:
     expected.add("CHROOT_SESSION_CLONE",  "false");
     expected.add("CHROOT_SESSION_CREATE", "false");
     expected.add("CHROOT_SESSION_PURGE",  "false");
+    expected.add("CHROOT_SESSION_SOURCE", "false");
     expected.add("CHROOT_MOUNT_DEVICE",   loopback_file);
 
 #ifdef SBUILD_FEATURE_UNION
@@ -187,6 +189,7 @@ public:
     expected.add("CHROOT_SESSION_CLONE",  "true");
     expected.add("CHROOT_SESSION_CREATE", "true");
     expected.add("CHROOT_SESSION_PURGE",  "false");
+    expected.add("CHROOT_SESSION_SOURCE", "false");
     expected.add("CHROOT_UNION_TYPE",     "aufs");
     expected.add("CHROOT_UNION_MOUNT_OPTIONS",      "union-mount-options");
     expected.add("CHROOT_UNION_OVERLAY_DIRECTORY",  "/overlay");
@@ -206,6 +209,7 @@ public:
     expected.add("CHROOT_SESSION_CLONE",  "false");
     expected.add("CHROOT_SESSION_CREATE", "false");
     expected.add("CHROOT_SESSION_PURGE",  "true");
+    expected.add("CHROOT_SESSION_SOURCE", "false");
     expected.add("CHROOT_MOUNT_DEVICE",   loopback_file);
     expected.add("CHROOT_UNION_TYPE",     "aufs");
     expected.add("CHROOT_UNION_MOUNT_OPTIONS",      "union-mount-options");
@@ -224,6 +228,7 @@ public:
     expected.add("CHROOT_SESSION_CLONE",  "false");
     expected.add("CHROOT_SESSION_CREATE", "true");
     expected.add("CHROOT_SESSION_PURGE",  "false");
+    expected.add("CHROOT_SESSION_SOURCE", "false");
 
     test_chroot_base<chroot_loopback>::test_setup_env(source_union, expected);
   }
@@ -241,6 +246,7 @@ public:
     expected.add("CHROOT_SESSION_CLONE",  "false");
     expected.add("CHROOT_SESSION_CREATE", "false");
     expected.add("CHROOT_SESSION_PURGE",  "false");
+    expected.add("CHROOT_SESSION_SOURCE", "true");
 
     test_chroot_base<chroot_loopback>::test_setup_env(session_source_union, expected);
   }
diff --git a/test/sbuild-chroot-lvm-snapshot.cc b/test/sbuild-chroot-lvm-snapshot.cc
index 632fa86..878478a 100644
--- a/test/sbuild-chroot-lvm-snapshot.cc
+++ b/test/sbuild-chroot-lvm-snapshot.cc
@@ -139,6 +139,7 @@ public:
     expected.add("CHROOT_SESSION_CLONE",  "true");
     expected.add("CHROOT_SESSION_CREATE", "true");
     expected.add("CHROOT_SESSION_PURGE",  "false");
+    expected.add("CHROOT_SESSION_SOURCE", "false");
 
     test_chroot_base<chroot_lvm_snapshot>::test_setup_env(chroot, expected);
   }
@@ -160,6 +161,7 @@ public:
     expected.add("CHROOT_SESSION_CLONE",  "false");
     expected.add("CHROOT_SESSION_CREATE", "false");
     expected.add("CHROOT_SESSION_PURGE",  "true");
+    expected.add("CHROOT_SESSION_SOURCE", "false");
 
     test_chroot_base<chroot_lvm_snapshot>::test_setup_env(session, expected);
   }
@@ -174,6 +176,7 @@ public:
     expected.add("CHROOT_SESSION_CLONE",  "false");
     expected.add("CHROOT_SESSION_CREATE", "true");
     expected.add("CHROOT_SESSION_PURGE",  "false");
+    expected.add("CHROOT_SESSION_SOURCE", "false");
 
     test_chroot_base<chroot_lvm_snapshot>::test_setup_env(source, expected);
   }
@@ -191,6 +194,7 @@ public:
     expected.add("CHROOT_SESSION_CLONE",  "false");
     expected.add("CHROOT_SESSION_CREATE", "false");
     expected.add("CHROOT_SESSION_PURGE",  "false");
+    expected.add("CHROOT_SESSION_SOURCE", "true");
 
     test_chroot_base<chroot_lvm_snapshot>::test_setup_env(session_source, expected);
   }
diff --git a/test/sbuild-chroot-plain.cc b/test/sbuild-chroot-plain.cc
index 8f0d249..4de2c00 100644
--- a/test/sbuild-chroot-plain.cc
+++ b/test/sbuild-chroot-plain.cc
@@ -104,6 +104,7 @@ public:
     expected.add("CHROOT_SESSION_CLONE",  "false");
     expected.add("CHROOT_SESSION_CREATE", "false");
     expected.add("CHROOT_SESSION_PURGE",  "false");
+    expected.add("CHROOT_SESSION_SOURCE", "false");
 
     test_chroot_base<chroot_plain>::test_setup_env(chroot, expected);
   }
-- 
2.0.1

>From c691b0772927f2e46b4d58028c3a491ceaaf16dc Mon Sep 17 00:00:00 2001
From: Roger Leigh <rle...@codelibre.net>
Date: Mon, 14 Jul 2014 23:34:00 +0100
Subject: [PATCH 3/3] man: documented CHROOT_SESSION_SOURCE

---
 man/schroot-setup.5.man | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/man/schroot-setup.5.man b/man/schroot-setup.5.man
index 836634e..49ad3b0 100644
--- a/man/schroot-setup.5.man
+++ b/man/schroot-setup.5.man
@@ -93,6 +93,10 @@ Set to \[oq]true\[cq] if a session will be cloned, otherwise \[oq]false\[cq].
 CHROOT_SESSION_PURGE
 Set to \[oq]true\[cq] if a session will be purged, otherwise \[oq]false\[cq].
 .TP
+CHROOT_SESSION_SOURCE
+Set to \[oq]true\[cq] if a session will be created from a source chroot,
+otherwise \[oq]false\[cq].
+.TP
 CHROOT_TYPE
 The type of the chroot.  This is useful for restricting a setup task to
 particular types of chroot (e.g. only block devices or LVM snapshots).
-- 
2.0.1

Reply via email to