#!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 source /etc/nulib.sh || exit 1 #source "$(dirname -- "$0")/vendor/nulib/php/load.sh" || exit 1 function copy_nurse() { : } function copy_mature() { local libname libdir path filename class local srcdir srcpath srcpackage local destdir destpath destpackage local src="$1"; shift [ -n "$src" ] || die "vous devez spécifier le fichier ou le package arrivant à maturation" if [ -f "$src" ]; then # fichier setx src=abspath "$src" [ "${src#$MYDIR/src/}" != "$src" ] || die "la source doit être dans nur-sery/src/" src="${src#$MYDIR/src/}" if [[ "$src" == */* ]]; then path="${src%/*}" filename="${src##*/}" else path= filename="$src" fi class="${filename%.php}" srcdir="$MYDIR/src" src="$srcdir/$src" elif [ -d "$src" ]; then # répertoire de package setx src=abspath "$src" [ "$src" == "$MYDIR/src" -o "${src#$MYDIR/src/}" != "$src" ] || die "la source doit être dans nur-sery/src/" srcdir="$src" path="${src#$MYDIR/src}"; path="${path#/}" else # package src="${src//\\\\/\/}" src="${src%/}" [ -d "$MYDIR/src/$src" ] || die "la source doit être un package de nur-sery" srcdir="$MYDIR/src/$src" path="$src" fi tsrcdir= nurserypackage='nur\sery'; nulibpackage='nulib' if [ -n "$path" ]; then srcpackage="nur/sery/$path"; srcpackage="${srcpackage//\//\\}" destpackage="nulib/$path"; destpackage="${destpackage//\//\\}" [ -d "$MYDIR/tests/$path" ] && tsrcdir="$MYDIR/tests/$path" else srcpackage='nur\sery' destpackage='nulib' fi [ -n "$Dest" ] || Dest=. setx Dest=abspath "$Dest" if [[ "$Dest" == */nulib ]]; then libname=nulib libdir="$Dest" elif [[ "$Dest" == */nulib/* ]]; then libname=nulib libdir="${Dest%%/nulib/*}/nulib" else die "seul la maturation vers nulib est supporté" fi case "$libname" in nulib) if [[ "$path" == */* ]]; then destdir="$libdir/php/src_${path%%/*}/${path#*/}" [ -n "$tsrcdir" ] && tdestdir="$libdir/php/tests/$path" elif [ -n "$path" ]; then destdir="$libdir/php/src_$path" [ -n "$tsrcdir" ] && tdestdir="$libdir/php/tests/$path" else destdir="$libdir/php/src_base" [ -n "$tsrcdir" ] && tdestdir="$libdir/php/tests" fi if [ -n "$class" ]; then # Maturation d'un seul fichier etitle "Maturation de $srcpackage vers $destpackage" srcname="${src#$srcdir/}" dest="$destdir/$srcname" estep "$srcname" mkdirof "$dest" sed "s|${nurserypackage//\\/\\\\}|${nulibpackage//\\/\\\\}|g" <"$src" >"$dest" else # Maturation de toute un package etitle "Maturation de $srcpackage vers $destpackage" einfo "$srcdir --> $destdir" setx -a srcs=find "$srcdir" -type f for src in "${srcs[@]}"; do srcname="${src#$srcdir/}" dest="$destdir/$srcname" estep "$srcname" mkdirof "$dest" sed "s|${nurserypackage//\\/\\\\}|${nulibpackage//\\/\\\\}|g" <"$src" >"$dest" done if [ -n "$tsrcdir" ]; then einfo "$tsrcdir --> $tdestdir" setx -a srcs=find "$tsrcdir" -type f for src in "${srcs[@]}"; do srcname="${src#$tsrcdir/}" dest="$tdestdir/$srcname" estep "${src#$tsrcdir/}" mkdirof "$dest" sed "s|${nurserypackage//\\/\\\\}|${nulibpackage//\\/\\\\}|g" <"$src" >"$dest" done fi eend fi ;; esac } function nulib_sync_mature() { [ -n "$Dest" ] || Dest="$MYDIR/../nulib" setx Dest=abspath "$Dest" if ! [[ "$Dest" == */nulib ]]; then die "seul la maturation vers nulib est autorisée" fi local srcdir="$MYDIR" local destdir="$Dest/php" local -a srcs src srcname dest estep "Synchronisation des fichiers" rsync -a "$srcdir/src/" "$destdir/src/" --exclude /wip/ --delete rsync -a "$srcdir/tests/" "$destdir/tests/" --exclude /wip/ --delete estep "Mise à jour des packages" setx -a dests=find "$destdir/src/" -type f for dest in "${dests[@]}"; do sed -i 's|nur\\sery|nulib|g' "$dest" done setx -a dests=find "$destdir/tests/" -type f for dest in "${dests[@]}"; do sed -i 's|nur\\sery|nulib|g' "$dest" done } function update_nurse() { : } function update_mature() { : } action=copy evolution=mature Dest= args=( "Gérer la maturation d'une classe ou d'un package" " -cm SRC [-d DEST] -cn SRC -u[n|m] package|Class [-d DEST] IMPORTANT: pour l'instant, seule la copie à maturation (-cm) est implémentée Il y a deux types d'évolutions possibles: * mettre en nurserie (-n) * arriver à maturation (-m) Pour chaque type d'évolution, il y a deux actions possibles: * copier (-c) * mettre en nurserie (-cn) consiste à copier (importer) un fichier PHP ou un package depuis un projet nulib-* * SRC est le fichier ou le package du projet nulib-* * arriver à maturation (-cm) consiste à copier (exporter) le fichier PHP ou le package vers un projet nulib-* * SRC est le fichier ou le package * DEST est le répertoire du projet nulib-* ou le répertoire courant sinon * mettre à jour (-u) * mettre en nurserie (-un) met à jour les sources d'un projet pour utiliser la version de nur/sery * arriver à maturation (-um) met à jour les sources d'un projet pour utiliser la version mature à maturation L'argument est un 'package' ou un 'sous\\package' (dont le nom commence par une minuscule) ou une 'Classe' (dont le nom commence par une majuscule)" -d:,--dest Dest= "Spécifier la destination" -c,--copy action=copy "Copier de/vers un projet nulib-*" -u,--update action=update "Mettre à jour un projet. C'est l'option par défaut" -i,-n,--nurse evolution=nurse "Mettre en nurserie" -x,-m,--mature evolution=mature "Arriver à maturation. C'est l'option par défaut" --sm '$action=nulib_sync; evolution=mature' "Maturation complète vers nulib. Equivalent à '-cm nur/sery -d ../nulib' mais omet le package nur\\sery\\wip" ) parse_args "$@"; set -- "${args[@]}" "${action}_${evolution}" "$@"