From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.71) id 1U0Tf2-0004nO-4u for mharc-grub-devel@gnu.org; Wed, 30 Jan 2013 04:08:52 -0500 Received: from eggs.gnu.org ([208.118.235.92]:54535) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1U0Tey-0004mK-8U for grub-devel@gnu.org; Wed, 30 Jan 2013 04:08:49 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1U0Tew-0005wH-QR for grub-devel@gnu.org; Wed, 30 Jan 2013 04:08:48 -0500 Received: from mail-lb0-f182.google.com ([209.85.217.182]:56725) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1U0Tew-0005w7-JG for grub-devel@gnu.org; Wed, 30 Jan 2013 04:08:46 -0500 Received: by mail-lb0-f182.google.com with SMTP id gg6so1878826lbb.13 for ; Wed, 30 Jan 2013 01:08:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:from:to:subject:date:message-id:x-mailer; bh=lwZ9N1ZK1eN01mCHv5FhgWa/puNzQsOGNS0jEkaf0M4=; b=Kl2ROLldNp49aQOXuURd75TukKpZwOVmKgYbWk0uz/HOTrg0QR07sSLvtqFyTEaJXO EA/VTkK3FYOlnZUDThLpfd3VS1zsWYI3eLNdOuU3OXjfb8/fQ3OQo1K7l1rLItE3ZenO OTjcBybiAXemogR9oz5tOi3To5F7/tl/CFM6K4RLBu68ZrvNICYlSVGWgDsTclD3m2ug hhbJ1zUplAOSzI94nyOiHLMKmM5t9zjTVemSq+6QUhVgOSB+9iuP+NBO78v+bn1Wnzpw h02M9/zuRuLNrx4kp4Kvt5jJVxqJugLoJzH/fnpVuW5lvrv8jR5vgB1HLkKFM2xs4Fna dPjw== X-Received: by 10.112.46.37 with SMTP id s5mr1635308lbm.67.1359536925483; Wed, 30 Jan 2013 01:08:45 -0800 (PST) Received: from localhost.localdomain (ppp91-78-198-46.pppoe.mtu-net.ru. [91.78.198.46]) by mx.google.com with ESMTPS id o2sm322115lby.11.2013.01.30.01.08.43 (version=TLSv1.2 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 30 Jan 2013 01:08:44 -0800 (PST) From: Andrey Borzenkov To: grub-devel@gnu.org Subject: [PATCH] reimplement grub-reboot to nor depend on GRUB_DEFAULT=saved Date: Wed, 30 Jan 2013 13:08:39 +0400 Message-Id: <1359536919-25986-1-git-send-email-arvidjaar@gmail.com> X-Mailer: git-send-email 1.7.10.4 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 209.85.217.182 X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: The development of GNU GRUB List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 30 Jan 2013 09:08:49 -0000 Use separate environment variable next_entry to indicate one time boot entry. CMOS button still takes precedent. It makes grub-reboot usable also when GRUB_DEFAULT is set to explicit value. It retains support for prev_saved_entry for compatibility. Also grub-reboot will restore saved_entry from prev_saved_entry first time it is called. As a side effect it also fixes a problem that saved_entry is lost after two consequitive grub-reboot calls. Signed-off-by: Andrey Borzenkov --- Is there any reason why onetime reboot is restricted to the cases when we use saved menu entry? The implementation looks straightforward; are there any drawbacks I miss? util/grub-reboot.in | 17 ++++++----------- util/grub-set-default.in | 1 + util/grub.d/00_header.in | 14 +++++++++++++- 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/util/grub-reboot.in b/util/grub-reboot.in index 1a91d36..d132e4f 100644 --- a/util/grub-reboot.in +++ b/util/grub-reboot.in @@ -46,8 +46,6 @@ export TEXTDOMAINDIR="@localedir@" usage () { gettext_printf "Usage: %s [OPTION] MENU_ENTRY\n" "$self" gettext "Set the default boot menu entry for GRUB, for the next boot only."; echo - gettext_printf "This requires setting GRUB_DEFAULT=saved in %s/default/grub.\n" "$sysconfdir" - echo print_option_help "-h, --help" "$(gettext "print this message and exit")" print_option_help "-v, --version" "$(gettext "print the version information and exit")" dirmsg="$(gettext_printf "expect GRUB images under the directory DIR/%s instead of the %s directory" "@grubdirname@" "$grubdir")" @@ -129,17 +127,14 @@ fi grubdir=`echo "${bootdir}/@grubdirname@" | sed 's,//*,/,g'` -prev_saved_entry=`$grub_editenv ${grubdir}/grubenv list | sed -n 's/^saved_entry=//p'` +# Restore saved_entry if it was set by previous version +prev_saved_entry=`$grub_editenv ${grubdir}/grubenv list | sed -n 's/^prev_saved_entry=//p'` if [ "$prev_saved_entry" ]; then - $grub_editenv ${grubdir}/grubenv set prev_saved_entry="$prev_saved_entry" -else - # We need some non-empty value for prev_saved_entry so that GRUB will - # recognise that grub-reboot has been used and restore the previous - # saved entry. "0" is the same as an empty value, i.e. the first menu - # entry. - $grub_editenv ${grubdir}/grubenv set prev_saved_entry=0 + $grub_editenv ${grubdir}/grubenv set saved_entry="$prev_saved_entry" + $grub_editenv ${grubdir}/grubenv unset prev_saved_entry fi -$grub_editenv ${grubdir}/grubenv set saved_entry="$entry" + +$grub_editenv ${grubdir}/grubenv set next_entry="$entry" # Bye. exit 0 diff --git a/util/grub-set-default.in b/util/grub-set-default.in index ea18da1..d607318 100644 --- a/util/grub-set-default.in +++ b/util/grub-set-default.in @@ -130,6 +130,7 @@ fi grubdir=`echo "${bootdir}/@grubdirname@" | sed 's,//*,/,g'` $grub_editenv ${grubdir}/grubenv unset prev_saved_entry +$grub_editenv ${grubdir}/grubenv unset next_entry $grub_editenv ${grubdir}/grubenv set saved_entry="$entry" # Bye. diff --git a/util/grub.d/00_header.in b/util/grub.d/00_header.in index 3da5d12..c3c1f43 100644 --- a/util/grub.d/00_header.in +++ b/util/grub.d/00_header.in @@ -51,13 +51,25 @@ if [ "x$GRUB_BUTTON_CMOS_ADDRESS" != "x" ]; then cat <