tags 354257 + patch
thanks

Hi,

I have now implemented this suggestion, and I have attached a diff for
you.  This should apply to the 0.2.4 source tarball at
people.debian.org/~rleigh/.  Otherwise, you could always apply it
directly to CVS (http://alioth.debian.org/scm/?group_id=30471 module
schroot).

If you enable "run-setup-scripts" for a "plain" chroot, it will now
start a session (try schroot -l --all-sessions"), and you can use
-b/-r/-e properly.


Regards,
Roger

-- 
Roger Leigh
                Printing on GNU/Linux?  http://gutenprint.sourceforge.net/
                Debian GNU/Linux        http://www.debian.org/
                GPG Public Key: 0x25BFB848.  Please sign and encrypt your mail.
Index: ChangeLog
===================================================================
RCS file: /cvsroot/buildd-tools/schroot/ChangeLog,v
retrieving revision 1.244
diff -u -r1.244 ChangeLog
--- ChangeLog	24 Feb 2006 20:26:07 -0000	1.244
+++ ChangeLog	25 Feb 2006 00:09:33 -0000
@@ -1,3 +1,28 @@
+2006-02-25  Roger Leigh  <[EMAIL PROTECTED]>
+
+	* Update tests.
+
+	* schroot/setup/10mount: Allow plain chroots to run the mount
+	script.  For plain chroots, bind mount LOCATION on MOUNT_LOCATION.
+
+	* schroot/setup/00check: For plain chroots, verify
+	CHROOT_LOCATION, rather than CHROOT_PATH (because CHROOT_PATH does
+	not exist at this point).
+
+	* schroot/sbuild-session.cc
+	(run_impl): In addition to all other chroot types, if chroot is a
+	chroot_plain chroot with setup scripts enabled, set the mount
+	location to the session id.
+
+	* schroot/sbuild-chroot-plain.cc
+	(get_path): New virtual method to override base class
+	implementation.  When setup scripts are enabled, return the mount
+	location, or else the location.
+	(setup_lock): When setup scripts are enabled, write out a session
+	metadata.
+	(get_session_flags): When setup scripts are enabled, enable
+	SESSION_CREATE, or else 0.
+
 2006-02-24  Roger Leigh  <[EMAIL PROTECTED]>
 
 	* schroot/schroot.conf.5.in: Document "location" for block-device
Index: schroot/sbuild-chroot-plain.cc
===================================================================
RCS file: /cvsroot/buildd-tools/schroot/schroot/sbuild-chroot-plain.cc,v
retrieving revision 1.21
diff -u -r1.21 sbuild-chroot-plain.cc
--- schroot/sbuild-chroot-plain.cc	24 Feb 2006 20:26:07 -0000	1.21
+++ schroot/sbuild-chroot-plain.cc	25 Feb 2006 00:09:33 -0000
@@ -56,6 +56,17 @@
   chroot::set_location(location);
 }
 
+std::string
+chroot_plain::get_path () const
+{
+  // When running setup scripts, we are session-capable, so the path
+  // is the bind-mounted location, rather than the original location.
+  if (get_run_setup_scripts() == true)
+    return get_mount_location();
+  else
+    return get_location();
+}
+
 std::string const&
 chroot_plain::get_chroot_type () const
 {
@@ -77,12 +88,25 @@
 			  bool       lock)
 {
   /* By default, plain chroots do no locking. */
+  /* Create or unlink session information. */
+  if (get_run_setup_scripts() == true)
+    {
+      if ((type == SETUP_START && lock == true) ||
+	  (type == SETUP_STOP && lock == false))
+	{
+	  bool start = (type == SETUP_START);
+	  setup_session_info(start);
+	}
+    }
 }
 
 sbuild::chroot::session_flags
 chroot_plain::get_session_flags () const
 {
-  return static_cast<session_flags>(0);
+  if (get_run_setup_scripts() == true)
+    return SESSION_CREATE;
+  else
+    return static_cast<session_flags>(0);
 }
 
 void
Index: schroot/sbuild-chroot-plain.h
===================================================================
RCS file: /cvsroot/buildd-tools/schroot/schroot/sbuild-chroot-plain.h,v
retrieving revision 1.19
diff -u -r1.19 sbuild-chroot-plain.h
--- schroot/sbuild-chroot-plain.h	24 Feb 2006 20:26:07 -0000	1.19
+++ schroot/sbuild-chroot-plain.h	25 Feb 2006 00:09:33 -0000
@@ -59,6 +59,9 @@
     virtual void
     set_location (std::string const& location);
 
+    virtual std::string
+    get_path () const;
+
     virtual std::string const&
     get_chroot_type () const;
 
Index: schroot/sbuild-session.cc
===================================================================
RCS file: /cvsroot/buildd-tools/schroot/schroot/sbuild-session.cc,v
retrieving revision 1.37
diff -u -r1.37 sbuild-session.cc
--- schroot/sbuild-session.cc	24 Feb 2006 20:26:07 -0000	1.37
+++ schroot/sbuild-session.cc	25 Feb 2006 00:09:34 -0000
@@ -323,13 +323,16 @@
 	/* If a chroot mount location has not yet been set, and the
 	   chroot is not a plain chroot, set a mount location with the
 	   session id. */
-	if (chroot->get_mount_location().empty() &&
-	    dynamic_cast<chroot_plain *>(chroot.get()) == 0)
-	  {
-	    std::string location(std::string(SCHROOT_MOUNT_DIR) + "/" +
-				 this->session_id);
-	    chroot->set_mount_location(location);
-	  }
+	{
+	  chroot_plain *plain = dynamic_cast<chroot_plain *>(chroot.get());
+	  if (chroot->get_mount_location().empty() &&
+	      (plain == 0 || plain->get_run_setup_scripts() == true))
+	    {
+	      std::string location(std::string(SCHROOT_MOUNT_DIR) + "/" +
+				   this->session_id);
+	      chroot->set_mount_location(location);
+	    }
+	}
 
 	/* Chroot types which create a session (e.g. LVM devices)
 	   need the chroot name respecifying. */
Index: schroot/setup/00check
===================================================================
RCS file: /cvsroot/buildd-tools/schroot/schroot/setup/00check,v
retrieving revision 1.11
diff -u -r1.11 00check
--- schroot/setup/00check	24 Feb 2006 20:26:07 -0000	1.11
+++ schroot/setup/00check	25 Feb 2006 00:09:34 -0000
@@ -33,8 +33,8 @@
 
     case "$CHROOT_TYPE" in
 	plain)
-	    if [ ! -d "$CHROOT_PATH" ]; then
-		echo "$CHROOT_PATH does not exist"
+	    if [ ! -d "$CHROOT_LOCATION" ]; then
+		echo "$CHROOT_LOCATION does not exist"
 		exit 1
 	    fi
 	    ;;
Index: schroot/setup/10mount
===================================================================
RCS file: /cvsroot/buildd-tools/schroot/schroot/setup/10mount,v
retrieving revision 1.8
diff -u -r1.8 10mount
--- schroot/setup/10mount	24 Feb 2006 20:26:07 -0000	1.8
+++ schroot/setup/10mount	25 Feb 2006 00:09:34 -0000
@@ -38,10 +38,12 @@
 #  FSCK_VERBOSE="-V"
 fi
 
-if [ "$CHROOT_TYPE" = "file" -o "$CHROOT_TYPE" = "block-device" -o "$CHROOT_TYPE" = "lvm-snapshot" ]; then
+if [ "$CHROOT_TYPE" = "plain" -o "$CHROOT_TYPE" = "file" -o "$CHROOT_TYPE" = "block-device" -o "$CHROOT_TYPE" = "lvm-snapshot" ]; then
 
-    # Until session management is introduced, the snapshot name is
-    # static.  It should be fixed in SbuildSession.
+    if [ "$CHROOT_TYPE" = "plain" ]; then
+	CHROOT_MOUNT_OPTIONS="--bind"
+	CHROOT_MOUNT_DEVICE="$CHROOT_LOCATION"
+    fi
 
     if [ "$CHROOT_TYPE" = "lvm-snapshot" ]; then
 	CHROOT_MOUNT_DEVICE="$CHROOT_LVM_SNAPSHOT_DEVICE"
Index: test/sbuild-chroot-block-device.cc
===================================================================
RCS file: /cvsroot/buildd-tools/schroot/test/sbuild-chroot-block-device.cc,v
retrieving revision 1.6
diff -u -r1.6 sbuild-chroot-block-device.cc
--- test/sbuild-chroot-block-device.cc	24 Feb 2006 20:26:07 -0000	1.6
+++ test/sbuild-chroot-block-device.cc	25 Feb 2006 00:09:34 -0000
@@ -47,6 +47,7 @@
   CPPUNIT_TEST(test_mount_options);
   CPPUNIT_TEST(test_chroot_type);
   CPPUNIT_TEST(test_setup_env);
+  CPPUNIT_TEST(test_session_flags);
   CPPUNIT_TEST(test_print_details);
   CPPUNIT_TEST(test_print_config);
   CPPUNIT_TEST_SUITE_END();
@@ -107,7 +108,7 @@
   void test_session_flags()
   {
     CPPUNIT_ASSERT(chroot->get_session_flags() ==
-		   sbuild::chroot::SESSION_CREATE);
+		   static_cast<sbuild::chroot::session_flags>(0));
   }
 
   void test_print_details()
Index: test/sbuild-chroot-file.cc
===================================================================
RCS file: /cvsroot/buildd-tools/schroot/test/sbuild-chroot-file.cc,v
retrieving revision 1.6
diff -u -r1.6 sbuild-chroot-file.cc
--- test/sbuild-chroot-file.cc	24 Feb 2006 20:26:07 -0000	1.6
+++ test/sbuild-chroot-file.cc	25 Feb 2006 00:09:34 -0000
@@ -46,6 +46,7 @@
   CPPUNIT_TEST(test_file);
   CPPUNIT_TEST(test_chroot_type);
   CPPUNIT_TEST(test_setup_env);
+  CPPUNIT_TEST(test_session_flags);
   CPPUNIT_TEST(test_print_details);
   CPPUNIT_TEST(test_print_config);
   CPPUNIT_TEST_SUITE_END();
Index: test/sbuild-chroot-lvm-snapshot.cc
===================================================================
RCS file: /cvsroot/buildd-tools/schroot/test/sbuild-chroot-lvm-snapshot.cc,v
retrieving revision 1.6
diff -u -r1.6 sbuild-chroot-lvm-snapshot.cc
--- test/sbuild-chroot-lvm-snapshot.cc	24 Feb 2006 20:26:07 -0000	1.6
+++ test/sbuild-chroot-lvm-snapshot.cc	25 Feb 2006 00:09:34 -0000
@@ -48,6 +48,7 @@
   CPPUNIT_TEST(test_snapshot_options);
   CPPUNIT_TEST(test_chroot_type);
   CPPUNIT_TEST(test_setup_env);
+  CPPUNIT_TEST(test_session_flags);
   CPPUNIT_TEST(test_print_details);
   CPPUNIT_TEST(test_print_config);
   CPPUNIT_TEST_SUITE_END();
Index: test/sbuild-chroot-plain.cc
===================================================================
RCS file: /cvsroot/buildd-tools/schroot/test/sbuild-chroot-plain.cc,v
retrieving revision 1.6
diff -u -r1.6 sbuild-chroot-plain.cc
--- test/sbuild-chroot-plain.cc	24 Feb 2006 20:26:07 -0000	1.6
+++ test/sbuild-chroot-plain.cc	25 Feb 2006 00:09:34 -0000
@@ -96,6 +96,10 @@
   void test_session_flags()
   {
     CPPUNIT_ASSERT(chroot->get_session_flags() ==
+		   static_cast<sbuild::chroot::session_flags>(0));
+
+    chroot->set_run_setup_scripts(true);
+    CPPUNIT_ASSERT(chroot->get_session_flags() ==
 		   sbuild::chroot::SESSION_CREATE);
   }
 

Attachment: pgpYM9ZxUecMn.pgp
Description: PGP signature

Reply via email to