diff -r 10ad9b50b4ca tools/pygrub/src/ExtLinuxConf.py --- a/tools/pygrub/src/ExtLinuxConf.py Tue May 25 11:28:58 2010 +0100 +++ b/tools/pygrub/src/ExtLinuxConf.py Tue May 25 17:10:32 2010 +0200 @@ -16,8 +16,8 @@ import GrubConf import GrubConf class ExtLinuxImage(object): - def __init__(self, lines, path): - self.reset(lines, path) + def __init__(self, title, lines, path = ""): + self.reset(lines, title, path) def __repr__(self): return ("title: %s\n" @@ -26,10 +26,10 @@ class ExtLinuxImage(object): " args: %s\n" " initrd: %s\n" %(self.title, self.root, self.kernel, self.args, self.initrd)) - def reset(self, lines, path): + def reset(self, lines, title, path): self._initrd = self._kernel = self._readonly = None self._args = "" - self.title = "" + self.title = title self.lines = [] self.path = path self.root = "" @@ -143,7 +143,7 @@ class ExtLinuxConfigFile(object): # new image if l.lower().startswith("label"): if len(img) > 0: - self.add_image(ExtLinuxImage(img, path)) + self.add_image(ExtLinuxImage("", img, path)) img = [l] continue @@ -162,7 +162,7 @@ class ExtLinuxConfigFile(object): logging.warning("Unknown directive %s" %(com,)) if len(img) > 0: - self.add_image(ExtLinuxImage(img, path)) + self.add_image(ExtLinuxImage("", img, path)) def hasPassword(self): return False diff -r 10ad9b50b4ca tools/pygrub/src/LiloConf.py --- a/tools/pygrub/src/LiloConf.py Tue May 25 11:28:58 2010 +0100 +++ b/tools/pygrub/src/LiloConf.py Tue May 25 17:10:32 2010 +0200 @@ -7,8 +7,8 @@ import GrubConf import GrubConf class LiloImage(object): - def __init__(self, lines, path): - self.reset(lines, path) + def __init__(self, title, lines, path = ""): + self.reset(lines, title, path) def __repr__(self): return ("title: %s\n" @@ -17,10 +17,10 @@ class LiloImage(object): " args: %s\n" " initrd: %s\n" %(self.title, self.root, self.kernel, self.args, self.initrd)) - def reset(self, lines, path): + def reset(self, lines, title, path): self._initrd = self._kernel = self._readonly = None self._args = "" - self.title = "" + self.title = title self.lines = [] self.path = path self.root = "" @@ -118,7 +118,7 @@ class LiloConfigFile(object): # new image if l.startswith("image"): if len(img) > 0: - self.add_image(LiloImage(img, path)) + self.add_image(LiloImage("", img, path)) img = [l] continue @@ -136,7 +136,7 @@ class LiloConfigFile(object): logging.warning("Unknown directive %s" %(com,)) if len(img) > 0: - self.add_image(LiloImage(img, path)) + self.add_image(LiloImage("", img, path)) def hasPassword(self): return False diff -r 10ad9b50b4ca tools/pygrub/src/pygrub --- a/tools/pygrub/src/pygrub Tue May 25 11:28:58 2010 +0100 +++ b/tools/pygrub/src/pygrub Tue May 25 17:10:32 2010 +0200 @@ -356,7 +356,7 @@ class Grub: continue # if we got boot, then we want to boot the entered image - img = grub.GrubConf.GrubImage(lines) + img = self.imgcl("entered", lines) self.cf.add_image(img) self.selected_image = len(self.cf.images) - 1 self.isdone = True @@ -392,15 +392,28 @@ class Grub: if not fs: # set the config file and parse it - self.cf.filename = fn - self.cf.parse() - return + for f,parser in cfg_list: + self.cf = parser() + self.cf.filename = fn + self.cf.parse() + return for f,parser in cfg_list: if fs.file_exists(f): print >>sys.stderr, "Using %s to parse %s" % (parser,f) self.cf = parser() self.cf.filename = f + + # Get the bootloader image file constructor to imgcl + if type(self.cf) == grub.LiloConf.LiloConfigFile: + self.imgcl = grub.LiloConf.LiloImage + elif type(self.cf) == grub.GrubConf.Grub2ConfigFile: + self.imgcl = grub.GrubConf.Grub2Image + elif type(self.cf) == grub.ExtLinuxConf.ExtLinuxConfigFile: + self.imgcl = grub.ExtLinuxConf.ExtLinuxImage + else: + self.imgcl = grub.GrubConf.GrubImage + break if self.__dict__.get('cf', None) is None: raise RuntimeError, "couldn't find bootloader config file in the image provided." @@ -689,7 +702,7 @@ if __name__ == "__main__": if isconfig: chosencfg = run_grub(file, entry, fs, incfg["args"]) print " kernel: %s" % chosencfg["kernel"] - if img.initrd: + if chosencfg["ramdisk"]: print " initrd: %s" % chosencfg["ramdisk"] print " args: %s" % chosencfg["args"] sys.exit(0)