222 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			222 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/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() {
 | |
|     srcpackage='nur\sery'
 | |
|     destpackage='nulib'
 | |
| 
 | |
|     if [ -n "$Dest" ]; then
 | |
|         setx Dest=abspath "$Dest"
 | |
|         destdirs=("$Dest")
 | |
|     else
 | |
|         Dest="$(pwd)"
 | |
|         destdirs=()
 | |
|         [ -d src ] && destdirs+=("$Dest/src")
 | |
|         [ -d src_app ] && destdirs+=("$Dest/src_app")
 | |
|         [ -d src_web ] && destdirs+=("$Dest/src_web")
 | |
|         [ -d tests ] && destdirs+=("$Dest/tests")
 | |
|     fi
 | |
| 
 | |
|     etitle "Maturation de $srcpackage vers $destpackage"
 | |
|     for destdir in "${destdirs[@]}"; do
 | |
|         if [ -d "$destdir" ]; then
 | |
|             setx rdestdir=relpath "$destdir" "$Dest"
 | |
|             einfo "$rdestdir"
 | |
|             setx -a dests=find "$destdir" -type f
 | |
|             for dest in "${dests[@]}"; do
 | |
|                 destname="${dest#$destdir/}"
 | |
|                 action "$destname" \
 | |
|                        sed -i "s|${srcpackage//\\/\\\\}|${destpackage//\\/\\\\}|g" "$dest"
 | |
|             done
 | |
|         else
 | |
|             ewarn "$rdestdir: répertoire non trouvé. il sera ignoré"
 | |
|         fi
 | |
|     done
 | |
| }
 | |
| 
 | |
| 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]
 | |
| 
 | |
| 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}" "$@"
 |