diff --git a/kas-docker b/kas-docker index 45cb5fe..ae2f8b0 100755 --- a/kas-docker +++ b/kas-docker @@ -29,7 +29,7 @@ set -e usage() { - printf "%b" "Usage: $0 [OPTIONS] { build | shell } KASFILE\n" + printf "%b" "Usage: $0 [OPTIONS] { build | shell } [KASOPTIONS] KASFILE\n" printf "%b" " $0 [OPTIONS] clean\n" printf "%b" "\nPositional arguments:\n" printf "%b" "build\t\tCheck out repositories and build target.\n" @@ -59,6 +59,7 @@ else KAS_WORK_DIR=$(pwd) fi +# parse kas-docker options while [ $# -gt 0 ]; do case "$1" in --isar) @@ -115,13 +116,8 @@ while [ $# -gt 0 ]; do exit 0 ;; build|shell) - [ $# -eq 2 ] || usage CMD=$1 - FILE=$(echo $2 | cut -d ':' -f 1) - if ! FIRST_KAS_FILE=$(readlink -e $FILE); then - echo "Error: configuration file '$FILE' not found" - exit 1 - fi + shift 1 break ;; *) @@ -132,13 +128,42 @@ done [ -n "${CMD}" ] || usage +# parse kas sub-command (build or shell) options +while [ $# -gt 0 ]; do + case "$1" in + -h|--help) + trace docker run ${DOCKER_IMAGE} ${CMD} --help + exit 0 + ;; + --skip|--target|--task|-c|--command) + KAS_OPTIONS="${KAS_OPTIONS} $1 '$2'" + shift 2 + ;; + -*) + KAS_OPTIONS="${KAS_OPTIONS} $1" + shift 1 + ;; + *) + KAS_FILE=$1 + FILE=$(echo ${KAS_FILE} | cut -d ':' -f 1) + if ! FIRST_KAS_FILE=$(readlink -e $FILE); then + echo "Error: configuration file '$FILE' not found" + exit 1 + fi + shift 1 + ;; + esac +done + +[ -n "${FIRST_KAS_FILE}" ] || usage + KAS_FILE_DIR=$(dirname ${FIRST_KAS_FILE}) REPO_DIR=$(git -C ${KAS_FILE_DIR} rev-parse --show-toplevel 2>/dev/null) \ || REPO_DIR=$(hg -cwd ${KAS_FILE_DIR} root 2>/dev/null) \ || REPO_DIR=${KAS_FILE_DIR} -KAS_FILE=/repo/$(echo $2 | sed 's|'${REPO_DIR}'/||g;s|:|:/repo/|g') +KAS_FILE=/repo/$(echo ${KAS_FILE} | sed 's|'${REPO_DIR}'/||g;s|:|:/repo/|g') trace mkdir -p ${KAS_WORK_DIR} @@ -188,4 +213,4 @@ for var in SHELL TERM KAS_DISTRO KAS_MACHINE KAS_TARGET KAS_TASK \ done trace docker run "$@" ${ISAR_ARGS} ${USER_ARGS} \ - ${DOCKER_IMAGE} ${CMD} ${KAS_FILE} + ${DOCKER_IMAGE} ${CMD} ${KAS_OPTIONS} ${KAS_FILE}