diff --git a/dkbuild b/dkbuild index 5a03693..94eac92 100755 --- a/dkbuild +++ b/dkbuild @@ -1,7 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 source "$(dirname "$0")/lib/ulib/ulib" || exit 1 -urequire DEFAULTS +urequire DEFAULTS ptools xmlsupport SELF="$script" TEMPLATEDIR="$scriptdir/lib/dkbuild/templates" @@ -18,7 +18,7 @@ USAGE OPTIONS --hdk, --help-dkbuild Afficher l'aide sur le format du fichier dkbuild - --hrf, --help-reference + --href, --help-reference Afficher la référence sur les commandes utilisables dans un fichier dkbuild @@ -164,6 +164,14 @@ $scriptname dump [OPTIONS] function display_help_dkbuild() { uecho "\ +OPTIONS + --help Aide générale +* --hdk Aide sur le format du fichier dkbuild + --href Référence sur les commandes utilisables dans un fichier dkbuild + +DKBUILD +======= + Un fichier dkbuild est un script shell utilisé pour construire une ou plusieurs images docker. @@ -452,6 +460,14 @@ utilisés comme tags (i.e IMAGE:DIST et IMAGE:VERSION-DIST)" function display_help_reference() { uecho "\ +OPTIONS + --help Aide générale + --hdk Aide sur le format du fichier dkbuild +* --href Référence sur les commandes utilisables dans un fichier dkbuild + +REFERENCE +========= + ## fonctions d'affichage USAGE: @@ -472,6 +488,21 @@ USAGE: ## setversion -- spécifier la version par défaut +USAGE: setversion VERSION + +Les paramètres optionnels sont +* from-file=FILE + prendre la version depuis le fichier spécifié. les formats pom.xml et + VERSION.txt sont supportés +* from-repo=REPO + calculer la version depuis le dépôt git spécifié +* from-glob=GLOB + calculer la version depuis le chemin spécifié +* extract=REGEXP + à partir de la valeur calculée par l'un des paramètres from-*, matcher + l'expression régulière au format AWK, et prendre comme version la valeur de + l'expression \$1 + ## version -- vérifier la version courante ## setenv -- spécifier une variable d'environnement @@ -1071,7 +1102,50 @@ function load_environ() { function define_functions_env() { function setversion() { [ -n "$SETVERSION_DONE" ] && return - SETVERSION="$1" + local from_file from_repo from_glob extract + while [ $# -gt 0 ]; do + case "$1" in + from-file|file) from_file=.;; + from-file=*|file=*) + from_file="${1#from-}"; from_file="${from_file#file=}" + ;; + from-repo|repo) from_repo=.;; + from-repo=*|repo=*) + from_repo="${1#from-}"; from_repo="${from_repo#repo=}" + ;; + from-glob=*|glob=*) + from_glob="${1#from-}"; from_glob="${from_glob#glob=}" + ;; + extract=*) + extract="${1#extract=}" + ;; + *=*) ewarn "setversion: $1: argument ignoré";; + *) break;; + esac + shift + done + if [ -n "$from_file" ]; then + if [ -d "$from_file" ]; then + setx SETVERSION=pver --sw "$from_file" || die + elif [[ "$from_file" == *.xml ]]; then + setx SETVERSION=pver -E "$from_file" || die + else + setx SETVERSION=pver -F "$from_file" || die + fi + elif [ -n "$from_repo" ]; then + die "setversion from-repo: pas encore implémenté" #XXX + elif [ -n "$from_glob" ]; then + SETVERSION="$(list_all . "$from_glob" | sort -rn | head -1)" + else + SETVERSION="$1" + fi + if [ -n "$extract" ]; then + extract="${extract//\//\\/}" + SETVERSION="$(awk -v version="$SETVERSION" "BEGIN { + if (match(version, /$extract/, vs)) { print vs[1] } + else { print version } + }")" + fi SETVERSION_DONE=1 } function dist() { @@ -2781,7 +2855,7 @@ while [ $# -gt 0 ]; do case "$1" in --help) args+=("$1"); shift; continue;; --hdk|--help-dkbuild) args+=("$1"); shift; continue;; - --hrf|--help-reference) args+=("$1"); shift; continue;; + --href|--help-reference) args+=("$1"); shift; continue;; -*|*=*) # option quelconque: inférer build args+=(build) break @@ -2796,7 +2870,7 @@ set -- "${args[@]}" "$@" args=(+ --help '$exit_with display_help' --hdk,--help-dkbuild '$exit_with display_help_dkbuild' - --hrf,--help-reference '$exit_with display_help_reference' + --href,--help-reference '$exit_with display_help_reference' ) parse_args "$@"; set -- "${args[@]}"