91 lines
3.6 KiB
Diff
91 lines
3.6 KiB
Diff
|
# HG changeset patch
|
||
|
# User Charles Arnold <carnold@suse.com>
|
||
|
# Date 1351249508 -3600
|
||
|
# Node ID 6f9e46917eb8771914041b98f714e8f485fca5ef
|
||
|
# Parent 03af0abd2b72dfab3f2e50dd502108de8603f741
|
||
|
pygrub: Add option to list grub entries
|
||
|
|
||
|
The argument to "--entry" allows 2 syntaxes, either directly the entry
|
||
|
number in menu.lst, or the whole string behind the "title" key word.
|
||
|
This poses the following issue:
|
||
|
|
||
|
From Dom0 there is no way to guess the number and, or the complete
|
||
|
title string because this string contains the kernel version, which
|
||
|
will change with a kernel update.
|
||
|
|
||
|
This patch adds [-l|--list-entries] as an argument to pygrub.
|
||
|
|
||
|
Signed-off-by: Charles Arnold <carnold@suse.com>
|
||
|
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
|
||
|
Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
|
||
|
|
||
|
diff -r 03af0abd2b72 -r 6f9e46917eb8 tools/pygrub/src/pygrub
|
||
|
--- a/tools/pygrub/src/pygrub Fri Oct 26 12:03:12 2012 +0100
|
||
|
+++ b/tools/pygrub/src/pygrub Fri Oct 26 12:05:08 2012 +0100
|
||
|
@@ -595,7 +595,17 @@ def run_grub(file, entry, fs, cfg_args):
|
||
|
sel = g.run()
|
||
|
|
||
|
g = Grub(file, fs)
|
||
|
- if interactive:
|
||
|
+
|
||
|
+ if list_entries:
|
||
|
+ for i in range(len(g.cf.images)):
|
||
|
+ img = g.cf.images[i]
|
||
|
+ print "title: %s" % img.title
|
||
|
+ print " root: %s" % img.root
|
||
|
+ print " kernel: %s" % img.kernel[1]
|
||
|
+ print " args: %s" % img.args
|
||
|
+ print " initrd: %s" % img.initrd[1]
|
||
|
+
|
||
|
+ if interactive and not list_entries:
|
||
|
curses.wrapper(run_main)
|
||
|
else:
|
||
|
sel = g.cf.default
|
||
|
@@ -702,7 +712,7 @@ if __name__ == "__main__":
|
||
|
sel = None
|
||
|
|
||
|
def usage():
|
||
|
- print >> sys.stderr, "Usage: %s [-q|--quiet] [-i|--interactive] [-n|--not-really] [--output=] [--kernel=] [--ramdisk=] [--args=] [--entry=] [--output-directory=] [--output-format=sxp|simple|simple0] <image>" %(sys.argv[0],)
|
||
|
+ print >> sys.stderr, "Usage: %s [-q|--quiet] [-i|--interactive] [-l|--list-entries] [-n|--not-really] [--output=] [--kernel=] [--ramdisk=] [--args=] [--entry=] [--output-directory=] [--output-format=sxp|simple|simple0] <image>" %(sys.argv[0],)
|
||
|
|
||
|
def copy_from_image(fs, file_to_read, file_type, output_directory,
|
||
|
not_really):
|
||
|
@@ -736,8 +746,8 @@ if __name__ == "__main__":
|
||
|
dataoff += len(data)
|
||
|
|
||
|
try:
|
||
|
- opts, args = getopt.gnu_getopt(sys.argv[1:], 'qinh::',
|
||
|
- ["quiet", "interactive", "not-really", "help",
|
||
|
+ opts, args = getopt.gnu_getopt(sys.argv[1:], 'qilnh::',
|
||
|
+ ["quiet", "interactive", "list-entries", "not-really", "help",
|
||
|
"output=", "output-format=", "output-directory=",
|
||
|
"entry=", "kernel=",
|
||
|
"ramdisk=", "args=", "isconfig", "debug"])
|
||
|
@@ -753,6 +763,7 @@ if __name__ == "__main__":
|
||
|
output = None
|
||
|
entry = None
|
||
|
interactive = True
|
||
|
+ list_entries = False
|
||
|
isconfig = False
|
||
|
debug = False
|
||
|
not_really = False
|
||
|
@@ -771,6 +782,8 @@ if __name__ == "__main__":
|
||
|
interactive = False
|
||
|
elif o in ("-i", "--interactive"):
|
||
|
interactive = True
|
||
|
+ elif o in ("-l", "--list-entries"):
|
||
|
+ list_entries = True
|
||
|
elif o in ("-n", "--not-really"):
|
||
|
not_really = True
|
||
|
elif o in ("-h", "--help"):
|
||
|
@@ -855,6 +868,9 @@ if __name__ == "__main__":
|
||
|
fs = None
|
||
|
continue
|
||
|
|
||
|
+ if list_entries:
|
||
|
+ sys.exit(0)
|
||
|
+
|
||
|
# Did looping through partitions find us a kernel?
|
||
|
if not fs:
|
||
|
raise RuntimeError, "Unable to find partition containing kernel"
|