On Sun, Nov 04, 2007 at 01:22:01PM -0500, Justin Pryzby wrote:

>  . the abundant commandline parameters can be handled together with
>    "eval".  Some of them should be separate (eg. when the argument is
>    a file and its existence can be checked).  If it's agreed that this
>    is a change in the right direction I can provide further patches
>    which can be expected to considerably reduce rather than increase
>    the code size.
Attached is a patch against current GIT effecting substation reduction
in the size of argument parsing code.
--- /tmp/lh_config      2007-11-05 00:28:57.000000000 -0500
+++ /usr/bin/lh_config  2007-11-05 00:42:23.000000000 -0500
@@ -19,7 +19,6 @@
 
 # Setting static variables
 DESCRIPTION="create configuration for live-helper(7)"
-HELP="FIXME"
 USAGE="${PROGRAM} [--apt apt|aptitude]\n\
 \t    [--apt-ftp-proxy URL]\n\
 \t    [--apt-http-proxy URL]\n\
@@ -105,6 +104,23 @@
 \t    [--username NAME]\n\
 \t    [--verbose]"
 
+# Set LH_$1=$2.
+doarg2 ()
+{
+       a=`echo "${1#--}" |
+               tr '[[:lower:]]' '[[:upper:]]' |
+               tr '-' '_'`
+       eval "LH_$a=$2"
+}
+
+# Set LH_$1=$2 and conditionally warn about nonexistence of $2.
+doargf ()
+{
+       doarg2 "$@"
+       [ -f "$2" ] && return
+       echo "$0: warning: $2 doesn't exist" >&2
+}
+
 Local_arguments ()
 {
        ARGUMENTS="$(getopt --longoptions 
apt:,apt-ftp-proxy:,apt-http-proxy:,apt-pdiffs:,apt-pipeline:,apt-recommends:,apt-secure:,bootstrap:,cache:,cache-indices:,cache-packages:,cache-stages:,debconf-frontend:,debconf-nowarnings:,debconf-priority:,genisoimage:,initramfs:,losetup:,mode:,root-command:,tasksel:,includes:,templates:,architecture:,bootstrap-config:,bootstrap-flavour:,bootstrap-keyring:,distribution:,mirror-bootstrap:,mirror-bootstrap-security:,mirror-binary:,mirror-binary-security:,sections:,chroot-filesystem:,union-filesystem:,exposed-root:,hooks:,interactive:,keyring-packages:,language:,linux-flavours:,linux-packages:,packages:,packages-lists:,tasks:,security:,symlinks:,sysvinit:,binary-images:,binary-indices:,bootappend-install:,bootappend-live:,bootloader:,chroot-build:,debian-installer:,debian-installer-daily:,encryption:,grub-splash:,hostname:,iso-application:,iso-preparer:,iso-publisher:,iso-volume:,memtest:,net-root-filesystem:,net-root-mountoptions:,net-root-path:,net-root-server:,net-cow-filesystem:,net-cow-mountoptions:,net-cow-path:,net-cow-server:,syslinux-splash:,syslinux-timeout:,syslinux-menu:,username:,source:,source-images:,breakpoints,conffile:,debug,force,help,quiet,usage,verbose,version
 --name=${PROGRAM} --options a:f:d:m:l:k:p:b:e:s:c:huv --shell sh -- "[EMAIL 
PROTECTED]")"
@@ -119,475 +135,205 @@
 
        while true
        do
+               arg=$1
                case "${1}" in
                        # config/common
-                       --apt)
-                               LH_APT="${2}"
-                               shift 2
-                               ;;
-
-                       --apt-ftp-proxy)
-                               LH_APT_FTP_PROXY="${2}"
-                               shift 2
-                               ;;
-
-                       --apt-http-proxy)
-                               LH_APT_HTTP_PROXY="${2}"
-                               shift 2
-                               ;;
-
-                       --apt-pdiffs)
-                               LH_APT_PDIFFS="${2}"
-                               shift 2
-                               ;;
-
-                       --apt-pipeline)
-                               LH_APT_PIPELINE="${2}"
-                               shift 2
-                               ;;
-
-                       --apt-recommends)
-                               LH_APT_RECOMMENDS="${2}"
-                               shift 2
-                               ;;
-
-                       --apt-secure)
-                               LH_APT_SECURE="${2}"
-                               shift 2
-                               ;;
-
-                       --bootstrap)
-                               LH_BOOTSTRAP="${2}"
-                               shift 2
-                               ;;
-
-                       --cache)
-                               LH_CACHE="${2}"
-                               shift 2
-                               ;;
-
-                       --cache-indices)
-                               LH_CACHE_INDICES="${2}"
-                               shift 2
-                               ;;
-
-                       --cache-packages)
-                               LH_CACHE_PACKAGES="${2}"
-                               shift 2
-                               ;;
-
-                       --cache-stages)
-                               LH_CACHE_STAGES="${2}"
-                               shift 2
-                               ;;
-
-                       --debconf-frontend)
-                               LH_DEBCONF_FRONTEND="${2}"
-                               shift 2
-                               ;;
-
-                       --debconf-nowarnings)
-                               LH_DEBCONF_NOWARNINGS="${2}"
-                               shift 2
-                               ;;
-
-                       --debconf-priority)
-                               LH_DEBCONF_PRIORITY="${2}"
-                               shift 2
-                               ;;
-
-                       --initramfs)
-                               LH_INITRAMFS="${2}"
-                               shift 2
-                               ;;
-
-                       --losetup)
-                               LH_LOSETUP="${2}"
-                               shift 2
-                               ;;
-
-                       --mode)
-                               LH_MODE="${2}"
-                               shift 2
-                               ;;
-
-                       --root-command)
-                               LH_ROOT_COMMAND="${2}"
-                               shift 2
-                               ;;
-
-                       --tasksel)
-                               LH_TASKSEL="${2}"
-                               shift 2
+                       --apt|--apt-ftp-proxy|--apt-http-proxy)
+                               doarg2 "$1" "$2"
+                               shift
                                ;;
 
-                       --includes)
-                               LH_INCLUDES="${2}"
-                               shift 2
+                       --apt-pdiffs|--apt-pipeline|--apt-recommends)
+                               doarg2 "$@"
+                               shift
                                ;;
 
-                       --templates)
-                               LH_TEMPLATES="${2}"
-                               shift 2
+                       --apt-secure|--bootstrap)
+                               doarg2 "$@"
+                               shift
                                ;;
 
-                       --breakpoints)
-                               LH_BREAKPOINTS="enabled"
+                       --cache|--cache-indices|--cache-packages|--cache-stages)
+                               doarg2 "$@"
                                shift
                                ;;
 
-                       --debug)
-                               LH_DEBUG="enabled"
+                       
--debconf-frontend|--debconf-nowarnings|--debconf-priority)
+                               doarg2 "$@"
                                shift
                                ;;
 
-                       --force)
-                               LH_FORCE="enabled"
+                       --initramfs|--losetup|--mode|--root-command|--tasksel)
+                               doarg2 "$@"
                                shift
                                ;;
 
-                       --quiet)
-                               LH_QUIET="enabled"
+                       --includes|--templates)
+                               doarg2 "$@"
                                shift
                                ;;
 
-                       --verbose)
-                               LH_VERBOSE="enabled"
-                               shift
+                       --breakpoints|--debug|--force|--quiet|--verbose)
+                               doarg2 "$1" enabled
                                ;;
 
                        -v|--version)
                                Version
-                               shift
                                ;;
 
                        # config/bootstrap
                        -a|--architecture)
                                LH_ARCHITECTURE="${2}"
-                               shift 2
+                               shift
                                ;;
 
                        --bootstrap-config)
-                               LH_BOOTSTRAP_CONFIG="${2}"
-                               shift 2
+                               doargf "$@"
+                               shift
                                ;;
 
-                       -f|--bootstrap-flavour)
-                               LH_BOOTSTRAP_FLAVOUR="${2}"
-                               shift 2
+                       --bootstrap-keyring|--sections)
+                               doarg2 "$@"
+                               shift
                                ;;
 
-                       --bootstrap-keyring)
-                               LH_BOOTSTRAP_KEYRING="${2}"
-                               shift 2
+                       -f|--bootstrap-flavour)
+                               LH_BOOTSTRAP_FLAVOUR="${2}"
+                               shift
                                ;;
 
                        -d|--distribution)
                                LH_DISTRIBUTION="${2}"
-                               shift 2
+                               shift
                                ;;
 
                        -m|--mirror-bootstrap)
                                LH_MIRROR_BOOTSTRAP="${2}"
-                               shift 2
-                               ;;
-
-                       --mirror-bootstrap-security)
-                               LH_MIRROR_BOOTSTRAP_SECURITY="${2}"
-                               shift 2
-                               ;;
-
-                       --mirror-binary)
-                               LH_MIRROR_BINARY="${2}"
-                               shift 2
-                               ;;
-
-                       --mirror-binary-security)
-                               LH_MIRROR_BINARY_SECURITY="${2}"
-                               shift 2
+                               shift
                                ;;
 
-                       --sections)
-                               LH_SECTIONS="${2}"
-                               shift 2
+                       
--mirror-bootstrap-security|--mirror-binary|--mirror-binary-security)
+                               doarg2 "$@"
+                               shift
                                ;;
 
                        # config/chroot
-                       --chroot-filesystem)
-                               LH_CHROOT_FILESYSTEM="${2}"
-                               shift 2
-                               ;;
-
-                       --union-filesystem)
-                               LH_UNION_FILESYSTEM="${2}"
-                               shift 2
-                               ;;
-
-                       --exposed-root)
-                               LH_EXPOSED_ROOT="${2}"
-                               shift 2
-                               ;;
-
-                       --hooks)
-                               LH_HOOKS="${2}"
-                               shift 2
-                               ;;
-
-                       --interactive)
-                               LH_INTERACTIVE="${2}"
-                               shift 2
+                       --chroot-filesystem|--union-filesystem|--exposed-root)
+                               doarg2 "$@"
+                               shift
                                ;;
 
-                       --keyring-packages)
-                               LH_KEYRING_PACKAGES="${2}"
-                               shift 2
+                       --interactive|--keyring-packages)
+                               doarg2 "$@"
+                               shift
                                ;;
 
                        -l|--language)
                                LH_LANGUAGE="${2}"
-                               shift 2
+                               shift
                                ;;
 
                        -k|--linux-flavours)
                                LH_LINUX_FLAVOURS="${2}"
-                               shift 2
-                               ;;
-
-                       --linux-packages)
-                               LH_LINUX_PACKAGES="${2}"
-                               shift 2
+                               shift
                                ;;
 
-                       --packages)
-                               LH_PACKAGES="${2}"
-                               shift 2
+                       
--linux-packages|--packages|--tasks|--security|--symlinks|--sysvinit)
+                               doarg2 "$@"
+                               shift
                                ;;
 
                        -p|--packages-lists)
                                LH_PACKAGES_LISTS="${2}"
-                               shift 2
-                               ;;
-
-                       --tasks)
-                               LH_TASKS="${2}"
-                               shift 2
-                               ;;
-
-                       --security)
-                               LH_SECURITY="${2}"
-                               shift 2
-                               ;;
-
-                       --symlinks)
-                               LH_SYMLINKS="${2}"
-                               shift 2
-                               ;;
-
-                       --sysvinit)
-                               LH_SYSVINIT="${2}"
-                               shift 2
+                               shift
                                ;;
 
                        # config/binary
                        -b|--binary-images)
                                LH_BINARY_IMAGES="${2}"
-                               shift 2
-                               ;;
-
-                       --binary-indices)
-                               LH_BINARY_INDICES="${2}"
-                               shift 2
-                               ;;
-
-                       --bootappend-live)
-                               LH_BOOTAPPEND_LIVE="${2}"
-                               shift 2
-                               ;;
-
-                       --bootappend-install)
-                               LH_BOOTAPPEND_INSTALL="${2}"
-                               shift 2
-                               ;;
-
-                       --bootloader)
-                               LH_BOOTLOADER="${2}"
-                               shift 2
-                               ;;
-
-                       --chroot-build)
-                               LH_CHROOT_BUILD="${2}"
-                               shift 2
+                               shift
                                ;;
 
-                       --debian-installer)
-                               LH_DEBIAN_INSTALLER="${2}"
-                               shift 2
+                       --binary-indices|--bootappend-live|--bootappend-install)
+                               doarg2 "$@"
+                               shift
                                ;;
 
-                       --debian-installer-daily)
-                               LH_DEBIAN_INSTALLER_DAILY="${2}"
-                               shift 2
+                       
--bootloader|--chroot-build|--debian-installer|--debian-installer-daily)
+                               doarg2 "$@"
+                               shift
                                ;;
 
                        -e|--encryption)
                                LH_ENCRYPTION="${2}"
-                               shift 2
-                               ;;
-
-                       --grub-splash)
-                               LH_GRUB_SPLASH="${2}"
-                               shift 2
-                               ;;
-
-                       --hostname)
-                               LH_HOSTNAME="${2}"
-                               shift 2
-                               ;;
-
-                       --iso-application)
-                               LH_ISO_APPLICATION="${2}"
-                               shift 2
-                               ;;
-
-                       --iso-preparer)
-                               LH_ISO_PREPARER="${2}"
-                               shift 2
-                               ;;
-
-                       --iso-publisher)
-                               LH_ISO_PUBLISHER="${2}"
-                               shift 2
-                               ;;
-
-                       --iso-volume)
-                               LH_ISO_VOLUME="${2}"
-                               shift 2
-                               ;;
-
-                       --memtest)
-                               LH_MEMTEST="${2}"
-                               shift 2
-                               ;;
-
-                       --net-root-filesystem)
-                               LH_NET_ROOT_FILESYSTEM="${2}"
-                               shift 2
-                               ;;
-
-                       --net-root-mountoptions)
-                               LH_NET_ROOT_MOUNTOPTIONS="${2}"
-                               shift 2
+                               shift
                                ;;
 
-                       --net-root-path)
-                               LH_NET_ROOT_PATH="${2}"
-                               shift 2
+                       --grub-splash|--hooks)
+                               doargf "$@"
+                               shift
                                ;;
 
-                       --net-root-server)
-                               LH_NET_ROOT_SERVER="${2}"
-                               shift 2
+                       --hostname|--memtest|--username)
+                               doarg2 "$@"
+                               shift
                                ;;
 
-                       --net-cow-filesystem)
-                               LH_NET_COW_FILESYSTEM="${2}"
-                               shift 2
+                       
--iso-application|--iso-preparer|--iso-publisher|--iso-volume)
+                               doarg2 "$@"
+                               shift
                                ;;
-
-                       --net-cow-mountoptions)
-                               LH_NET_COW_MOUNTOPTIONS="${2}"
-                               shift 2
+                       
+                       --net-root-filesystem|--net-root-mountoptions)
+                               doarg2 "$@"
+                               shift
                                ;;
 
-                       --net-cow-path)
-                               LH_NET_COW_PATH="${2}"
-                               shift 2
+                       --net-root-path|--net-root-server|--net-cow-filesystem)
+                               doarg2 "$@"
+                               shift
                                ;;
 
-                       --net-cow-server)
-                               LH_NET_COW_SERVER="${2}"
-                               shift 2
+                       --net-cow-mountoptions|--net-cow-path|--net-cow-server)
+                               doarg2 "$@"
+                               shift
                                ;;
 
                        --syslinux-splash)
-                               LH_SYSLINUX_SPLASH="${2}"
-                               shift 2
-                               ;;
-
-                       --syslinux-timeout)
-                               LH_SYSLINUX_TIMEOUT="${2}"
-                               shift 2
-                               ;;
-
-                       --syslinux-menu)
-                               LH_SYSLINUX_MENU="${2}"
-                               shift 2
+                               doargf "$@"
+                               shift
                                ;;
 
-                       --username)
-                               LH_USERNAME="${2}"
-                               shift 2
+                       --syslinux-timeout|--syslinux-menu)
+                               doarg2 "$@"
+                               shift
                                ;;
 
                        # config/source
                        --source)
                                LH_SOURCE="${2}"
-                               shift 2
+                               shift
                                ;;
 
                        -s|--source-images)
                                LH_SOURCE_IMAGES="${2}"
-                               shift 2
-                               ;;
-
-                       # other
-                       --breakpoints)
-                               LH_BREAKPOINTS="enabled"
                                shift
                                ;;
 
                        -c|--conffile)
                                LH_CONFFILE="${2}"
-                               shift 2
-                               ;;
-
-                       --debug)
-                               LH_DEBUG="enabled"
-                               shift
-                               ;;
-
-                       --force)
-                               LH_FORCE="enabled"
                                shift
                                ;;
 
                        -h|--help)
                                Help
-                               shift
-                               ;;
-
-                       --quiet)
-                               LH_QUIET="enabled"
-                               shift
                                ;;
 
                        -u|--usage)
                                Usage
-                               shift
-                               ;;
-
-                       --verbose)
-                               LH_VERBOSE="enabled"
-                               shift
-                               ;;
-
-                       -v|--version)
-                               Version
-                               shift
                                ;;
 
                        --)
-                               shift
                                break
                                ;;
 
@@ -596,6 +342,11 @@
                                exit 1
                                ;;
                esac
+
+               shift || {
+                       echo "$0: error: option requires an argument: $arg"
+                       exit 2
+               } >&2
        done
 }
 
_______________________________________________
debian-live-devel mailing list
debian-live-devel@lists.alioth.debian.org
http://lists.alioth.debian.org/mailman/listinfo/debian-live-devel

Reply via email to