tags 635320 + patch
thanks

On Sun, Jul 24, 2011 at 09:20:47PM -0700, Vagrant Cascadian wrote:
> Package: schroot
> Version: 1.4.23-1
> Severity: wishlist
> 
> thanks for maintaining schroot!
> 
> it would be useful if schroot could set a variable (CHROOT_NAME_ALIAS?) that 
> contained the alias used, much like CHROOT_NAME shows which chroot is used:
> 
> so in schroot.conf:
> 
>   [sid]
>   aliases=default,unstable,experimental,some-wacky-sid-variant
>   description=sid
>   type=lvm-snapshot
>   device=/dev/prl/schroot_base
>   lvm-snapshot-options=--size 2G
>   location=/sid
>    
> which would allow for a setup.d script:
> 
>   #!/bin/sh
>   if [ "${CHROOT_NAME_ALIAS}" = "experimental" ] ; then
>     # some magic that configures experimental chroot here...
>   elif [ "${CHROOT_NAME_ALIAS}" = "some-wacky-sid-variant" ] ; then
>     # some magic that configures some-wacky-sid-variant chroot here...
>   fi
> 
> 
> this would save the need of having to set up a separate schroot.conf entry 
> for 
> chroots that contain only minimal differences in the source chroot.
> 
> this would also allow options like apt-get dist-upgrade when using schroot 
> --all-source-chroots behave with fewer surprises, since it won't treat the 
> other entries as having a separate source chroot.

Preliminary support is in the attached patch against git master.  I'll
also test and backport for schroot 1.4.  Uses CHROOT_ALIAS in setup
scripts; SCHROOT_ALIAS_NAME in user environment.


Regards,
Roger

-- 
  .''`.  Roger Leigh
 : :' :  Debian GNU/Linux             http://people.debian.org/~rleigh/
 `. `'   Printing on GNU/Linux?       http://gutenprint.sourceforge.net/
   `-    GPG Public Key: 0x25BFB848   Please GPG sign your mail.
>From 241b823cdefd61d124168030a7556aff0e4ece6b Mon Sep 17 00:00:00 2001
From: Roger Leigh <[email protected]>
Date: Sun, 27 Nov 2011 00:51:13 +0000
Subject: [PATCH] sbuild::chroot_facet_session: Store alias used as
 selected_name

Set in environment as CHROOT_ALIAS.
---
 bin/schroot/schroot-main-base.cc               |    7 ++++-
 man/schroot-setup.5.in                         |    7 +++++
 man/schroot.1.in                               |    5 +++-
 sbuild/sbuild-chroot-block-device.cc           |    3 +-
 sbuild/sbuild-chroot-block-device.h            |    1 +
 sbuild/sbuild-chroot-btrfs-snapshot.cc         |    3 +-
 sbuild/sbuild-chroot-btrfs-snapshot.h          |    1 +
 sbuild/sbuild-chroot-config.cc                 |    2 +-
 sbuild/sbuild-chroot-directory.cc              |    3 +-
 sbuild/sbuild-chroot-directory.h               |    1 +
 sbuild/sbuild-chroot-facet-session-clonable.cc |    2 +
 sbuild/sbuild-chroot-facet-session-clonable.h  |    1 +
 sbuild/sbuild-chroot-facet-session.cc          |   31 +++++++++++++++++++++++-
 sbuild/sbuild-chroot-facet-session.h           |   19 ++++++++++++++
 sbuild/sbuild-chroot-file.cc                   |    3 +-
 sbuild/sbuild-chroot-file.h                    |    1 +
 sbuild/sbuild-chroot-loopback.cc               |    3 +-
 sbuild/sbuild-chroot-loopback.h                |    1 +
 sbuild/sbuild-chroot-lvm-snapshot.cc           |    3 +-
 sbuild/sbuild-chroot-lvm-snapshot.h            |    1 +
 sbuild/sbuild-chroot-plain.cc                  |    1 +
 sbuild/sbuild-chroot-plain.h                   |    1 +
 sbuild/sbuild-chroot.h                         |    6 +++-
 sbuild/sbuild-session.cc                       |   14 +++++++---
 sbuild/sbuild-session.h                        |   10 +++++++-
 test/sbuild-chroot-block-device.cc             |    4 +++
 test/sbuild-chroot-btrfs-snapshot.cc           |    2 +
 test/sbuild-chroot-directory.cc                |    6 ++++
 test/sbuild-chroot-file.cc                     |    2 +
 test/sbuild-chroot-loopback.cc                 |    4 +++
 test/sbuild-chroot-lvm-snapshot.cc             |    2 +
 test/sbuild-chroot.cc                          |    1 +
 test/test-sbuild-chroot.h                      |    2 +
 33 files changed, 136 insertions(+), 17 deletions(-)

diff --git a/bin/schroot/schroot-main-base.cc b/bin/schroot/schroot-main-base.cc
index e49aab7..5046106 100644
--- a/bin/schroot/schroot-main-base.cc
+++ b/bin/schroot/schroot-main-base.cc
@@ -276,7 +276,12 @@ main_base::run_impl ()
     {
       sbuild::chroot::ptr c = this->config->find_alias("", *pos);
       if (c)
-	chroot_objects.push_back(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);
     }
diff --git a/man/schroot-setup.5.in b/man/schroot-setup.5.in
index 670a54b..2d6ad3e 100644
--- a/man/schroot-setup.5.in
+++ b/man/schroot-setup.5.in
@@ -112,6 +112,13 @@ CHROOT_NAME
 The name of the chroot.  This is useful for restricting a setup task to a
 particular chroot, or set of chroots.
 .TP
+CHROOT_ALIAS
+The name of the alias used to select the chroot.  This is useful for
+specialising a setup task based upon one of its alternative alias names, or the
+default chroot name.  For example, it could be used to specify additional
+sources in \fI/etc/apt/sources.list\fP, such as a stable-security alias for a
+stable chroot, or an experimental alias for an unstable chroot.
+.TP
 CHROOT_DESCRIPTION
 The description of the chroot.
 .TP
diff --git a/man/schroot.1.in b/man/schroot.1.in
index 3277bca..71e8df3 100644
--- a/man/schroot.1.in
+++ b/man/schroot.1.in
@@ -612,7 +612,10 @@ variables are defined: HOME, LOGNAME, PATH, SHELL, TERM (preserved if already
 defined), and USER.  The environment variables SCHROOT_COMMAND, SCHROOT_USER,
 SCHROOT_GROUP, SCHROOT_UID and SCHROOT_GID are set inside the chroot specifying
 the command being run, the user name, group name, user ID and group ID,
-respectively.
+respectively.  Additionally, the environment variables SCHROOT_SESSION_ID,
+SCHROOT_CHROOT_NAME and SCHROOT_ALIAS_NAME specify the session ID, the original
+chroot name prior to session creation, and the alias used to originally
+identify the selected chroot, respectively.
 .PP
 The following, potentially dangerous, environment variables are removed for
 safety by default: BASH_ENV, CDPATH, ENV, HOSTALIASES, IFS, KRB5_CONFIG,
diff --git a/sbuild/sbuild-chroot-block-device.cc b/sbuild/sbuild-chroot-block-device.cc
index 77ea681..9168695 100644
--- a/sbuild/sbuild-chroot-block-device.cc
+++ b/sbuild/sbuild-chroot-block-device.cc
@@ -72,6 +72,7 @@ chroot_block_device::clone () const
 
 sbuild::chroot::ptr
 chroot_block_device::clone_session (std::string const& session_id,
+				    std::string const& alias,
 				    std::string const& user,
 				    bool               root) const
 {
@@ -80,7 +81,7 @@ chroot_block_device::clone_session (std::string const& session_id,
   assert(psess);
 
   ptr session(new chroot_block_device(*this));
-  psess->clone_session_setup(session, session_id, user, root);
+  psess->clone_session_setup(session, session_id, alias, user, root);
 
   return session;
 }
diff --git a/sbuild/sbuild-chroot-block-device.h b/sbuild/sbuild-chroot-block-device.h
index 47d9c6e..45316ae 100644
--- a/sbuild/sbuild-chroot-block-device.h
+++ b/sbuild/sbuild-chroot-block-device.h
@@ -63,6 +63,7 @@ namespace sbuild
 
     virtual chroot::ptr
     clone_session (std::string const& session_id,
+		   std::string const& alias,
 		   std::string const& user,
 		   bool               root) const;
 
diff --git a/sbuild/sbuild-chroot-btrfs-snapshot.cc b/sbuild/sbuild-chroot-btrfs-snapshot.cc
index 9a86c2e..ab2e104 100644
--- a/sbuild/sbuild-chroot-btrfs-snapshot.cc
+++ b/sbuild/sbuild-chroot-btrfs-snapshot.cc
@@ -64,6 +64,7 @@ chroot_btrfs_snapshot::clone () const
 
 sbuild::chroot::ptr
 chroot_btrfs_snapshot::clone_session (std::string const& session_id,
+				      std::string const& alias,
 				      std::string const& user,
 				      bool               root) const
 {
@@ -72,7 +73,7 @@ chroot_btrfs_snapshot::clone_session (std::string const& session_id,
   assert(psess);
 
   ptr session(new chroot_btrfs_snapshot(*this));
-  psess->clone_session_setup(session, session_id, user, root);
+  psess->clone_session_setup(session, session_id, alias, user, root);
 
   return session;
 }
diff --git a/sbuild/sbuild-chroot-btrfs-snapshot.h b/sbuild/sbuild-chroot-btrfs-snapshot.h
index 671fef1..b7d9488 100644
--- a/sbuild/sbuild-chroot-btrfs-snapshot.h
+++ b/sbuild/sbuild-chroot-btrfs-snapshot.h
@@ -49,6 +49,7 @@ namespace sbuild
 
     virtual chroot::ptr
     clone_session (std::string const& session_id,
+		   std::string const& alias,
 		   std::string const& user,
 		   bool               root) const;
 
diff --git a/sbuild/sbuild-chroot-config.cc b/sbuild/sbuild-chroot-config.cc
index 7f76089..d9ab841 100644
--- a/sbuild/sbuild-chroot-config.cc
+++ b/sbuild/sbuild-chroot-config.cc
@@ -739,7 +739,7 @@ chroot_config::load_keyfile (std::string const& chroot_namespace,
       if (chroot_namespace == "session" &&
 	  chroot->get_facet<chroot_facet_session_clonable>())
 	{
-	  chroot = chroot->clone_session("dummy-session-name", "", false);
+	  chroot = chroot->clone_session("dummy-session-name", "dummy-session-name", "", false);
 	  assert(chroot);
 	  chroot_facet_session::const_ptr psess
 	    (chroot->get_facet<chroot_facet_session>());
diff --git a/sbuild/sbuild-chroot-directory.cc b/sbuild/sbuild-chroot-directory.cc
index 23a67dc..356783d 100644
--- a/sbuild/sbuild-chroot-directory.cc
+++ b/sbuild/sbuild-chroot-directory.cc
@@ -74,6 +74,7 @@ chroot_directory::clone () const
 
 sbuild::chroot::ptr
 chroot_directory::clone_session (std::string const& session_id,
+				 std::string const& alias,
 				 std::string const& user,
 				 bool               root) const
 {
@@ -82,7 +83,7 @@ chroot_directory::clone_session (std::string const& session_id,
   assert(psess);
 
   ptr session(new chroot_directory(*this));
-  psess->clone_session_setup(session, session_id, user, root);
+  psess->clone_session_setup(session, session_id, alias, user, root);
 
   return session;
 }
diff --git a/sbuild/sbuild-chroot-directory.h b/sbuild/sbuild-chroot-directory.h
index acbcd3e..cae17e9 100644
--- a/sbuild/sbuild-chroot-directory.h
+++ b/sbuild/sbuild-chroot-directory.h
@@ -60,6 +60,7 @@ namespace sbuild
 
     virtual chroot::ptr
     clone_session (std::string const& session_id,
+		   std::string const& alias,
 		   std::string const& user,
 		   bool               root) const;
 
diff --git a/sbuild/sbuild-chroot-facet-session-clonable.cc b/sbuild/sbuild-chroot-facet-session-clonable.cc
index f9c30d7..6af4789 100644
--- a/sbuild/sbuild-chroot-facet-session-clonable.cc
+++ b/sbuild/sbuild-chroot-facet-session-clonable.cc
@@ -74,6 +74,7 @@ chroot_facet_session_clonable::get_name () const
 void
 chroot_facet_session_clonable::clone_session_setup (chroot::ptr&       clone,
 						    std::string const& session_id,
+						    std::string const& alias,
 						    std::string const& user,
 						    bool               root) const
 {
@@ -88,6 +89,7 @@ chroot_facet_session_clonable::clone_session_setup (chroot::ptr&       clone,
   assert(psess);
 
   psess->set_original_name(clone->get_name());
+  psess->set_selected_name(alias);
   clone->set_name(session_id);
   assert(clone->get_name() == session_id);
   clone->set_description
diff --git a/sbuild/sbuild-chroot-facet-session-clonable.h b/sbuild/sbuild-chroot-facet-session-clonable.h
index 4c83490..48eff5b 100644
--- a/sbuild/sbuild-chroot-facet-session-clonable.h
+++ b/sbuild/sbuild-chroot-facet-session-clonable.h
@@ -73,6 +73,7 @@ namespace sbuild
     virtual void
     clone_session_setup (chroot::ptr&       clone,
 			 std::string const& session_id,
+			 std::string const& alias,
 			 std::string const& user,
 			 bool               root) const;
 
diff --git a/sbuild/sbuild-chroot-facet-session.cc b/sbuild/sbuild-chroot-facet-session.cc
index a312477..d457523 100644
--- a/sbuild/sbuild-chroot-facet-session.cc
+++ b/sbuild/sbuild-chroot-facet-session.cc
@@ -40,7 +40,8 @@ using namespace sbuild;
 
 chroot_facet_session::chroot_facet_session ():
   chroot_facet(),
-  original_chroot_name()
+  original_chroot_name(),
+  selected_chroot_name()
 {
 }
 
@@ -78,6 +79,19 @@ void
 chroot_facet_session::set_original_name (std::string const& name)
 {
   this->original_chroot_name = name;
+  this->selected_chroot_name = name;
+}
+
+std::string const&
+chroot_facet_session::get_selected_name () const
+{
+  return this->selected_chroot_name;
+}
+
+void
+chroot_facet_session::set_selected_name (std::string const& name)
+{
+  this->selected_chroot_name = name;
 }
 
 void
@@ -88,6 +102,9 @@ chroot_facet_session::setup_env (chroot const& chroot,
   // defaults to session ID).
   if (!get_original_name().empty())
     env.add("CHROOT_NAME", get_original_name());
+
+  if (!get_selected_name().empty())
+    env.add("CHROOT_ALIAS", get_selected_name());
 }
 
 sbuild::chroot::session_flags
@@ -102,6 +119,8 @@ chroot_facet_session::get_details (chroot const&  chroot,
 {
   if (!get_original_name().empty())
     detail.add(_("Original Chroot Name"), get_original_name());
+  if (!get_original_name().empty())
+    detail.add(_("Selected Chroot Name"), get_selected_name());
   if (!chroot.get_name().empty())
     detail.add(_("Session ID"), chroot.get_name());
 }
@@ -113,6 +132,10 @@ chroot_facet_session::get_keyfile (chroot const& chroot,
   keyfile::set_object_value(*this, &chroot_facet_session::get_original_name,
 			    keyfile, chroot.get_name(),
 			    "original-name");
+
+  keyfile::set_object_value(*this, &chroot_facet_session::get_selected_name,
+			    keyfile, chroot.get_name(),
+			    "selected-name");
 }
 
 void
@@ -163,4 +186,10 @@ chroot_facet_session::set_keyfile (chroot&        chroot,
 			    "original-name",
 			    keyfile::PRIORITY_OPTIONAL);
   used_keys.push_back("original-name");
+
+  keyfile::get_object_value(*this, &chroot_facet_session::set_selected_name,
+			    keyfile, chroot.get_name(),
+			    "selected-name",
+			    keyfile::PRIORITY_OPTIONAL);
+  used_keys.push_back("selected-name");
 }
diff --git a/sbuild/sbuild-chroot-facet-session.h b/sbuild/sbuild-chroot-facet-session.h
index 2a6dcc1..055e90b 100644
--- a/sbuild/sbuild-chroot-facet-session.h
+++ b/sbuild/sbuild-chroot-facet-session.h
@@ -73,12 +73,29 @@ namespace sbuild
 
     /**
      * Set the original name of the chroot (prior to session cloning).
+     * This will also set the selected name.
      *
      * @param name the name.
      */
     void
     set_original_name (std::string const& name);
 
+    /**
+     * Get the selected name of the chroot (alias used).
+     *
+     * @returns the name.
+     */
+    std::string const&
+    get_selected_name () const;
+
+    /**
+     * Set the selected name of the chroot (alias used).
+     *
+     * @param name the name.
+     */
+    void
+    set_selected_name (std::string const& name);
+
     virtual void
     setup_env (chroot const& chroot,
 	       environment&  env) const;
@@ -102,6 +119,8 @@ namespace sbuild
   private:
     /// Original chroot name prior to session cloning.
     std::string  original_chroot_name;
+    /// Selected chroot name.
+    std::string  selected_chroot_name;
   };
 
 }
diff --git a/sbuild/sbuild-chroot-file.cc b/sbuild/sbuild-chroot-file.cc
index 1dd75f9..d646a08 100644
--- a/sbuild/sbuild-chroot-file.cc
+++ b/sbuild/sbuild-chroot-file.cc
@@ -63,6 +63,7 @@ chroot_file::clone () const
 
 sbuild::chroot::ptr
 chroot_file::clone_session (std::string const& session_id,
+			    std::string const& alias,
 			    std::string const& user,
 			    bool               root) const
 {
@@ -71,7 +72,7 @@ chroot_file::clone_session (std::string const& session_id,
   assert(psess);
 
   ptr session(new chroot_file(*this));
-  psess->clone_session_setup(session, session_id, user, root);
+  psess->clone_session_setup(session, session_id, alias, user, root);
 
   return session;
 }
diff --git a/sbuild/sbuild-chroot-file.h b/sbuild/sbuild-chroot-file.h
index de2e631..b32f92c 100644
--- a/sbuild/sbuild-chroot-file.h
+++ b/sbuild/sbuild-chroot-file.h
@@ -49,6 +49,7 @@ namespace sbuild
 
     virtual chroot::ptr
     clone_session (std::string const& session_id,
+		   std::string const& alias,
 		   std::string const& user,
 		   bool               root) const;
 
diff --git a/sbuild/sbuild-chroot-loopback.cc b/sbuild/sbuild-chroot-loopback.cc
index 497b256..a3bc45b 100644
--- a/sbuild/sbuild-chroot-loopback.cc
+++ b/sbuild/sbuild-chroot-loopback.cc
@@ -65,6 +65,7 @@ chroot_loopback::clone () const
 
 sbuild::chroot::ptr
 chroot_loopback::clone_session (std::string const& session_id,
+				std::string const& alias,
 				std::string const& user,
 				bool               root) const
 {
@@ -73,7 +74,7 @@ chroot_loopback::clone_session (std::string const& session_id,
   assert(psess);
 
   ptr session(new chroot_loopback(*this));
-  psess->clone_session_setup(session, session_id, user, root);
+  psess->clone_session_setup(session, session_id, alias, user, root);
 
   return session;
 }
diff --git a/sbuild/sbuild-chroot-loopback.h b/sbuild/sbuild-chroot-loopback.h
index 596cce8..ee3b03b 100644
--- a/sbuild/sbuild-chroot-loopback.h
+++ b/sbuild/sbuild-chroot-loopback.h
@@ -54,6 +54,7 @@ namespace sbuild
 
     virtual chroot::ptr
     clone_session (std::string const& session_id,
+		   std::string const& alias,
 		   std::string const& user,
 		   bool               root) const;
 
diff --git a/sbuild/sbuild-chroot-lvm-snapshot.cc b/sbuild/sbuild-chroot-lvm-snapshot.cc
index 36ac30b..c581f01 100644
--- a/sbuild/sbuild-chroot-lvm-snapshot.cc
+++ b/sbuild/sbuild-chroot-lvm-snapshot.cc
@@ -63,6 +63,7 @@ chroot_lvm_snapshot::clone () const
 
 sbuild::chroot::ptr
 chroot_lvm_snapshot::clone_session (std::string const& session_id,
+				    std::string const& alias,
 				    std::string const& user,
 				    bool               root) const
 {
@@ -71,7 +72,7 @@ chroot_lvm_snapshot::clone_session (std::string const& session_id,
   assert(psess);
 
   ptr session(new chroot_lvm_snapshot(*this));
-  psess->clone_session_setup(session, session_id, user, root);
+  psess->clone_session_setup(session, session_id, alias, user, root);
 
   return session;
 }
diff --git a/sbuild/sbuild-chroot-lvm-snapshot.h b/sbuild/sbuild-chroot-lvm-snapshot.h
index bcff8a7..b955fbe 100644
--- a/sbuild/sbuild-chroot-lvm-snapshot.h
+++ b/sbuild/sbuild-chroot-lvm-snapshot.h
@@ -49,6 +49,7 @@ namespace sbuild
 
     virtual chroot::ptr
     clone_session (std::string const& session_id,
+		   std::string const& alias,
 		   std::string const& user,
 		   bool               root) const;
 
diff --git a/sbuild/sbuild-chroot-plain.cc b/sbuild/sbuild-chroot-plain.cc
index 67f9750..84c72d0 100644
--- a/sbuild/sbuild-chroot-plain.cc
+++ b/sbuild/sbuild-chroot-plain.cc
@@ -52,6 +52,7 @@ chroot_plain::clone () const
 
 sbuild::chroot::ptr
 sbuild::chroot_plain::clone_session (std::string const& session_id,
+				     std::string const& alias,
 				     std::string const& user,
 				     bool               root) const
 {
diff --git a/sbuild/sbuild-chroot-plain.h b/sbuild/sbuild-chroot-plain.h
index a5cb7af..a0da67f 100644
--- a/sbuild/sbuild-chroot-plain.h
+++ b/sbuild/sbuild-chroot-plain.h
@@ -48,6 +48,7 @@ namespace sbuild
 
     virtual chroot::ptr
     clone_session (std::string const& session_id,
+		   std::string const& alias,
 		   std::string const& user,
 		   bool               root) const;
 
diff --git a/sbuild/sbuild-chroot.h b/sbuild/sbuild-chroot.h
index ee07b88..491ac81 100644
--- a/sbuild/sbuild-chroot.h
+++ b/sbuild/sbuild-chroot.h
@@ -136,13 +136,15 @@ namespace sbuild
     /**
      * Create a session chroot.
      *
-     * @param name the identifier (session_id) for the new session.
+     * @param session_id the identifier (session_id) for the new session.
+     * @param alias used to initially identify the chroot.
      * @param user the user creating the session.
      * @param root true if the user has root access, otherwise false.
      * @returns a session chroot.
      */
     virtual chroot::ptr
-    clone_session (std::string const& name,
+    clone_session (std::string const& session_id,
+		   std::string const& alias,
 		   std::string const& user,
 		   bool               root) const = 0;
 
diff --git a/sbuild/sbuild-session.cc b/sbuild/sbuild-session.cc
index cc07b4c..1bfce59 100644
--- a/sbuild/sbuild-session.cc
+++ b/sbuild/sbuild-session.cc
@@ -529,7 +529,8 @@ session::get_auth_status () const
        cur != this->chroots.end();
        ++cur)
     {
-      status = auth::change_auth(status, get_chroot_auth_status(status, *cur));
+      status = auth::change_auth(status,
+				 get_chroot_auth_status(status, cur->chroot));
     }
 
   return status;
@@ -609,17 +610,17 @@ session::run_impl ()
 	   ++cur)
 	{
 	  log_debug(DEBUG_NOTICE)
-	    << format("Running session in %1% chroot:") % *cur
+	    << format("Running session in %1% chroot:") % cur->alias
 	    << endl;
 
-	  const chroot::ptr ch = *cur;
+	  const chroot::ptr ch = cur->chroot;
 
 	  // TODO: Make chroot/session selection automatically fail
 	  // if no session exists earlier on when selecting chroots.
 	  if (ch->get_session_flags() & chroot::SESSION_CREATE &&
 	      (this->session_operation != OPERATION_AUTOMATIC &&
 	       this->session_operation != OPERATION_BEGIN))
-	      throw error(*cur, CHROOT_NOTFOUND);
+	      throw error(cur->alias, CHROOT_NOTFOUND);
 
 	  // For now, use a copy of the chroot; if we create a session
 	  // later, we will replace it.
@@ -655,6 +656,7 @@ session::run_impl ()
 				    in_groups, in_root_groups);
 
 	      chroot = ch->clone_session(new_session_id,
+					 cur->alias,
 					 this->authstat->get_ruser(),
 					 (in_root_users || in_root_groups));
 	      assert(chroot->get_facet<chroot_facet_session>());
@@ -1259,6 +1261,10 @@ session::run_child (sbuild::chroot::ptr& session_chroot)
     env.add("SCHROOT_CHROOT_NAME", psess->get_original_name());
   else
     env.add("SCHROOT_CHROOT_NAME", session_chroot->get_name());
+  if (psess && psess->get_selected_name().length())
+    env.add("SCHROOT_ALIAS_NAME", psess->get_selected_name());
+  else
+    env.add("SCHROOT_ALIAS_NAME", session_chroot->get_name());
   env.add("SCHROOT_SESSION_ID", session_chroot->get_name());
 
   log_debug(DEBUG_INFO) << "Set environment:\n" << env;
diff --git a/sbuild/sbuild-session.h b/sbuild/sbuild-session.h
index bd8f6b9..e137998 100644
--- a/sbuild/sbuild-session.h
+++ b/sbuild/sbuild-session.h
@@ -46,8 +46,16 @@ namespace sbuild
   class session
   {
   public:
+    struct chroot_list_entry
+    {
+      /// Name used to initially identify the chroot.
+      std::string         alias;
+      /// Pointer to chroot object.
+      sbuild::chroot::ptr chroot;
+    };
+
     /// A list of chroots.
-    typedef std::vector<chroot::ptr> chroot_list;
+    typedef std::vector<chroot_list_entry> chroot_list;
 
     /// Session operations.
     enum operation
diff --git a/test/sbuild-chroot-block-device.cc b/test/sbuild-chroot-block-device.cc
index 9e493d1..e570373 100644
--- a/test/sbuild-chroot-block-device.cc
+++ b/test/sbuild-chroot-block-device.cc
@@ -161,6 +161,7 @@ public:
     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() + ' ' + _("(session chroot)"));
     expected.add("CHROOT_SESSION_CLONE",  "false");
     expected.add("CHROOT_SESSION_CREATE", "false");
@@ -190,6 +191,7 @@ public:
     sbuild::environment expected;
     setup_env_gen(expected);
     expected.add("SESSION_ID",            "test-union-session-name");
+    expected.add("CHROOT_ALIAS",          "test-union-session-name");
     expected.add("CHROOT_DESCRIPTION",     chroot->get_description() + ' ' + _("(session chroot)"));
     expected.add("CHROOT_SESSION_CLONE",  "false");
     expected.add("CHROOT_SESSION_CREATE", "false");
@@ -243,6 +245,7 @@ public:
     setup_keyfile_session(expected, group);
     setup_keyfile_block(expected, group);
     expected.set_value(group, "name", "test-session-name");
+    expected.set_value(group, "selected-name", "test-session-name");
     expected.set_value(group, "mount-device", "/dev/testdev");
     expected.set_value(group, "mount-location", "/mnt/mount-location");
     setup_keyfile_session_clone(expected, group);
@@ -273,6 +276,7 @@ public:
     setup_keyfile_session(expected, group);
     setup_keyfile_block(expected, group);
     expected.set_value(group, "name", "test-union-session-name");
+    expected.set_value(group, "selected-name", "test-union-session-name");
     expected.set_value(group, "mount-device", "/dev/testdev");
     expected.set_value(group, "mount-location", "/mnt/mount-location");
     setup_keyfile_session_clone(expected, group);
diff --git a/test/sbuild-chroot-btrfs-snapshot.cc b/test/sbuild-chroot-btrfs-snapshot.cc
index 0afa6ca..6384333 100644
--- a/test/sbuild-chroot-btrfs-snapshot.cc
+++ b/test/sbuild-chroot-btrfs-snapshot.cc
@@ -177,6 +177,7 @@ public:
     setup_env_gen(expected);
     expected.add("CHROOT_TYPE",           "btrfs-snapshot");
     expected.add("SESSION_ID",            "test-session-name");
+    expected.add("CHROOT_ALIAS",          "test-session-name");
     expected.add("CHROOT_DESCRIPTION",     chroot->get_description() + ' ' + _("(session chroot)"));
     expected.add("CHROOT_BTRFS_SOURCE_SUBVOLUME",       "/srv/chroot/sid");
     expected.add("CHROOT_BTRFS_SNAPSHOT_DIRECTORY", "/srv/chroot/snapshot");
@@ -231,6 +232,7 @@ public:
     setup_keyfile_btrfs(expected, group);
     expected.set_value(group, "type", "btrfs-snapshot");
     expected.set_value(group, "name", "test-session-name");
+    expected.set_value(group, "selected-name", "test-session-name");
     expected.set_value(group, "description", chroot->get_description() + ' ' + _("(session chroot)"));
     expected.set_value(group, "aliases", "");
     expected.set_value(group, "btrfs-snapshot-name", "/srv/chroot/snapshot/test-session-name");
diff --git a/test/sbuild-chroot-directory.cc b/test/sbuild-chroot-directory.cc
index cc3901f..e02e9fe 100644
--- a/test/sbuild-chroot-directory.cc
+++ b/test/sbuild-chroot-directory.cc
@@ -141,6 +141,7 @@ public:
     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() + ' ' + _("(session chroot)"));
     expected.add("CHROOT_SESSION_CLONE",  "false");
     expected.add("CHROOT_SESSION_CREATE", "false");
@@ -173,6 +174,7 @@ public:
     setup_env_gen(expected);
 
     expected.add("SESSION_ID",            "test-union-session-name");
+    expected.add("CHROOT_ALIAS",          "test-union-session-name");
     expected.add("CHROOT_DESCRIPTION",     chroot->get_description() + ' ' + _("(session chroot)"));
     expected.add("CHROOT_SESSION_CLONE",  "false");
     expected.add("CHROOT_SESSION_CREATE", "false");
@@ -220,6 +222,7 @@ public:
     setup_keyfile_session(expected, group);
     expected.set_value(group, "type", "directory");
     expected.set_value(group, "name", "test-session-name");
+    expected.set_value(group, "selected-name", "test-session-name");
     expected.set_value(group, "directory", "/srv/chroot/example-chroot");
     expected.set_value(group, "mount-location", "/mnt/mount-location");
     setup_keyfile_session_clone(expected, group);
@@ -235,6 +238,7 @@ public:
   {
     // Create session owned by user in root-users.
     this->session = this->chroot->clone_session("test-session-name",
+						"test-session-name",
 						"user3",
 						true);
     if (this->session)
@@ -249,6 +253,7 @@ public:
     expected.set_value(group, "root-users", "user3");
     expected.set_value(group, "type", "directory");
     expected.set_value(group, "name", "test-session-name");
+    expected.set_value(group, "selected-name", "test-session-name");
     expected.set_value(group, "directory", "/srv/chroot/example-chroot");
     expected.set_value(group, "mount-location", "/mnt/mount-location");
     setup_keyfile_session_clone(expected, group);
@@ -280,6 +285,7 @@ public:
     setup_keyfile_session(expected, group);
     expected.set_value(group, "type", "directory");
     expected.set_value(group, "name", "test-union-session-name");
+    expected.set_value(group, "selected-name", "test-union-session-name");
     expected.set_value(group, "directory", "/srv/chroot/example-chroot");
     expected.set_value(group, "mount-location", "/mnt/mount-location");
     setup_keyfile_session_clone(expected, group);
diff --git a/test/sbuild-chroot-file.cc b/test/sbuild-chroot-file.cc
index b6ef984..dad06f7 100644
--- a/test/sbuild-chroot-file.cc
+++ b/test/sbuild-chroot-file.cc
@@ -169,6 +169,7 @@ public:
     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() + ' ' + _("(session chroot)"));
     expected.add("CHROOT_FILE_REPACK",    "false");
     expected.add("CHROOT_SESSION_CLONE",  "false");
@@ -217,6 +218,7 @@ public:
     setup_keyfile_session(expected, group);
     setup_keyfile_file(expected, group);
     expected.set_value(group, "name", "test-session-name");
+    expected.set_value(group, "selected-name", "test-session-name");
     expected.set_value(group, "file-repack", "false");
     expected.set_value(group, "mount-location", "/mnt/mount-location");
     setup_keyfile_session_clone(expected, group);
diff --git a/test/sbuild-chroot-loopback.cc b/test/sbuild-chroot-loopback.cc
index 973cc13..0fedd43 100644
--- a/test/sbuild-chroot-loopback.cc
+++ b/test/sbuild-chroot-loopback.cc
@@ -159,6 +159,7 @@ public:
     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() + ' ' + _("(session chroot)"));
     expected.add("CHROOT_SESSION_CLONE",  "false");
     expected.add("CHROOT_SESSION_CREATE", "false");
@@ -190,6 +191,7 @@ public:
     setup_env_gen(expected);
 
     expected.add("SESSION_ID",            "test-union-session-name");
+    expected.add("CHROOT_ALIAS",          "test-union-session-name");
     expected.add("CHROOT_DESCRIPTION",     chroot->get_description() + ' ' + _("(session chroot)"));
     expected.add("CHROOT_SESSION_CLONE",  "false");
     expected.add("CHROOT_SESSION_CREATE", "false");
@@ -243,6 +245,7 @@ public:
     setup_keyfile_session(expected, group);
     setup_keyfile_loop(expected, group);
     expected.set_value(group, "name", "test-session-name");
+    expected.set_value(group, "selected-name", "test-session-name");
     expected.set_value(group, "mount-device", loopback_file);
     expected.set_value(group, "mount-location", "/mnt/mount-location");
     setup_keyfile_session_clone(expected, group);
@@ -273,6 +276,7 @@ public:
     setup_keyfile_session(expected, group);
     setup_keyfile_loop(expected, group);
     expected.set_value(group, "name", "test-union-session-name");
+    expected.set_value(group, "selected-name", "test-union-session-name");
     expected.set_value(group, "mount-device", loopback_file);
     expected.set_value(group, "mount-location", "/mnt/mount-location");
     setup_keyfile_session_clone(expected, group);
diff --git a/test/sbuild-chroot-lvm-snapshot.cc b/test/sbuild-chroot-lvm-snapshot.cc
index 13f352c..46ba8d7 100644
--- a/test/sbuild-chroot-lvm-snapshot.cc
+++ b/test/sbuild-chroot-lvm-snapshot.cc
@@ -150,6 +150,7 @@ public:
     setup_env_gen(expected);
     expected.add("CHROOT_TYPE",           "lvm-snapshot");
     expected.add("SESSION_ID",            "test-session-name");
+    expected.add("CHROOT_ALIAS",          "test-session-name");
     expected.add("CHROOT_DESCRIPTION",     chroot->get_description() + ' ' + _("(session chroot)"));
     expected.add("CHROOT_MOUNT_DEVICE",   "/dev/volgroup/test-session-name");
     expected.add("CHROOT_LVM_SNAPSHOT_NAME",    "test-session-name");
@@ -207,6 +208,7 @@ public:
     setup_keyfile_lvm(expected, group);
     expected.set_value(group, "type", "lvm-snapshot");
     expected.set_value(group, "name", "test-session-name");
+    expected.set_value(group, "selected-name", "test-session-name");
     expected.set_value(group, "description", chroot->get_description() + ' ' + _("(session chroot)"));
     expected.set_value(group, "aliases", "");
     expected.set_value(group, "lvm-snapshot-device", "/dev/volgroup/test-session-name");
diff --git a/test/sbuild-chroot.cc b/test/sbuild-chroot.cc
index 1a3f795..b49f72a 100644
--- a/test/sbuild-chroot.cc
+++ b/test/sbuild-chroot.cc
@@ -46,6 +46,7 @@ public:
 
   virtual ptr
   clone_session (std::string const& session_id,
+		 std::string const& alias,
 		 std::string const& user,
 		 bool               root) const
   { return ptr(); }
diff --git a/test/test-sbuild-chroot.h b/test/test-sbuild-chroot.h
index 9dfa9ef..b68c2e9 100644
--- a/test/test-sbuild-chroot.h
+++ b/test/test-sbuild-chroot.h
@@ -81,6 +81,7 @@ public:
     if (psess)
       {
 	this->session = this->chroot->clone_session("test-session-name",
+						    "test-session-name",
 						    "user1",
 						    false);
 	if (this->session)
@@ -127,6 +128,7 @@ public:
 
 	this->session_union =
 	  this->chroot_union->clone_session("test-union-session-name",
+					    "test-union-session-name",
 					    "user1",
 					    false);
 	this->source_union = chroot_union->clone_source();
-- 
1.7.7.3

Reply via email to