diff --git a/dkbuild b/dkbuild index 0b871bd..5a03693 100755 --- a/dkbuild +++ b/dkbuild @@ -212,8 +212,9 @@ Exemple: elif dist d9; then ... fi -NB: ici, la version 3.1 est listée après la version 3.0 pour que l'image -construite aie le tag :latest +Dans une même distribution, les versions doivent être ordonnées de la plus +ancienne à la plus récente. ici, la version 3.1 est listée après la version 3.0 +pour que l'image construite aie le tag :latest Note: 'setdists' ne doit être utilisé qu'une seule fois. Les invocations suivantes sont ignorées. @@ -251,6 +252,8 @@ version. Exemple: ... fi fi +Dans un même profil, les versions doivent être ordonnées de la plus ancienne à +la plus récente. Si les distributions sont utilisées avec des versions, alors c'est une erreur de spécifier une version dans le profil @@ -1072,14 +1075,37 @@ function define_functions_env() { SETVERSION_DONE=1 } function dist() { - local dist version + local dist version latest for dist in "$@"; do - [ "$dist" == LATEST ] && dist="${SETDISTS[0]}" + if [ "$dist" == LATEST ]; then + latest=1 + continue + fi parse_dist "$dist" dist version [ "$dist" == "$DIST" ] || continue [ -z "$version" -o "$version" == "$DVERSION" ] || continue return 0 done + if [ -n "$latest" ]; then + # trouver la dernière occurence de la première distribution + # mentionnée. en effet, les versions doivent être ordonnées de la + # plus ancienne à la plus récente. + local first_dist last_version + for dist in "${SETDISTS[@]}"; do + parse_dist "$dist" dist version + if [ -z "$first_dist" ]; then + first_dist="$dist" + last_version="$version" + elif [ "$dist" == "$first_dist" ]; then + last_version="$version" + fi + done + if [ "$first_dist" == "$DIST" ]; then + if [ -z "$last_version" -o "$last_version" == "$DVERSION" ]; then + return 0 + fi + fi + fi return 1 } function version() { diff --git a/lib/dkbuild/tests/test-distprofiles b/lib/dkbuild/tests/test-distprofiles index e457c7b..a78edca 100644 --- a/lib/dkbuild/tests/test-distprofiles +++ b/lib/dkbuild/tests/test-distprofiles @@ -2,10 +2,10 @@ setdists d11 d10 setprofiles prod test -if dist "#latest"; then +if dist LATEST; then info "$DIST est la distribution la plus récente" fi -if profile "#default"; then +if profile DEFAULT; then info "$PROFILE est le profil par défaut" fi diff --git a/lib/dkbuild/tests/test-distversions b/lib/dkbuild/tests/test-distversions new file mode 100644 index 0000000..fcd33fa --- /dev/null +++ b/lib/dkbuild/tests/test-distversions @@ -0,0 +1,20 @@ +# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +setdists v1-d11 v2-d11 v1-d10 +setenv IMAGE=dkbuild-tests/distversions + +dockerfile + # -*- coding: utf-8 mode: dockerfile -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 + FROM scratch + ENV var=$DIST-$VERSION +build + +info "vérifier les images construites avec + dk ls dkbuild-tests/distversions +on devrait avoir les images suivantes: + dkbuild-tests/distversions:v1-d10 + dkbuild-tests/distversions:d10 -> v1-d10 + dkbuild-tests/distversions:v1-d11 + dkbuild-tests/distversions:v2-d11 + dkbuild-tests/distversions:d11 -> v2-d11 + dkbuild-tests/distversions:latest -> v2-d11 +"