diff -Nru schroot-1.6.3/bin/dchroot/dchroot-main-base.cc schroot-1.6.4/bin/dchroot/dchroot-main-base.cc
--- schroot-1.6.3/bin/dchroot/dchroot-main-base.cc	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/bin/dchroot/dchroot-main-base.cc	2012-10-27 23:39:05.000000000 +0100
@@ -52,20 +52,6 @@
 }
 
 void
-main_base::action_config ()
-{
-  std::cout << "# "
-    // TRANSLATORS: %1% = program name
-    // TRANSLATORS: %2% = program version
-    // TRANSLATORS: %3% = current date
-	    << format(_("schroot configuration generated by %1% %2% on %3%"))
-    % this->program_name % VERSION % sbuild::date(time(0))
-	    << endl;
-  std::cout << endl;
-  this->config->print_chroot_config(this->chroots, std::cout);
-}
-
-void
 main_base::action_list ()
 {
   this->config->print_chroot_list_simple(std::cout);
diff -Nru schroot-1.6.3/bin/dchroot/dchroot-main-base.h schroot-1.6.4/bin/dchroot/dchroot-main-base.h
--- schroot-1.6.3/bin/dchroot/dchroot-main-base.h	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/bin/dchroot/dchroot-main-base.h	2012-10-27 23:39:05.000000000 +0100
@@ -47,9 +47,6 @@
 
   protected:
     virtual void
-    action_config ();
-
-    virtual void
     action_list ();
   };
 
diff -Nru schroot-1.6.3/bin/dchroot/dchroot-main.cc schroot-1.6.4/bin/dchroot/dchroot-main.cc
--- schroot-1.6.3/bin/dchroot/dchroot-main.cc	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/bin/dchroot/dchroot-main.cc	2012-10-27 23:39:05.000000000 +0100
@@ -52,14 +52,6 @@
 }
 
 void
-main::action_location ()
-{
-  sbuild::string_list chroot;
-  chroot.push_back(this->options->chroot_path);
-  this->config->print_chroot_location(chroot, std::cout);
-}
-
-void
 main::create_session (sbuild::session::operation sess_op)
 {
   sbuild::log_debug(sbuild::DEBUG_INFO) << "Creating dchroot session" << endl;
diff -Nru schroot-1.6.3/bin/dchroot/dchroot-main.h schroot-1.6.4/bin/dchroot/dchroot-main.h
--- schroot-1.6.3/bin/dchroot/dchroot-main.h	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/bin/dchroot/dchroot-main.h	2012-10-27 23:39:05.000000000 +0100
@@ -45,9 +45,6 @@
 
   protected:
     virtual void
-    action_location ();
-
-    virtual void
     create_session (sbuild::session::operation sess_op);
   };
 
diff -Nru schroot-1.6.3/bin/dchroot/dchroot-options.cc schroot-1.6.4/bin/dchroot/dchroot-options.cc
--- schroot-1.6.3/bin/dchroot/dchroot-options.cc	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/bin/dchroot/dchroot-options.cc	2012-10-27 23:39:05.000000000 +0100
@@ -69,7 +69,11 @@
   schroot::options_base::check_options();
 
   if (vm.count("path"))
-    this->action = ACTION_LOCATION;
+    {
+      this->action = ACTION_LOCATION;
+      this->chroots.clear();
+      this->chroots.push_back(this->chroot_path);
+    }
 
   if (vm.count("all"))
     {
diff -Nru schroot-1.6.3/bin/schroot/schroot-main-base.cc schroot-1.6.4/bin/schroot/schroot-main-base.cc
--- schroot-1.6.3/bin/schroot/schroot-main-base.cc	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/bin/schroot/schroot-main-base.cc	2012-10-27 23:39:05.000000000 +0100
@@ -55,8 +55,6 @@
    */
   emap init_errors[] =
     {
-      // TRANSLATORS: %1% = comma-separated list of chroot names
-      emap(main_base::CHROOTS_NOTFOUND,  N_("%1%: Chroots not found")),
       // TRANSLATORS: %4% = file
       emap(main_base::CHROOT_FILE,       N_("No chroots are defined in ‘%4%’")),
       // TRANSLATORS: %4% = file
@@ -64,8 +62,6 @@
       emap(main_base::CHROOT_FILE2,      N_("No chroots are defined in ‘%4%’ or ‘%5%’")),
       // TRANSLATORS: %1% = file
       emap(main_base::CHROOT_NOTDEFINED, N_("The specified chroots are not defined in ‘%1%’")),
-      // TRANSLATORS: %1% = chroot name
-      emap(main_base::CHROOT_NOTFOUND,   N_("%1%: Chroot not found")),
       emap(main_base::SESSION_INVALID,   N_("%1%: Invalid session name"))
     };
 
@@ -123,13 +119,39 @@
 void
 main_base::action_info ()
 {
-  this->config->print_chroot_info(this->chroots, std::cout);
+  for(sbuild::string_list::const_iterator pos = this->chroot_names.begin();
+      pos != this->chroot_names.end();
+      ++pos)
+    {
+      // This should never fail, so no error handling here--we already
+      // validated everything when we got the chroot map.
+      sbuild::chroot_config::chroot_map::const_iterator c = this->chroots.find(*pos);
+      assert(c->second);
+
+      std::cout << c->second;
+      if (pos + 1 != this->chroot_names.end())
+	std::cout << '\n';
+    }
+
+  std::cout << std::flush;
 }
 
 void
 main_base::action_location ()
 {
-  this->config->print_chroot_location(this->chroots, std::cout);
+  for(sbuild::string_list::const_iterator pos = this->chroot_names.begin();
+      pos != this->chroot_names.end();
+      ++pos)
+    {
+      // This should never fail, so no error handling here--we already
+      // validated everything when we got the chroot map.
+      sbuild::chroot_config::chroot_map::const_iterator c = this->chroots.find(*pos);
+      assert(c->second);
+
+      std::cout << c->second->get_path() << '\n';
+    }
+
+  std::cout << std::flush;
 }
 
 void
@@ -143,13 +165,29 @@
     % this->program_name % VERSION % sbuild::date(time(0))
 	    << endl;
   std::cout << endl;
-  this->config->print_chroot_config(this->chroots, std::cout);
+
+  sbuild::keyfile info;
+
+  for(sbuild::string_list::const_iterator pos = this->chroot_names.begin();
+      pos != this->chroot_names.end();
+      ++pos)
+    {
+      // This should never fail, so no error handling here--we already
+      // validated everything when we got the chroot map.
+      sbuild::chroot_config::chroot_map::const_iterator c = this->chroots.find(*pos);
+      assert(c->second);
+
+      // Generated chroots (e.g. source chroots) are not printed.
+      if (c->second->get_original())
+	info << c->second;
+    }
+
+  std::cout << info << std::flush;
 }
 
-sbuild::string_list
+void
 main_base::get_chroot_options ()
 {
-  sbuild::string_list ret;
 
   if (this->options->all_chroots == true ||
       this->options->all_sessions == true ||
@@ -163,7 +201,7 @@
 	    chroots = this->config->get_alias_list("chroot");
 	  else
 	    chroots = this->config->get_chroot_list("chroot");
-	  ret.insert(ret.end(), chroots.begin(), chroots.end());
+	  this->chroot_names.insert(this->chroot_names.end(), chroots.begin(), chroots.end());
 	}
       if (this->options->all_sessions)
 	{
@@ -173,7 +211,7 @@
 	    sessions = this->config->get_alias_list("session");
 	  else
 	    sessions = this->config->get_chroot_list("session");
-	  ret.insert(ret.end(), sessions.begin(), sessions.end());
+	  this->chroot_names.insert(this->chroot_names.end(), sessions.begin(), sessions.end());
 	}
       if (this->options->all_source_chroots)
 	{
@@ -183,8 +221,11 @@
 	    sources = this->config->get_alias_list("source");
 	  else
 	    sources = this->config->get_chroot_list("source");
-	  ret.insert(ret.end(), sources.begin(), sources.end());
+	  this->chroot_names.insert(this->chroot_names.end(), sources.begin(), sources.end());
 	}
+
+      // Validate and normalise
+      this->chroots = this->config->validate_chroots("", this->chroot_names);
     }
   else
     {
@@ -195,29 +236,11 @@
 	  this->options->action == options_base::ACTION_SESSION_END)
 	chroot_namespace = "session";
 
-      sbuild::string_list invalid_chroots =
-	this->config->validate_chroots(chroot_namespace, this->options->chroots);
-
-      if (!invalid_chroots.empty())
-	{
-	  std::string invalid_list;
-	  for (sbuild::string_list::const_iterator chroot =
-		 invalid_chroots.begin();
-	       chroot != invalid_chroots.end();
-	       ++chroot)
-	    {
-	      invalid_list += *chroot;
-	      if (chroot + 1 != invalid_chroots.end())
-		invalid_list += ", ";
-	    }
-	  throw error(invalid_list,
-		      (invalid_chroots.size() == 1)
-		      ? CHROOT_NOTFOUND : CHROOTS_NOTFOUND);
-	}
-      ret = this->options->chroots;
+      // Validate and normalise
+      this->chroot_names = this->options->chroots;
+      this->chroots = this->config->validate_chroots
+	(chroot_namespace, this->chroot_names);
     }
-
-  return ret;
 }
 
 void
@@ -261,7 +284,7 @@
     log_exception_warning(error(CHROOT_FILE2, SCHROOT_CONF, SCHROOT_CONF_CHROOT_D));
 
   /* Get list of chroots to use */
-  this->chroots = get_chroot_options();
+  get_chroot_options();
   if (this->chroots.empty())
     {
       if (!(this->options->all_chroots == true ||
@@ -282,20 +305,18 @@
 	}
     }
   this->chroot_objects.clear();
-  for(sbuild::string_list::const_iterator pos = this->chroots.begin();
-      pos != this->chroots.end();
+  for(sbuild::string_list::const_iterator pos = this->chroot_names.begin();
+      pos != this->chroot_names.end();
       ++pos)
     {
-      sbuild::chroot::ptr c = this->config->find_alias("", *pos);
-      if (c)
-	{
-	  sbuild::session::chroot_list::value_type e;
-	  e.alias = *pos;
-	  e.chroot = c;
-	  chroot_objects.push_back(e);
-	}
-      else
-	throw error(*pos, CHROOT_NOTFOUND);
+      // This should never fail, so no error handling here--we already
+      // validated everything when we got the chroot map.
+      sbuild::chroot_config::chroot_map::const_iterator c = this->chroots.find(*pos);
+      assert(c->second);
+      sbuild::session::chroot_list::value_type e;
+      e.alias = c->first;
+      e.chroot = c->second;
+      chroot_objects.push_back(e);
     }
 
   /* Print chroot list. */
diff -Nru schroot-1.6.3/bin/schroot/schroot-main-base.h schroot-1.6.4/bin/schroot/schroot-main-base.h
--- schroot-1.6.3/bin/schroot/schroot-main-base.h	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/bin/schroot/schroot-main-base.h	2012-10-27 23:39:05.000000000 +0100
@@ -39,17 +39,17 @@
     /// Error codes.
     enum error_code
       {
-	CHROOTS_NOTFOUND,  ///< Chroots not found.
 	CHROOT_FILE,       ///< No chroots are defined in ....
 	CHROOT_FILE2,      ///< No chroots are defined in ... or ....
 	CHROOT_NOTDEFINED, ///< The specified chroots are not defined.
-	CHROOT_NOTFOUND,   ///< Chroot not found.
 	SESSION_INVALID    ///< Invalid session name.
       };
 
     /// Exception type.
     typedef sbuild::custom_error<error_code> error;
 
+    typedef sbuild::chroot_config::chroot_map chroot_map;
+
     /**
      * The constructor.
      *
@@ -110,7 +110,7 @@
      *
      * @returns a list of chroots.
      */
-    virtual sbuild::string_list
+    void
     get_chroot_options ();
 
     /**
@@ -138,9 +138,11 @@
     options_base::ptr            options;
     /// The chroot configuration.
     sbuild::chroot_config::ptr   config;
-    /// The chroots to use.
-    sbuild::string_list          chroots;
-    /// The chroots to use.
+    /// The chroots to use (original names or aliases).
+    sbuild::string_list          chroot_names;
+    /// The chroots to use (alias to chroot mapping).
+    chroot_map                   chroots;
+    /// The chroots to use (for session).
     sbuild::session::chroot_list chroot_objects;
     /// The session.
     sbuild::session::ptr         session;
diff -Nru schroot-1.6.3/bin/schroot/schroot-main.cc schroot-1.6.4/bin/schroot/schroot-main.cc
--- schroot-1.6.3/bin/schroot/schroot-main.cc	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/bin/schroot/schroot-main.cc	2012-10-27 23:39:05.000000000 +0100
@@ -52,7 +52,12 @@
 void
 main::action_list ()
 {
-  this->config->print_chroot_list(this->chroots, std::cout);
+  // This list is pre-validated.
+  for(sbuild::string_list::const_iterator pos = this->chroot_names.begin();
+      pos != this->chroot_names.end();
+      ++pos)
+    std::cout << *pos << '\n';
+  std::cout << std::flush;
 }
 
 void
diff -Nru schroot-1.6.3/bin/schroot-mount/schroot-mount-main.cc schroot-1.6.4/bin/schroot-mount/schroot-mount-main.cc
--- schroot-1.6.3/bin/schroot-mount/schroot-mount-main.cc	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/bin/schroot-mount/schroot-mount-main.cc	2012-10-27 23:39:05.000000000 +0100
@@ -19,6 +19,7 @@
 #include <config.h>
 
 #include <sbuild/sbuild-mntstream.h>
+#include <sbuild/sbuild-util.h>
 
 #include "schroot-mount-main.h"
 
@@ -59,7 +60,8 @@
       emap(main::CHILD_FORK, N_("Failed to fork child")),
       emap(main::CHILD_WAIT, N_("Wait for child failed")),
       // TRANSLATORS: %1% = command name
-      emap(main::EXEC,       N_("Failed to execute “%1%”"))
+      emap(main::EXEC,       N_("Failed to execute “%1%”")),
+      emap(main::REALPATH,   N_("Failed to resolve path “%1%”"))
     };
 
 }
@@ -85,6 +87,63 @@
 {
 }
 
+std::string
+main::resolve_path (std::string const& mountpoint)
+{
+  // Ensure entry has a leading / to prevent security hole where
+  // mountpoint might be outside the chroot.
+  std::string absmountpoint(mountpoint);
+  if (absmountpoint.empty() || absmountpoint[0] != '/')
+    absmountpoint = std::string("/") + absmountpoint;
+
+  std::string directory(opts->mountpoint + absmountpoint);
+  // Canonicalise path to remove any symlinks.
+  char *resolved_path = realpath(directory.c_str(), 0);
+  if (resolved_path == 0)
+    {
+      // The path is either not present or is an invalid link.  If
+      // it's not present, we'll create it later.  If it's a link,
+      // bail out now.
+      bool link = false;
+      try
+	{
+	  if (sbuild::stat(directory, true).is_link())
+	    link = true;
+	}
+      catch (...)
+	{} // Does not exist, not a link
+
+      if (link)
+	throw error(directory, REALPATH, strerror(ENOTDIR));
+      else
+	{
+	  // Try validating the parent directory.
+	  sbuild::string_list dirs = sbuild::split_string(mountpoint, "/");
+	  if (dirs.size() > 1) // Recurse if possible, otherwise continue
+	    {
+	      std::string saveddir = *dirs.rbegin();
+	      dirs.pop_back();
+
+	      std::string newpath(resolve_path(sbuild::string_list_to_string(dirs, "/")));
+	      directory = newpath + "/" + saveddir;
+	    }
+	}
+    }
+  else
+    {
+      directory = resolved_path;
+      std::free(resolved_path);
+    }
+  // If the link was absolute (i.e. points somewhere on the host,
+  // outside the chroot, make sure that this is modified to be
+  // inside.
+  if (directory.size() < opts->mountpoint.size() ||
+      directory.substr(0,opts->mountpoint.size()) != opts->mountpoint)
+    directory = opts->mountpoint + directory;
+
+  return directory;
+}
+
 void
 main::action_mount ()
 {
@@ -95,13 +154,7 @@
 
   while (mounts >> entry)
     {
-      // Ensure entry has a leading / to prevent security hole where
-      // mountpoint might be outside the chroot.
-      std::string d = entry.directory;
-      if (d.empty() || d[0] != '/')
-	d = std::string("/") + d;
-
-      std::string directory(opts->mountpoint + entry.directory);
+      std::string directory = resolve_path(entry.directory);
 
       if (!boost::filesystem::exists(directory))
 	{
diff -Nru schroot-1.6.3/bin/schroot-mount/schroot-mount-main.h schroot-1.6.4/bin/schroot-mount/schroot-mount-main.h
--- schroot-1.6.3/bin/schroot-mount/schroot-mount-main.h	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/bin/schroot-mount/schroot-mount-main.h	2012-10-27 23:39:05.000000000 +0100
@@ -42,7 +42,8 @@
       {
 	CHILD_FORK, ///< Failed to fork child.
 	CHILD_WAIT, ///< Wait for child failed.
-	EXEC        ///< Failed to execute.
+	EXEC,       ///< Failed to execute.
+	REALPATH    ///< Failed to resolve path.
       };
 
     /// Exception type.
@@ -80,6 +81,20 @@
 	      sbuild::environment const& env);
 
     /**
+     * Ensure that the mountpoint is a valid absolute path inside the
+     * chroot.  This is to avoid absolute or relative symlinks
+     * pointing outside the chroot causing filesystems to be mounted
+     * on the host.  An exception will be thrown if it is not possible
+     * to resolve the path.
+     *
+     * @param mountpoint the mountpoint to check,
+     * @returns the validated path.
+     */
+
+    std::string
+    resolve_path (std::string const& mountpoint);
+
+    /**
      * Wait for a child process to complete, and check its exit status.
      *
      * An error will be thrown on failure.
diff -Nru schroot-1.6.3/ChangeLog schroot-1.6.4/ChangeLog
--- schroot-1.6.3/ChangeLog	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/ChangeLog	2012-10-27 23:39:05.000000000 +0100
@@ -1,3 +1,238 @@
+commit 47a850b1c160264f3361ed821c0e370ee8145f29
+Author: Roger Leigh <rleigh@debian.org>
+Date:   Sat Oct 27 23:37:25 2012 +0100
+
+    schroot-mount: Remove unused variables
+
+commit 18842347c72245afccd26a1d4adddf206ec8a77b
+Author: Roger Leigh <rleigh@debian.org>
+Date:   Sat Oct 27 23:30:55 2012 +0100
+
+    debian: Finalise changelog for 1.6.4-1
+
+commit 4b3154015cb6dfc5ce87e79e1d8ef01e04d7f485
+Author: Roger Leigh <rleigh@debian.org>
+Date:   Sat Oct 27 23:17:52 2012 +0100
+
+    debian: Fix distribution and typo in schroot NEWS
+
+commit 43dca81cd5b5f5ca3573e8f86f7faf3f0f0f6f18
+Author: Roger Leigh <rleigh@debian.org>
+Date:   Sat Oct 27 22:51:47 2012 +0100
+
+    schroot-mount: Cope with recursion into single directories
+
+commit cc414042e302440f3c0510d53d1f0aa0778d6184
+Author: Roger Leigh <rleigh@debian.org>
+Date:   Sat Oct 27 21:44:57 2012 +0100
+
+    po: Update
+
+commit 02c8cbb13042ea54fe0c16e5b4fd875fb691af3e
+Author: Roger Leigh <rleigh@debian.org>
+Date:   Sat Oct 27 21:43:59 2012 +0100
+
+    sbuild: source block-device does not expect to have a union facet
+
+commit 20e1bd7d2e3eada4d2e8051752db0e46c98c2055
+Author: Roger Leigh <rleigh@debian.org>
+Date:   Sat Oct 27 16:28:18 2012 +0100
+
+    sbuild: Test source session cloning
+
+commit 322284354df0816a67da159c1f1688f3ce309d08
+Author: Roger Leigh <rleigh@debian.org>
+Date:   Sat Oct 27 12:47:13 2012 +0100
+
+    sbuild: Correct alias handling
+    
+    Alias names were being lost before being stored in the
+    session metadata.  This has been corrected by using
+    an alias->chroot mapping for the chroots selected by
+    the user; plus keeping a list of alias names (to preserve
+    the ordering).
+    
+    This has required some refactoring to accommodate the
+    changes.  The information display functionality
+    previously in sbuild::chroot_config has been moved into
+    the client code.  The chroot validation is now also done
+    in a single step, which makes the validation simpler and
+    more robust.
+
+commit 4265d103e67cd694db7adf137bce554e82497a88
+Author: Roger Leigh <rleigh@debian.org>
+Date:   Sat Oct 27 12:23:27 2012 +0100
+
+    sbuild-mount: Correctly resolve paths with symlinks
+    
+    If the path does not exist, allow it to be created.
+    Check path components separately to allow for correct
+    normalisation if the last components of the path do
+    not yet exist.
+    
+    Add support for lstat to sbuild::stat to correctly
+    stat symlinks.
+
+commit b3e58491d89c1cf2e221301c9358c8433dfc753e
+Author: Roger Leigh <rleigh@debian.org>
+Date:   Wed Oct 24 23:40:00 2012 +0100
+
+    sbuild::chroot_facet_session: strip namespace from selected name
+
+commit 19293f7a7b0943997397ef30465cd11686990a9b
+Author: Roger Leigh <rleigh@debian.org>
+Date:   Wed Oct 24 23:25:10 2012 +0100
+
+    sbuild: Don't call set_mount_device indirectly from ctor
+    
+    See #691376.
+    
+    sbuild::chroot_block_device_base::set_device was called from
+    the chroot_block_device_base ctor, and called
+    sbuild::chroot_facet_mountable::set_mount_device for all chroot
+    types except lvm-snapshot.  However, dynamic_cast<> fails during
+    construction, leading to the mount device being overwritten, and
+    --recover-session mounting the source LV rather than the snapshot
+    LV.  This patch moves the call to set_mount_device to the session
+    clone operation in sbuild::chroot_facet_session_clonable, which
+    is where the equivalent operation is done for lvm-snapshot.  This
+    is done prior to lvm-snapshot to ensure that the snapshot is not
+    overwritten here either.
+
+commit e0e5b34fbd9ebdd08ba3220b1704569a65957b34
+Author: Roger Leigh <rleigh@debian.org>
+Date:   Wed Oct 24 21:26:11 2012 +0100
+
+    Revert "sbuild::chroot_config: Remove namespace from alias"
+    
+    This reverts commit 7003080d7b41b301fbb932c89f45135293a97859.
+
+commit a6f731475a077ffd1a347d178be3e9bc89d18e2c
+Author: Roger Leigh <rleigh@debian.org>
+Date:   Tue Oct 16 22:52:50 2012 +0100
+
+    debian: Document lockfile changes
+
+commit fd7978b4a051c813ae0c2cb12c7357676fc593ec
+Author: Roger Leigh <rleigh@debian.org>
+Date:   Tue Oct 16 22:50:47 2012 +0100
+
+    debian: Create lock directory on upgrade and startup
+
+commit 1763a93ea220d0dc38cccbcbdf661b3219c736e3
+Author: Roger Leigh <rleigh@debian.org>
+Date:   Tue Oct 16 22:50:01 2012 +0100
+
+    10mount: Use secure subdirectory of /var/lock for lockfile
+    
+    Use /var/lock/schroot/umount rather than putting the lockfile
+    directly in /var/lock
+
+commit 8f195a2e0f63aeb0e697293f482e419532159e3f
+Author: Roger Leigh <rleigh@debian.org>
+Date:   Mon Oct 15 22:48:12 2012 +0100
+
+    po: Update
+
+commit 24ccf69377225000a02693be55bb25ae4cbaf706
+Author: Roger Leigh <rleigh@debian.org>
+Date:   Mon Oct 15 21:56:36 2012 +0100
+
+    debian: Set distribution to unstable
+
+commit 2a72b5a6e806c8513200ec1b4e4ecd397274440d
+Author: Roger Leigh <rleigh@debian.org>
+Date:   Mon Oct 15 21:53:14 2012 +0100
+
+    NEWS: Merge mountpoint item from 1.7
+
+commit dbd749d0e3d0d709e78e9753fc7c98a197c06fce
+Author: Roger Leigh <rleigh@debian.org>
+Date:   Mon Oct 15 21:51:50 2012 +0100
+
+    debian: Close #689078
+
+commit 3b07fa0ca625ee15a198ec5064d89e8858fd9c49
+Author: Roger Leigh <rleigh@debian.org>
+Date:   Mon Oct 15 21:47:38 2012 +0100
+
+    sbuild::chroot_config: Remove namespace from alias
+    
+    Don't canonicalise the alias name, and strip namespace
+    if present.  This prevents the loss of the alias name
+    for the "selected chroot name" and ensures that is will
+    be set correctly in the user environment as
+    SCHROOT_ALIAS_NAME.
+
+commit e1c170ef84fb86d16c927e25a00f8ef5313702a4
+Author: Roger Leigh <rleigh@debian.org>
+Date:   Mon Oct 15 20:18:38 2012 +0100
+
+    debian: Close #688304
+
+commit f5e41bbc46774283e918e6dd4c763209d2c06cfe
+Author: Roger Leigh <rleigh@debian.org>
+Date:   Mon Oct 15 20:16:08 2012 +0100
+
+    15binfmt: Send which error message to null
+    
+    If update-binfmts is missing, don't display this unnecessarily.
+
+commit 468f8921898d89b47ac7e3601eb3de355ecc1e00
+Author: Roger Leigh <rleigh@debian.org>
+Date:   Sun Oct 14 23:03:15 2012 +0100
+
+    debian: Close #686148
+
+commit fb5bc26ad64a2deba05bcf3acfd1d28608c1be95
+Author: Roger Leigh <rleigh@debian.org>
+Date:   Sun Oct 14 22:56:17 2012 +0100
+
+    man: Document symlink mountpoint canonicalisation
+
+commit 0996519314df9c6049b7b79d5a513fcde73a412d
+Author: Roger Leigh <rleigh@debian.org>
+Date:   Sun Oct 14 22:48:58 2012 +0100
+
+    schroot-mount: Canonicalise symlinks to avoid host mounts
+    
+    If a symlink inside the chroot is absolute, and this is used
+    as part of the path in a mountpoint in the fstab file, then
+    this currently gets mounted (incorrectly) on the host.  Use
+    realpath(3) to canonicalise the path, and then add the chroot
+    path back to it if missing, to ensure that symlinks can't be
+    used to accidentally mount filesystems on the host.
+
+commit 0ed9285a9198bb12437546387dd434a866e48724
+Author: Roger Leigh <rleigh@debian.org>
+Date:   Sun Oct 14 17:12:40 2012 +0100
+
+    debian: Document schroot.conf(5) changes
+
+commit f802ac7ae5c683f241244fee44786b35cf6b3901
+Author: Roger Leigh <rleigh@debian.org>
+Date:   Sun Oct 14 17:11:29 2012 +0100
+
+    man: Update schroot.conf(5) to document script-config userkeys replacement
+
+commit 343a53a10985616b125fc25596429f7753c46ce5
+Author: Roger Leigh <rleigh@debian.org>
+Date:   Sun Oct 14 17:08:40 2012 +0100
+
+    debian: NEWS provides instructions for wheezy upgrades for profile key
+
+commit bf484a4966f527ac5fce850dcc00eb56d5c3ff03
+Author: Roger Leigh <rleigh@debian.org>
+Date:   Mon Jul 23 23:28:52 2012 +0100
+
+    debian: Bump version to 1.6.4-1
+
+commit 647c2a493cd438aa24188cf33d77dfd97e85b549
+Author: Roger Leigh <rleigh@debian.org>
+Date:   Mon Jul 23 23:28:30 2012 +0100
+
+    NEWS: Bump version to 1.6.4
+
 commit 8de95450fe69ad0c3039cdb6dfa2cc5d1851acf1
 Author: Roger Leigh <rleigh@debian.org>
 Date:   Mon Jul 23 22:44:14 2012 +0100
diff -Nru schroot-1.6.3/configure schroot-1.6.4/configure
--- schroot-1.6.3/configure	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/configure	2012-10-27 23:39:05.000000000 +0100
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for schroot 1.6.3.
+# Generated by GNU Autoconf 2.69 for schroot 1.6.4.
 #
 # Report bugs to <buildd-tools-devel@lists.alioth.debian.org>.
 #
@@ -608,8 +608,8 @@
 # Identity of this package.
 PACKAGE_NAME='schroot'
 PACKAGE_TARNAME='schroot'
-PACKAGE_VERSION='1.6.3'
-PACKAGE_STRING='schroot 1.6.3'
+PACKAGE_VERSION='1.6.4'
+PACKAGE_STRING='schroot 1.6.4'
 PACKAGE_BUGREPORT='buildd-tools-devel@lists.alioth.debian.org'
 PACKAGE_URL=''
 
@@ -1450,7 +1450,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures schroot 1.6.3 to adapt to many kinds of systems.
+\`configure' configures schroot 1.6.4 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1520,7 +1520,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of schroot 1.6.3:";;
+     short | recursive ) echo "Configuration of schroot 1.6.4:";;
    esac
   cat <<\_ACEOF
 
@@ -1661,7 +1661,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-schroot configure 1.6.3
+schroot configure 1.6.4
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2278,7 +2278,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by schroot $as_me 1.6.3, which was
+It was created by schroot $as_me 1.6.4, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -3116,7 +3116,7 @@
 
 # Define the identity of the package.
  PACKAGE='schroot'
- VERSION='1.6.3'
+ VERSION='1.6.4'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -3276,8 +3276,8 @@
 fi
 AM_BACKSLASH='\'
 
-RELEASE_DATE='1342998000'
-RELEASE_DATE_S='23 Jul 2012'
+RELEASE_DATE='1351292400'
+RELEASE_DATE_S='27 Oct 2012'
 
 cat >>confdefs.h <<_ACEOF
 #define RELEASE_DATE_S "$RELEASE_DATE_S"
@@ -20409,7 +20409,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by schroot $as_me 1.6.3, which was
+This file was extended by schroot $as_me 1.6.4, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -20475,7 +20475,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-schroot config.status 1.6.3
+schroot config.status 1.6.4
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff -Nru schroot-1.6.3/debian/changelog schroot-1.6.4/debian/changelog
--- schroot-1.6.3/debian/changelog	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/debian/changelog	2012-10-27 23:39:05.000000000 +0100
@@ -1,3 +1,42 @@
+schroot (1.6.4-1) unstable; urgency=low
+
+  * New upstream stable release.
+  * NEWS: Provide guidance for wheezy upgrades with regard to
+    use of the profile key in a backward-compatible manner also
+    using setup.config, to mimic the behaviour of the deprecated
+    script-config key.
+  * schroot.conf(5) additionally updated to document script-config
+    deprecation and use of user keys such as setup.config.
+  * schroot-mount: Canonicalise mountpoints with symlinks to avoid
+    mounting absolute paths on the host rather than inside the chroot
+    (Closes: #686148).  Note the caveat regarding paths with multiple
+    symlinks in schroot-script-config(5).  This permits safe use of
+    symlinks as mountpoints in some common circumstances, e.g. on
+    /var/lock, which is a symlink to /run/lock, though this is not
+    recommended practice.
+  * 15binfmt no longer pollutes output, by redirecting stderr from
+    "which update-binfmts" (Closes: #688304).
+  * Ensure that CHROOT_ALIAS (setup scripts) and SCHROOT_ALIAS_NAME
+    (user environment) always refer to the alias used to create the
+    session (Closes: #689078).  The alias is no longer canonicalised
+    by sbuild::chroot_config::validate_chroots.  The logic for
+    chroot validation and information display in sbuild::chroot_config
+    and schroot::main_base (and derived classes) required refactoring
+    to allow the unresolved alias name to be passed through to the
+    session clone operation in sbuild::session, so that it could be
+    stored in the chroot's sbuild::chroot_facet_session facet.
+  * On session recovery, mount the snapshot LV rather than the source
+    LV for LVM snapshot chroots (Closes: #691376).  The code which
+    sets the mount device for all mountable chroots (with an
+    sbuild::chroot_facet_mountable facet) is in
+    sbuild::chroot_facet_session_clonable::clone_session_setup().
+    All chroot types refactored to set the mount device here.
+  * 10mount uses a lock directory /var/lock/schroot to contain its
+    lockfile, rather than directly using /var/lock, which is less
+    secure.
+
+ -- Roger Leigh <rleigh@debian.org>  Sat, 27 Oct 2012 23:30:38 +0100
+
 schroot (1.6.3-1) unstable; urgency=low
 
   * New upstream stable release.
diff -Nru schroot-1.6.3/debian/schroot.init schroot-1.6.4/debian/schroot.init
--- schroot-1.6.3/debian/schroot.init	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/debian/schroot.init	2012-10-27 23:39:05.000000000 +0100
@@ -70,6 +70,20 @@
 
 case "$1" in
     start|restart|force-reload)
+	# Delete /var/lock/schroot if it's not root:root 0700, or if
+	# it's not a directory.
+	if [ -e /var/lock/schroot ]; then
+	    if [ "$(stat -c "%u %g %a" /var/lock/schroot)" != "0 0 700" ]; then
+		rm -rf /var/lock/schroot
+	    fi
+	    if [ ! -d /var/lock/schroot ]; then
+		rm -rf /var/lock/schroot
+	    fi
+	fi
+	if [ ! -d /var/lock/schroot ]; then
+	    mkdir -m 0700 /var/lock/schroot
+	fi
+
         if [ "$START_ACTION" = "end" ] || [ "$SESSIONS_RECOVER" = "end" ] ; then
             end_sessions
 	else
diff -Nru schroot-1.6.3/debian/schroot.NEWS schroot-1.6.4/debian/schroot.NEWS
--- schroot-1.6.3/debian/schroot.NEWS	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/debian/schroot.NEWS	2012-10-27 23:39:05.000000000 +0100
@@ -1,4 +1,4 @@
-schroot (1.5.2-1) experimental; urgency=low
+schroot (1.6.4-1) unstable; urgency=low
 
   Users upgrading from squeeze should take note of the following
   changes which require configuration updates:
@@ -12,6 +12,14 @@
     configuration by replacing "script-config=profilename/config" with
     "profile=profilename".
 
+    Note that if you added any variables or script fragments in
+    addition to the standard values, you should set
+    setup.config=profilename/config if you wish to continue to source
+    the configuration file in the setup scripts.  If your needs are
+    met by the new user-definable keys in schroot.conf, these are
+    recommended, but it will continue to be possible to source a
+    configuration file with setup.config if required.
+
   * schroot namespace prefixes are now required.  The compatibility
     names used in 1.4 releases have been removed.  For example, the
     source chroot "source:wheezy" is now only accessible using this
@@ -39,7 +47,7 @@
     dchroot-dsa are highly encouraged to use schroot as a superior
     replacement for both tools.
 
- -- Roger Leigh <rleigh@debian.org>  Tue, 15 May 2012 21:08:50 +0100
+ -- Roger Leigh <rleigh@debian.org>  Tue, 14 Aug 2012 21:36:06 +0100
 
 schroot (1.4.16-1) unstable; urgency=low
 
diff -Nru schroot-1.6.3/debian/schroot.postinst schroot-1.6.4/debian/schroot.postinst
--- schroot-1.6.3/debian/schroot.postinst	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/debian/schroot.postinst	2012-10-27 23:39:05.000000000 +0100
@@ -39,6 +39,22 @@
 	update-rc.d -f schroot remove >/dev/null
 fi
 
+if dpkg --compare-versions "$2" lt "1.6.4-1"; then
+    # Delete /var/lock/schroot if it's not root:root 0700, or if
+    # it's not a directory.
+    if [ -e /var/lock/schroot ]; then
+	if [ "$(stat -c "%u %g %a" /var/lock/schroot)" != "0 0 700" ]; then
+	    rm -rf /var/lock/schroot
+	fi
+	if [ ! -d /var/lock/schroot ]; then
+	    rm -rf /var/lock/schroot
+	fi
+    fi
+    if [ ! -d /var/lock/schroot ]; then
+	mkdir -m 0700 /var/lock/schroot
+    fi
+fi
+
 # dh_installdeb will replace this with shell code automatically
 # generated by other debhelper scripts.
 
diff -Nru schroot-1.6.3/etc/setup.d/10mount schroot-1.6.4/etc/setup.d/10mount
--- schroot-1.6.3/etc/setup.d/10mount	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/etc/setup.d/10mount	2012-10-27 23:39:05.000000000 +0100
@@ -62,6 +62,20 @@
 	# Note that this does not prevent the problem when programs
 	# other than schroot mount and unmount filesystems (since they
 	# don't create the lock).
+	if [ -e /var/lock/schroot ]; then
+	    if [ ! -d /var/lock/schroot ]; then
+		error "/var/lock/schroot is not a directory"
+		exit 1
+	    fi
+	else
+	    mkdir -m 0700 /var/lock/schroot
+	fi
+
+	if [ "$(stat -c "%u %g %a" /var/lock/schroot)" != "0 0 700" ]; then
+	    error "/var/lock/schroot is not owned by root:root, or lacks 0700 permissions"
+	    exit 1
+	fi
+
 	( flock 9
 	    mounts="$("$LIBEXEC_DIR/schroot-listmounts" -m "$1")"
 	    if [ "x$mounts" != 'x' ]; then
@@ -71,7 +85,7 @@
 		    umount "$mountloc" || exit 1
 		done || exit 1
 	    fi
-	) 9>"/var/lock/schroot-umount"
+	) 9>"/var/lock/schroot/umount"
     else
 	warn "Mount location $1 no longer exists; skipping unmount"
     fi
diff -Nru schroot-1.6.3/etc/setup.d/15binfmt schroot-1.6.4/etc/setup.d/15binfmt
--- schroot-1.6.3/etc/setup.d/15binfmt	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/etc/setup.d/15binfmt	2012-10-27 23:39:05.000000000 +0100
@@ -28,7 +28,7 @@
    [ "$STAGE" != "setup-stop"  ] && \
    [ "$STAGE" != "setup-recover" ]; then
     exit 0
-elif ! which update-binfmts > /dev/null; then
+elif ! which update-binfmts > /dev/null 2>&1; then
     info "Missing update-binfmts; not enabling binfmt support"
     exit 0
 fi
diff -Nru schroot-1.6.3/man/schroot.conf.5.man schroot-1.6.4/man/schroot.conf.5.man
--- schroot-1.6.3/man/schroot.conf.5.man	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/man/schroot.conf.5.man	2012-10-27 23:39:05.000000000 +0100
@@ -123,7 +123,14 @@
 \[oq]default/config\[cq].  Either of these keys may be used.  If both are
 present, then \f[CI]script\-config\fP will take precedence (\f[CI]profile\fP
 will be unset).  \f[CI]script\-config\fP is deprecated and will be removed in a
-future release.
+future release.  Note that \f[CI]profile\fP is equivalent to
+\f[CI]script\-config\fP if the file sourced by \f[CI]script\-config\fP only
+contains the standard variables provided by schroot; if any additional
+variables or shell script fragments have been added, please also set
+\f[CI]setup.config\fP, which will continue to allow this file to be sourced.
+It is recommended to replace the use of the sourced file with additional keys
+in schroot.conf where possible, but it will continue to be possible to source
+an additional configuration file using \f[CI]setup.config\fP.
 .IP
 Desktop users should note that the fstab file \fIdesktop/fstab\fP will need
 editing if you use gdm3; please see the comments in this file for further
@@ -146,14 +153,13 @@
 Note that the script will be sourced once for each and every script invocation,
 and must be idempotent.
 .IP
-This file is deprecated, and no longer exists in the current schroot version,
-but is still used if present for backward compatibility; it will be obsoleted
-and removed in a future release.  All the settings in this file are now
-settable using configuration keys in \fIschroot.conf\fP, as detailed below.
-Existing configuration should be modified to use these keys in place of this
-file.  See
-.BR schroot-script-config (5).
-for further details.
+All the default settings in this file are now settable using configuration keys
+in \fIschroot.conf\fP, as detailed below.  Existing configuration should be
+modified to use these keys in place of this file.  See
+.BR schroot-script-config (5)
+for further details.  This type of setup script configuration file is no longer
+provided as part of the standard profiles, but will continue to be sourced if
+present and this key is set.
 .TP
 \f[CBI]setup.copyfiles=\fP\f[CI]filename\fP
 A file containing a list of files to copy into the chroot (one file per line).
@@ -164,7 +170,10 @@
 The format of this file is the same as for \fI/etc/fstab\fP, documented in
 .BR fstab (5).
 The only difference is that the mountpoint path \fIfs_dir\fP is relative to the
-chroot, rather than the root.
+chroot, rather than the root.  Also note that mountpoints are canonicalised on
+the host, which will ensure that absolute symlinks point inside the chroot, but
+complex paths containing multiple symlinks may be resolved incorrectly; it is
+inadvisable to use nested symlinks as mountpoints.
 .TP
 \f[CBI]setup.nssdatabases=\fP\f[CI]filename\fP
 A file listing the system databases to copy into the chroot.  The default
diff -Nru schroot-1.6.3/man/schroot-script-config.5.man schroot-1.6.4/man/schroot-script-config.5.man
--- schroot-1.6.3/man/schroot-script-config.5.man	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/man/schroot-script-config.5.man	2012-10-27 23:39:05.000000000 +0100
@@ -52,7 +52,10 @@
 .BR fstab (5).
 The only difference is that the mountpoint path \fIfs_dir\fP is relative to the
 chroot, rather than the root.  Note that this is settable using the
-\f[CI]setup.fstab\fP key.
+\f[CI]setup.fstab\fP key.  Also note that mountpoints are canonicalised on the
+host, which will ensure that absolute symlinks point inside the chroot, but
+complex paths containing multiple symlinks may be resolved incorrectly; it is
+advised to not use nested symlinks as mountpoints.
 .TP
 SETUP_NSSDATABASES
 A file listing the system databases to copy into the chroot.  The default
diff -Nru schroot-1.6.3/NEWS schroot-1.6.4/NEWS
--- schroot-1.6.3/NEWS	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/NEWS	2012-10-27 23:39:05.000000000 +0100
@@ -1,12 +1,22 @@
 NEWS                                                            -*- outline -*-
 ----
 
-Welcome to schroot 1.6.3.  Please read these release notes carefully.
+Welcome to schroot 1.6.4.  Please read these release notes carefully.
 
 Full installation instructions are provided in the INSTALL file.  The
 README file also contains more specific notes regarding building and
 configuration.
 
+* Major changes in 1.6.4:
+
+  1) Canonicalise symlink mount points.  If a mount point in fstab
+     contains a path with symlinks as mountpoint, canonicalise the
+     path, and ensure that absolute paths are mounted inside the
+     chroot.  The canonicalisation is performed on the host rather
+     than inside the chroot, so complex paths containing multiple
+     symlinks may not resolve correctly; but in the simple case of a
+     single link will resolve paths accurately.
+
 * Major changes in 1.6.3:
 
   1) Revert pam_env change from 1.6.2.  This is due to running the PAM
Binary files /tmp/rPk2EEzs8W/schroot-1.6.3/po/cs.gmo and /tmp/CGqLNJhQG_/schroot-1.6.4/po/cs.gmo differ
diff -Nru schroot-1.6.3/po/cs.po schroot-1.6.4/po/cs.po
--- schroot-1.6.3/po/cs.po	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/po/cs.po	2012-10-27 23:39:05.000000000 +0100
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: schroot\n"
 "Report-Msgid-Bugs-To: Roger Leigh <rleigh@debian.org>\n"
-"POT-Creation-Date: 2012-06-25 00:08+0100\n"
+"POT-Creation-Date: 2012-10-27 19:35+0100\n"
 "PO-Revision-Date: 2010-07-11 18:39+0200\n"
 "Last-Translator: Miroslav Kure <kurem@debian.cz>\n"
 "Language-Team: Czech <debian-l10n-czech@lists.debian.org>\n"
@@ -263,13 +263,6 @@
 msgid "[%1% chroot] Running command: “%2%”"
 msgstr "[chroot %1%] Spouštím příkaz: „%2%“"
 
-#. TRANSLATORS: %1% = program name
-#. TRANSLATORS: %2% = program version
-#. TRANSLATORS: %3% = current date
-#, boost-format
-msgid "schroot configuration generated by %1% %2% on %3%"
-msgstr "nastavení schroot vytvořeno programem %1% %2% %3%"
-
 #. TRANSLATORS: '...' is an ellipsis e.g. U+2026, and '-'
 #. is an em-dash.
 #, fuzzy
@@ -397,6 +390,10 @@
 msgid "Failed to execute “%1%”"
 msgstr "Nepodařilo se spustit „%1%“"
 
+#, fuzzy, boost-format
+msgid "Failed to resolve path “%1%”"
+msgstr "Nepodařilo se spustit „%1%“"
+
 #. TRANSLATORS: '...' is an ellipsis e.g. U+2026,
 #. and '-' is an em-dash.
 #, fuzzy
@@ -433,11 +430,6 @@
 msgid "No device specified"
 msgstr "Nebylo zadáno žádné zařízení"
 
-#. TRANSLATORS: %1% = comma-separated list of chroot names
-#, boost-format
-msgid "%1%: Chroots not found"
-msgstr "Chroot prostředí nenalezeny: %1%"
-
 #. TRANSLATORS: %4% = file
 #, fuzzy, boost-format
 msgid "No chroots are defined in ‘%4%’"
@@ -454,11 +446,6 @@
 msgid "The specified chroots are not defined in ‘%1%’"
 msgstr "Zadaná chroot prostředí nejsou v „%1%“ definována"
 
-#. TRANSLATORS: %1% = chroot name
-#, boost-format
-msgid "%1%: Chroot not found"
-msgstr "%1%: Chroot nebyl nalezen"
-
 #, boost-format
 msgid "%1%: Invalid session name"
 msgstr "%1%: Neplatný název sezení"
@@ -498,6 +485,13 @@
 msgid "Support for ‘plain’ chroots"
 msgstr "Podpora pro běžný chroot"
 
+#. TRANSLATORS: %1% = program name
+#. TRANSLATORS: %2% = program version
+#. TRANSLATORS: %3% = current date
+#, boost-format
+msgid "schroot configuration generated by %1% %2% on %3%"
+msgstr "nastavení schroot vytvořeno programem %1% %2% %3%"
+
 msgid "Chroot selection"
 msgstr "Výběr chrootu"
 
@@ -857,8 +851,15 @@
 msgid "Alias ‘%1%’ already associated with ‘%4%’ chroot"
 msgstr "Alias „%1%“ je již asociován s chrootem „%4%“"
 
-msgid "No such chroot"
-msgstr "Takový chroot neexistuje"
+#. TRANSLATORS: %1% = chroot name
+#, boost-format
+msgid "%1%: Chroot not found"
+msgstr "%1%: Chroot nebyl nalezen"
+
+#. TRANSLATORS: %1% = comma-separated list of chroot names
+#, boost-format
+msgid "%1%: Chroots not found"
+msgstr "Chroot prostředí nenalezeny: %1%"
 
 #. TRANSLATORS: %1% = chroot name
 #, fuzzy, boost-format
@@ -1405,6 +1406,9 @@
 msgid "Failed to stat file descriptor"
 msgstr "Nepodařilo se zjistit stav popisovače souboru"
 
+#~ msgid "No such chroot"
+#~ msgstr "Takový chroot neexistuje"
+
 #, fuzzy
 #~ msgid ""
 #~ "Exactly one chroot must be specified when creating or removing a session"
Binary files /tmp/rPk2EEzs8W/schroot-1.6.3/po/da.gmo and /tmp/CGqLNJhQG_/schroot-1.6.4/po/da.gmo differ
diff -Nru schroot-1.6.3/po/da.po schroot-1.6.4/po/da.po
--- schroot-1.6.3/po/da.po	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/po/da.po	2012-10-27 23:39:05.000000000 +0100
@@ -18,7 +18,7 @@
 msgstr ""
 "Project-Id-Version: schroot 1.6.0-1\n"
 "Report-Msgid-Bugs-To: Roger Leigh <rleigh@debian.org>\n"
-"POT-Creation-Date: 2012-06-25 00:08+0100\n"
+"POT-Creation-Date: 2012-10-27 19:35+0100\n"
 "PO-Revision-Date: 2012-05-31 17:34+0000\n"
 "Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n"
 "Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
@@ -282,14 +282,6 @@
 msgid "[%1% chroot] Running command: “%2%”"
 msgstr "[%1% chroot] Kørende kommando: »%2%«"
 
-# måske schroot-konfiguration sådan at kommandonavnet er adskilt
-#. TRANSLATORS: %1% = program name
-#. TRANSLATORS: %2% = program version
-#. TRANSLATORS: %3% = current date
-#, boost-format
-msgid "schroot configuration generated by %1% %2% on %3%"
-msgstr "schrootkonfiguration oprettet af %1% %2% den %3%"
-
 #. TRANSLATORS: '...' is an ellipsis e.g. U+2026, and '-'
 #. is an em-dash.
 msgid "[OPTION…] [COMMAND] — run command or shell in a chroot"
@@ -417,6 +409,10 @@
 msgid "Failed to execute “%1%”"
 msgstr "Kunne ikke køre »%1%«"
 
+#, fuzzy, boost-format
+msgid "Failed to resolve path “%1%”"
+msgstr "Kunne ikke køre »%1%«"
+
 #. TRANSLATORS: '...' is an ellipsis e.g. U+2026,
 #. and '-' is an em-dash.
 msgid "[OPTION…] — mount filesystems"
@@ -452,11 +448,6 @@
 msgid "No device specified"
 msgstr "Ingen enhed angivet"
 
-#. TRANSLATORS: %1% = comma-separated list of chroot names
-#, boost-format
-msgid "%1%: Chroots not found"
-msgstr "%1%: Chroot'er ikke fundet"
-
 #. TRANSLATORS: %4% = file
 #, boost-format
 msgid "No chroots are defined in ‘%4%’"
@@ -473,11 +464,6 @@
 msgid "The specified chroots are not defined in ‘%1%’"
 msgstr "De angivne chroot'er er ikke defineret i »%1%«"
 
-#. TRANSLATORS: %1% = chroot name
-#, boost-format
-msgid "%1%: Chroot not found"
-msgstr "%1%: Chroot ikke fundet"
-
 #, boost-format
 msgid "%1%: Invalid session name"
 msgstr "%1%: Ugyldigt sessionsnavn"
@@ -509,6 +495,14 @@
 msgid "Support for ‘plain’ chroots"
 msgstr "Understøttelse af »plain« chroot'er"
 
+# måske schroot-konfiguration sådan at kommandonavnet er adskilt
+#. TRANSLATORS: %1% = program name
+#. TRANSLATORS: %2% = program version
+#. TRANSLATORS: %3% = current date
+#, boost-format
+msgid "schroot configuration generated by %1% %2% on %3%"
+msgstr "schrootkonfiguration oprettet af %1% %2% den %3%"
+
 msgid "Chroot selection"
 msgstr "Chrootudvælgelse"
 
@@ -861,8 +855,15 @@
 msgid "Alias ‘%1%’ already associated with ‘%4%’ chroot"
 msgstr "Alias »%1%« er allerede forbundet med »%4%« chroot"
 
-msgid "No such chroot"
-msgstr "Ingen sådan chroot"
+#. TRANSLATORS: %1% = chroot name
+#, boost-format
+msgid "%1%: Chroot not found"
+msgstr "%1%: Chroot ikke fundet"
+
+#. TRANSLATORS: %1% = comma-separated list of chroot names
+#, boost-format
+msgid "%1%: Chroots not found"
+msgstr "%1%: Chroot'er ikke fundet"
 
 #. TRANSLATORS: %1% = chroot name
 #, boost-format
@@ -1418,5 +1419,8 @@
 msgid "Failed to stat file descriptor"
 msgstr "Kunne ikke stat fildeskriptor"
 
+#~ msgid "No such chroot"
+#~ msgstr "Ingen sådan chroot"
+
 #~ msgid "The path does not end with ‘/config’"
 #~ msgstr "Stien afsluttes ikke med »/config«"
Binary files /tmp/rPk2EEzs8W/schroot-1.6.3/po/de.gmo and /tmp/CGqLNJhQG_/schroot-1.6.4/po/de.gmo differ
diff -Nru schroot-1.6.3/po/de.po schroot-1.6.4/po/de.po
--- schroot-1.6.3/po/de.po	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/po/de.po	2012-10-27 23:39:05.000000000 +0100
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: schroot 1.6.0-1\n"
 "Report-Msgid-Bugs-To: Roger Leigh <rleigh@debian.org>\n"
-"POT-Creation-Date: 2012-06-25 00:08+0100\n"
+"POT-Creation-Date: 2012-10-27 19:35+0100\n"
 "PO-Revision-Date: 2012-06-06 17:33+0200\n"
 "Last-Translator: Holger Wansing <linux@wansing-online.de>\n"
 "Language-Team: German <debian-l10n-german@lists.debian.org>\n"
@@ -267,13 +267,6 @@
 msgid "[%1% chroot] Running command: “%2%”"
 msgstr "[Chroot %1%] Befehl »%2%« gestartet"
 
-#. TRANSLATORS: %1% = program name
-#. TRANSLATORS: %2% = program version
-#. TRANSLATORS: %3% = current date
-#, boost-format
-msgid "schroot configuration generated by %1% %2% on %3%"
-msgstr "schroot-Konfiguration erzeugt von %1% %2% am %3%"
-
 #. TRANSLATORS: '...' is an ellipsis e.g. U+2026, and '-'
 #. is an em-dash.
 msgid "[OPTION…] [COMMAND] — run command or shell in a chroot"
@@ -407,6 +400,10 @@
 msgid "Failed to execute “%1%”"
 msgstr "Ausführung von »%1%« fehlgeschlagen"
 
+#, fuzzy, boost-format
+msgid "Failed to resolve path “%1%”"
+msgstr "Ausführung von »%1%« fehlgeschlagen"
+
 # CHECKME: stimmt "[OPTION …]" oder sollte es "[OPTIONEN …]" oder
 # "[OPTION…]" heißen?
 #. TRANSLATORS: '...' is an ellipsis e.g. U+2026,
@@ -443,11 +440,6 @@
 msgid "No device specified"
 msgstr "Kein Gerät angegeben"
 
-#. TRANSLATORS: %1% = comma-separated list of chroot names
-#, boost-format
-msgid "%1%: Chroots not found"
-msgstr "Chroots %1% nicht gefunden"
-
 #. TRANSLATORS: %4% = file
 #, boost-format
 msgid "No chroots are defined in ‘%4%’"
@@ -465,11 +457,6 @@
 msgid "The specified chroots are not defined in ‘%1%’"
 msgstr "Die angegebenen Chroots sind nicht in »%1%« definiert."
 
-#. TRANSLATORS: %1% = chroot name
-#, boost-format
-msgid "%1%: Chroot not found"
-msgstr "Chroot %1% nicht gefunden"
-
 #, boost-format
 msgid "%1%: Invalid session name"
 msgstr "%1%: ungültiger Sitzungsname"
@@ -501,6 +488,13 @@
 msgid "Support for ‘plain’ chroots"
 msgstr "Unterstützung für »plain«-Chroots"
 
+#. TRANSLATORS: %1% = program name
+#. TRANSLATORS: %2% = program version
+#. TRANSLATORS: %3% = current date
+#, boost-format
+msgid "schroot configuration generated by %1% %2% on %3%"
+msgstr "schroot-Konfiguration erzeugt von %1% %2% am %3%"
+
 msgid "Chroot selection"
 msgstr "Chroot-Auswahl"
 
@@ -863,8 +857,15 @@
 msgid "Alias ‘%1%’ already associated with ‘%4%’ chroot"
 msgstr "Der Alias »%1%« ist bereits dem Chroot »%4%« zugeordnet."
 
-msgid "No such chroot"
-msgstr "Chroot nicht gefunden"
+#. TRANSLATORS: %1% = chroot name
+#, boost-format
+msgid "%1%: Chroot not found"
+msgstr "Chroot %1% nicht gefunden"
+
+#. TRANSLATORS: %1% = comma-separated list of chroot names
+#, boost-format
+msgid "%1%: Chroots not found"
+msgstr "Chroots %1% nicht gefunden"
 
 #. TRANSLATORS: %1% = chroot name
 #, boost-format
@@ -1435,6 +1436,9 @@
 msgid "Failed to stat file descriptor"
 msgstr "Dateideskriptor konnte nicht mit »stat« abgefragt werden."
 
+#~ msgid "No such chroot"
+#~ msgstr "Chroot nicht gefunden"
+
 #~ msgid "The path does not end with ‘/config’"
 #~ msgstr "Der Pfad endet nicht mit »/config«."
 
Binary files /tmp/rPk2EEzs8W/schroot-1.6.3/po/en.gmo and /tmp/CGqLNJhQG_/schroot-1.6.4/po/en.gmo differ
diff -Nru schroot-1.6.3/po/en.po schroot-1.6.4/po/en.po
--- schroot-1.6.3/po/en.po	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/po/en.po	2012-10-27 23:39:05.000000000 +0100
@@ -6,8 +6,8 @@
 msgstr ""
 "Project-Id-Version: schroot 0.1.2\n"
 "Report-Msgid-Bugs-To: Roger Leigh <rleigh@debian.org>\n"
-"POT-Creation-Date: 2012-06-25 00:08+0100\n"
-"PO-Revision-Date: 2012-06-25 00:11+0100\n"
+"POT-Creation-Date: 2012-10-27 19:35+0100\n"
+"PO-Revision-Date: 2012-10-15 22:47+0100\n"
 "Last-Translator: Roger Leigh <rleigh@debian.org>\n"
 "Language-Team: English <rleigh@debian.org>\n"
 "Language: en\n"
@@ -260,13 +260,6 @@
 msgid "[%1% chroot] Running command: “%2%”"
 msgstr "[%1% chroot] Running command: “%2%”"
 
-#. TRANSLATORS: %1% = program name
-#. TRANSLATORS: %2% = program version
-#. TRANSLATORS: %3% = current date
-#, boost-format
-msgid "schroot configuration generated by %1% %2% on %3%"
-msgstr "schroot configuration generated by %1% %2% on %3%"
-
 #. TRANSLATORS: '...' is an ellipsis e.g. U+2026, and '-'
 #. is an em-dash.
 msgid "[OPTION…] [COMMAND] — run command or shell in a chroot"
@@ -392,6 +385,10 @@
 msgid "Failed to execute “%1%”"
 msgstr "Failed to execute “%1%”"
 
+#, boost-format
+msgid "Failed to resolve path “%1%”"
+msgstr "Failed to resolve path “%1%”"
+
 #. TRANSLATORS: '...' is an ellipsis e.g. U+2026,
 #. and '-' is an em-dash.
 msgid "[OPTION…] — mount filesystems"
@@ -426,11 +423,6 @@
 msgid "No device specified"
 msgstr "No device specified"
 
-#. TRANSLATORS: %1% = comma-separated list of chroot names
-#, boost-format
-msgid "%1%: Chroots not found"
-msgstr "%1%: Chroots not found"
-
 #. TRANSLATORS: %4% = file
 #, boost-format
 msgid "No chroots are defined in ‘%4%’"
@@ -447,11 +439,6 @@
 msgid "The specified chroots are not defined in ‘%1%’"
 msgstr "The specified chroots are not defined in ‘%1%’"
 
-#. TRANSLATORS: %1% = chroot name
-#, boost-format
-msgid "%1%: Chroot not found"
-msgstr "%1%: Chroot not found"
-
 #, boost-format
 msgid "%1%: Invalid session name"
 msgstr "%1%: Invalid session name"
@@ -483,6 +470,13 @@
 msgid "Support for ‘plain’ chroots"
 msgstr "Support for ‘plain’ chroots"
 
+#. TRANSLATORS: %1% = program name
+#. TRANSLATORS: %2% = program version
+#. TRANSLATORS: %3% = current date
+#, boost-format
+msgid "schroot configuration generated by %1% %2% on %3%"
+msgstr "schroot configuration generated by %1% %2% on %3%"
+
 msgid "Chroot selection"
 msgstr "Chroot selection"
 
@@ -833,8 +827,15 @@
 msgid "Alias ‘%1%’ already associated with ‘%4%’ chroot"
 msgstr "Alias ‘%1%’ already associated with ‘%4%’ chroot"
 
-msgid "No such chroot"
-msgstr "No such chroot"
+#. TRANSLATORS: %1% = chroot name
+#, boost-format
+msgid "%1%: Chroot not found"
+msgstr "%1%: Chroot not found"
+
+#. TRANSLATORS: %1% = comma-separated list of chroot names
+#, boost-format
+msgid "%1%: Chroots not found"
+msgstr "%1%: Chroots not found"
 
 #. TRANSLATORS: %1% = chroot name
 #, boost-format
@@ -1378,3 +1379,6 @@
 
 msgid "Failed to stat file descriptor"
 msgstr "Failed to stat file descriptor"
+
+#~ msgid "No such chroot"
+#~ msgstr "No such chroot"
Binary files /tmp/rPk2EEzs8W/schroot-1.6.3/po/eu.gmo and /tmp/CGqLNJhQG_/schroot-1.6.4/po/eu.gmo differ
diff -Nru schroot-1.6.3/po/eu.po schroot-1.6.4/po/eu.po
--- schroot-1.6.3/po/eu.po	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/po/eu.po	2012-10-27 23:39:05.000000000 +0100
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: eu\n"
 "Report-Msgid-Bugs-To: Roger Leigh <rleigh@debian.org>\n"
-"POT-Creation-Date: 2012-06-25 00:08+0100\n"
+"POT-Creation-Date: 2012-10-27 19:35+0100\n"
 "PO-Revision-Date: 2010-01-16 15:43+0000\n"
 "Last-Translator: Piarres Beobide <pi@beobide.net>\n"
 "Language-Team: Euskara <Librezale@librezale.org>\n"
@@ -280,13 +280,6 @@
 msgid "[%1% chroot] Running command: “%2%”"
 msgstr "[%1% chroot] Komandoa exekutatzen: \"%2%\""
 
-#. TRANSLATORS: %1% = program name
-#. TRANSLATORS: %2% = program version
-#. TRANSLATORS: %3% = current date
-#, boost-format
-msgid "schroot configuration generated by %1% %2% on %3%"
-msgstr "%1% %2%-ek %3%-ean sortutako schroot konfigurazioa"
-
 #. TRANSLATORS: '...' is an ellipsis e.g. U+2026, and '-'
 #. is an em-dash.
 #, fuzzy
@@ -418,6 +411,10 @@
 msgid "Failed to execute “%1%”"
 msgstr "Huts egin du '%1%' exekutatzean"
 
+#, fuzzy, boost-format
+msgid "Failed to resolve path “%1%”"
+msgstr "Huts egin du '%1%' exekutatzean"
+
 #. TRANSLATORS: '...' is an ellipsis e.g. U+2026,
 #. and '-' is an em-dash.
 #, fuzzy
@@ -454,11 +451,6 @@
 msgid "No device specified"
 msgstr "Ez da gailurik ezarri"
 
-#. TRANSLATORS: %1% = comma-separated list of chroot names
-#, boost-format
-msgid "%1%: Chroots not found"
-msgstr "%1%: Ez da chroot-ik aurkitu"
-
 #. TRANSLATORS: %4% = file
 #, fuzzy, boost-format
 msgid "No chroots are defined in ‘%4%’"
@@ -475,11 +467,6 @@
 msgid "The specified chroots are not defined in ‘%1%’"
 msgstr "Ezarritako choot-ak ez daude %1%-en definiturik"
 
-#. TRANSLATORS: %1% = chroot name
-#, boost-format
-msgid "%1%: Chroot not found"
-msgstr "%1%: ez da chroot-a aurkitu"
-
 #, fuzzy, boost-format
 msgid "%1%: Invalid session name"
 msgstr "%1%: ekintza baliogabea"
@@ -512,6 +499,13 @@
 msgid "Support for ‘plain’ chroots"
 msgstr ""
 
+#. TRANSLATORS: %1% = program name
+#. TRANSLATORS: %2% = program version
+#. TRANSLATORS: %3% = current date
+#, boost-format
+msgid "schroot configuration generated by %1% %2% on %3%"
+msgstr "%1% %2%-ek %3%-ean sortutako schroot konfigurazioa"
+
 msgid "Chroot selection"
 msgstr "Chroot hautaketa"
 
@@ -872,8 +866,15 @@
 msgid "Alias ‘%1%’ already associated with ‘%4%’ chroot"
 msgstr "'%1%' ezizena oraindik '%4%' chroot-arekin loturik dago"
 
-msgid "No such chroot"
-msgstr "Ez dago chroot hori"
+#. TRANSLATORS: %1% = chroot name
+#, boost-format
+msgid "%1%: Chroot not found"
+msgstr "%1%: ez da chroot-a aurkitu"
+
+#. TRANSLATORS: %1% = comma-separated list of chroot names
+#, boost-format
+msgid "%1%: Chroots not found"
+msgstr "%1%: Ez da chroot-ik aurkitu"
 
 #. TRANSLATORS: %1% = chroot name
 #, fuzzy, boost-format
@@ -1436,6 +1437,9 @@
 msgid "Failed to stat file descriptor"
 msgstr "Huts egin du fitxategia deskriptorea egoera eskuratzean"
 
+#~ msgid "No such chroot"
+#~ msgstr "Ez dago chroot hori"
+
 #, fuzzy
 #~ msgid ""
 #~ "Exactly one chroot must be specified when creating or removing a session"
Binary files /tmp/rPk2EEzs8W/schroot-1.6.3/po/fr.gmo and /tmp/CGqLNJhQG_/schroot-1.6.4/po/fr.gmo differ
diff -Nru schroot-1.6.3/po/fr.po schroot-1.6.4/po/fr.po
--- schroot-1.6.3/po/fr.po	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/po/fr.po	2012-10-27 23:39:05.000000000 +0100
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: schroot\n"
 "Report-Msgid-Bugs-To: Roger Leigh <rleigh@debian.org>\n"
-"POT-Creation-Date: 2012-06-25 00:08+0100\n"
+"POT-Creation-Date: 2012-10-27 19:35+0100\n"
 "PO-Revision-Date: 2012-05-31 22:30+0200\n"
 "Last-Translator: Thomas Blein <tblein@tblein.eu>\n"
 "Language-Team: French <debian-l10n-french@lists.debian.org>\n"
@@ -272,13 +272,6 @@
 msgid "[%1% chroot] Running command: “%2%”"
 msgstr "[chroot %1%] Exécution de la commande : « %2% »"
 
-#. TRANSLATORS: %1% = program name
-#. TRANSLATORS: %2% = program version
-#. TRANSLATORS: %3% = current date
-#, boost-format
-msgid "schroot configuration generated by %1% %2% on %3%"
-msgstr "Configuration schroot générée par %1% %2% le %3%"
-
 #. TRANSLATORS: '...' is an ellipsis e.g. U+2026, and '-'
 #. is an em-dash.
 msgid "[OPTION…] [COMMAND] — run command or shell in a chroot"
@@ -411,6 +404,10 @@
 msgid "Failed to execute “%1%”"
 msgstr "Échec lors de l'exécution de « %1% »"
 
+#, fuzzy, boost-format
+msgid "Failed to resolve path “%1%”"
+msgstr "Échec lors de l'exécution de « %1% »"
+
 #. TRANSLATORS: '...' is an ellipsis e.g. U+2026,
 #. and '-' is an em-dash.
 msgid "[OPTION…] — mount filesystems"
@@ -445,11 +442,6 @@
 msgid "No device specified"
 msgstr "Aucun périphérique spécifié"
 
-#. TRANSLATORS: %1% = comma-separated list of chroot names
-#, boost-format
-msgid "%1%: Chroots not found"
-msgstr "%1% : chroot introuvable"
-
 #. TRANSLATORS: %4% = file
 #, boost-format
 msgid "No chroots are defined in ‘%4%’"
@@ -466,11 +458,6 @@
 msgid "The specified chroots are not defined in ‘%1%’"
 msgstr "Les chroots spécifiés ne sont pas définis dans « %1% »"
 
-#. TRANSLATORS: %1% = chroot name
-#, boost-format
-msgid "%1%: Chroot not found"
-msgstr "%1% : chroot introuvable"
-
 #, boost-format
 msgid "%1%: Invalid session name"
 msgstr "%1% : nom de session non valable"
@@ -502,6 +489,13 @@
 msgid "Support for ‘plain’ chroots"
 msgstr "chroots de type « plain »"
 
+#. TRANSLATORS: %1% = program name
+#. TRANSLATORS: %2% = program version
+#. TRANSLATORS: %3% = current date
+#, boost-format
+msgid "schroot configuration generated by %1% %2% on %3%"
+msgstr "Configuration schroot générée par %1% %2% le %3%"
+
 msgid "Chroot selection"
 msgstr "Sélection du chroot"
 
@@ -859,8 +853,15 @@
 msgid "Alias ‘%1%’ already associated with ‘%4%’ chroot"
 msgstr "L'alias « %1% » est déjà associé au chroot « %4% »"
 
-msgid "No such chroot"
-msgstr "Le chroot spécifié n'existe pas"
+#. TRANSLATORS: %1% = chroot name
+#, boost-format
+msgid "%1%: Chroot not found"
+msgstr "%1% : chroot introuvable"
+
+#. TRANSLATORS: %1% = comma-separated list of chroot names
+#, boost-format
+msgid "%1%: Chroots not found"
+msgstr "%1% : chroot introuvable"
 
 #. TRANSLATORS: %1% = chroot name
 #, boost-format
@@ -1424,6 +1425,9 @@
 msgid "Failed to stat file descriptor"
 msgstr "Échec lors de l'exécution de « stat » sur le descripteur de fichier"
 
+#~ msgid "No such chroot"
+#~ msgstr "Le chroot spécifié n'existe pas"
+
 #~ msgid "The path does not end with ‘/config’"
 #~ msgstr "Le chemin ne se termine pas par « /config »"
 
Binary files /tmp/rPk2EEzs8W/schroot-1.6.3/po/it.gmo and /tmp/CGqLNJhQG_/schroot-1.6.4/po/it.gmo differ
diff -Nru schroot-1.6.3/po/it.po schroot-1.6.4/po/it.po
--- schroot-1.6.3/po/it.po	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/po/it.po	2012-10-27 23:39:05.000000000 +0100
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: schroot 1.4.16-1\n"
 "Report-Msgid-Bugs-To: Roger Leigh <rleigh@debian.org>\n"
-"POT-Creation-Date: 2012-06-25 00:08+0100\n"
+"POT-Creation-Date: 2012-10-27 19:35+0100\n"
 "PO-Revision-Date: 2010-12-07 20:01+0100\n"
 "Last-Translator: Vincenzo Campanella <vinz65@gmail.com>\n"
 "Language-Team: Italian <tp@lists.linux.it>\n"
@@ -271,13 +271,6 @@
 msgid "[%1% chroot] Running command: “%2%”"
 msgstr "[chroot %1%] Esecuzione in corso del comando: «%2%»"
 
-#. TRANSLATORS: %1% = program name
-#. TRANSLATORS: %2% = program version
-#. TRANSLATORS: %3% = current date
-#, boost-format
-msgid "schroot configuration generated by %1% %2% on %3%"
-msgstr "Configurazione di schroot generata da %1% %2% il %3%"
-
 #. TRANSLATORS: '...' is an ellipsis e.g. U+2026, and '-'
 #. is an em-dash.
 #, fuzzy
@@ -409,6 +402,10 @@
 msgid "Failed to execute “%1%”"
 msgstr "Esecuzione di «%1%» non riuscita"
 
+#, fuzzy, boost-format
+msgid "Failed to resolve path “%1%”"
+msgstr "Esecuzione di «%1%» non riuscita"
+
 #. TRANSLATORS: '...' is an ellipsis e.g. U+2026,
 #. and '-' is an em-dash.
 #, fuzzy
@@ -446,11 +443,6 @@
 msgid "No device specified"
 msgstr "Non è stato specificato alcun device"
 
-#. TRANSLATORS: %1% = comma-separated list of chroot names
-#, boost-format
-msgid "%1%: Chroots not found"
-msgstr "%1%: chroot non trovati"
-
 #. TRANSLATORS: %4% = file
 #, fuzzy, boost-format
 msgid "No chroots are defined in ‘%4%’"
@@ -467,11 +459,6 @@
 msgid "The specified chroots are not defined in ‘%1%’"
 msgstr "I chroot specificati non sono definiti in «%1%»"
 
-#. TRANSLATORS: %1% = chroot name
-#, boost-format
-msgid "%1%: Chroot not found"
-msgstr "%1%: chroot non trovato"
-
 #, boost-format
 msgid "%1%: Invalid session name"
 msgstr "%1%: nome di sessione non valido"
@@ -512,6 +499,13 @@
 msgid "Support for ‘plain’ chroots"
 msgstr "Supporto per chroot di tipo «plain»"
 
+#. TRANSLATORS: %1% = program name
+#. TRANSLATORS: %2% = program version
+#. TRANSLATORS: %3% = current date
+#, boost-format
+msgid "schroot configuration generated by %1% %2% on %3%"
+msgstr "Configurazione di schroot generata da %1% %2% il %3%"
+
 msgid "Chroot selection"
 msgstr "Selezione del chroot"
 
@@ -875,8 +869,15 @@
 msgid "Alias ‘%1%’ already associated with ‘%4%’ chroot"
 msgstr "L'alias «%1%» è già associato con il chroot «%4%»"
 
-msgid "No such chroot"
-msgstr "Questo chroot non esiste"
+#. TRANSLATORS: %1% = chroot name
+#, boost-format
+msgid "%1%: Chroot not found"
+msgstr "%1%: chroot non trovato"
+
+#. TRANSLATORS: %1% = comma-separated list of chroot names
+#, boost-format
+msgid "%1%: Chroots not found"
+msgstr "%1%: chroot non trovati"
 
 #. TRANSLATORS: %1% = chroot name
 #, fuzzy, boost-format
@@ -1426,6 +1427,9 @@
 msgid "Failed to stat file descriptor"
 msgstr "Impossibile effettuare lo stat del descrittore del file"
 
+#~ msgid "No such chroot"
+#~ msgstr "Questo chroot non esiste"
+
 #, fuzzy
 #~ msgid ""
 #~ "Exactly one chroot must be specified when creating or removing a session"
Binary files /tmp/rPk2EEzs8W/schroot-1.6.3/po/pt.gmo and /tmp/CGqLNJhQG_/schroot-1.6.4/po/pt.gmo differ
diff -Nru schroot-1.6.3/po/pt.po schroot-1.6.4/po/pt.po
--- schroot-1.6.3/po/pt.po	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/po/pt.po	2012-10-27 23:39:05.000000000 +0100
@@ -10,7 +10,7 @@
 msgstr ""
 "Project-Id-Version: schroot 1.6.0-1\n"
 "Report-Msgid-Bugs-To: Roger Leigh <rleigh@debian.org>\n"
-"POT-Creation-Date: 2012-06-25 00:08+0100\n"
+"POT-Creation-Date: 2012-10-27 19:35+0100\n"
 "PO-Revision-Date: 2012-05-30 23:40+0100\n"
 "Last-Translator: Pedro Ribeiro <p.m42.ribeiro@gmail.com>\n"
 "Language-Team: Portuguese <traduz@debianpt.org>\n"
@@ -265,13 +265,6 @@
 msgid "[%1% chroot] Running command: “%2%”"
 msgstr "[chroot %1%] A executar comando: “%2%”"
 
-#. TRANSLATORS: %1% = program name
-#. TRANSLATORS: %2% = program version
-#. TRANSLATORS: %3% = current date
-#, boost-format
-msgid "schroot configuration generated by %1% %2% on %3%"
-msgstr "configuração de schroot gerada por %1% %2% em %3%"
-
 #. TRANSLATORS: '...' is an ellipsis e.g. U+2026, and '-'
 #. is an em-dash.
 msgid "[OPTION…] [COMMAND] — run command or shell in a chroot"
@@ -399,6 +392,10 @@
 msgid "Failed to execute “%1%”"
 msgstr "Falhou a execução de “%1%”"
 
+#, fuzzy, boost-format
+msgid "Failed to resolve path “%1%”"
+msgstr "Falhou a execução de “%1%”"
+
 #. TRANSLATORS: '...' is an ellipsis e.g. U+2026,
 #. and '-' is an em-dash.
 msgid "[OPTION…] — mount filesystems"
@@ -433,11 +430,6 @@
 msgid "No device specified"
 msgstr "Dispositivo não especificado"
 
-#. TRANSLATORS: %1% = comma-separated list of chroot names
-#, boost-format
-msgid "%1%: Chroots not found"
-msgstr "%1%: Não foram encontrados chroots"
-
 #. TRANSLATORS: %4% = file
 #, boost-format
 msgid "No chroots are defined in ‘%4%’"
@@ -454,11 +446,6 @@
 msgid "The specified chroots are not defined in ‘%1%’"
 msgstr "Os chroots especificados não estão definidos em ‘%1%’"
 
-#. TRANSLATORS: %1% = chroot name
-#, boost-format
-msgid "%1%: Chroot not found"
-msgstr "%1%: Não foi encontrado o chroot"
-
 #, boost-format
 msgid "%1%: Invalid session name"
 msgstr "%1%: Nome de sessão inválido"
@@ -490,6 +477,13 @@
 msgid "Support for ‘plain’ chroots"
 msgstr "Suporte para chroots ‘plain’"
 
+#. TRANSLATORS: %1% = program name
+#. TRANSLATORS: %2% = program version
+#. TRANSLATORS: %3% = current date
+#, boost-format
+msgid "schroot configuration generated by %1% %2% on %3%"
+msgstr "configuração de schroot gerada por %1% %2% em %3%"
+
 msgid "Chroot selection"
 msgstr "Selecção de chroot"
 
@@ -842,8 +836,15 @@
 msgid "Alias ‘%1%’ already associated with ‘%4%’ chroot"
 msgstr "O alias ‘%1%’ já está associado com o chroot ‘%4%’"
 
-msgid "No such chroot"
-msgstr "Não há tal chroot"
+#. TRANSLATORS: %1% = chroot name
+#, boost-format
+msgid "%1%: Chroot not found"
+msgstr "%1%: Não foi encontrado o chroot"
+
+#. TRANSLATORS: %1% = comma-separated list of chroot names
+#, boost-format
+msgid "%1%: Chroots not found"
+msgstr "%1%: Não foram encontrados chroots"
 
 #. TRANSLATORS: %1% = chroot name
 #, boost-format
@@ -1395,6 +1396,9 @@
 msgid "Failed to stat file descriptor"
 msgstr "Falhou a obtenção do estado do descritor de ficheiro"
 
+#~ msgid "No such chroot"
+#~ msgstr "Não há tal chroot"
+
 #~ msgid "The path does not end with ‘/config’"
 #~ msgstr "O caminho não acaba com ‘/config’"
 
diff -Nru schroot-1.6.3/po/schroot.pot schroot-1.6.4/po/schroot.pot
--- schroot-1.6.3/po/schroot.pot	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/po/schroot.pot	2012-10-27 23:39:05.000000000 +0100
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: Roger Leigh <rleigh@debian.org>\n"
-"POT-Creation-Date: 2012-06-25 00:08+0100\n"
+"POT-Creation-Date: 2012-10-27 19:35+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -262,13 +262,6 @@
 msgid "[%1% chroot] Running command: “%2%”"
 msgstr ""
 
-#. TRANSLATORS: %1% = program name
-#. TRANSLATORS: %2% = program version
-#. TRANSLATORS: %3% = current date
-#, boost-format
-msgid "schroot configuration generated by %1% %2% on %3%"
-msgstr ""
-
 #. TRANSLATORS: '...' is an ellipsis e.g. U+2026, and '-'
 #. is an em-dash.
 msgid "[OPTION…] [COMMAND] — run command or shell in a chroot"
@@ -392,6 +385,10 @@
 msgid "Failed to execute “%1%”"
 msgstr ""
 
+#, boost-format
+msgid "Failed to resolve path “%1%”"
+msgstr ""
+
 #. TRANSLATORS: '...' is an ellipsis e.g. U+2026,
 #. and '-' is an em-dash.
 msgid "[OPTION…] — mount filesystems"
@@ -426,11 +423,6 @@
 msgid "No device specified"
 msgstr ""
 
-#. TRANSLATORS: %1% = comma-separated list of chroot names
-#, boost-format
-msgid "%1%: Chroots not found"
-msgstr ""
-
 #. TRANSLATORS: %4% = file
 #, boost-format
 msgid "No chroots are defined in ‘%4%’"
@@ -447,11 +439,6 @@
 msgid "The specified chroots are not defined in ‘%1%’"
 msgstr ""
 
-#. TRANSLATORS: %1% = chroot name
-#, boost-format
-msgid "%1%: Chroot not found"
-msgstr ""
-
 #, boost-format
 msgid "%1%: Invalid session name"
 msgstr ""
@@ -483,6 +470,13 @@
 msgid "Support for ‘plain’ chroots"
 msgstr ""
 
+#. TRANSLATORS: %1% = program name
+#. TRANSLATORS: %2% = program version
+#. TRANSLATORS: %3% = current date
+#, boost-format
+msgid "schroot configuration generated by %1% %2% on %3%"
+msgstr ""
+
 msgid "Chroot selection"
 msgstr ""
 
@@ -830,7 +824,14 @@
 msgid "Alias ‘%1%’ already associated with ‘%4%’ chroot"
 msgstr ""
 
-msgid "No such chroot"
+#. TRANSLATORS: %1% = chroot name
+#, boost-format
+msgid "%1%: Chroot not found"
+msgstr ""
+
+#. TRANSLATORS: %1% = comma-separated list of chroot names
+#, boost-format
+msgid "%1%: Chroots not found"
 msgstr ""
 
 #. TRANSLATORS: %1% = chroot name
Binary files /tmp/rPk2EEzs8W/schroot-1.6.3/po/sv.gmo and /tmp/CGqLNJhQG_/schroot-1.6.4/po/sv.gmo differ
diff -Nru schroot-1.6.3/po/sv.po schroot-1.6.4/po/sv.po
--- schroot-1.6.3/po/sv.po	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/po/sv.po	2012-10-27 23:39:05.000000000 +0100
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: schroot\n"
 "Report-Msgid-Bugs-To: Roger Leigh <rleigh@debian.org>\n"
-"POT-Creation-Date: 2012-06-25 00:08+0100\n"
+"POT-Creation-Date: 2012-10-27 19:35+0100\n"
 "PO-Revision-Date: 2010-01-16 15:44+0000\n"
 "Last-Translator: Daniel Nylander <po@danielnylander.se>\n"
 "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
@@ -269,13 +269,6 @@
 msgid "[%1% chroot] Running command: “%2%”"
 msgstr "[%1% chroot] Kör kommando: \"%2%\""
 
-#. TRANSLATORS: %1% = program name
-#. TRANSLATORS: %2% = program version
-#. TRANSLATORS: %3% = current date
-#, boost-format
-msgid "schroot configuration generated by %1% %2% on %3%"
-msgstr "schroot-konfiguration genererad av %1% %2% den %3%"
-
 #. TRANSLATORS: '...' is an ellipsis e.g. U+2026, and '-'
 #. is an em-dash.
 #, fuzzy
@@ -407,6 +400,10 @@
 msgid "Failed to execute “%1%”"
 msgstr "Misslyckades med att starta \"%1%\""
 
+#, fuzzy, boost-format
+msgid "Failed to resolve path “%1%”"
+msgstr "Misslyckades med att starta \"%1%\""
+
 #. TRANSLATORS: '...' is an ellipsis e.g. U+2026,
 #. and '-' is an em-dash.
 #, fuzzy
@@ -445,11 +442,6 @@
 msgid "No device specified"
 msgstr "Ingen enhet angiven"
 
-#. TRANSLATORS: %1% = comma-separated list of chroot names
-#, boost-format
-msgid "%1%: Chroots not found"
-msgstr "%1%: Chrootmiljöer hittades inte"
-
 #. TRANSLATORS: %4% = file
 #, fuzzy, boost-format
 msgid "No chroots are defined in ‘%4%’"
@@ -466,11 +458,6 @@
 msgid "The specified chroots are not defined in ‘%1%’"
 msgstr "De angivna chrootmiljöerna är inte definierade i \"%1%\""
 
-#. TRANSLATORS: %1% = chroot name
-#, boost-format
-msgid "%1%: Chroot not found"
-msgstr "%1%: Chroot hittades inte"
-
 #, boost-format
 msgid "%1%: Invalid session name"
 msgstr ""
@@ -503,6 +490,13 @@
 msgid "Support for ‘plain’ chroots"
 msgstr ""
 
+#. TRANSLATORS: %1% = program name
+#. TRANSLATORS: %2% = program version
+#. TRANSLATORS: %3% = current date
+#, boost-format
+msgid "schroot configuration generated by %1% %2% on %3%"
+msgstr "schroot-konfiguration genererad av %1% %2% den %3%"
+
 msgid "Chroot selection"
 msgstr "Val av chroot"
 
@@ -867,8 +861,15 @@
 msgid "Alias ‘%1%’ already associated with ‘%4%’ chroot"
 msgstr "Aliaset \"%1%\" är redan associerat med chrootmiljön \"%4%\""
 
-msgid "No such chroot"
-msgstr "Ingen sådan chroot"
+#. TRANSLATORS: %1% = chroot name
+#, boost-format
+msgid "%1%: Chroot not found"
+msgstr "%1%: Chroot hittades inte"
+
+#. TRANSLATORS: %1% = comma-separated list of chroot names
+#, boost-format
+msgid "%1%: Chroots not found"
+msgstr "%1%: Chrootmiljöer hittades inte"
 
 #. TRANSLATORS: %1% = chroot name
 #, fuzzy, boost-format
@@ -1430,6 +1431,9 @@
 msgid "Failed to stat file descriptor"
 msgstr "Misslyckades med att läsa status på filen"
 
+#~ msgid "No such chroot"
+#~ msgstr "Ingen sådan chroot"
+
 #, fuzzy
 #~ msgid ""
 #~ "Exactly one chroot must be specified when creating or removing a session"
Binary files /tmp/rPk2EEzs8W/schroot-1.6.3/po/vi.gmo and /tmp/CGqLNJhQG_/schroot-1.6.4/po/vi.gmo differ
diff -Nru schroot-1.6.3/po/vi.po schroot-1.6.4/po/vi.po
--- schroot-1.6.3/po/vi.po	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/po/vi.po	2012-10-27 23:39:05.000000000 +0100
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: schroot 1.4.12-1\n"
 "Report-Msgid-Bugs-To: Roger Leigh <rleigh@debian.org>\n"
-"POT-Creation-Date: 2012-06-25 00:08+0100\n"
+"POT-Creation-Date: 2012-10-27 19:35+0100\n"
 "PO-Revision-Date: 2010-09-28 22:16+0930\n"
 "Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n"
 "Language-Team: Vietnamese <vi-VN@googlegroups.com>\n"
@@ -267,13 +267,6 @@
 msgid "[%1% chroot] Running command: “%2%”"
 msgstr "[%1% chroot] Đang chạy lệnh: « %2% »"
 
-#. TRANSLATORS: %1% = program name
-#. TRANSLATORS: %2% = program version
-#. TRANSLATORS: %3% = current date
-#, boost-format
-msgid "schroot configuration generated by %1% %2% on %3%"
-msgstr "Cấu hình schroot do %1% %2% tạo ra vào %3%"
-
 #. TRANSLATORS: '...' is an ellipsis e.g. U+2026, and '-'
 #. is an em-dash.
 #, fuzzy
@@ -407,6 +400,10 @@
 msgid "Failed to execute “%1%”"
 msgstr "Lỗi thực hiện « %1% »"
 
+#, fuzzy, boost-format
+msgid "Failed to resolve path “%1%”"
+msgstr "Lỗi thực hiện « %1% »"
+
 #. TRANSLATORS: '...' is an ellipsis e.g. U+2026,
 #. and '-' is an em-dash.
 #, fuzzy
@@ -443,11 +440,6 @@
 msgid "No device specified"
 msgstr "Chưa xác định thiết bị"
 
-#. TRANSLATORS: %1% = comma-separated list of chroot names
-#, boost-format
-msgid "%1%: Chroots not found"
-msgstr "%1%: không tìm thấy chroot"
-
 #. TRANSLATORS: %4% = file
 #, fuzzy, boost-format
 msgid "No chroots are defined in ‘%4%’"
@@ -464,11 +456,6 @@
 msgid "The specified chroots are not defined in ‘%1%’"
 msgstr "Những chroot được ghi rõ chưa được định nghĩa trong « %1% »"
 
-#. TRANSLATORS: %1% = chroot name
-#, boost-format
-msgid "%1%: Chroot not found"
-msgstr "%1%: không tìm thấy chroot"
-
 #, boost-format
 msgid "%1%: Invalid session name"
 msgstr "%1%: tên buổi hợp không hợp lệ"
@@ -508,6 +495,13 @@
 msgid "Support for ‘plain’ chroots"
 msgstr "Hỗ trợ chroot kiểu giản dị"
 
+#. TRANSLATORS: %1% = program name
+#. TRANSLATORS: %2% = program version
+#. TRANSLATORS: %3% = current date
+#, boost-format
+msgid "schroot configuration generated by %1% %2% on %3%"
+msgstr "Cấu hình schroot do %1% %2% tạo ra vào %3%"
+
 msgid "Chroot selection"
 msgstr "Chọn chroot"
 
@@ -863,8 +857,15 @@
 msgid "Alias ‘%1%’ already associated with ‘%4%’ chroot"
 msgstr "Bí danh « %1% » đã tương ứng với chroot « %4% »"
 
-msgid "No such chroot"
-msgstr "Không có chroot như vậy"
+#. TRANSLATORS: %1% = chroot name
+#, boost-format
+msgid "%1%: Chroot not found"
+msgstr "%1%: không tìm thấy chroot"
+
+#. TRANSLATORS: %1% = comma-separated list of chroot names
+#, boost-format
+msgid "%1%: Chroots not found"
+msgstr "%1%: không tìm thấy chroot"
 
 #. TRANSLATORS: %1% = chroot name
 #, fuzzy, boost-format
@@ -1408,6 +1409,9 @@
 msgid "Failed to stat file descriptor"
 msgstr "Lỗi lấy trạng thái về bộ mô tả tập tin"
 
+#~ msgid "No such chroot"
+#~ msgstr "Không có chroot như vậy"
+
 #, fuzzy
 #~ msgid ""
 #~ "Exactly one chroot must be specified when creating or removing a session"
Binary files /tmp/rPk2EEzs8W/schroot-1.6.3/po/zh_CN.gmo and /tmp/CGqLNJhQG_/schroot-1.6.4/po/zh_CN.gmo differ
diff -Nru schroot-1.6.3/po/zh_CN.po schroot-1.6.4/po/zh_CN.po
--- schroot-1.6.3/po/zh_CN.po	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/po/zh_CN.po	2012-10-27 23:39:05.000000000 +0100
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: schroot 1.5.2-1\n"
 "Report-Msgid-Bugs-To: Roger Leigh <rleigh@debian.org>\n"
-"POT-Creation-Date: 2012-06-25 00:08+0100\n"
+"POT-Creation-Date: 2012-10-27 19:35+0100\n"
 "PO-Revision-Date: 2012-02-15 19:54+0800\n"
 "Last-Translator: Ji ZhengYu <zhengyuji@gmail.com>\n"
 "Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
@@ -260,13 +260,6 @@
 msgid "[%1% chroot] Running command: “%2%”"
 msgstr "[chroot %1%] 正在运行命令: “%2%”"
 
-#. TRANSLATORS: %1% = program name
-#. TRANSLATORS: %2% = program version
-#. TRANSLATORS: %3% = current date
-#, boost-format
-msgid "schroot configuration generated by %1% %2% on %3%"
-msgstr "schroot 的配置由 %1% %2% 在 %3% 生成"
-
 #. TRANSLATORS: '...' is an ellipsis e.g. U+2026, and '-'
 #. is an em-dash.
 msgid "[OPTION…] [COMMAND] — run command or shell in a chroot"
@@ -392,6 +385,10 @@
 msgid "Failed to execute “%1%”"
 msgstr "无法运行“%1%”"
 
+#, fuzzy, boost-format
+msgid "Failed to resolve path “%1%”"
+msgstr "无法运行“%1%”"
+
 #. TRANSLATORS: '...' is an ellipsis e.g. U+2026,
 #. and '-' is an em-dash.
 msgid "[OPTION…] — mount filesystems"
@@ -426,11 +423,6 @@
 msgid "No device specified"
 msgstr "未指定设备"
 
-#. TRANSLATORS: %1% = comma-separated list of chroot names
-#, boost-format
-msgid "%1%: Chroots not found"
-msgstr "%1%: 未找到chroots"
-
 #. TRANSLATORS: %4% = file
 #, boost-format
 msgid "No chroots are defined in ‘%4%’"
@@ -447,11 +439,6 @@
 msgid "The specified chroots are not defined in ‘%1%’"
 msgstr "“%1%”中未定义所选chroot 环境"
 
-#. TRANSLATORS: %1% = chroot name
-#, boost-format
-msgid "%1%: Chroot not found"
-msgstr "%1%: 未找到chroot"
-
 #, boost-format
 msgid "%1%: Invalid session name"
 msgstr "%1%: 非法会话名"
@@ -484,6 +471,13 @@
 msgid "Support for ‘plain’ chroots"
 msgstr "支持\"plain\"的chroot 环境"
 
+#. TRANSLATORS: %1% = program name
+#. TRANSLATORS: %2% = program version
+#. TRANSLATORS: %3% = current date
+#, boost-format
+msgid "schroot configuration generated by %1% %2% on %3%"
+msgstr "schroot 的配置由 %1% %2% 在 %3% 生成"
+
 msgid "Chroot selection"
 msgstr "Chroot 选择"
 
@@ -833,8 +827,15 @@
 msgid "Alias ‘%1%’ already associated with ‘%4%’ chroot"
 msgstr "别名“%1%”已经与chroot“%4%”关联"
 
-msgid "No such chroot"
-msgstr "没有那样的chroot"
+#. TRANSLATORS: %1% = chroot name
+#, boost-format
+msgid "%1%: Chroot not found"
+msgstr "%1%: 未找到chroot"
+
+#. TRANSLATORS: %1% = comma-separated list of chroot names
+#, boost-format
+msgid "%1%: Chroots not found"
+msgstr "%1%: 未找到chroots"
 
 #. TRANSLATORS: %1% = chroot name
 #, boost-format
@@ -1371,6 +1372,9 @@
 msgid "Failed to stat file descriptor"
 msgstr "无法统计文件描述符"
 
+#~ msgid "No such chroot"
+#~ msgstr "没有那样的chroot"
+
 #, fuzzy
 #~ msgid ""
 #~ "Exactly one chroot must be specified when creating or removing a session"
diff -Nru schroot-1.6.3/sbuild/sbuild-chroot-block-device-base.cc schroot-1.6.4/sbuild/sbuild-chroot-block-device-base.cc
--- schroot-1.6.3/sbuild/sbuild-chroot-block-device-base.cc	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/sbuild/sbuild-chroot-block-device-base.cc	2012-10-27 23:39:05.000000000 +0100
@@ -21,9 +21,6 @@
 #include "sbuild-chroot-block-device.h"
 #include "sbuild-chroot-lvm-snapshot.h"
 #include "sbuild-chroot-facet-mountable.h"
-#ifdef SBUILD_FEATURE_UNION
-#include "sbuild-chroot-facet-union.h"
-#endif // SBUILD_FEATURE_UNION
 #include "sbuild-format-detail.h"
 #include "sbuild-lock.h"
 #include "sbuild-util.h"
@@ -46,12 +43,8 @@
 chroot_block_device_base::chroot_block_device_base
 (const chroot_block_device_base& rhs):
   chroot(rhs),
-  device()
+  device(rhs.device)
 {
-  /// @todo Required to set mount_device.  Remove once no longer
-  /// needed.
-  if (!rhs.device.empty())
-    set_device(rhs.device);
 }
 
 chroot_block_device_base::~chroot_block_device_base ()
@@ -71,16 +64,6 @@
     throw error(device, DEVICE_ABS);
 
   this->device = device;
-
-  /// @todo: This may not be appropriate for derived classes such as
-  /// lvm_snapshot, since re-setting the device could overwrite the
-  /// mount device.
-  chroot_facet_mountable::ptr pmnt
-    (get_facet<chroot_facet_mountable>());
-#ifdef SBUILD_FEATURE_LVMSNAP
-  if (!dynamic_cast<chroot_lvm_snapshot *>(this))
-#endif
-    pmnt->set_mount_device(this->device);
 }
 
 std::string
diff -Nru schroot-1.6.3/sbuild/sbuild-chroot-block-device.cc schroot-1.6.4/sbuild/sbuild-chroot-block-device.cc
--- schroot-1.6.3/sbuild/sbuild-chroot-block-device.cc	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/sbuild/sbuild-chroot-block-device.cc	2012-10-27 23:39:05.000000000 +0100
@@ -20,6 +20,7 @@
 
 #include "sbuild-chroot-block-device.h"
 #include "sbuild-chroot-facet-session-clonable.h"
+#include "sbuild-chroot-facet-source-clonable.h"
 #ifdef SBUILD_FEATURE_UNION
 #include "sbuild-chroot-facet-union.h"
 #endif // SBUILD_FEATURE_UNION
@@ -81,7 +82,7 @@
   assert(psess);
 
   ptr session(new chroot_block_device(*this));
-  psess->clone_session_setup(session, session_id, alias, user, root);
+  psess->clone_session_setup(*this, session, session_id, alias, user, root);
 
   return session;
 }
@@ -89,18 +90,13 @@
 sbuild::chroot::ptr
 chroot_block_device::clone_source () const
 {
-  ptr clone;
+  ptr clone(new chroot_block_device(*this));
 
-#ifdef SBUILD_FEATURE_UNION
-  chroot_facet_union::const_ptr puni(get_facet<chroot_facet_union>());
-  assert(puni);
+  chroot_facet_source_clonable::const_ptr psrc
+    (get_facet<chroot_facet_source_clonable>());
+  assert(psrc);
 
-  if (puni->get_union_configured())
-    {
-      clone = ptr(new chroot_block_device(*this));
-      puni->clone_source_setup(clone);
-    }
-#endif // SBUILD_FEATURE_UNION
+  psrc->clone_source_setup(*this, clone);
 
   return clone;
 }
@@ -142,8 +138,7 @@
 	  assert(base);
 	  chroot_facet_union::const_ptr puni
 	    (base->get_facet<chroot_facet_union>());
-	  assert(puni);
-	  if (!puni->get_union_configured())
+	  if (!puni || !puni->get_union_configured())
 #endif
 	    {
 	      device_lock dlock(this->device);
diff -Nru schroot-1.6.3/sbuild/sbuild-chroot-btrfs-snapshot.cc schroot-1.6.4/sbuild/sbuild-chroot-btrfs-snapshot.cc
--- schroot-1.6.3/sbuild/sbuild-chroot-btrfs-snapshot.cc	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/sbuild/sbuild-chroot-btrfs-snapshot.cc	2012-10-27 23:39:05.000000000 +0100
@@ -73,7 +73,7 @@
   assert(psess);
 
   ptr session(new chroot_btrfs_snapshot(*this));
-  psess->clone_session_setup(session, session_id, alias, user, root);
+  psess->clone_session_setup(*this, session, session_id, alias, user, root);
 
   return session;
 }
@@ -87,7 +87,7 @@
     (get_facet<chroot_facet_source_clonable>());
   assert(psrc);
 
-  psrc->clone_source_setup(clone);
+  psrc->clone_source_setup(*this, clone);
 
   return clone;
 }
diff -Nru schroot-1.6.3/sbuild/sbuild-chroot-config.cc schroot-1.6.4/sbuild/sbuild-chroot-config.cc
--- schroot-1.6.3/sbuild/sbuild-chroot-config.cc	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/sbuild/sbuild-chroot-config.cc	2012-10-27 23:39:05.000000000 +0100
@@ -57,7 +57,10 @@
       // TRANSLATORS: %1% = chroot alias name
       // TRANSLATORS: %4% = chroot name
       emap(chroot_config::ALIAS_EXIST,        N_("Alias ‘%1%’ already associated with ‘%4%’ chroot")),
-      emap(chroot_config::CHROOT_NOTFOUND,    N_("No such chroot")),
+      // TRANSLATORS: %1% = chroot name
+      emap(chroot_config::CHROOT_NOTFOUND,    N_("%1%: Chroot not found")),
+      // TRANSLATORS: %1% = comma-separated list of chroot names
+      emap(chroot_config::CHROOTS_NOTFOUND,   N_("%1%: Chroots not found")),
       // TRANSLATORS: %1% = chroot name
       emap(chroot_config::CHROOT_EXIST,       N_("A chroot or alias ‘%1%’ already exists with this name")),
       emap(chroot_config::FILE_NOTREG,        N_("File is not a regular file")),
@@ -75,28 +78,6 @@
     return c1->get_name() < c2->get_name();
   }
 
-  void
-  get_namespace(std::string const& name,
-		std::string&       chroot_namespace,
-		std::string&       chroot_name)
-  {
-    std::string::size_type pos =
-      name.find_first_of(chroot_config::namespace_separator);
-
-    if (pos != std::string::npos) // Found namespace
-      {
-	chroot_namespace = name.substr(0, pos);
-	if (name.size() >= pos + 1)
-	  chroot_name = name.substr(pos + 1);
-      }
-    else // No namespace
-      {
-	chroot_namespace.clear();
-	chroot_name = name;
-      }
-
-  }
-
 }
 
 template<>
@@ -496,29 +477,6 @@
 }
 
 void
-chroot_config::print_chroot_list (string_list const& chroots,
-				  std::ostream& stream) const
-{
-  for (string_list::const_iterator pos = chroots.begin();
-       pos != chroots.end();
-       ++pos)
-    {
-      log_debug(DEBUG_NOTICE) << "C: " << *pos << std::endl;
-
-      const chroot::ptr chroot = find_alias("", *pos);
-      if (chroot)
-	{
-	  stream << *pos << '\n';
-	}
-      else
-	{
-	  error e(*pos, CHROOT_NOTFOUND);
-	  log_exception_error(e);
-	}
-    }
-}
-
-void
 chroot_config::print_chroot_list_simple (std::ostream& stream) const
 {
   stream << _("Available chroots: ");
@@ -552,98 +510,30 @@
   stream << endl;
 }
 
-void
-chroot_config::print_chroot_info (string_list const& chroots,
-				  std::ostream&      stream) const
-{
-  for (string_list::const_iterator pos = chroots.begin();
-       pos != chroots.end();
-       ++pos)
-    {
-      const chroot::ptr chroot = find_alias("", *pos);
-      if (chroot)
-	{
-	  stream << chroot;
-	  if (pos + 1 != chroots.end())
-	    stream << '\n';
-	}
-      else
-	{
-	  error e(*pos, CHROOT_NOTFOUND);
-	  log_exception_error(e);
-	}
-    }
-}
-
-void
-chroot_config::print_chroot_location (string_list const& chroots,
-				      std::ostream&      stream) const
-{
-  for (string_list::const_iterator pos = chroots.begin();
-       pos != chroots.end();
-       ++pos)
-    {
-      const chroot::ptr chroot = find_alias("", *pos);
-      if (chroot)
-	{
-	  stream << chroot->get_path() << '\n';
-	}
-      else
-	{
-	  error e(*pos, CHROOT_NOTFOUND);
-	  log_exception_error(e);
-	}
-    }
-
-  stream << std::flush;
-}
-
-void
-chroot_config::print_chroot_config (string_list const& chroots,
-				    std::ostream&      stream) const
-{
-  keyfile info;
-
-  for (string_list::const_iterator pos = chroots.begin();
-       pos != chroots.end();
-       ++pos)
-    {
-      const chroot::ptr chroot = find_alias("", *pos);
-
-      // Generated chroots (e.g. source chroots) are not printed.
-      if (chroot)
-	{
-	  if (chroot->get_original())
-	    info << chroot;
-	}
-      else
-	{
-	  error e(*pos, CHROOT_NOTFOUND);
-	  log_exception_error(e);
-	}
-    }
-
-  stream << info;
-}
-
-string_list
+chroot_config::chroot_map
 chroot_config::validate_chroots (std::string const& namespace_hint,
-				 string_list&       chroots) const
+				 string_list const& chroots) const
 {
   string_list bad_chroots;
+  chroot_map validated;
 
-  for (string_list::iterator pos = chroots.begin();
+  for (string_list::const_iterator pos = chroots.begin();
        pos != chroots.end();
        ++pos)
     {
-      std::string chroot = lookup_alias(namespace_hint, *pos);
-      if (chroot.empty())
+      chroot::ptr chroot = find_alias(namespace_hint, *pos);
+      if (!chroot)
 	bad_chroots.push_back(*pos);
       else
-	*pos = chroot;
+	validated.insert(std::make_pair(*pos, chroot));
     }
 
-  return bad_chroots;
+  if (!bad_chroots.empty())
+    throw error(string_list_to_string(bad_chroots, ", "),
+		(bad_chroots.size() == 1)
+		? CHROOT_NOTFOUND : CHROOTS_NOTFOUND);
+
+  return validated;
 }
 
 void
@@ -776,3 +666,24 @@
       }
     }
 }
+
+void
+chroot_config::get_namespace(std::string const& name,
+			     std::string&       chroot_namespace,
+			     std::string&       chroot_name)
+{
+  std::string::size_type pos =
+    name.find_first_of(chroot_config::namespace_separator);
+
+  if (pos != std::string::npos) // Found namespace
+    {
+      chroot_namespace = name.substr(0, pos);
+      if (name.size() >= pos + 1)
+	chroot_name = name.substr(pos + 1);
+    }
+  else // No namespace
+    {
+      chroot_namespace.clear();
+      chroot_name = name;
+    }
+}
diff -Nru schroot-1.6.3/sbuild/sbuild-chroot-config.h schroot-1.6.4/sbuild/sbuild-chroot-config.h
--- schroot-1.6.3/sbuild/sbuild-chroot-config.h	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/sbuild/sbuild-chroot-config.h	2012-10-27 23:39:05.000000000 +0100
@@ -58,7 +58,8 @@
     enum error_code
       {
 	ALIAS_EXIST,       ///< Alias already associated with chroot.
-	CHROOT_NOTFOUND,   ///< No such chroot.
+	CHROOT_NOTFOUND,   ///< Chroot not found.
+	CHROOTS_NOTFOUND,  ///< Chroots not found.
 	CHROOT_EXIST,      ///< A chroot or alias already exists with this name.
 	FILE_NOTREG,       ///< File is not a regular file.
 	FILE_OPEN,         ///< Failed to open file.
@@ -180,6 +181,18 @@
 
   public:
     /**
+     * Split a chroot name into a namespace and name.
+     *
+     * @param name the name to split
+     * @param chroot_namespace the namespace (cleared if no namespace)
+     * @param chroot_name the name without any namespace
+     */
+    static void
+    get_namespace(std::string const& name,
+		  std::string&       chroot_namespace,
+		  std::string&       chroot_name);
+
+    /**
      * Find a chroot by its name.  The name must be fully qualified
      * with a namespace.
      *
@@ -259,18 +272,6 @@
     get_alias_list (std::string const& chroot_namespace) const;
 
     /**
-     * Print all the available chroots to the specified stream.  If
-     * any of the specified chroots do not exist, an exception will be
-     * thrown.
-     *
-     * @param chroots a list of chroots to print.
-     * @param stream the stream to output to.
-     */
-    void
-    print_chroot_list (string_list const& chroots,
-		       std::ostream& stream) const;
-
-    /**
      * Print a single line of all the available chroots to the
      * specified stream.
      *
@@ -280,53 +281,20 @@
     print_chroot_list_simple (std::ostream& stream) const;
 
     /**
-     * Print information about the specified chroots to the specified
-     * stream.
-     *
-     * @param chroots a list of chroots to print.
-     * @param stream the stream to output to.
-     */
-    void
-    print_chroot_info (string_list const& chroots,
-		       std::ostream&      stream) const;
-
-    /**
-     * Print location information about the specified chroots to the
-     * specified stream.
-     *
-     * @param chroots a list of chroots to print.
-     * @param stream the stream to output to.
-     */
-    void
-    print_chroot_location (string_list const& chroots,
-			   std::ostream&      stream) const;
-
-    /**
-     * Print configuration of the specified chroots to the specified
-     * stream.
-     *
-     * @param chroots a list of chroots to print.
-     * @param stream the stream to output to.
-     */
-    void
-    print_chroot_config (string_list const& chroots,
-			 std::ostream&      stream) const;
-
-    /**
      * Check that all the chroots specified exist.  The specified
      * chroot names will also be canonicalised so that they are all
      * referenced absolutely by namespace, using chroot_namespace as a
-     * namespace hint for chroots without a namespace.
+     * namespace hint for chroots without a namespace.  If validation
+     * fails, and exception will be thrown.
      *
      * @param namespace_hint the namespace to use if non was
      * explicitly specified.
      * @param chroots a list of chroots to validate.
-     * @returns a list of invalid chroots.  The list will be empty if
-     * all chroots are valid.
+     * @returns an alias-chroot mapping.
      */
-    string_list
+    chroot_map
     validate_chroots (std::string const& namespace_hint,
-		      string_list&       chroots) const;
+		      string_list const& chroots) const;
 
   private:
     /**
diff -Nru schroot-1.6.3/sbuild/sbuild-chroot-custom.cc schroot-1.6.4/sbuild/sbuild-chroot-custom.cc
--- schroot-1.6.3/sbuild/sbuild-chroot-custom.cc	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/sbuild/sbuild-chroot-custom.cc	2012-10-27 23:39:05.000000000 +0100
@@ -67,7 +67,7 @@
   assert(psess);
 
   ptr session(new chroot_custom(*this));
-  psess->clone_session_setup(session, session_id, alias, user, root);
+  psess->clone_session_setup(*this, session, session_id, alias, user, root);
 
   return session;
 }
@@ -82,7 +82,7 @@
     (get_facet<chroot_facet_source_clonable>());
   assert(psrc);
 
-  psrc->clone_source_setup(clone);
+  psrc->clone_source_setup(*this, clone);
 
   return clone;
 }
diff -Nru schroot-1.6.3/sbuild/sbuild-chroot-directory.cc schroot-1.6.4/sbuild/sbuild-chroot-directory.cc
--- schroot-1.6.3/sbuild/sbuild-chroot-directory.cc	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/sbuild/sbuild-chroot-directory.cc	2012-10-27 23:39:05.000000000 +0100
@@ -20,6 +20,7 @@
 
 #include "sbuild-chroot-directory.h"
 #include "sbuild-chroot-facet-session-clonable.h"
+#include "sbuild-chroot-facet-source-clonable.h"
 #ifdef SBUILD_FEATURE_UNION
 #include "sbuild-chroot-facet-union.h"
 #endif // SBUILD_FEATURE_UNION
@@ -83,7 +84,7 @@
   assert(psess);
 
   ptr session(new chroot_directory(*this));
-  psess->clone_session_setup(session, session_id, alias, user, root);
+  psess->clone_session_setup(*this, session, session_id, alias, user, root);
 
   return session;
 }
@@ -91,17 +92,13 @@
 sbuild::chroot::ptr
 chroot_directory::clone_source () const
 {
-  ptr clone;
+  ptr clone(new chroot_directory(*this));
 
-#ifdef SBUILD_FEATURE_UNION
-  chroot_facet_union::const_ptr puni(get_facet<chroot_facet_union>());
-  assert(puni);
+  chroot_facet_source_clonable::const_ptr psrc
+    (get_facet<chroot_facet_source_clonable>());
+  assert(psrc);
 
-  if (puni->get_union_configured()) {
-    clone = ptr(new chroot_directory(*this));
-    puni->clone_source_setup(clone);
-  }
-#endif // SBUILD_FEATURE_UNION
+  psrc->clone_source_setup(*this, clone);
 
   return clone;
 }
diff -Nru schroot-1.6.3/sbuild/sbuild-chroot-facet-session.cc schroot-1.6.4/sbuild/sbuild-chroot-facet-session.cc
--- schroot-1.6.3/sbuild/sbuild-chroot-facet-session.cc	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/sbuild/sbuild-chroot-facet-session.cc	2012-10-27 23:39:05.000000000 +0100
@@ -19,6 +19,7 @@
 #include <config.h>
 
 #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-plain.h"
@@ -91,7 +92,9 @@
 void
 chroot_facet_session::set_selected_name (std::string const& name)
 {
-  this->selected_chroot_name = name;
+  std::string ns, shortname;
+  chroot_config::get_namespace(name, ns, shortname);
+  this->selected_chroot_name = shortname;
 }
 
 void
diff -Nru schroot-1.6.3/sbuild/sbuild-chroot-facet-session-clonable.cc schroot-1.6.4/sbuild/sbuild-chroot-facet-session-clonable.cc
--- schroot-1.6.3/sbuild/sbuild-chroot-facet-session-clonable.cc	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/sbuild/sbuild-chroot-facet-session-clonable.cc	2012-10-27 23:39:05.000000000 +0100
@@ -19,6 +19,7 @@
 #include <config.h>
 
 #include "sbuild-chroot.h"
+#include "sbuild-chroot-facet-mountable.h"
 #include "sbuild-chroot-facet-session.h"
 #include "sbuild-chroot-facet-session-clonable.h"
 #include "sbuild-chroot-facet-source-clonable.h"
@@ -26,6 +27,9 @@
 #ifdef SBUILD_FEATURE_LVMSNAP
 #include "sbuild-chroot-lvm-snapshot.h"
 #endif // SBUILD_FEATURE_LVMSNAP
+#ifdef SBUILD_FEATURE_LOOPBACK
+#include "sbuild-chroot-loopback.h"
+#endif // SBUILD_FEATURE_LOOPBACK
 #ifdef SBUILD_FEATURE_BTRFSSNAP
 #include "sbuild-chroot-btrfs-snapshot.h"
 #endif // SBUILD_FEATURE_BTRFSSNAP
@@ -72,7 +76,8 @@
 }
 
 void
-chroot_facet_session_clonable::clone_session_setup (chroot::ptr&       clone,
+chroot_facet_session_clonable::clone_session_setup (chroot const&      parent,
+						    chroot::ptr&       clone,
 						    std::string const& session_id,
 						    std::string const& alias,
 						    std::string const& user,
@@ -138,6 +143,32 @@
     << format("Mount Location: %1%") % clone->get_mount_location()
     << endl;
 
+#ifdef SBUILD_FEATURE_BLOCKDEV
+  /* Block devices need the mount device name specifying. */
+  /* Note that this will be overridden by LVM snapshot, below, so the
+     order here is important. */
+  std::shared_ptr<chroot_block_device_base> blockdevbase(std::dynamic_pointer_cast<chroot_block_device_base>(clone));
+  if (blockdevbase)
+    {
+      chroot_facet_mountable::ptr pmnt
+	(clone->get_facet<chroot_facet_mountable>());
+      if (pmnt)
+	pmnt->set_mount_device(blockdevbase->get_device());
+    }
+#endif // SBUILD_FEATURE_BLOCKDEV
+
+#ifdef SBUILD_FEATURE_LOOPBACK
+  /* Loopback chroots need the mount device name specifying. */
+  std::shared_ptr<chroot_loopback> loopback(std::dynamic_pointer_cast<chroot_loopback>(clone));
+  if (loopback)
+    {
+      chroot_facet_mountable::ptr pmnt
+	(clone->get_facet<chroot_facet_mountable>());
+      if (pmnt)
+	pmnt->set_mount_device(loopback->get_file());
+    }
+#endif // SBUILD_FEATURE_LOOPBACK
+
 #ifdef SBUILD_FEATURE_LVMSNAP
   /* LVM devices need the snapshot device name specifying. */
   std::shared_ptr<chroot_lvm_snapshot> snapshot(std::dynamic_pointer_cast<chroot_lvm_snapshot>(clone));
@@ -161,6 +192,11 @@
 #endif // SBUILD_FEATURE_BTRFSSNAP
 
 #ifdef SBUILD_FEATURE_UNION
+  // If the parent did not have a union facet, then neither should we.
+  chroot_facet_union::const_ptr pparentuni(parent.get_facet<chroot_facet_union>());
+  if (!pparentuni)
+    clone->remove_facet<chroot_facet_union>();
+
   /* Filesystem unions need the overlay directory specifying. */
   chroot_facet_union::ptr puni(clone->get_facet<chroot_facet_union>());
 
diff -Nru schroot-1.6.3/sbuild/sbuild-chroot-facet-session-clonable.h schroot-1.6.4/sbuild/sbuild-chroot-facet-session-clonable.h
--- schroot-1.6.3/sbuild/sbuild-chroot-facet-session-clonable.h	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/sbuild/sbuild-chroot-facet-session-clonable.h	2012-10-27 23:39:05.000000000 +0100
@@ -65,13 +65,15 @@
     /**
      * Set the defaults in the cloned session chroot.
      *
+     * @param parent the parent of the cloned chroot.
      * @param clone the chroot to set up.
      * @param session_id the identifier for the new session.
      * @param user the user creating the session.
      * @param root whether or not the user is switching to root.
      */
     virtual void
-    clone_session_setup (chroot::ptr&       clone,
+    clone_session_setup (chroot const&      parent,
+			 chroot::ptr&       clone,
 			 std::string const& session_id,
 			 std::string const& alias,
 			 std::string const& user,
diff -Nru schroot-1.6.3/sbuild/sbuild-chroot-facet-source-clonable.cc schroot-1.6.4/sbuild/sbuild-chroot-facet-source-clonable.cc
--- schroot-1.6.3/sbuild/sbuild-chroot-facet-source-clonable.cc	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/sbuild/sbuild-chroot-facet-source-clonable.cc	2012-10-27 23:39:05.000000000 +0100
@@ -22,6 +22,9 @@
 #include "sbuild-chroot-facet-session.h"
 #include "sbuild-chroot-facet-source-clonable.h"
 #include "sbuild-chroot-facet-source.h"
+#ifdef SBUILD_FEATURE_UNION
+#include "sbuild-chroot-facet-union.h"
+#endif // SBUILD_FEATURE_UNION
 
 #include <cassert>
 
@@ -64,7 +67,8 @@
 }
 
 void
-chroot_facet_source_clonable::clone_source_setup (chroot::ptr& clone) const
+chroot_facet_source_clonable::clone_source_setup (chroot const& parent,
+						  chroot::ptr&  clone) const
 {
   clone->set_description
     (clone->get_description() + ' ' + _("(source chroot)"));
@@ -75,6 +79,10 @@
   clone->set_root_groups(this->get_source_root_groups());
   clone->set_aliases(clone->get_aliases());
 
+#ifdef SBUILD_FEATURE_UNION
+  clone->remove_facet<chroot_facet_union>();
+#endif // SBUILD_FEATURE_UNION
+
   clone->remove_facet<chroot_facet_source_clonable>();
   clone->add_facet(chroot_facet_source::create());
 }
diff -Nru schroot-1.6.3/sbuild/sbuild-chroot-facet-source-clonable.h schroot-1.6.4/sbuild/sbuild-chroot-facet-source-clonable.h
--- schroot-1.6.3/sbuild/sbuild-chroot-facet-source-clonable.h	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/sbuild/sbuild-chroot-facet-source-clonable.h	2012-10-27 23:39:05.000000000 +0100
@@ -66,10 +66,12 @@
     /**
      * Set the defaults in the cloned source chroot.
      *
+     * @param parent the parent of the cloned chroot.
      * @param clone the chroot to set up.
      */
     virtual void
-    clone_source_setup (chroot::ptr& clone) const;
+    clone_source_setup (chroot const& parent,
+			chroot::ptr&  clone) const;
 
     /**
      * Is cloning a source chroot automatically permitted?  Note that
diff -Nru schroot-1.6.3/sbuild/sbuild-chroot-facet-union.cc schroot-1.6.4/sbuild/sbuild-chroot-facet-union.cc
--- schroot-1.6.3/sbuild/sbuild-chroot-facet-union.cc	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/sbuild/sbuild-chroot-facet-union.cc	2012-10-27 23:39:05.000000000 +0100
@@ -88,23 +88,6 @@
   return name;
 }
 
-void
-chroot_facet_union::clone_source_setup (chroot::ptr& clone) const
-{
-  const chroot *base = dynamic_cast<const chroot *>(this->owner);
-  assert(base);
-
-  chroot_facet_source_clonable::const_ptr psrc
-    (base->get_facet<chroot_facet_source_clonable>());
-  if (psrc)
-    psrc->clone_source_setup(clone);
-
-  chroot_facet_union::ptr puni
-    (clone->get_facet<chroot_facet_union>());
-  if (puni)
-    puni->set_union_type("none");
-}
-
 bool
 chroot_facet_union::get_union_configured () const
 {
diff -Nru schroot-1.6.3/sbuild/sbuild-chroot-facet-union.h schroot-1.6.4/sbuild/sbuild-chroot-facet-union.h
--- schroot-1.6.3/sbuild/sbuild-chroot-facet-union.h	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/sbuild/sbuild-chroot-facet-union.h	2012-10-27 23:39:05.000000000 +0100
@@ -77,14 +77,6 @@
     get_name () const;
 
     /**
-     * Set the defaults in the cloned source chroot.
-     *
-     * @param clone the chroot to set up.
-     */
-    void
-    clone_source_setup (chroot::ptr& clone) const;
-
-    /**
      * Get fs union configured state.
      *
      * @returns if fs union is configured
diff -Nru schroot-1.6.3/sbuild/sbuild-chroot-file.cc schroot-1.6.4/sbuild/sbuild-chroot-file.cc
--- schroot-1.6.3/sbuild/sbuild-chroot-file.cc	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/sbuild/sbuild-chroot-file.cc	2012-10-27 23:39:05.000000000 +0100
@@ -72,7 +72,7 @@
   assert(psess);
 
   ptr session(new chroot_file(*this));
-  psess->clone_session_setup(session, session_id, alias, user, root);
+  psess->clone_session_setup(*this, session, session_id, alias, user, root);
 
   return session;
 }
@@ -87,7 +87,7 @@
     (get_facet<chroot_facet_source_clonable>());
   assert(psrc);
 
-  psrc->clone_source_setup(clone);
+  psrc->clone_source_setup(*this, clone);
   clone_file->repack = true;
 
   return clone;
diff -Nru schroot-1.6.3/sbuild/sbuild-chroot-loopback.cc schroot-1.6.4/sbuild/sbuild-chroot-loopback.cc
--- schroot-1.6.3/sbuild/sbuild-chroot-loopback.cc	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/sbuild/sbuild-chroot-loopback.cc	2012-10-27 23:39:05.000000000 +0100
@@ -20,6 +20,7 @@
 
 #include "sbuild-chroot-loopback.h"
 #include "sbuild-chroot-facet-session-clonable.h"
+#include "sbuild-chroot-facet-source-clonable.h"
 #include "sbuild-chroot-facet-mountable.h"
 #ifdef SBUILD_FEATURE_UNION
 #include "sbuild-chroot-facet-union.h"
@@ -74,7 +75,7 @@
   assert(psess);
 
   ptr session(new chroot_loopback(*this));
-  psess->clone_session_setup(session, session_id, alias, user, root);
+  psess->clone_session_setup(*this, session, session_id, alias, user, root);
 
   return session;
 }
@@ -82,17 +83,13 @@
 sbuild::chroot::ptr
 chroot_loopback::clone_source () const
 {
-  ptr clone;
+  ptr clone(new chroot_loopback(*this));
 
-#ifdef SBUILD_FEATURE_UNION
-  chroot_facet_union::const_ptr puni(get_facet<chroot_facet_union>());
-  assert(puni);
+  chroot_facet_source_clonable::const_ptr psrc
+    (get_facet<chroot_facet_source_clonable>());
+  assert(psrc);
 
-  if (puni->get_union_configured()) {
-    clone = ptr(new chroot_loopback(*this));
-    puni->clone_source_setup(clone);
-  }
-#endif // SBUILD_FEATURE_UNION
+  psrc->clone_source_setup(*this, clone);
 
   return clone;
 }
@@ -110,10 +107,6 @@
     throw error(file, FILE_ABS);
 
   this->file = file;
-
-  chroot_facet_mountable::ptr pmnt
-    (get_facet<chroot_facet_mountable>());
-  pmnt->set_mount_device(this->file);
 }
 
 std::string
diff -Nru schroot-1.6.3/sbuild/sbuild-chroot-lvm-snapshot.cc schroot-1.6.4/sbuild/sbuild-chroot-lvm-snapshot.cc
--- schroot-1.6.3/sbuild/sbuild-chroot-lvm-snapshot.cc	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/sbuild/sbuild-chroot-lvm-snapshot.cc	2012-10-27 23:39:05.000000000 +0100
@@ -72,7 +72,7 @@
   assert(psess);
 
   ptr session(new chroot_lvm_snapshot(*this));
-  psess->clone_session_setup(session, session_id, alias, user, root);
+  psess->clone_session_setup(*this, session, session_id, alias, user, root);
 
   return session;
 }
@@ -86,7 +86,7 @@
     (get_facet<chroot_facet_source_clonable>());
   assert(psrc);
 
-  psrc->clone_source_setup(clone);
+  psrc->clone_source_setup(*this, clone);
 
   return clone;
 }
diff -Nru schroot-1.6.3/sbuild/sbuild-util.cc schroot-1.6.4/sbuild/sbuild-util.cc
--- schroot-1.6.3/sbuild/sbuild-util.cc	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/sbuild/sbuild-util.cc	2012-10-27 23:39:05.000000000 +0100
@@ -504,24 +504,42 @@
   return status;
 }
 
-sbuild::stat::stat (const char *file):
+sbuild::stat::stat (const char *file,
+		    bool        link):
   file(file),
   fd(0),
   errorno(0),
   status()
 {
-  if (::stat(file, &this->status) < 0)
-    this->errorno = errno;
+  if (link)
+    {
+      if (::lstat(file, &this->status) < 0)
+	this->errorno = errno;
+    }
+  else
+    {
+      if (::stat(file, &this->status) < 0)
+	this->errorno = errno;
+    }
 }
 
-sbuild::stat::stat (std::string const& file):
+sbuild::stat::stat (std::string const& file,
+		    bool               link):
   file(file),
   fd(0),
   errorno(0),
   status()
 {
-  if (::stat(file.c_str(), &this->status) < 0)
-    this->errorno = errno;
+  if (link)
+    {
+      if (::lstat(file.c_str(), &this->status) < 0)
+	this->errorno = errno;
+    }
+  else
+    {
+      if (::stat(file.c_str(), &this->status) < 0)
+	this->errorno = errno;
+    }
 }
 
 sbuild::stat::stat (std::string const& file,
diff -Nru schroot-1.6.3/sbuild/sbuild-util.h schroot-1.6.4/sbuild/sbuild-util.h
--- schroot-1.6.3/sbuild/sbuild-util.h	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/sbuild/sbuild-util.h	2012-10-27 23:39:05.000000000 +0100
@@ -370,14 +370,18 @@
     /**
      * The constructor.
      * @param file the filename to use.
+     * @param link use lstat rather than stat (i.e. don't follow symlinks).
      */
-    stat (const char *file);
+    stat (const char *file,
+	  bool        link = false);
 
     /**
      * The constructor.
      * @param file the filename to use.
+     * @param link use lstat rather than stat (i.e. don't follow symlinks).
      */
-    stat (std::string const& file);
+    stat (std::string const& file,
+	  bool               link = false);
 
     /**
      * The constructor.
diff -Nru schroot-1.6.3/test/sbuild-chroot-block-device.cc schroot-1.6.4/test/sbuild-chroot-block-device.cc
--- schroot-1.6.3/test/sbuild-chroot-block-device.cc	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/test/sbuild-chroot-block-device.cc	2012-10-27 23:39:05.000000000 +0100
@@ -79,11 +79,16 @@
   void setUp()
   {
     test_chroot_base<chroot_block_device>::setUp();
+    CPPUNIT_ASSERT(chroot);
     CPPUNIT_ASSERT(session);
     CPPUNIT_ASSERT(!source);
+    CPPUNIT_ASSERT(!session_source);
+#ifdef SBUILD_FEATURE_UNION
     CPPUNIT_ASSERT(chroot_union);
     CPPUNIT_ASSERT(session_union);
     CPPUNIT_ASSERT(source_union);
+    CPPUNIT_ASSERT(session_source_union);
+#endif // SBUILD_FEATURE_UNION
   }
 
   virtual void setup_chroot_props (sbuild::chroot::ptr& chroot)
@@ -136,12 +141,7 @@
     expected.add("CHROOT_MOUNT_LOCATION", "/mnt/mount-location");
     expected.add("CHROOT_PATH",           "/mnt/mount-location/squeeze");
     expected.add("CHROOT_DEVICE",         "/dev/testdev");
-    expected.add("CHROOT_MOUNT_DEVICE",   "/dev/testdev");
     expected.add("CHROOT_MOUNT_OPTIONS",  "-t jfs -o quota,rw");
-
-#ifdef SBUILD_FEATURE_UNION
-    expected.add("CHROOT_UNION_TYPE",     "none");
-#endif // SBUILD_FEATURE_UNION
   }
 
   void test_setup_env()
@@ -152,6 +152,9 @@
     expected.add("CHROOT_SESSION_CLONE",  "false");
     expected.add("CHROOT_SESSION_CREATE", "true");
     expected.add("CHROOT_SESSION_PURGE",  "false");
+#ifdef SBUILD_FEATURE_UNION
+    expected.add("CHROOT_UNION_TYPE",     "none");
+#endif // SBUILD_FEATURE_UNION
 
     test_chroot_base<chroot_block_device>::test_setup_env(chroot, expected);
   }
@@ -166,7 +169,10 @@
     expected.add("CHROOT_SESSION_CLONE",  "false");
     expected.add("CHROOT_SESSION_CREATE", "false");
     expected.add("CHROOT_SESSION_PURGE",  "false");
+    expected.add("CHROOT_MOUNT_DEVICE",   "/dev/testdev");
+#ifdef SBUILD_FEATURE_UNION
     expected.add("CHROOT_UNION_TYPE",     "none");
+#endif // SBUILD_FEATURE_UNION
     test_chroot_base<chroot_block_device>::test_setup_env(session, expected);
   }
 
@@ -196,6 +202,7 @@
     expected.add("CHROOT_SESSION_CLONE",  "false");
     expected.add("CHROOT_SESSION_CREATE", "false");
     expected.add("CHROOT_SESSION_PURGE",  "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");
@@ -232,8 +239,9 @@
     std::string group = chroot->get_name();
     setup_keyfile_chroot(expected, group);
     setup_keyfile_block(expected, group);
+#ifdef SBUILD_FEATURE_UNION
     setup_keyfile_union_unconfigured(expected, group);
-
+#endif
     test_chroot_base<chroot_block_device>::test_setup_keyfile
       (chroot, expected, group);
   }
@@ -249,7 +257,9 @@
     expected.set_value(group, "mount-device", "/dev/testdev");
     expected.set_value(group, "mount-location", "/mnt/mount-location");
     setup_keyfile_session_clone(expected, group);
+#ifdef SBUILD_FEATURE_UNION
     setup_keyfile_union_unconfigured(expected, group);
+#endif
 
     test_chroot_base<chroot_block_device>::test_setup_keyfile
       (session, expected, group);
@@ -294,7 +304,6 @@
     setup_keyfile_source_clone(expected, group);
     setup_keyfile_block(expected, group);
     expected.set_value(group, "description", chroot->get_description() + ' ' + _("(source chroot)"));
-    setup_keyfile_union_unconfigured(expected, group);
 
     test_chroot_base<chroot_block_device>::test_setup_keyfile
       (source_union, expected, group);
diff -Nru schroot-1.6.3/test/sbuild-chroot-btrfs-snapshot.cc schroot-1.6.4/test/sbuild-chroot-btrfs-snapshot.cc
--- schroot-1.6.3/test/sbuild-chroot-btrfs-snapshot.cc	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/test/sbuild-chroot-btrfs-snapshot.cc	2012-10-27 23:39:05.000000000 +0100
@@ -58,9 +58,11 @@
   CPPUNIT_TEST(test_setup_env);
   CPPUNIT_TEST(test_setup_env_session);
   CPPUNIT_TEST(test_setup_env_source);
+  CPPUNIT_TEST(test_setup_env_session_source);
   CPPUNIT_TEST(test_setup_keyfile);
   CPPUNIT_TEST(test_setup_keyfile_session);
   CPPUNIT_TEST(test_setup_keyfile_source);
+  CPPUNIT_TEST(test_setup_keyfile_session_source);
   CPPUNIT_TEST(test_session_flags);
   CPPUNIT_TEST(test_print_details);
   CPPUNIT_TEST(test_print_config);
@@ -75,11 +77,10 @@
   void setUp()
   {
     test_chroot_base<chroot_btrfs_snapshot>::setUp();
+    CPPUNIT_ASSERT(chroot);
     CPPUNIT_ASSERT(session);
     CPPUNIT_ASSERT(source);
-    CPPUNIT_ASSERT(!chroot_union);
-    CPPUNIT_ASSERT(!session_union);
-    CPPUNIT_ASSERT(!source_union);
+    CPPUNIT_ASSERT(session_source);
   }
 
   virtual void setup_chroot_props (sbuild::chroot::ptr& chroot)
@@ -200,7 +201,21 @@
     expected.add("CHROOT_SESSION_CLONE",  "false");
     expected.add("CHROOT_SESSION_CREATE", "true");
     expected.add("CHROOT_SESSION_PURGE",  "false");
-    expected.add("CHROOT_UNION_TYPE",     "none");
+
+    test_chroot_base<chroot_btrfs_snapshot>::test_setup_env(source, expected);
+  }
+
+  void test_setup_env_session_source()
+  {
+    sbuild::environment expected;
+    setup_env_gen(expected);
+    expected.add("CHROOT_TYPE",           "directory");
+    expected.add("CHROOT_NAME",           "test-name");
+    expected.add("CHROOT_DESCRIPTION",     chroot->get_description() + ' ' + _("(source chroot)"));
+    expected.add("CHROOT_DIRECTORY",       "/srv/chroot/sid");
+    expected.add("CHROOT_SESSION_CLONE",  "false");
+    expected.add("CHROOT_SESSION_CREATE", "true");
+    expected.add("CHROOT_SESSION_PURGE",  "false");
 
     test_chroot_base<chroot_btrfs_snapshot>::test_setup_env(source, expected);
   }
@@ -251,7 +266,6 @@
     expected.set_value(group, "type", "directory");
     expected.set_value(group, "description", chroot->get_description() + ' ' + _("(source chroot)"));
     expected.set_value(group, "aliases", "test-alias-1-source,test-alias-2-source");
-    expected.set_value(group, "union-type", "none");
     expected.set_value(group, "directory", "/srv/chroot/sid");
     setup_keyfile_source_clone(expected, group);
 
@@ -259,6 +273,23 @@
       (source, expected, group);
   }
 
+  void test_setup_keyfile_session_source()
+  {
+    sbuild::keyfile expected;
+    const std::string group(source->get_name());
+    setup_keyfile_chroot(expected, group);
+    setup_keyfile_btrfs(expected, group);
+    expected.set_value(group, "type", "directory");
+    expected.set_value(group, "description", chroot->get_description() + ' ' + _("(source chroot)"));
+    expected.set_value(group, "aliases", "test-alias-1-source,test-alias-2-source");
+    expected.set_value(group, "directory", "/srv/chroot/sid");
+    expected.set_value(group, "mount-location", "/mnt/mount-location");
+    setup_keyfile_session_source_clone(expected, group);
+
+    test_chroot_base<chroot_btrfs_snapshot>::test_setup_keyfile
+      (session_source, expected, group);
+  }
+
   void test_session_flags()
   {
     CPPUNIT_ASSERT(chroot->get_session_flags() ==
diff -Nru schroot-1.6.3/test/sbuild-chroot-config.cc schroot-1.6.4/test/sbuild-chroot-config.cc
--- schroot-1.6.3/test/sbuild-chroot-config.cc	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/test/sbuild-chroot-config.cc	2012-10-27 23:39:05.000000000 +0100
@@ -41,9 +41,8 @@
   CPPUNIT_TEST(test_find_alias);
   CPPUNIT_TEST(test_get_chroot_list);
   CPPUNIT_TEST(test_get_alias_list);
-  CPPUNIT_TEST(test_print_chroot_list);
-  CPPUNIT_TEST(test_print_chroot_info);
   CPPUNIT_TEST(test_validate_chroots);
+  CPPUNIT_TEST_EXCEPTION(test_validate_chroots_fail, sbuild::error_base);
   CPPUNIT_TEST_EXCEPTION(test_config_fail, sbuild::error_base);
   CPPUNIT_TEST(test_config_deprecated);
   CPPUNIT_TEST(test_config_valid);
@@ -168,17 +167,18 @@
     CPPUNIT_ASSERT(chroots[6] == "chroot:unstable");
   }
 
-  void test_print_chroot_list()
+  void test_validate_chroots()
   {
-    this->cf->print_chroot_list(this->cf->get_chroot_list("chroot"), sbuild::cnull);
-  }
+    sbuild::string_list chroots;
+    chroots.push_back("default");
+    chroots.push_back("sarge");
+    chroots.push_back("unstable");
 
-  void test_print_chroot_info()
-  {
-    this->cf->print_chroot_info(this->cf->get_chroot_list("chroot"), sbuild::cnull);
+    sbuild::chroot_config::chroot_map m = this->cf->validate_chroots("chroot", chroots);
+    assert(m.size() == 3);
   }
 
-  void test_validate_chroots()
+  void test_validate_chroots_fail()
   {
     sbuild::string_list chroots;
     chroots.push_back("default");
@@ -187,10 +187,7 @@
     chroots.push_back("sarge");
     chroots.push_back("unstable");
 
-    sbuild::string_list invalid = this->cf->validate_chroots("chroot", chroots);
-    CPPUNIT_ASSERT(invalid.size() == 2);
-    CPPUNIT_ASSERT(invalid[0] == "invalid");
-    CPPUNIT_ASSERT(invalid[1] == "invalid2");
+    this->cf->validate_chroots("chroot", chroots);
   }
 
   void test_config_fail()
diff -Nru schroot-1.6.3/test/sbuild-chroot-custom.cc schroot-1.6.4/test/sbuild-chroot-custom.cc
--- schroot-1.6.3/test/sbuild-chroot-custom.cc	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/test/sbuild-chroot-custom.cc	2012-10-27 23:39:05.000000000 +0100
@@ -69,11 +69,10 @@
   void setUp()
   {
     test_chroot_base<chroot_custom>::setUp();
+    CPPUNIT_ASSERT(chroot);
     CPPUNIT_ASSERT(session);
     CPPUNIT_ASSERT(!source);
-    CPPUNIT_ASSERT(!chroot_union);
-    CPPUNIT_ASSERT(!session_union);
-    CPPUNIT_ASSERT(!source_union);
+    CPPUNIT_ASSERT(!session_source);
   }
 
   virtual void setup_chroot_props (sbuild::chroot::ptr& chroot)
diff -Nru schroot-1.6.3/test/sbuild-chroot-directory.cc schroot-1.6.4/test/sbuild-chroot-directory.cc
--- schroot-1.6.3/test/sbuild-chroot-directory.cc	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/test/sbuild-chroot-directory.cc	2012-10-27 23:39:05.000000000 +0100
@@ -55,6 +55,7 @@
   CPPUNIT_TEST(test_setup_env_union);
   CPPUNIT_TEST(test_setup_env_session_union);
   CPPUNIT_TEST(test_setup_env_source_union);
+  CPPUNIT_TEST(test_setup_env_session_source_union);
 #endif // SBUILD_FEATURE_UNION
   CPPUNIT_TEST(test_setup_keyfile);
   CPPUNIT_TEST(test_setup_keyfile_session);
@@ -63,6 +64,7 @@
   CPPUNIT_TEST(test_setup_keyfile_union);
   CPPUNIT_TEST(test_setup_keyfile_session_union);
   CPPUNIT_TEST(test_setup_keyfile_source_union);
+  CPPUNIT_TEST(test_setup_keyfile_session_source_union);
 #endif // SBUILD_FEATURE_UNION
   CPPUNIT_TEST(test_session_flags);
   CPPUNIT_TEST(test_print_details);
@@ -78,11 +80,16 @@
   void setUp()
   {
     test_chroot_base<chroot_directory>::setUp();
+    CPPUNIT_ASSERT(chroot);
     CPPUNIT_ASSERT(session);
     CPPUNIT_ASSERT(!source);
+    CPPUNIT_ASSERT(!session_source);
+#ifdef SBUILD_FEATURE_UNION
     CPPUNIT_ASSERT(chroot_union);
     CPPUNIT_ASSERT(session_union);
     CPPUNIT_ASSERT(source_union);
+    CPPUNIT_ASSERT(session_source_union);
+#endif
   }
 
   virtual void setup_chroot_props (sbuild::chroot::ptr& chroot)
@@ -146,7 +153,9 @@
     expected.add("CHROOT_SESSION_CLONE",  "false");
     expected.add("CHROOT_SESSION_CREATE", "false");
     expected.add("CHROOT_SESSION_PURGE",  "false");
+#ifdef SBUILD_FEATURE_UNION
     expected.add("CHROOT_UNION_TYPE",     "none");
+#endif // SBUILD_FEATURE_UNION
 
     test_chroot_base<chroot_directory>::test_setup_env(session, expected);
   }
@@ -196,10 +205,24 @@
     expected.add("CHROOT_SESSION_CLONE",  "false");
     expected.add("CHROOT_SESSION_CREATE", "true");
     expected.add("CHROOT_SESSION_PURGE",  "false");
-    expected.add("CHROOT_UNION_TYPE",     "none");
 
     test_chroot_base<chroot_directory>::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-session-name");
+    expected.add("CHROOT_ALIAS",          "test-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",  "false");
+
+    test_chroot_base<chroot_directory>::test_setup_env(session_source_union, expected);
+  }
 #endif // SBUILD_FEATURE_UNION
 
   void test_setup_keyfile()
@@ -209,7 +232,9 @@
     setup_keyfile_chroot(expected, group);
     expected.set_value(group, "type", "directory");
     expected.set_value(group, "directory", "/srv/chroot/example-chroot");
+#ifdef SBUILD_FEATURE_UNION
     setup_keyfile_union_unconfigured(expected, group);
+#endif // SBUILD_FEATURE_UNION
 
     test_chroot_base<chroot_directory>::test_setup_keyfile
       (chroot, expected, group);
@@ -226,7 +251,9 @@
     expected.set_value(group, "directory", "/srv/chroot/example-chroot");
     expected.set_value(group, "mount-location", "/mnt/mount-location");
     setup_keyfile_session_clone(expected, group);
+#ifdef SBUILD_FEATURE_UNION
     setup_keyfile_union_unconfigured(expected, group);
+#endif // SBUILD_FEATURE_UNION
 
     test_chroot_base<chroot_directory>::test_setup_keyfile
       (session, expected, group);
@@ -257,7 +284,9 @@
     expected.set_value(group, "directory", "/srv/chroot/example-chroot");
     expected.set_value(group, "mount-location", "/mnt/mount-location");
     setup_keyfile_session_clone(expected, group);
+#ifdef SBUILD_FEATURE_UNION
     setup_keyfile_union_unconfigured(expected, group);
+#endif // SBUILD_FEATURE_UNION
 
     test_chroot_base<chroot_directory>::test_setup_keyfile
       (session, expected, group);
@@ -304,11 +333,26 @@
     expected.set_value(group, "type", "directory");
     expected.set_value(group, "description", chroot->get_description() + ' ' + _("(source chroot)"));
     expected.set_value(group, "directory", "/srv/chroot/example-chroot");
-    setup_keyfile_union_unconfigured(expected, group);
 
     test_chroot_base<chroot_directory>::test_setup_keyfile
       (source_union, expected, group);
   }
+
+  void test_setup_keyfile_session_source_union()
+  {
+    sbuild::keyfile expected;
+    const std::string group(source_union->get_name());
+    setup_keyfile_chroot(expected, group);
+    setup_keyfile_source_clone(expected, group);
+    expected.set_value(group, "type", "directory");
+    expected.set_value(group, "description", chroot->get_description() + ' ' + _("(source chroot)"));
+    expected.set_value(group, "directory", "/srv/chroot/example-chroot");
+    expected.set_value(group, "mount-location", "/mnt/mount-location");
+    setup_keyfile_session_source_clone(expected, group);
+
+    test_chroot_base<chroot_directory>::test_setup_keyfile
+      (session_source_union, expected, group);
+  }
 #endif // SBUILD_FEATURE_UNION
 
 void test_session_flags()
diff -Nru schroot-1.6.3/test/sbuild-chroot-file.cc schroot-1.6.4/test/sbuild-chroot-file.cc
--- schroot-1.6.3/test/sbuild-chroot-file.cc	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/test/sbuild-chroot-file.cc	2012-10-27 23:39:05.000000000 +0100
@@ -55,9 +55,11 @@
   CPPUNIT_TEST(test_setup_env);
   CPPUNIT_TEST(test_setup_env_session);
   CPPUNIT_TEST(test_setup_env_source);
+  CPPUNIT_TEST(test_setup_env_session_source);
   CPPUNIT_TEST(test_setup_keyfile);
   CPPUNIT_TEST(test_setup_keyfile_session);
   CPPUNIT_TEST(test_setup_keyfile_source);
+  CPPUNIT_TEST(test_setup_keyfile_session_source);
   CPPUNIT_TEST(test_session_flags);
   CPPUNIT_TEST(test_print_details);
   CPPUNIT_TEST(test_print_config);
@@ -72,11 +74,16 @@
   void setUp()
   {
     test_chroot_base<chroot_file>::setUp();
+    CPPUNIT_ASSERT(chroot);
     CPPUNIT_ASSERT(session);
     CPPUNIT_ASSERT(source);
+    CPPUNIT_ASSERT(session_source);
+#ifdef SBUILD_FEATURE_UNION
     CPPUNIT_ASSERT(!chroot_union);
     CPPUNIT_ASSERT(!session_union);
     CPPUNIT_ASSERT(!source_union);
+    CPPUNIT_ASSERT(!session_source_union);
+#endif // SBUILD_FEATURE_UNION
   }
 
   virtual void setup_chroot_props (sbuild::chroot::ptr& chroot)
@@ -192,6 +199,21 @@
     test_chroot_base<chroot_file>::test_setup_env(source, expected);
   }
 
+  void test_setup_env_session_source()
+  {
+    sbuild::environment expected;
+    setup_env_gen(expected);
+    expected.add("SESSION_ID",           "test-session-name");
+    expected.add("CHROOT_ALIAS",         "test-session-name");
+    expected.add("CHROOT_DESCRIPTION",    chroot->get_description() + ' ' + _("(source chroot) (session chroot)"));
+    expected.add("CHROOT_FILE_REPACK",    "true");
+    expected.add("CHROOT_SESSION_CLONE",  "false");
+    expected.add("CHROOT_SESSION_CREATE", "false");
+    expected.add("CHROOT_SESSION_PURGE",  "true");
+
+    test_chroot_base<chroot_file>::test_setup_env(session_source, expected);
+  }
+
   void setup_keyfile_file(sbuild::keyfile &expected, const std::string group)
   {
     expected.set_value(group, "type", "file");
@@ -240,6 +262,21 @@
       (source, expected, group);
   }
 
+  void test_setup_keyfile_session_source()
+  {
+    sbuild::keyfile expected;
+    const std::string group(source->get_name());
+    setup_keyfile_chroot(expected, group);
+    setup_keyfile_file(expected, group);
+    setup_keyfile_session_source_clone(expected, group);
+    expected.set_value(group, "description", chroot->get_description() + ' ' + _("(source chroot) (session chroot)"));
+    expected.set_value(group, "file-repack", "true");
+    expected.set_value(group, "mount-location", "/mnt/mount-location");
+
+    test_chroot_base<chroot_file>::test_setup_keyfile
+      (session_source, expected, group);
+  }
+
   void test_session_flags()
   {
     CPPUNIT_ASSERT(chroot->get_session_flags() ==
diff -Nru schroot-1.6.3/test/sbuild-chroot-loopback.cc schroot-1.6.4/test/sbuild-chroot-loopback.cc
--- schroot-1.6.3/test/sbuild-chroot-loopback.cc	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/test/sbuild-chroot-loopback.cc	2012-10-27 23:39:05.000000000 +0100
@@ -56,6 +56,7 @@
   CPPUNIT_TEST(test_setup_env_union);
   CPPUNIT_TEST(test_setup_env_session_union);
   CPPUNIT_TEST(test_setup_env_source_union);
+  CPPUNIT_TEST(test_setup_env_session_source_union);
 #endif // SBUILD_FEATURE_UNION
   CPPUNIT_TEST(test_setup_keyfile);
   CPPUNIT_TEST(test_setup_keyfile_session);
@@ -63,6 +64,7 @@
   CPPUNIT_TEST(test_setup_keyfile_union);
   CPPUNIT_TEST(test_setup_keyfile_session_union);
   CPPUNIT_TEST(test_setup_keyfile_source_union);
+  CPPUNIT_TEST(test_setup_keyfile_session_source_union);
 #endif // SBUILD_FEATURE_UNION
   CPPUNIT_TEST(test_session_flags);
   CPPUNIT_TEST(test_print_details);
@@ -85,11 +87,16 @@
   void setUp()
   {
     test_chroot_base<chroot_loopback>::setUp();
+    CPPUNIT_ASSERT(chroot);
     CPPUNIT_ASSERT(session);
     CPPUNIT_ASSERT(!source);
+    CPPUNIT_ASSERT(!session_source);
+#ifdef SBUILD_FEATURE_UNION
     CPPUNIT_ASSERT(chroot_union);
     CPPUNIT_ASSERT(session_union);
     CPPUNIT_ASSERT(source_union);
+    CPPUNIT_ASSERT(session_source_union);
+#endif // SBUILD_FEATURE_UNION
   }
 
   virtual void setup_chroot_props (sbuild::chroot::ptr& chroot)
@@ -133,12 +140,7 @@
     expected.add("CHROOT_LOCATION",       "/squeeze");
     expected.add("CHROOT_PATH",           "/mnt/mount-location/squeeze");
     expected.add("CHROOT_FILE",           loopback_file);
-    expected.add("CHROOT_MOUNT_DEVICE",   loopback_file);
     expected.add("CHROOT_MOUNT_OPTIONS",  "-t jfs -o quota,rw");
-
-#ifdef SBUILD_FEATURE_UNION
-    expected.add("CHROOT_UNION_TYPE",     "none");
-#endif // SBUILD_FEATURE_UNION
   }
 
   void test_setup_env()
@@ -149,6 +151,9 @@
     expected.add("CHROOT_SESSION_CLONE",  "false");
     expected.add("CHROOT_SESSION_CREATE", "true");
     expected.add("CHROOT_SESSION_PURGE",  "false");
+#ifdef SBUILD_FEATURE_UNION
+    expected.add("CHROOT_UNION_TYPE",     "none");
+#endif // SBUILD_FEATURE_UNION
 
     test_chroot_base<chroot_loopback>::test_setup_env(chroot, expected);
   }
@@ -164,7 +169,12 @@
     expected.add("CHROOT_SESSION_CLONE",  "false");
     expected.add("CHROOT_SESSION_CREATE", "false");
     expected.add("CHROOT_SESSION_PURGE",  "false");
+    expected.add("CHROOT_MOUNT_DEVICE",   loopback_file);
+
+#ifdef SBUILD_FEATURE_UNION
     expected.add("CHROOT_UNION_TYPE",     "none");
+#endif // SBUILD_FEATURE_UNION
+
     test_chroot_base<chroot_loopback>::test_setup_env(session, expected);
   }
 
@@ -196,6 +206,7 @@
     expected.add("CHROOT_SESSION_CLONE",  "false");
     expected.add("CHROOT_SESSION_CREATE", "false");
     expected.add("CHROOT_SESSION_PURGE",  "true");
+    expected.add("CHROOT_MOUNT_DEVICE",   loopback_file);
     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");
@@ -216,6 +227,23 @@
 
     test_chroot_base<chroot_loopback>::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-session-name");
+    expected.add("CHROOT_ALIAS",          "test-session-name");
+    expected.add("CHROOT_NAME",           "test-name");
+    expected.add("CHROOT_DESCRIPTION",     chroot->get_description() + ' ' + _("(source chroot) (session chroot)"));
+    expected.add("CHROOT_MOUNT_DEVICE",   loopback_file);
+    expected.add("CHROOT_SESSION_CLONE",  "false");
+    expected.add("CHROOT_SESSION_CREATE", "false");
+    expected.add("CHROOT_SESSION_PURGE",  "false");
+
+    test_chroot_base<chroot_loopback>::test_setup_env(session_source_union, expected);
+  }
 #endif // SBUILD_FEATURE_UNION
 
   void setup_keyfile_loop(sbuild::keyfile &expected, std::string group)
@@ -232,7 +260,9 @@
     const std::string group(chroot->get_name());
     setup_keyfile_chroot(expected, group);
     setup_keyfile_loop(expected, group);
+#ifdef SBUILD_FEATURE_UNION
     setup_keyfile_union_unconfigured(expected, group);
+#endif // SBUILD_FEATURE_UNION
 
     test_chroot_base<chroot_loopback>::test_setup_keyfile
       (chroot, expected, group);
@@ -249,7 +279,9 @@
     expected.set_value(group, "mount-device", loopback_file);
     expected.set_value(group, "mount-location", "/mnt/mount-location");
     setup_keyfile_session_clone(expected, group);
+#ifdef SBUILD_FEATURE_UNION
     setup_keyfile_union_unconfigured(expected, group);
+#endif // SBUILD_FEATURE_UNION
 
     test_chroot_base<chroot_loopback>::test_setup_keyfile
       (session, expected, group);
@@ -294,11 +326,25 @@
     setup_keyfile_source_clone(expected, group);
     setup_keyfile_loop(expected, group);
     expected.set_value(group, "description", chroot->get_description() + ' ' + _("(source chroot)"));
-    setup_keyfile_union_unconfigured(expected, group);
 
     test_chroot_base<chroot_loopback>::test_setup_keyfile
       (source_union, expected, group);
   }
+
+  void test_setup_keyfile_session_source_union()
+  {
+    sbuild::keyfile expected;
+    const std::string group(source_union->get_name());
+    setup_keyfile_chroot(expected, group);
+    setup_keyfile_session_source_clone(expected, group);
+    setup_keyfile_loop(expected, group);
+    expected.set_value(group, "description", chroot->get_description() + ' ' + _("(source chroot) (session chroot)"));
+    expected.set_value(group, "mount-device", loopback_file);
+    expected.set_value(group, "mount-location", "/mnt/mount-location");
+
+    test_chroot_base<chroot_loopback>::test_setup_keyfile
+      (session_source_union, expected, group);
+  }
 #endif // SBUILD_FEATURE_UNION
 
   void test_session_flags()
diff -Nru schroot-1.6.3/test/sbuild-chroot-lvm-snapshot.cc schroot-1.6.4/test/sbuild-chroot-lvm-snapshot.cc
--- schroot-1.6.3/test/sbuild-chroot-lvm-snapshot.cc	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/test/sbuild-chroot-lvm-snapshot.cc	2012-10-27 23:39:05.000000000 +0100
@@ -55,9 +55,11 @@
   CPPUNIT_TEST(test_setup_env);
   CPPUNIT_TEST(test_setup_env_session);
   CPPUNIT_TEST(test_setup_env_source);
+  CPPUNIT_TEST(test_setup_env_session_source);
   CPPUNIT_TEST(test_setup_keyfile);
   CPPUNIT_TEST(test_setup_keyfile_session);
   CPPUNIT_TEST(test_setup_keyfile_source);
+  CPPUNIT_TEST(test_setup_keyfile_session_source);
   CPPUNIT_TEST(test_session_flags);
   CPPUNIT_TEST(test_print_details);
   CPPUNIT_TEST(test_print_config);
@@ -72,11 +74,10 @@
   void setUp()
   {
     test_chroot_base<chroot_lvm_snapshot>::setUp();
+    CPPUNIT_ASSERT(chroot);
     CPPUNIT_ASSERT(session);
     CPPUNIT_ASSERT(source);
-    CPPUNIT_ASSERT(!chroot_union);
-    CPPUNIT_ASSERT(!session_union);
-    CPPUNIT_ASSERT(!source_union);
+    CPPUNIT_ASSERT(session_source);
   }
 
   virtual void setup_chroot_props (sbuild::chroot::ptr& chroot)
@@ -170,15 +171,30 @@
     expected.add("CHROOT_TYPE",           "block-device");
     expected.add("CHROOT_NAME",           "test-name");
     expected.add("CHROOT_DESCRIPTION",     chroot->get_description() + ' ' + _("(source chroot)"));
-    expected.add("CHROOT_MOUNT_DEVICE",   "/dev/volgroup/testdev");
     expected.add("CHROOT_SESSION_CLONE",  "false");
     expected.add("CHROOT_SESSION_CREATE", "true");
     expected.add("CHROOT_SESSION_PURGE",  "false");
-    expected.add("CHROOT_UNION_TYPE",     "none");
 
     test_chroot_base<chroot_lvm_snapshot>::test_setup_env(source, expected);
   }
 
+  void test_setup_env_session_source()
+  {
+    sbuild::environment expected;
+    setup_env_gen(expected);
+    expected.add("CHROOT_TYPE",           "block-device");
+    expected.add("CHROOT_NAME",           "test-name");
+    expected.add("SESSION_ID",            "test-session-name");
+    expected.add("CHROOT_DESCRIPTION",     chroot->get_description() + ' ' + _("(source chroot) (session chroot)"));
+    expected.add("CHROOT_ALIAS",          "test-session-name");
+    expected.add("CHROOT_MOUNT_DEVICE",   "/dev/volgroup/testdev");
+    expected.add("CHROOT_SESSION_CLONE",  "false");
+    expected.add("CHROOT_SESSION_CREATE", "false");
+    expected.add("CHROOT_SESSION_PURGE",  "false");
+
+    test_chroot_base<chroot_lvm_snapshot>::test_setup_env(session_source, expected);
+  }
+
   void setup_keyfile_lvm(sbuild::keyfile &expected, std::string group)
   {
     expected.set_value(group, "device", "/dev/volgroup/testdev");
@@ -214,7 +230,6 @@
     expected.set_value(group, "lvm-snapshot-device", "/dev/volgroup/test-session-name");
     expected.set_value(group, "mount-device", "/dev/volgroup/test-session-name");
     expected.set_value(group, "mount-location", "/mnt/mount-location");
-    expected.set_value(group, "mount-device", "/dev/volgroup/test-session-name");
 
     test_chroot_base<chroot_lvm_snapshot>::test_setup_keyfile
       (session, expected, group);
@@ -229,13 +244,27 @@
     expected.set_value(group, "type", "block-device");
     expected.set_value(group, "description", chroot->get_description() + ' ' + _("(source chroot)"));
     expected.set_value(group, "aliases", "test-name-source,test-alias-1-source,test-alias-2-source");
-    expected.set_value(group, "union-type", "none");
     setup_keyfile_source_clone(expected, group);
 
     test_chroot_base<chroot_lvm_snapshot>::test_setup_keyfile
       (source, expected, group);
   }
 
+  void test_setup_keyfile_session_source()
+  {
+    sbuild::keyfile expected;
+    const std::string group(source->get_name());
+    setup_keyfile_chroot(expected, group);
+    setup_keyfile_lvm(expected, group);
+    expected.set_value(group, "type", "block-device");
+    expected.set_value(group, "mount-device", "/dev/volgroup/testdev");
+    expected.set_value(group, "mount-location", "/mnt/mount-location");
+    setup_keyfile_session_source_clone(expected, group);
+
+    test_chroot_base<chroot_lvm_snapshot>::test_setup_keyfile
+      (session_source, expected, group);
+  }
+
   void test_session_flags()
   {
     CPPUNIT_ASSERT(chroot->get_session_flags() ==
diff -Nru schroot-1.6.3/test/sbuild-chroot-plain.cc schroot-1.6.4/test/sbuild-chroot-plain.cc
--- schroot-1.6.3/test/sbuild-chroot-plain.cc	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/test/sbuild-chroot-plain.cc	2012-10-27 23:39:05.000000000 +0100
@@ -62,11 +62,10 @@
   void setUp()
   {
     test_chroot_base<chroot_plain>::setUp();
+    CPPUNIT_ASSERT(chroot);
     CPPUNIT_ASSERT(!session);
     CPPUNIT_ASSERT(!source);
-    CPPUNIT_ASSERT(!chroot_union);
-    CPPUNIT_ASSERT(!session_union);
-    CPPUNIT_ASSERT(!source_union);
+    CPPUNIT_ASSERT(!session_source);
   }
 
   virtual void setup_chroot_props (sbuild::chroot::ptr& chroot)
diff -Nru schroot-1.6.3/test/test-sbuild-chroot.h schroot-1.6.4/test/test-sbuild-chroot.h
--- schroot-1.6.3/test/test-sbuild-chroot.h	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/test/test-sbuild-chroot.h	2012-10-27 23:39:05.000000000 +0100
@@ -26,7 +26,9 @@
 #include <sbuild/sbuild-chroot-facet-session-clonable.h>
 #include <sbuild/sbuild-chroot-facet-source.h>
 #include <sbuild/sbuild-chroot-facet-source-clonable.h>
+#ifdef SBUILD_FEATURE_UNION
 #include <sbuild/sbuild-chroot-facet-union.h>
+#endif // SBUILD_FEATURE_UNION
 #include <sbuild/sbuild-chroot-facet-userdata.h>
 #include <sbuild/sbuild-i18n.h>
 #include <sbuild/sbuild-types.h>
@@ -48,9 +50,13 @@
   sbuild::chroot::ptr chroot;
   sbuild::chroot::ptr session;
   sbuild::chroot::ptr source;
+  sbuild::chroot::ptr session_source;
+#ifdef SBUILD_FEATURE_UNION
   sbuild::chroot::ptr chroot_union;
   sbuild::chroot::ptr session_union;
   sbuild::chroot::ptr source_union;
+  sbuild::chroot::ptr session_source_union;
+#endif // SBUILD_FEATURE_UNION
   std::string abs_testdata_dir;
 
 public:
@@ -109,6 +115,24 @@
 	CPPUNIT_ASSERT(pfsrc);
       }
 
+    if (source)
+      {
+	sbuild::chroot_facet_session_clonable::const_ptr psess_src
+	  (this->source->template get_facet<sbuild::chroot_facet_session_clonable>());
+	if (psess_src)
+	  {
+	    this->session_source = this->source->clone_session("test-session-name",
+							       "test-session-name",
+							       "user1",
+							       false);
+	    if (this->session_source)
+	      {
+		CPPUNIT_ASSERT(this->session_source->template get_facet<sbuild::chroot_facet_session>());
+	      }
+	  }
+      }
+
+#ifdef SBUILD_FEATURE_UNION
     this->chroot_union = sbuild::chroot::ptr(new T);
     sbuild::chroot_facet_union::ptr un =
       this->chroot_union->template get_facet<sbuild::chroot_facet_union>();
@@ -135,10 +159,24 @@
 					    false);
 	this->source_union = chroot_union->clone_source();
 
+	sbuild::chroot_facet_session_clonable::const_ptr puni_sess_src
+	  (this->source_union->template get_facet<sbuild::chroot_facet_session_clonable>());
+	if (puni_sess_src)
+	  {
+	    this->session_source_union = this->source_union->clone_session("test-session-name",
+									   "test-session-name",
+									   "user1",
+									   false);
+	  }
+
 	CPPUNIT_ASSERT(this->session_union);
 	CPPUNIT_ASSERT(this->session_union->template get_facet<sbuild::chroot_facet_session>());
 	CPPUNIT_ASSERT(this->source_union);
+	CPPUNIT_ASSERT(this->session_source_union);
+	CPPUNIT_ASSERT(this->session_source_union->template get_facet<sbuild::chroot_facet_session>());
       }
+#endif // SBUILD_FEATURE_UNION
+
   }
 
   virtual void setup_chroot_props (sbuild::chroot::ptr& chroot)
@@ -244,35 +282,31 @@
     keyfile.set_value(group, "root-groups", "");
   }
 
+#ifdef SBUILD_FEATURE_UNION
   void setup_keyfile_union_unconfigured (sbuild::keyfile&   keyfile,
 					 std::string const& group)
   {
-#ifdef SBUILD_FEATURE_UNION
     keyfile.set_value(group, "union-type", "none");
-#endif // SBUILD_FEATURE_UNION
   }
 
   void setup_keyfile_union_configured (sbuild::keyfile&   keyfile,
 				       std::string const& group)
   {
-#ifdef SBUILD_FEATURE_UNION
     keyfile.set_value(group, "union-type", "aufs");
     keyfile.set_value(group, "union-mount-options", "union-mount-options");
     keyfile.set_value(group, "union-overlay-directory", "/overlay");
     keyfile.set_value(group, "union-underlay-directory", "/underlay");
-#endif // SBUILD_FEATURE_UNION
   }
 
   void setup_keyfile_union_session (sbuild::keyfile&   keyfile,
 				    std::string const& group)
   {
-#ifdef SBUILD_FEATURE_UNION
     keyfile.set_value(group, "union-type", "aufs");
     keyfile.set_value(group, "union-mount-options", "union-mount-options");
     keyfile.set_value(group, "union-overlay-directory", "/overlay/test-union-session-name");
     keyfile.set_value(group, "union-underlay-directory", "/underlay/test-union-session-name");
-#endif // SBUILD_FEATURE_UNION
   }
+#endif // SBUILD_FEATURE_UNION
 
   void setup_keyfile_session_clone (sbuild::keyfile&   keyfile,
 				    std::string const& group)
@@ -307,6 +341,22 @@
     setup_keyfile_source_clone(keyfile, chroot->get_name());
   }
 
+  void setup_keyfile_session_source_clone (sbuild::keyfile&   keyfile,
+					   std::string const& group)
+  {
+    setup_keyfile_chroot(keyfile, group);
+    keyfile.set_value(group, "name", "test-session-name");
+    keyfile.set_value(group, "original-name", "test-name");
+    keyfile.set_value(group, "selected-name", "test-session-name");
+    keyfile.set_value(group, "aliases", "");
+    keyfile.set_value(group, "description", chroot->get_description() + ' ' + _("(source chroot) (session chroot)"));
+    keyfile.set_value(group, "original-name", "test-name");
+    keyfile.set_value(group, "users", "user1");
+    keyfile.set_value(group, "root-users", "");
+    keyfile.set_value(group, "groups", "");
+    keyfile.set_value(group, "root-groups", "");
+  }
+
   void test_setup_env(const sbuild::environment& observed_environment,
 		      const sbuild::environment& expected_environment)
   {
diff -Nru schroot-1.6.3/VERSION schroot-1.6.4/VERSION
--- schroot-1.6.3/VERSION	2012-07-23 22:54:07.000000000 +0100
+++ schroot-1.6.4/VERSION	2012-10-27 23:39:05.000000000 +0100
@@ -1,5 +1,5 @@
 Package: schroot
-Version: 1.6.3
-Release-Date: 23 Jul 2012
+Version: 1.6.4
+Release-Date: 27 Oct 2012
 Released-By: Roger Leigh <rleigh@debian.org>
-Git-Tag: release/schroot-1.6.3
+Git-Tag: release/schroot-1.6.4
