169 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			169 lines
		
	
	
		
			5.6 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
 | 
						|
 | 
						|
    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 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"
 | 
						|
)
 | 
						|
parse_args "$@"; set -- "${args[@]}"
 | 
						|
 | 
						|
[ -n "$Dest" ] || Dest=.
 | 
						|
"${action}_${evolution}" "$@"
 |