[OE-core] [PATCH 1/1] wic: argparse now used for help functionality

Burton, Ross ross.burton at intel.com
Tue Dec 12 11:52:36 UTC 2017


Hi Amber,

Can you resend that using git-send-email?  Copy/pasting it into a mail
client has sent it as HTML, which git-apply can't read.

Cheers,
Ross

On 11 December 2017 at 21:25, Elliot, Amber N <amber.n.elliot at intel.com>
wrote:

> The wic help output formally consisted of manually created strings mixed
> with argparse,
> which was unformatted and unusable. This fix cleans up the help messages,
> rewrites help
> functionality to use argparse, and adds functionality to show information
> for
> plugins (similar to canned images).
>
> Fixes [YOCTO #12205]
>
> Signed-off-by: anelliot <amber.n.elliot at intel.com>
> ---
>  scripts/lib/wic/engine.py |   87 +++-
>  scripts/lib/wic/help.py   | 1072 +++++-------------------------
> ---------------
>  scripts/wic               |  169 +++----
>  3 files changed, 243 insertions(+), 1085 deletions(-)
>
> diff --git a/scripts/lib/wic/engine.py b/scripts/lib/wic/engine.py
> index edcfab3..5d1e1d8 100644
> --- a/scripts/lib/wic/engine.py
> +++ b/scripts/lib/wic/engine.py
> @@ -58,6 +58,8 @@ def verify_build_env():
>
>  CANNED_IMAGE_DIR = "lib/wic/canned-wks" # relative to scripts
>  SCRIPTS_CANNED_IMAGE_DIR = "scripts/" + CANNED_IMAGE_DIR
> +SOURCE_PLUGIN_DIR = "lib/wic/plugins/source"
> +SCRIPTS_SOURCE_PLUGIN_DIR = "scripts/" + SOURCE_PLUGIN_DIR
>  WIC_DIR = "wic"
>
>  def build_canned_image_list(path):
> @@ -76,6 +78,23 @@ def build_canned_image_list(path):
>
>      return canned_wks_layer_dirs
>
> +def build_source_plugin_list(path):
> +    layers_path = get_bitbake_var("BBLAYERS")
> +    canned_wks_layer_dirs = []
> +
> +    if layers_path is not None:
> +        for layer_path in layers_path.split():
> +            for wks_path in (WIC_DIR, SCRIPTS_SOURCE_PLUGIN_DIR):
> +                cpath = os.path.join(layer_path, wks_path)
> +                if os.path.isdir(cpath):
> +                    canned_wks_layer_dirs.append(cpath)
> +
> +    cpath = os.path.join(path, SOURCE_PLUGIN_DIR)
> +    canned_wks_layer_dirs.append(cpath)
> +
> +    return canned_wks_layer_dirs
> +
> +
>  def find_canned_image(scripts_path, wks_file):
>      """
>      Find a .wks file with the given name in the canned files dir.
> @@ -95,6 +114,24 @@ def find_canned_image(scripts_path, wks_file):
>      return None
>
>
> +def find_source_plugin(scripts_path, plugin_file):
> +    """
> +    Find a .py file with the given name in the source plugin dir.
> +
> +    Return False if not found
> +    """
> +    layers_source_plugin_dir = build_source_plugin_list(scripts_path)
> +
> +    for source_plugin_dir in layers_source_plugin_dir:
> +        for root, dirs, files in os.walk(source_plugin_dir):
> +            for fname in files:
> +                if fname.endswith("~") or fname.endswith("#"):
> +                    continue
> +                if fname.endswith(".py") and plugin_file + ".py" == fname:
> +                    fullpath = os.path.join(source_plugin_dir, fname)
> +                    return fullpath
> +    return None
> +
>  def list_canned_images(scripts_path):
>      """
>      List the .wks files in the canned image dir, minus the extension.
> @@ -119,7 +156,7 @@ def list_canned_images(scripts_path):
>                      print("  %s\t\t%s" % (basename.ljust(30), desc))
>
>
> -def list_canned_image_help(scripts_path, fullpath):
> +def list_canned_image_help(fullpath):
>      """
>      List the help and params in the specified canned image.
>      """
> @@ -139,6 +176,7 @@ def list_canned_image_help(scripts_path, fullpath):
>              if idx != -1:
>                  print(line[idx + len("#:"):].rstrip())
>              else:
> +                print()
>                  break
>
>
> @@ -152,6 +190,29 @@ def list_source_plugins():
>          print("  %s" % plugin)
>
>
> +def list_source_plugins_help(fullpath):
> +    """
> +    List the help and params in the specified canned image.
> +    """
> +    found = False
> +    with open(fullpath) as plugin:
> +        for line in plugin:
> +            if not found:
> +                idx = line.find("DESCRIPTION")
> +                if idx != -1:
> +                    print(line[idx + len("DESCRIPTION"):].strip())
> +                    found = True
> +                continue
> +            if not line.strip():
> +                break
> +            idx = line.find("#")
> +            auth = line.find("AUTHORS")
> +            if idx != -1 and auth == -1:
> +                print(line[idx + len("#:"):].rstrip())
> +            else:
> +                break
> +
> +
>  def wic_create(wks_file, rootfs_dir, bootimg_dir, kernel_dir,
>                 native_sysroot, options):
>      """
> @@ -204,7 +265,7 @@ def wic_create(wks_file, rootfs_dir, bootimg_dir,
> kernel_dir,
>      logger.info("The image(s) were created using OE kickstart file:\n
>  %s", wks_file)
>
>
> -def wic_list(args, scripts_path):
> +def wic_list(scripts_path, args):
>      """
>      Print the list of images or source plugins.
>      """
> @@ -218,16 +279,20 @@ def wic_list(args, scripts_path):
>      elif args.list_type == "source-plugins":
>          list_source_plugins()
>          return True
> -    elif len(args.help_for) == 1 and args.help_for[0] == 'help':
> -        wks_file = args.list_type
> -        fullpath = find_canned_image(scripts_path, wks_file)
> +    elif len(args.info_for) == 1 and args.info_for[0] == 'info':
> +        input_file = args.list_type
> +        fullpath = find_canned_image(scripts_path, input_file)
>          if not fullpath:
> -            raise WicError("No image named %s found, exiting. "
> -                           "(Use 'wic list images' to list available
> images, "
> -                           "or specify a fully-qualified OE kickstart
> (.wks) "
> -                           "filename)" % wks_file)
> -
> -        list_canned_image_help(scripts_path, fullpath)
> +            fullpath = find_source_plugin(scripts_path, input_file)
> +            if not fullpath:
> +                raise WicError("No image named %s found, exiting. "
> +                               "(Use 'wic list images' to list available
> images, "
> +                               "or specify a fully-qualified OE kickstart
> (.wks) "
> +                               "filename)" % input_file)
> +            else:
> +                list_source_plugins_help(fullpath)
> +        else:
> +            list_canned_image_help(fullpath)
>          return True
>
>      return False
> diff --git a/scripts/lib/wic/help.py b/scripts/lib/wic/help.py
> index 2ac45e0..8230395 100644
> --- a/scripts/lib/wic/help.py
> +++ b/scripts/lib/wic/help.py
> @@ -30,1014 +30,166 @@ import logging
>
>  from wic.pluginbase import PluginMgr, PLUGIN_TYPES
>
> -logger = logging.getLogger('wic')
> -
> -def subcommand_error(args):
> -    logger.info("invalid subcommand %s", args[0])
> -
> -
> -def display_help(subcommand, subcommands):
> -    """
> -    Display help for subcommand.
> -    """
> -    if subcommand not in subcommands:
> -        return False
> -
> -    hlp = subcommands.get(subcommand, subcommand_error)[2]
> -    if callable(hlp):
> -        hlp = hlp()
> -    pager = subprocess.Popen('less', stdin=subprocess.PIPE)
> -    pager.communicate(hlp.encode('utf-8'))
> -
> -    return True
> -
> -
> -def wic_help(args, usage_str, subcommands):
> -    """
> -    Subcommand help dispatcher.
> -    """
> -    if args.help_topic == None or not display_help(args.help_topic,
> subcommands):
> -        print(usage_str)
> -
> -
> -def get_wic_plugins_help():
> -    """
> -    Combine wic_plugins_help with the help for every known
> -    source plugin.
> -    """
> -    result = wic_plugins_help
> -    for plugin_type in PLUGIN_TYPES:
> -        result += '\n\n%s PLUGINS\n\n' % plugin_type.upper()
> -        for name, plugin in PluginMgr.get_plugins(plugin_type).items():
> -            result += "\n %s plugin:\n" % name
> -            if plugin.__doc__:
> -                result += plugin.__doc__
> -            else:
> -                result += "\n    %s is missing docstring\n" % plugin
> -    return result
> -
> -
> -def invoke_subcommand(args, parser, main_command_usage, subcommands):
> -    """
> -    Dispatch to subcommand handler borrowed from combo-layer.
> -    Should use argparse, but has to work in 2.6.
> -    """
> -    if not args.command:
> -        logger.error("No subcommand specified, exiting")
> -        parser.print_help()
> -        return 1
> -    elif args.command == "help":
> -        wic_help(args, main_command_usage, subcommands)
> -    elif args.command not in subcommands:
> -        logger.error("Unsupported subcommand %s, exiting\n", args.command)
> -        parser.print_help()
> -        return 1
> -    else:
> -        subcmd = subcommands.get(args.command, subcommand_error)
> -        usage = subcmd[1]
> -        subcmd[0](args, usage)
> -
> -
> -##
> +# ##
>  # wic help and usage strings
>  ##
>
> -wic_usage = """
> -
> - Create a customized OpenEmbedded image
> -
> - usage: wic [--version] | [--help] | [COMMAND [ARGS]]
> -
> - Current 'wic' commands are:
> -    help              Show help for command or one of the topics (see
> below)
> -    create            Create a new OpenEmbedded image
> -    list              List available canned images and source plugins
> -
> - Help topics:
> -    overview          wic overview - General overview of wic
> -    plugins           wic plugins - Overview and API
> -    kickstart         wic kickstart - wic kickstart reference
> -"""
> -
> -wic_help_usage = """
> -
> - usage: wic help <subcommand>
> -
> - This command displays detailed help for the specified subcommand.
> -"""
> -
> -wic_create_usage = """
> -
> - Create a new OpenEmbedded image
> -
> - usage: wic create <wks file or image name> [-o <DIRNAME> | --outdir
> <DIRNAME>]
> -            [-e | --image-name] [-s, --skip-build-check] [-D, --debug]
> -            [-r, --rootfs-dir] [-b, --bootimg-dir]
> -            [-k, --kernel-dir] [-n, --native-sysroot] [-f, --build-rootfs]
> -            [-c, --compress-with] [-m, --bmap]
> -
> - This command creates an OpenEmbedded image based on the 'OE kickstart
> - commands' found in the <wks file>.
> -
> - The -o option can be used to place the image in a directory with a
> - different name and location.
> -
> - See 'wic help create' for more detailed instructions.
> -"""
> -
> -wic_create_help = """
> -
> -NAME
> -    wic create - Create a new OpenEmbedded image
> -
> -SYNOPSIS
> -    wic create <wks file or image name> [-o <DIRNAME> | --outdir
> <DIRNAME>]
> -        [-e | --image-name] [-s, --skip-build-check] [-D, --debug]
> -        [-r, --rootfs-dir] [-b, --bootimg-dir]
> -        [-k, --kernel-dir] [-n, --native-sysroot] [-f, --build-rootfs]
> -        [-c, --compress-with] [-m, --bmap] [--no-fstab-update]
> -
> -DESCRIPTION
> -    This command creates an OpenEmbedded image based on the 'OE
> -    kickstart commands' found in the <wks file>.
> -
> -    In order to do this, wic needs to know the locations of the
> -    various build artifacts required to build the image.
> -
> -    Users can explicitly specify the build artifact locations using
> -    the -r, -b, -k, and -n options.  See below for details on where
> -    the corresponding artifacts are typically found in a normal
> -    OpenEmbedded build.
> -
> -    Alternatively, users can use the -e option to have 'wic' determine
> -    those locations for a given image.  If the -e option is used, the
> -    user needs to have set the appropriate MACHINE variable in
> -    local.conf, and have sourced the build environment.
> -
> -    The -e option is used to specify the name of the image to use the
> -    artifacts from e.g. core-image-sato.
> -
> -    The -r option is used to specify the path to the /rootfs dir to
> -    use as the .wks rootfs source.
> -
> -    The -b option is used to specify the path to the dir containing
> -    the boot artifacts (e.g. /EFI or /syslinux dirs) to use as the
> -    .wks bootimg source.
> -
> -    The -k option is used to specify the path to the dir containing
> -    the kernel to use in the .wks bootimg.
> -
> -    The -n option is used to specify the path to the native sysroot
> -    containing the tools to use to build the image.
> -
> -    The -f option is used to build rootfs by running "bitbake <image>"
> -
> -    The -s option is used to skip the build check.  The build check is
> -    a simple sanity check used to determine whether the user has
> -    sourced the build environment so that the -e option can operate
> -    correctly.  If the user has specified the build artifact locations
> -    explicitly, 'wic' assumes the user knows what he or she is doing
> -    and skips the build check.
> -
> -    The -D option is used to display debug information detailing
> -    exactly what happens behind the scenes when a create request is
> -    fulfilled (or not, as the case may be).  It enumerates and
> -    displays the command sequence used, and should be included in any
> -    bug report describing unexpected results.
> -
> -    When 'wic -e' is used, the locations for the build artifacts
> -    values are determined by 'wic -e' from the output of the 'bitbake
> -    -e' command given an image name e.g. 'core-image-minimal' and a
> -    given machine set in local.conf.  In that case, the image is
> -    created as if the following 'bitbake -e' variables were used:
> -
> -    -r:        IMAGE_ROOTFS
> -    -k:        STAGING_KERNEL_DIR
> -    -n:        STAGING_DIR_NATIVE
> -    -b:        empty (plugin-specific handlers must determine this)
> -
> -    If 'wic -e' is not used, the user needs to select the appropriate
> -    value for -b (as well as -r, -k, and -n).
> -
> -    The -o option can be used to place the image in a directory with a
> -    different name and location.
> -
> -    The -c option is used to specify compressor utility to compress
> -    an image. gzip, bzip2 and xz compressors are supported.
> -
> -    The -m option is used to produce .bmap file for the image. This file
> -    can be used to flash image using bmaptool utility.
> -
> -    The --no-fstab-update option is used to doesn't change fstab file.
> When
> -    using this option the final fstab file will be same that in rootfs and
> -    wic doesn't update file, e.g adding a new mount point. User can
> control
> -    the fstab file content in base-files recipe.
> -"""
> -
> -wic_list_usage = """
> -
> - List available OpenEmbedded images and source plugins
> -
> - usage: wic list images
> -        wic list <image> help
> -        wic list source-plugins
> -
> - This command enumerates the set of available canned images as well as
> - help for those images.  It also can be used to list of available source
> - plugins.
> -
> - The first form enumerates all the available 'canned' images.
> -
> - The second form lists the detailed help information for a specific
> - 'canned' image.
> -
> - The third form enumerates all the available --sources (source
> - plugins).
> -
> - See 'wic help list' for more details.
> +wic_create_short_description = """
> +Create a new OpenEmbedded image.
>  """
>
> -wic_list_help = """
> -
> -NAME
> -    wic list - List available OpenEmbedded images and source plugins
> -
> -SYNOPSIS
> -    wic list images
> -    wic list <image> help
> -    wic list source-plugins
> -
> -DESCRIPTION
> -    This command enumerates the set of available canned images as well
> -    as help for those images.  It also can be used to list available
> -    source plugins.
> -
> -    The first form enumerates all the available 'canned' images.
> -    These are actually just the set of .wks files that have been moved
> -    into the /scripts/lib/wic/canned-wks directory).
> -
> -    The second form lists the detailed help information for a specific
> -    'canned' image.
> -
> -    The third form enumerates all the available --sources (source
> -    plugins).  The contents of a given partition are driven by code
> -    defined in 'source plugins'.  Users specify a specific plugin via
> -    the --source parameter of the partition .wks command.  Normally
> -    this is the 'rootfs' plugin but can be any of the more specialized
> -    sources listed by the 'list source-plugins' command.  Users can
> -    also add their own source plugins - see 'wic help plugins' for
> -    details.
> +wic_rm_short_description = """
> +Remove files or directories from the vfat or ext* partitions.
>  """
>
> -wic_ls_usage = """
> -
> - List content of a partitioned image
> -
> - usage: wic ls <image>[:<partition>[<path>]] [--native-sysroot <path>]
> -
> - This command  outputs either list of image partitions or directory
> contents
> - of vfat and ext* partitions.
> -
> - See 'wic help ls' for more detailed instructions.
> -
> +wic_write_short_description = """
> +Write an image to a device.
>  """
>
> -wic_ls_help = """
> -
> -NAME
> -    wic ls - List contents of partitioned image or partition
> -
> -SYNOPSIS
> -    wic ls <image>
> -    wic ls <image>:<vfat or ext* partition>
> -    wic ls <image>:<vfat or ext* partition><path>
> -    wic ls <image>:<vfat or ext* partition><path> --native-sysroot <path>
> -
> -DESCRIPTION
> -    This command lists either partitions of the image or directory
> contents
> -    of vfat or ext* partitions.
> -
> -    The first form it lists partitions of the image.
> -    For example:
> -        $ wic ls tmp/deploy/images/qemux86-64/
> core-image-minimal-qemux86-64.wic
> -        Num     Start        End          Size      Fstype
> -        1        1048576     24438783     23390208  fat16
> -        2       25165824     50315263     25149440  ext4
> -
> -    Second and third form list directory content of the partition:
> -        $ wic ls tmp/deploy/images/qemux86-64/
> core-image-minimal-qemux86-64.wic:1
> -        Volume in drive : is boot
> -         Volume Serial Number is 2DF2-5F02
> -        Directory for ::/
> -
> -        efi          <DIR>     2017-05-11  10:54
> -        startup  nsh        26 2017-05-11  10:54
> -        vmlinuz        6922288 2017-05-11  10:54
> -                3 files           6 922 314 bytes
> -                                 15 818 752 bytes free
> -
> -
> -        $ wic ls tmp/deploy/images/qemux86-64/
> core-image-minimal-qemux86-64.wic:1/EFI/boot/
> -        Volume in drive : is boot
> -         Volume Serial Number is 2DF2-5F02
> -        Directory for ::/EFI/boot
> -
> -        .            <DIR>     2017-05-11  10:54
> -        ..           <DIR>     2017-05-11  10:54
> -        grub     cfg       679 2017-05-11  10:54
> -        bootx64  efi    571392 2017-05-11  10:54
> -                4 files             572 071 bytes
> -                                 15 818 752 bytes free
> -
> -    The -n option is used to specify the path to the native sysroot
> -    containing the tools(parted and mtools) to use.
> -
> -"""
> -
> -wic_cp_usage = """
> -
> - Copy files and directories to the vfat or ext* partition
> -
> - usage: wic cp <src> <image>:<partition>[<path>] [--native-sysroot <path>]
> -
> - This command  copies local files or directories to the vfat or ext*
> partitions
> -of partitioned  image.
> -
> - See 'wic help cp' for more detailed instructions.
> -
> +wic_cp_short_description = """
> +Copy files and directories to the vfat or ext* partitions.
>  """
>
> -wic_cp_help = """
> -
> -NAME
> -    wic cp - copy files and directories to the vfat or ext* partitions
> -
> -SYNOPSIS
> -    wic cp <src> <image>:<partition>
> -    wic cp <src> <image>:<partition><path>
> -    wic cp <src> <image>:<partition><path> --native-sysroot <path>
> -
> -DESCRIPTION
> -    This command copies files and directories to the vfat or ext*
> partition of
> -    the partitioned image.
> -
> -    The first form of it copies file or directory to the root directory of
> -    the partition:
> -        $ wic cp test.wks tmp/deploy/images/qemux86-64/
> core-image-minimal-qemux86-64.wic:1
> -        $ wic ls tmp/deploy/images/qemux86-64/
> core-image-minimal-qemux86-64.wic:1
> -        Volume in drive : is boot
> -         Volume Serial Number is DB4C-FD4C
> -        Directory for ::/
> -
> -        efi          <DIR>     2017-05-24  18:15
> -        loader       <DIR>     2017-05-24  18:15
> -        startup  nsh        26 2017-05-24  18:15
> -        vmlinuz        6926384 2017-05-24  18:15
> -        test     wks       628 2017-05-24  21:22
> -                5 files           6 927 038 bytes
> -                                 15 677 440 bytes free
> -
> -    The second form of the command copies file or directory to the
> specified directory
> -    on the partition:
> -       $ wic cp test tmp/deploy/images/qemux86-64/
> core-image-minimal-qemux86-64.wic:1/efi/
> -       $ wic ls tmp/deploy/images/qemux86-64/
> core-image-minimal-qemux86-64.wic:1/efi/
> -       Volume in drive : is boot
> -        Volume Serial Number is DB4C-FD4C
> -       Directory for ::/efi
> -
> -       .            <DIR>     2017-05-24  18:15
> -       ..           <DIR>     2017-05-24  18:15
> -       boot         <DIR>     2017-05-24  18:15
> -       test         <DIR>     2017-05-24  21:27
> -               4 files                   0 bytes
> -                                15 675 392 bytes free
> -
> -    The -n option is used to specify the path to the native sysroot
> -    containing the tools(parted and mtools) to use.
> +wic_ls_short_description = """
> +Lists either partitions of the image or directory contents
> +of vfat or ext* partitions."""
> +wic_help_short_description = """
> +sss
>  """
> -
> -wic_rm_usage = """
> -
> - Remove files or directories from the vfat or ext* partitions
> -
> - usage: wic rm <image>:<partition><path> [--native-sysroot <path>]
> -
> - This command  removes files or directories from the vfat or ext*
> partitions of
> - the partitioned image.
> -
> - See 'wic help rm' for more detailed instructions.
> -
> +wic_list_short_description = """
> +List available canned images and source plugins
>  """
>
> -wic_rm_help = """
> +wic_create_description = """
> +This command creates an OpenEmbedded image based on the 'OE
> +kickstart commands' found in the <wks file>.
>
> -NAME
> -    wic rm - remove files or directories from the vfat or ext* partitions
> +In order to do this, wic needs to know the locations of the
> +various build artifacts required to build the image.
>
> -SYNOPSIS
> -    wic rm <src> <image>:<partition><path>
> -    wic rm <src> <image>:<partition><path> --native-sysroot <path>
> +Users can explicitly specify the build artifact locations using
> +the -r, -b, -k, and -n options.  See below for details on where
> +the corresponding artifacts are typically found in a normal
> +OpenEmbedded build.
>
> -DESCRIPTION
> -    This command removes files or directories from the vfat or ext*
> partition of the
> -    partitioned image:
> +Alternatively, users can use the -e option to have 'wic' determine
> +those locations for a given image.  If the -e option is used, the
> +user needs to have set the appropriate MACHINE variable in
> +local.conf, and have sourced the build environment.
>
> -        $ wic ls ./tmp/deploy/images/qemux86-
> 64/core-image-minimal-qemux86-64.wic:1
> -        Volume in drive : is boot
> -         Volume Serial Number is 11D0-DE21
> -        Directory for ::/
> +The -s option is used to skip the build check.  The build check is
> +a simple sanity check used to determine whether the user has
> +sourced the build environment so that the -e option can operate
> +correctly.  If the user has specified the build artifact locations
> +explicitly, 'wic' assumes the user knows what he or she is doing
> +and skips the build check.
>
> -        libcom32 c32    186500 2017-06-02  15:15
> -        libutil  c32     24148 2017-06-02  15:15
> -        syslinux cfg       209 2017-06-02  15:15
> -        vesamenu c32     27104 2017-06-02  15:15
> -        vmlinuz        6926384 2017-06-02  15:15
> -                5 files           7 164 345 bytes
> -                                 16 582 656 bytes free
> +When 'wic -e' is used, the locations for the build artifacts
> +values are determined by 'wic -e' from the output of the 'bitbake
> +-e' command given an image name e.g. 'core-image-minimal' and a
> +given machine set in local.conf.  In that case, the image is
> +created as if the following 'bitbake -e' variables were used:
>
> -        $ wic rm ./tmp/deploy/images/qemux86-
> 64/core-image-minimal-qemux86-64.wic:1/libutil.c32
> +-r:        IMAGE_ROOTFS
> +-k:        STAGING_KERNEL_DIR
> +-n:        STAGING_DIR_NATIVE
> +-b:        empty (plugin-specific handlers must determine this)
>
> -        $ wic ls ./tmp/deploy/images/qemux86-
> 64/core-image-minimal-qemux86-64.wic:1
> -        Volume in drive : is boot
> -         Volume Serial Number is 11D0-DE21
> -        Directory for ::/
> +If 'wic -e' is not used, the user needs to select the appropriate
> +value for -b (as well as -r, -k, and -n).
>
> -        libcom32 c32    186500 2017-06-02  15:15
> -        syslinux cfg       209 2017-06-02  15:15
> -        vesamenu c32     27104 2017-06-02  15:15
> -        vmlinuz        6926384 2017-06-02  15:15
> -                4 files           7 140 197 bytes
> -                                 16 607 232 bytes free
> +Here's an example that doesn't take the easy way out and manually
> +specifies each build artifact, along with a non-canned .wks file,
> +and also uses the -o option to have wic create the output
> +somewhere other than the default /var/tmp/wic:
>
> -    The -n option is used to specify the path to the native sysroot
> -    containing the tools(parted and mtools) to use.
> +  $ wic create ./test.wks -o ./out --rootfs-dir
> +  tmp/work/qemux86_64-poky-linux/core-image-minimal/1.0-r0/rootfs
> +  --bootimg-dir tmp/sysroots/qemux86-64/usr/share
> +  --kernel-dir tmp/deploy/images/qemux86-64
> +  --native-sysroot tmp/sysroots/x86_64-linux
>  """
>
> -wic_write_usage = """
>
> - Write image to a device
> +wic_list_description = """
> +This command enumerates the set of available canned images as well
> +as help for those images.  It also can be used to list available
> +source plugins.
>
> - usage: wic write <image> <target device> [--expand [rules]]
> [--native-sysroot <path>]
> +The first form enumerates all the available 'canned' images.
> +These are actually just the set of .wks files that have been moved
> +into the /scripts/lib/wic/canned-wks directory).
>
> - This command writes partitioned image to a target device (USB stick, SD
> card etc).
> -
> - See 'wic help write' for more detailed instructions.
> +The second form lists the detailed help information for a specific
> +'canned' image.
>
> +The third form enumerates all the available --sources (source
> +plugins).  The contents of a given partition are driven by code
> +defined in 'source plugins'.  Users specify a specific plugin via
> +the --source parameter of the partition .wks command.  Normally
> +this is the 'rootfs' plugin but can be any of the more specialized
> +sources listed by the 'list source-plugins' command.  Users can
> +also add their own source plugins - see 'wic help plugins' for
> +details.
>  """
>
> -wic_write_help = """
>
> -NAME
> -    wic write - write an image to a device
> +wic_ls_description = """
> +This command lists either partitions of the image or directory contents
> +of vfat or ext* partitions.
>
> -SYNOPSIS
> -    wic write <image> <target>
> -    wic write <image> <target> --expand auto
> -    wic write <image> <target> --expand 1:100M-2:300M
> -    wic write <image> <target> --native-sysroot <path>
> +The first form lists partitions of the image.
> +For example:
> +    $ wic ls tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.
> wic
> +    Num     Start        End          Size      Fstype
> +    1        1048576     24438783     23390208  fat16
> +    2       25165824     50315263     25149440  ext4
>
> -DESCRIPTION
> -    This command writes an image to a target device (USB stick, SD card
> etc)
> +The second form lists directory contents of the first partition:
>
> -        $ wic write ./tmp/deploy/images/qemux86-
> 64/core-image-minimal-qemux86-64.wic /dev/sdb
> +    $ wic ls tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.
> wic:1/EFI/boot/
> +    Volume in drive : is boot
> +     Volume Serial Number is 2DF2-5F02
> +    Directory for ::/EFI/boot
>
> -    The --expand option is used to resize image partitions.
> -    --expand auto expands partitions to occupy all free space available
> on the target device.
> -    It's also possible to specify expansion rules in a format
> -    <partition>:<size>[-<partition>:<size>...] for one or more
> partitions.
> -    Specifying size 0 will keep partition unmodified.
> -    Note: Resizing boot partition can result in non-bootable image for
> non-EFI images. It is
> -    recommended to use size 0 for boot partition to keep image bootable.
> +    .            <DIR>     2017-05-11  10:54
> +    ..           <DIR>     2017-05-11  10:54
> +    grub     cfg       679 2017-05-11  10:54
> +    bootx64  efi    571392 2017-05-11  10:54
> +            4 files             572 071 bytes
> +                             15 818 752 bytes free
>
> -    The --native-sysroot option is used to specify the path to the native
> sysroot
> -    containing the tools(parted, resize2fs) to use.
>  """
>
> -wic_plugins_help = """
> -
> -NAME
> -    wic plugins - Overview and API
> -
> -DESCRIPTION
> -    plugins allow wic functionality to be extended and specialized by
> -    users.  This section documents the plugin interface, which is
> -    currently restricted to 'source' plugins.
> -
> -    'Source' plugins provide a mechanism to customize various aspects
> -    of the image generation process in wic, mainly the contents of
> -    partitions.
> -
> -    Source plugins provide a mechanism for mapping values specified in
> -    .wks files using the --source keyword to a particular plugin
> -    implementation that populates a corresponding partition.
> -
> -    A source plugin is created as a subclass of SourcePlugin (see
> -    scripts/lib/wic/pluginbase.py) and the plugin file containing it
> -    is added to scripts/lib/wic/plugins/source/ to make the plugin
> -    implementation available to the wic implementation.
> -
> -    Source plugins can also be implemented and added by external
> -    layers - any plugins found in a scripts/lib/wic/plugins/source/
> -    directory in an external layer will also be made available.
> -
> -    When the wic implementation needs to invoke a partition-specific
> -    implementation, it looks for the plugin that has the same name as
> -    the --source param given to that partition.  For example, if the
> -    partition is set up like this:
> -
> -      part /boot --source bootimg-pcbios   ...
> -
> -    then the methods defined as class members of the plugin having the
> -    matching bootimg-pcbios .name class member would be used.
> -
> -    To be more concrete, here's the plugin definition that would match
> -    a '--source bootimg-pcbios' usage, along with an example method
> -    that would be called by the wic implementation when it needed to
> -    invoke an implementation-specific partition-preparation function:
> -
> -    class BootimgPcbiosPlugin(SourcePlugin):
> -        name = 'bootimg-pcbios'
> +wic_cp_description = """
> +This command copies files and directories to the vfat or ext* partition of
> +the partitioned image.
>
> -    @classmethod
> -        def do_prepare_partition(self, part, ...)
> -
> -    If the subclass itself doesn't implement a function, a 'default'
> -    version in a superclass will be located and used, which is why all
> -    plugins must be derived from SourcePlugin.
> -
> -    The SourcePlugin class defines the following methods, which is the
> -    current set of methods that can be implemented/overridden by
> -    --source plugins.  Any methods not implemented by a SourcePlugin
> -    subclass inherit the implementations present in the SourcePlugin
> -    class (see the SourcePlugin source for details):
> -
> -      do_prepare_partition()
> -          Called to do the actual content population for a
> -          partition. In other words, it 'prepares' the final partition
> -          image which will be incorporated into the disk image.
> -
> -      do_configure_partition()
> -          Called before do_prepare_partition(), typically used to
> -          create custom configuration files for a partition, for
> -          example syslinux or grub config files.
> -
> -      do_install_disk()
> -          Called after all partitions have been prepared and assembled
> -          into a disk image.  This provides a hook to allow
> -          finalization of a disk image, for example to write an MBR to
> -          it.
> -
> -      do_stage_partition()
> -          Special content-staging hook called before
> -          do_prepare_partition(), normally empty.
> -
> -          Typically, a partition will just use the passed-in
> -          parameters, for example the unmodified value of bootimg_dir.
> -          In some cases however, things may need to be more tailored.
> -          As an example, certain files may additionally need to be
> -          take from bootimg_dir + /boot.  This hook allows those files
> -          to be staged in a customized fashion.  Note that
> -          get_bitbake_var() allows you to access non-standard
> -          variables that you might want to use for these types of
> -          situations.
> -
> -    This scheme is extensible - adding more hooks is a simple matter
> -    of adding more plugin methods to SourcePlugin and derived classes.
> -    Please see the implementation for details.
> +Copies file or directory to the specified directory
> +on the partition:
> +   $ wic cp test tmp/deploy/images/qemux86-64/
> core-image-minimal-qemux86-64.wic:1/efi/
>  """
>
> -wic_overview_help = """
> -
> -NAME
> -    wic overview - General overview of wic
> -
> -DESCRIPTION
> -    The 'wic' command generates partitioned images from existing
> -    OpenEmbedded build artifacts.  Image generation is driven by
> -    partitioning commands contained in an 'Openembedded kickstart'
> -    (.wks) file (see 'wic help kickstart') specified either directly
> -    on the command-line or as one of a selection of canned .wks files
> -    (see 'wic list images').  When applied to a given set of build
> -    artifacts, the result is an image or set of images that can be
> -    directly written onto media and used on a particular system.
> -
> -    The 'wic' command and the infrastructure it's based on is by
> -    definition incomplete - its purpose is to allow the generation of
> -    customized images, and as such was designed to be completely
> -    extensible via a plugin interface (see 'wic help plugins').
> -
> -  Background and Motivation
> -
> -    wic is meant to be a completely independent standalone utility
> -    that initially provides easier-to-use and more flexible
> -    replacements for a couple bits of existing functionality in
> -    oe-core: directdisk.bbclass and mkefidisk.sh.  The difference
> -    between wic and those examples is that with wic the functionality
> -    of those scripts is implemented by a general-purpose partitioning
> -    'language' based on Redhat kickstart syntax).
> -
> -    The initial motivation and design considerations that lead to the
> -    current tool are described exhaustively in Yocto Bug #3847
> -    (https://bugzilla.yoctoproject.org/show_bug.cgi?id=3847).
> -
> -  Implementation and Examples
> -
> -    wic can be used in two different modes, depending on how much
> -    control the user needs in specifying the Openembedded build
> -    artifacts that will be used in creating the image: 'raw' and
> -    'cooked'.
> -
> -    If used in 'raw' mode, artifacts are explicitly specified via
> -    command-line arguments (see example below).
> -
> -    The more easily usable 'cooked' mode uses the current MACHINE
> -    setting and a specified image name to automatically locate the
> -    artifacts used to create the image.
> -
> -    OE kickstart files (.wks) can of course be specified directly on
> -    the command-line, but the user can also choose from a set of
> -    'canned' .wks files available via the 'wic list images' command
> -    (example below).
> -
> -    In any case, the prerequisite for generating any image is to have
> -    the build artifacts already available.  The below examples assume
> -    the user has already build a 'core-image-minimal' for a specific
> -    machine (future versions won't require this redundant step, but
> -    for now that's typically how build artifacts get generated).
> -
> -    The other prerequisite is to source the build environment:
> -
> -      $ source oe-init-build-env
> -
> -    To start out with, we'll generate an image from one of the canned
> -    .wks files.  The following generates a list of availailable
> -    images:
> -
> -      $ wic list images
> -        mkefidisk             Create an EFI disk image
> -        directdisk            Create a 'pcbios' direct disk image
> -
> -    You can get more information about any of the available images by
> -    typing 'wic list xxx help', where 'xxx' is one of the image names:
> -
> -      $ wic list mkefidisk help
> -
> -    Creates a partitioned EFI disk image that the user can directly dd
> -    to boot media.
> -
> -    At any time, you can get help on the 'wic' command or any
> -    subcommand (currently 'list' and 'create').  For instance, to get
> -    the description of 'wic create' command and its parameters:
> -
> -      $ wic create
> -
> -       Usage:
> -
> -       Create a new OpenEmbedded image
> -
> -       usage: wic create <wks file or image name> [-o <DIRNAME> | ...]
> -            [-i <JSON PROPERTY FILE> | --infile <JSON PROPERTY_FILE>]
> -            [-e | --image-name] [-s, --skip-build-check] [-D, --debug]
> -            [-r, --rootfs-dir] [-b, --bootimg-dir] [-k, --kernel-dir]
> -            [-n, --native-sysroot] [-f, --build-rootfs]
> -
> -       This command creates an OpenEmbedded image based on the 'OE
> -       kickstart commands' found in the <wks file>.
> -
> -       The -o option can be used to place the image in a directory
> -       with a different name and location.
> -
> -       See 'wic help create' for more detailed instructions.
> -       ...
> -
> -    As mentioned in the command, you can get even more detailed
> -    information by adding 'help' to the above:
> -
> -      $ wic help create
> -
> -    So, the easiest way to create an image is to use the -e option
> -    with a canned .wks file.  To use the -e option, you need to
> -    specify the image used to generate the artifacts and you actually
> -    need to have the MACHINE used to build them specified in your
> -    local.conf (these requirements aren't necessary if you aren't
> -    using the -e options.)  Below, we generate a directdisk image,
> -    pointing the process at the core-image-minimal artifacts for the
> -    current MACHINE:
> -
> -      $ wic create directdisk -e core-image-minimal
> -
> -      Checking basic build environment...
> -      Done.
> -
> -      Creating image(s)...
> -
> -      Info: The new image(s) can be found here:
> -      /var/tmp/wic/build/directdisk-201309252350-sda.direct
> -
> -      The following build artifacts were used to create the image(s):
> -
> -      ROOTFS_DIR:      ...
> -      BOOTIMG_DIR:     ...
> -      KERNEL_DIR:      ...
> -      NATIVE_SYSROOT:  ...
> -
> -      The image(s) were created using OE kickstart file:
> -        .../scripts/lib/wic/canned-wks/directdisk.wks
> -
> -    The output shows the name and location of the image created, and
> -    so that you know exactly what was used to generate the image, each
> -    of the artifacts and the kickstart file used.
> -
> -    Similarly, you can create a 'mkefidisk' image in the same way
> -    (notice that this example uses a different machine - because it's
> -    using the -e option, you need to change the MACHINE in your
> -    local.conf):
> -
> -      $ wic create mkefidisk -e core-image-minimal
> -      Checking basic build environment...
> -      Done.
> -
> -      Creating image(s)...
> -
> -      Info: The new image(s) can be found here:
> -         /var/tmp/wic/build/mkefidisk-201309260027-sda.direct
> -
> -      ...
> -
> -    Here's an example that doesn't take the easy way out and manually
> -    specifies each build artifact, along with a non-canned .wks file,
> -    and also uses the -o option to have wic create the output
> -    somewhere other than the default /var/tmp/wic:
> -
> -      $ wic create ./test.wks -o ./out --rootfs-dir
> -      tmp/work/qemux86_64-poky-linux/core-image-minimal/1.0-r0/rootfs
> -      --bootimg-dir tmp/sysroots/qemux86-64/usr/share
> -      --kernel-dir tmp/deploy/images/qemux86-64
> -      --native-sysroot tmp/sysroots/x86_64-linux
> -
> -     Creating image(s)...
> -
> -     Info: The new image(s) can be found here:
> -           out/build/test-201507211313-sda.direct
> -
> -     The following build artifacts were used to create the image(s):
> -       ROOTFS_DIR:                   tmp/work/qemux86_64-poky-
> linux/core-image-minimal/1.0-r0/rootfs
> -       BOOTIMG_DIR:                  tmp/sysroots/qemux86-64/usr/share
> -       KERNEL_DIR:                   tmp/deploy/images/qemux86-64
> -       NATIVE_SYSROOT:               tmp/sysroots/x86_64-linux
> -
> -     The image(s) were created using OE kickstart file:
> -     ./test.wks
> -
> -     Here is a content of test.wks:
>
> -     part /boot --source bootimg-pcbios --ondisk sda --label boot
> --active --align 1024
> -     part / --source rootfs --ondisk sda --fstype=ext3 --label platform
> --align 1024
> +wic_rm_description = """
> +This command removes files or directories from the vfat or ext* partition
> of the
> +partitioned image: wic rm <wic image>:<partition><path>
>
> -     bootloader  --timeout=0  --append="rootwait rootfstype=ext3
> video=vesafb vga=0x318 console=tty0"
> +$wic rm ./tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-
> 64.wic:1/libutil.c32
>
> -
> -    Finally, here's an example of the actual partition language
> -    commands used to generate the mkefidisk image i.e. these are the
> -    contents of the mkefidisk.wks OE kickstart file:
> -
> -      # short-description: Create an EFI disk image
> -      # long-description: Creates a partitioned EFI disk image that the
> user
> -      # can directly dd to boot media.
> -
> -      part /boot --source bootimg-efi --ondisk sda --fstype=efi --active
> -
> -      part / --source rootfs --ondisk sda --fstype=ext3 --label platform
> -
> -      part swap --ondisk sda --size 44 --label swap1 --fstype=swap
> -
> -      bootloader  --timeout=10  --append="rootwait console=ttyPCH0,115200"
> -
> -    You can get a complete listing and description of all the
> -    kickstart commands available for use in .wks files from 'wic help
> -    kickstart'.
>  """
>
> -wic_kickstart_help = """
> -
> -NAME
> -    wic kickstart - wic kickstart reference
> -
> -DESCRIPTION
> -    This section provides the definitive reference to the wic
> -    kickstart language.  It also provides documentation on the list of
> -    --source plugins available for use from the 'part' command (see
> -    the 'Platform-specific Plugins' section below).
> -
> -    The current wic implementation supports only the basic kickstart
> -    partitioning commands: partition (or part for short) and
> -    bootloader.
> -
> -    The following is a listing of the commands, their syntax, and
> -    meanings. The commands are based on the Fedora kickstart
> -    documentation but with modifications to reflect wic capabilities.
> -
> -      http://fedoraproject.org/wiki/Anaconda/Kickstart#part_or_partition
> -      http://fedoraproject.org/wiki/Anaconda/Kickstart#bootloader
> -
> -  Commands
> -
> -    * 'part' or 'partition'
> -
> -       This command creates a partition on the system and uses the
> -       following syntax:
> -
> -         part [<mountpoint>]
> -
> -       The <mountpoint> is where the partition will be mounted and
> -       must take of one of the following forms:
> -
> -         /<path>: For example: /, /usr, or /home
> -
> -         swap: The partition will be used as swap space.
> -
> -       If a <mountpoint> is not specified the partition will be created
> -       but will not be mounted.
> -
> -       Partitions with a <mountpoint> specified will be automatically
> mounted.
> -       This is achieved by wic adding entries to the fstab during image
> -       generation. In order for a valid fstab to be generated one of the
> -       --ondrive, --ondisk or --use-uuid partition options must be used
> for
> -       each partition that specifies a mountpoint.
> -
> -
> -       The following are supported 'part' options:
> -
> -         --size: The minimum partition size. Specify an integer value
> -                 such as 500. Multipliers k, M ang G can be used. If
> -                 not specified, the size is in MB.
> -                 You do not need this option if you use --source.
> -
> -         --fixed-size: Exact partition size. Value format is the same
> -                       as for --size option. This option cannot be
> -                       specified along with --size. If partition data
> -                       is larger than --fixed-size and error will be
> -                       raised when assembling disk image.
> -
> -         --source: This option is a wic-specific option that names the
> -                   source of the data that will populate the
> -                   partition.  The most common value for this option
> -                   is 'rootfs', but can be any value which maps to a
> -                   valid 'source plugin' (see 'wic help plugins').
> -
> -                   If '--source rootfs' is used, it tells the wic
> -                   command to create a partition as large as needed
> -                   and to fill it with the contents of the root
> -                   filesystem pointed to by the '-r' wic command-line
> -                   option (or the equivalent rootfs derived from the
> -                   '-e' command-line option).  The filesystem type
> -                   that will be used to create the partition is driven
> -                   by the value of the --fstype option specified for
> -                   the partition (see --fstype below).
> -
> -                   If --source <plugin-name>' is used, it tells the
> -                   wic command to create a partition as large as
> -                   needed and to fill with the contents of the
> -                   partition that will be generated by the specified
> -                   plugin name using the data pointed to by the '-r'
> -                   wic command-line option (or the equivalent rootfs
> -                   derived from the '-e' command-line option).
> -                   Exactly what those contents and filesystem type end
> -                   up being are dependent on the given plugin
> -                   implementation.
> -
> -                   If --source option is not used, the wic command
> -                   will create empty partition. --size parameter has
> -                   to be used to specify size of empty partition.
> +wic_write_description = """
> +This command writes an image to a target device (USB stick, SD card etc)
>
> -         --ondisk or --ondrive: Forces the partition to be created on
> -                                a particular disk.
> -
> -         --fstype: Sets the file system type for the partition.  These
> -           apply to partitions created using '--source rootfs' (see
> -           --source above).  Valid values are:
> -
> -             vfat
> -             msdos
> -             ext2
> -             ext3
> -             ext4
> -             btrfs
> -             squashfs
> -             swap
> -
> -         --fsoptions: Specifies a free-form string of options to be
> -                      used when mounting the filesystem. This string
> -                      will be copied into the /etc/fstab file of the
> -                      installed system and should be enclosed in
> -                      quotes.  If not specified, the default string is
> -                      "defaults".
> -
> -         --label label: Specifies the label to give to the filesystem
> -                        to be made on the partition. If the given
> -                        label is already in use by another filesystem,
> -                        a new label is created for the partition.
> -
> -         --active: Marks the partition as active.
> -
> -         --align (in KBytes): This option is specific to wic and says
> -                              to start a partition on an x KBytes
> -                              boundary.
> -
> -         --no-table: This option is specific to wic. Space will be
> -                     reserved for the partition and it will be
> -                     populated but it will not be added to the
> -                     partition table. It may be useful for
> -                     bootloaders.
> -
> -         --exclude-path: This option is specific to wic. It excludes the
> given
> -                         relative path from the resulting image. If the
> path
> -                         ends with a slash, only the content of the
> directory
> -                         is omitted, not the directory itself. This
> option only
> -                         has an effect with the rootfs source plugin.
> -
> -         --extra-space: This option is specific to wic. It adds extra
> -                        space after the space filled by the content
> -                        of the partition. The final size can go
> -                        beyond the size specified by --size.
> -                        By default, 10MB. This option cannot be used
> -                        with --fixed-size option.
> -
> -         --overhead-factor: This option is specific to wic. The
> -                            size of the partition is multiplied by
> -                            this factor. It has to be greater than or
> -                            equal to 1. The default value is 1.3.
> -                            This option cannot be used with --fixed-size
> -                            option.
> -
> -         --part-name: This option is specific to wic. It specifies name
> for GPT partitions.
> -
> -         --part-type: This option is specific to wic. It specifies
> partition
> -                      type GUID for GPT partitions.
> -                      List of partition type GUIDS can be found here:
> -                      http://en.wikipedia.org/wiki/GUID_Partition_Table#
> Partition_type_GUIDs
> -
> -         --use-uuid: This option is specific to wic. It makes wic to
> generate
> -                     random globally unique identifier (GUID) for the
> partition
> -                     and use it in bootloader configuration to specify
> root partition.
> -
> -         --uuid: This option is specific to wic. It specifies partition
> UUID.
> -                 It's useful if preconfigured partition UUID is added to
> kernel command line
> -                 in bootloader configuration before running wic. In this
> case .wks file can
> -                 be generated or modified to set preconfigured parition
> UUID using this option.
> -
> -         --system-id: This option is specific to wic. It specifies
> partition system id. It's useful
> -                      for the harware that requires non-default partition
> system ids. The parameter
> -                      in one byte long hex number either with 0x prefix
> or without it.
> -
> -         --mkfs-extraopts: This option specifies extra options to pass to
> mkfs utility.
> -                           NOTE, that wic uses default options for some
> filesystems, for example
> -                           '-S 512' for mkfs.fat or '-F -i 8192' for
> mkfs.ext. Those options will
> -                           not take effect when --mkfs-extraopts is used.
> This should be taken into
> -                           account when using --mkfs-extraopts.
> -
> -    * bootloader
> -
> -      This command allows the user to specify various bootloader
> -      options.  The following are supported 'bootloader' options:
> -
> -        --timeout: Specifies the number of seconds before the
> -                   bootloader times out and boots the default option.
> -
> -        --append: Specifies kernel parameters. These will be added to
> -                  bootloader command-line - for example, the syslinux
> -                  APPEND or grub kernel command line.
> -
> -        --configfile: Specifies a user defined configuration file for
> -                      the bootloader. This file must be located in the
> -                      canned-wks folder or could be the full path to the
> -                      file. Using this option will override any other
> -                      bootloader option.
> -
> -      Note that bootloader functionality and boot partitions are
> -      implemented by the various --source plugins that implement
> -      bootloader functionality; the bootloader command essentially
> -      provides a means of modifying bootloader configuration.
> -
> -    * include
> -
> -      This command allows the user to include the content of .wks file
> -      into original .wks file.
> -
> -      Command uses the following syntax:
> -
> -         include <file>
> -
> -      The <file> is either path to the file or its name. If name is
> -      specified wic will try to find file in the directories with canned
> -      .wks files.
> -
> -"""
> +    $ wic write ./tmp/deploy/images/qemux86-
> 64/core-image-minimal-qemux86-64.wic /dev/sdb
>
> -wic_help_help = """
> -NAME
> -    wic help - display a help topic
> +The --expand option is used to resize image partitions.
> +--expand auto expands partitions to occupy all free space available on
> the target device.
> +It's also possible to specify expansion rules in a format
> +<partition>:<size>[-<partition>:<size>...] for one or more partitions.
> +Specifying size 0 will keep partition unmodified.
> +Note: Resizing boot partition can result in non-bootable image for
> non-EFI images. It is
> +recommended to use size 0 for boot partition to keep image bootable.
>
> -DESCRIPTION
> -    Specify a help topic to display it. Topics are shown above.
>  """
> diff --git a/scripts/wic b/scripts/wic
> index 097084a..cb348e3 100755
> --- a/scripts/wic
> +++ b/scripts/wic
> @@ -106,7 +106,7 @@ class RootfsArgAction(argparse.Action):
>          namespace.__dict__['rootfs_dir'][key] = rootfs_dir
>
>
> -def wic_create_subcommand(options, usage_str):
> +def wic_create_subcommand(options):
>      """
>      Command-line handling for image creation.  The real work is done
>      by image.engine.wic_create()
> @@ -177,7 +177,7 @@ def wic_create_subcommand(options, usage_str):
>      wks_file = options.wks_file
>
>      if not wks_file.endswith(".wks"):
> -        wks_file = engine.find_canned_image(scripts_path, wks_file)
> +        wks_file = engine.find_canned_image(wks_file)
>          if not wks_file:
>              raise WicError("No image named %s found, exiting.  (Use 'wic
> list images' "
>                             "to list available images, or specify a
> fully-qualified OE "
> @@ -227,91 +227,44 @@ def wic_create_subcommand(options, usage_str):
>                        native_sysroot, options)
>
>
> -def wic_list_subcommand(args, usage_str):
> +def wic_list_subcommand(args):
>      """
>      Command-line handling for listing available images.
>      The real work is done by image.engine.wic_list()
>      """
> -    if not engine.wic_list(args, scripts_path):
> +    if not engine.wic_list(scripts_path, args):
>          raise WicError("Bad list arguments, exiting")
>
>
> -def wic_ls_subcommand(args, usage_str):
> +def wic_ls_subcommand(args):
>      """
>      Command-line handling for list content of images.
>      The real work is done by engine.wic_ls()
>      """
>      engine.wic_ls(args, args.native_sysroot)
>
> -def wic_cp_subcommand(args, usage_str):
> +def wic_cp_subcommand(args):
>      """
>      Command-line handling for copying files/dirs to images.
>      The real work is done by engine.wic_cp()
>      """
>      engine.wic_cp(args, args.native_sysroot)
>
> -def wic_rm_subcommand(args, usage_str):
> +def wic_rm_subcommand(args):
>      """
>      Command-line handling for removing files/dirs from images.
>      The real work is done by engine.wic_rm()
>      """
>      engine.wic_rm(args, args.native_sysroot)
>
> -def wic_write_subcommand(args, usage_str):
> +def wic_write_subcommand(args):
>      """
>      Command-line handling for writing images.
>      The real work is done by engine.wic_write()
>      """
>      engine.wic_write(args, args.native_sysroot)
>
> -def wic_help_subcommand(args, usage_str):
> -    """
> -    Command-line handling for help subcommand to keep the current
> -    structure of the function definitions.
> -    """
> -    pass
> -
>
> -def wic_help_topic_subcommand(usage_str, help_str):
> -    """
> -    Display function for help 'sub-subcommands'.
> -    """
> -    print(help_str)
> -    return
> -
> -
> -wic_help_topic_usage = """
> -"""
> -
> -helptopics = {
> -    "plugins":   [wic_help_topic_subcommand,
> -                  wic_help_topic_usage,
> -                  hlp.wic_plugins_help],
> -    "overview":  [wic_help_topic_subcommand,
> -                  wic_help_topic_usage,
> -                  hlp.wic_overview_help],
> -    "kickstart": [wic_help_topic_subcommand,
> -                  wic_help_topic_usage,
> -                  hlp.wic_kickstart_help],
> -    "create":    [wic_help_topic_subcommand,
> -                  wic_help_topic_usage,
> -                  hlp.wic_create_help],
> -    "ls":        [wic_help_topic_subcommand,
> -                  wic_help_topic_usage,
> -                  hlp.wic_ls_help],
> -    "cp":        [wic_help_topic_subcommand,
> -                  wic_help_topic_usage,
> -                  hlp.wic_cp_help],
> -    "rm":        [wic_help_topic_subcommand,
> -                  wic_help_topic_usage,
> -                  hlp.wic_rm_help],
> -    "write":     [wic_help_topic_subcommand,
> -                  wic_help_topic_usage,
> -                  hlp.wic_write_help],
> -    "list":      [wic_help_topic_subcommand,
> -                  wic_help_topic_usage,
> -                  hlp.wic_list_help]
> -}
>
>
>  def wic_init_parser_create(subparser):
> @@ -333,17 +286,15 @@ def wic_init_parser_create(subparser):
>                        help="path to the dir containing the kernel to use "
>                             "in the .wks bootimg")
>      subparser.add_argument("-n", "--native-sysroot",
> dest="native_sysroot",
> -                      help="path to the native sysroot containing the
> tools "
> -                           "to use to build the image")
> +                      help="path to the native sysroot containing the
> tools (parted and mtools) to use.")
>      subparser.add_argument("-s", "--skip-build-check", dest="build_check",
>                        action="store_false", default=True, help="skip the
> build check")
>      subparser.add_argument("-f", "--build-rootfs", action="store_true",
> help="build rootfs")
>      subparser.add_argument("-c", "--compress-with", choices=("gzip",
> "bzip2", "xz"),
>                        dest='compressor',
>                        help="compress image with specified compressor")
> -    subparser.add_argument("-m", "--bmap", action="store_true",
> help="generate .bmap")
> -    subparser.add_argument("--no-fstab-update" ,action="store_true",
> -                      help="Do not change fstab file.")
> +    subparser.add_argument("-m", "--bmap", action="store_true",
> help="used to produce .bmap file for the image."
> +                           "This file can be used to flash image using
> bmaptool utility")
>      subparser.add_argument("-v", "--vars", dest='vars_dir',
>                        help="directory with <image>.env files that store "
>                             "bitbake variables")
> @@ -357,10 +308,10 @@ def wic_init_parser_list(subparser):
>                          help="can be 'images' or 'source-plugins' "
>                               "to obtain a list. "
>                               "If value is a valid .wks image file")
> -    subparser.add_argument("help_for", default=[], nargs='*',
> +    subparser.add_argument("info_for", default=[], nargs='*',
>                          help="If 'list_type' is a valid .wks image file "
> -                             "this value can be 'help' to show the help
> information "
> -                             "defined inside the .wks file")
> +                             "this value can be 'info' to show the image
> or plugin information ")
> +
>      return
>
>  def imgtype(arg):
> @@ -385,9 +336,9 @@ def imgtype(arg):
>
>  def wic_init_parser_ls(subparser):
>      subparser.add_argument("path", type=imgtype,
> -                        help="image spec: <image>[:<vfat
> partition>[<path>]]")
> +                        help="image spec: <image>[:<partition>[<path>]]")
>      subparser.add_argument("-n", "--native-sysroot",
> -                        help="path to the native sysroot containing the
> tools")
> +                        help="path to the native sysroot containing the
> tools (parted and mtools) to use.")
>
>  def imgpathtype(arg):
>      img = imgtype(arg)
> @@ -399,15 +350,15 @@ def wic_init_parser_cp(subparser):
>      subparser.add_argument("src",
>                          help="source spec")
>      subparser.add_argument("dest", type=imgpathtype,
> -                        help="image spec: <image>:<vfat
> partition>[<path>]")
> +                        help="image spec: <image>:<partition>[<path>]")
>      subparser.add_argument("-n", "--native-sysroot",
> -                        help="path to the native sysroot containing the
> tools")
> +                        help="path to the native sysroot containing the
> tools (parted and mtools) to use.")
>
>  def wic_init_parser_rm(subparser):
>      subparser.add_argument("path", type=imgpathtype,
> -                        help="path: <image>:<vfat partition><path>")
> +                        help="image spec: <image>[:<partition>[<path>]")
>      subparser.add_argument("-n", "--native-sysroot",
> -                        help="path to the native sysroot containing the
> tools")
> +                        help="path to the native sysroot containing the
> tools (parted and mtools) to use.")
>
>  def expandtype(rules):
>      """
> @@ -448,59 +399,56 @@ def wic_init_parser_write(subparser):
>      subparser.add_argument("-e", "--expand", type=expandtype,
>                          help="expand rules: auto or <partition>:<size>[,<
> partition>:<size>]")
>      subparser.add_argument("-n", "--native-sysroot",
> -                        help="path to the native sysroot containing the
> tools")
> -
> -def wic_init_parser_help(subparser):
> -    helpparsers = subparser.add_subparsers(dest='help_topic',
> help=hlp.wic_usage)
> -    for helptopic in helptopics:
> -        helpparsers.add_parser(helptopic, help=helptopics[helptopic][2])
> -    return
> +                        help="path to the native sysroot containing the
> tools (parted and mtools) to use.")
>
>
>  subcommands = {
>      "create":    [wic_create_subcommand,
> -                  hlp.wic_create_usage,
> -                  hlp.wic_create_help,
> -                  wic_init_parser_create],
> +                  hlp.wic_create_description,
> +                  wic_init_parser_create,
> +                  hlp.wic_create_short_description],
>      "list":      [wic_list_subcommand,
> -                  hlp.wic_list_usage,
> -                  hlp.wic_list_help,
> -                  wic_init_parser_list],
> +                  hlp.wic_list_description,
> +                  wic_init_parser_list,
> +                  hlp.wic_list_short_description],
>      "ls":        [wic_ls_subcommand,
> -                  hlp.wic_ls_usage,
> -                  hlp.wic_ls_help,
> -                  wic_init_parser_ls],
> +                  hlp.wic_ls_description,
> +                  wic_init_parser_ls,
> +                  hlp.wic_ls_short_description],
>      "cp":        [wic_cp_subcommand,
> -                  hlp.wic_cp_usage,
> -                  hlp.wic_cp_help,
> -                  wic_init_parser_cp],
> +                  hlp.wic_cp_description,
> +                  wic_init_parser_cp,
> +                  hlp.wic_cp_short_description],
>      "rm":        [wic_rm_subcommand,
> -                  hlp.wic_rm_usage,
> -                  hlp.wic_rm_help,
> -                  wic_init_parser_rm],
> +                  hlp.wic_rm_description,
> +                  wic_init_parser_rm,
> +                  hlp.wic_rm_short_description],
>      "write":     [wic_write_subcommand,
> -                  hlp.wic_write_usage,
> -                  hlp.wic_write_help,
> -                  wic_init_parser_write],
> -    "help":      [wic_help_subcommand,
> -                  wic_help_topic_usage,
> -                  hlp.wic_help_help,
> -                  wic_init_parser_help]
> +                  hlp.wic_write_description,
> +                  wic_init_parser_write,
> +                  hlp.wic_write_short_description],
>  }
>
> +def invoke_subcommand(args, parser, main_command_usage, subcommands):
> +        subcmd = subcommands.get(args.command, subcommand_error)
> +        usage = subcmd[1]
> +        subcmd[0](args, usage)
> +
>
>  def init_parser(parser):
>      parser.add_argument("--version", action="version",
>          version="%(prog)s {version}".format(version=__version__))
> -    subparsers = parser.add_subparsers(dest='command',
> help=hlp.wic_usage)
> +    subparsers = parser.add_subparsers(dest='command')
> +    helpparser = subparsers.add_parser("help", help="Display usages")
>      for subcmd in subcommands:
> -        subparser = subparsers.add_parser(subcmd,
> help=subcommands[subcmd][2])
> -        subcommands[subcmd][3](subparser)
> +        subparser = subparsers.add_parser(subcmd,
> help=subcommands[subcmd][3], formatter_class=argparse.RawDescriptionHelpFormatter,
> description=subcommands[subcmd][1])
> +        subcommands[subcmd][2](subparser)
> +
>
>
>  def main(argv):
>      parser = argparse.ArgumentParser(
> -        description="wic version %s" % __version__)
> +        description="Create a customized OpenEmbedded image. Wic version
> %s" % __version__)
>
>      init_parser(parser)
>
> @@ -508,22 +456,15 @@ def main(argv):
>
>      if "command" in vars(args):
>          if args.command == "help":
> -            if args.help_topic is None:
> -                parser.print_help()
> -                print()
> -                print("Please specify a help topic")
> -            elif args.help_topic in helptopics:
> -                hlpt = helptopics[args.help_topic]
> -                hlpt[0](hlpt[1], hlpt[2])
> -            return 0
> -
> -    return hlp.invoke_subcommand(args, parser, hlp.wic_help_usage,
> subcommands)
> -
> +            parser.print_help()
> +            print()
> +        else:
> +            subcmd = subcommands.get(args.command)
> +            subcmd[0](args)
>
>  if __name__ == "__main__":
>      try:
>          sys.exit(main(sys.argv[1:]))
>      except WicError as err:
> -        print()
>          logger.error(err)
>          sys.exit(1)
> --
> 2.7.4
>
>
> --
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core at lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-core
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openembedded.org/pipermail/openembedded-core/attachments/20171212/8764544a/attachment-0002.html>


More information about the Openembedded-core mailing list