wic: kickstart fixes
cover wic: kickstart fixes
Hi,
This patchset includes usability fixes and error handling improvements for new kickstart parser.
The following changes since commit a2f23fa62858b89850aab339ddec16dcf6026b37:
openssh: CVE-2016-1907 (2016-01-18 11:47:08 +0000)
are available in the git repository at:
git://git.yoctoproject.org/poky-contrib ed/wic/kickstart-fixes
http://git.yoctoproject.org/cgit.cgi/poky-contrib/log/?h=ed/wic/kickstart-fixes
Ed Bartosh (6):
wic: add custom exception KickStartError
wic: catch KickStartError
wic: improve processing of parseing errors
wic: removed unused imports
wic: override ArgumentParser.error
wic: rename kickstarter.py -> ksparser.py
scripts/lib/wic/conf.py | 7 +++++--
scripts/lib/wic/{kickstart.py => ksparser.py} | 24 ++++++++++++++++++----
scripts/lib/wic/plugins/source/bootimg-efi.py | 2 +-
scripts/lib/wic/plugins/source/bootimg-pcbios.py | 2 +-
.../lib/wic/plugins/source/isoimage-isohybrid.py | 2 +-
.../lib/wic/plugins/source/rootfs_pcbios_ext.py | 1 -
6 files changed, 28 insertions(+), 10 deletions(-)
rename scripts/lib/wic/{kickstart.py => ksparser.py} (82%)--
Regards,
Ed
PATCH 1/6 wic: add custom exception KickStartError
This exception will be raised by kickstart parser
on parsing errors and processed in the code which
calls parser to produce meaningful error output.
--- scripts/lib/wic/kickstart.py | 3 +++ 1 file changed, 3 insertions(+)
scripts/lib/wic/kickstart.py +3 -0
@@ -31,6 +31,9 @@ from argparse import ArgumentParser, ArgumentTypeError from wic.partition import Partition +class KickStartError(Exception): + pass + def sizetype(arg): """ Custom type for ArgumentParser
Signature · 1 line
2.1.4
PATCH 2/6 wic: catch KickStartError
In reply to Ed BartoshCatch parsing errors and output them using msger.
--- scripts/lib/wic/conf.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
scripts/lib/wic/conf.py +5 -2
@@ -17,7 +17,7 @@ import os -from wic.kickstart import KickStart +from wic.kickstart import KickStart, KickStartError from wic import msger from wic.utils import misc
@@ -87,7 +87,10 @@ class ConfigMgr(object): if not ksconf: return - ksobj = KickStart(ksconf) + try: + ksobj = KickStart(ksconf) + except KickStartError as err: + msger.error(str(err)) self.create['ks'] = ksobj self.create['name'] = os.path.splitext(os.path.basename(ksconf))[0]
Signature · 1 line
2.1.4
PATCH 3/6 wic: improve processing of parseing errors
In reply to Ed BartoshCaught argparse.ArgumentError
Included .ks file name and line number into the error messages.
--- scripts/lib/wic/kickstart.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-)
scripts/lib/wic/kickstart.py +8 -3
@@ -27,7 +27,7 @@ import shlex -from argparse import ArgumentParser, ArgumentTypeError +from argparse import ArgumentParser, ArgumentError, ArgumentTypeError from wic.partition import Partition
@@ -113,11 +113,16 @@ class KickStart(object): line = line.strip() lineno += 1 if line and line[0] != '#': - parsed = parser.parse_args(shlex.split(line)) + try: + parsed = parser.parse_args(shlex.split(line)) + except ArgumentError as err: + raise KickStartError('%s:%d: %s' % \ + (confpath, lineno, err)) if line.startswith('part'): self.partitions.append(Partition(parsed, lineno)) else: if not self.bootloader: self.bootloader = parsed else: - raise KickStartError("Error: more than one bootloader specified") + raise KickStartError("%s:%d: more than one bootloader "\ + "specified" % (confpath, lineno))
Signature · 1 line
2.1.4
PATCH 4/6 wic: removed unused imports
In reply to Ed BartoshRemoved imports of wic.kickstart from plugins as they're not used in the code.
--- scripts/lib/wic/plugins/source/bootimg-efi.py | 2 +- scripts/lib/wic/plugins/source/bootimg-pcbios.py | 2 +- scripts/lib/wic/plugins/source/isoimage-isohybrid.py | 2 +- scripts/lib/wic/plugins/source/rootfs_pcbios_ext.py | 1 - 4 files changed, 3 insertions(+), 4 deletions(-)
scripts/lib/wic/plugins/source/bootimg-efi.py +1 -1
@@ -27,7 +27,7 @@ import os import shutil -from wic import kickstart, msger +from wic import msger from wic.pluginbase import SourcePlugin from wic.utils.misc import get_custom_config from wic.utils.oe.misc import exec_cmd, exec_native_cmd, get_bitbake_var, \
scripts/lib/wic/plugins/source/bootimg-pcbios.py +1 -1
@@ -27,7 +27,7 @@ import os from wic.utils.errors import ImageError -from wic import kickstart, msger +from wic import msger from wic.utils import runner from wic.utils.misc import get_custom_config from wic.pluginbase import SourcePlugin
scripts/lib/wic/plugins/source/isoimage-isohybrid.py +1 -1
@@ -24,7 +24,7 @@ import os import re import shutil -from wic import kickstart, msger +from wic import msger from wic.pluginbase import SourcePlugin from wic.utils.oe.misc import exec_cmd, exec_native_cmd, get_bitbake_var
scripts/lib/wic/plugins/source/rootfs_pcbios_ext.py +0 -1
@@ -19,7 +19,6 @@ # import os -from wic import kickstart from wic import msger from wic.utils import syslinux from wic.utils import runner
Signature · 1 line
2.1.4
PATCH 5/6 wic: override ArgumentParser.error
In reply to Ed BartoshOverriden error method to throw exception instead of printing usage error message. Exception is caught by KickStart code to add .ks file name and line number.
--- scripts/lib/wic/kickstart.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-)
scripts/lib/wic/kickstart.py +9 -1
@@ -34,6 +34,14 @@ from wic.partition import Partition class KickStartError(Exception): pass +class KickStartParser(ArgumentParser): + """ + This class overwrites error method to throw exception + instead of producing usage message(default argparse behavior). + """ + def error(self, message): + raise ArgumentError(None, message) + def sizetype(arg): """ Custom type for ArgumentParser
@@ -77,7 +85,7 @@ class KickStart(object): self.bootloader = None self.lineno = 0 - parser = ArgumentParser() + parser = KickStartParser() subparsers = parser.add_subparsers() part = subparsers.add_parser('part')
Signature · 1 line
2.1.4
PATCH 6/6 wic: rename kickstarter.py -> ksparser.py
In reply to Ed Bartoshkickstarter.py was not the best name for this module as previously there was a directory with the same name in scripts/lib/wic/. All files were removed from it, but .pyc files could still stay there causing imports from wic.kickstart to fail with
ImportError: cannot import name KickStart.
---
scripts/lib/wic/conf.py | 2 +-
scripts/lib/wic/{kickstart.py => ksparser.py} | 0
2 files changed, 1 insertion(+), 1 deletion(-)
rename scripts/lib/wic/{kickstart.py => ksparser.py} (100%)scripts/lib/wic/conf.py +1 -1
@@ -17,7 +17,7 @@ import os -from wic.kickstart import KickStart, KickStartError +from wic.ksparser import KickStart, KickStartError from wic import msger from wic.utils import misc
scripts/lib/wic/ksparser.py renamed from scripts/lib/wic/kickstart.py +0 -0
Signature · 1 line
2.1.4