#! /bin/bash
#------------------------------------------------------------------
# Utilitaire : tux_projeter_dossier
# version    : 1.0
#
# But        : Permettre de "projeter tout le contenu d'un dossier dans
#              un autre, c'est à dire de relier par des liens symboliques
#              toutes les ressources d'un dossier dans un autre dossier
#
# argument 1 : chemin complet du dossier contenant les ressources  <= "ressources"
# argument 2 : chemin complet du dossier où relier ces ressources  => "destination"
#
# Dépendance : "tux_relier_ressouce"
#
# Remarques  : Affiche des messages pour commenter la mise en place (ou non)
#              du  "lien final" vers la "ressources"
#
# Auteur  : Bernard ROLLAND
# contact : betux@titux.org
# contact : bernard.rolland@rueduport.fr
#
#-------------------------------------------------------------------
###

ressources="$1"
destination="$2"

function erreur () {
    code_erreur=$1
    shift
    {
        echo "$@"
        [ $code_erreur -ne 0 ] && echo "
BUT : relier
ressources  =\"$ressources\"
 à
destination =\"$destination\"
"
    } 2>&1

    exit $code_erreur
}

[ "$ressources" = "" ] && erreur 0 "$(
    IFS=""
    cat $0|
        while read l
        do
            [ "$l" = "###" ] && exit 0
            echo $l
        done
    )"

[ "$ressources" = "/" ]  && erreur 1 "le dossier des ressources ne peut être la racine /"
[ "$destination" = "/" ]  && erreur 2 "le dossier de destination ne peut être la racine /"
[ "$destination" = "/" ]  && erreur 2 "le dossier de destination ne peut être la racine /"
[ "$ressources" = "$destination" ] && erreur 3 "les dossiers de destination et de ressources doivent être différents"
[ "${ressources:0:1}" != "/" ]  && erreur 4 "le dossier des ressources doit commencer par la lettre /"
[ "${destination:0:1}" != "/" ]  && erreur 5 "le dossier de destination doit commencer par la lettre /"
[ ! -e "${ressources}"  ] && erreur 6 "le dossier des ressources n'existe pas"
[ ! -e "${destination}"  ] && erreur 7 "le dossier de destination n'existe pas"


function tux_lire_lien() {
    read a b b b b b b b l <<<"$(ls -al "$@")"
    [ "${a:0:1}" = "l" ] && {
        {
            read lien_final
            read ressource
        }<<<"$(
            echo $l|
                sed ' s/-> /\n/1'
            )"
        echo "$ressource"
    } || {
        echo ""
    }
}

function relier_ressouce() {
    ressource="$1"
    lien_final="$2"
##    echo "tux_lire_lien \"$lien_final\" -> \"$ressource\""
    [ -e "$lien_final" ] && {
        [ -L "$lien_final" ] && {
            cible="$(tux_lire_lien "$lien_final")"
            [ "$cible" = "$ressource" ] \
            && echo "Déja relié :  \"$lien_final\" -> \"$ressource\""  \
            || {
                echo "ERREUR : \"$lien_final\""
                echo "  relié à    \"$cible\""
                echo "  au lien de \"$ressource\""
                }
        } || {
            echo "Erreur : $lien_final non relé à -> $ressource"
        }
    } ||  {
        [ -e "$ressource" ] && {
            ln -s "$ressource" "$lien_final"
            echo "relié : \"$lien_final\" -> \"$ressource\""
        } || {
            echo "Erreur : la cible \"$ressource\" n'exite pas et ne peut donc être reliée à \"$lien_final\""
        }
    }
}


cd "$ressources"

/bin/ls -Al | {
    read total
    while read a b b b b b b b l
    do
    [ "${a:0:1}" = "l" ] && {
        {
            read rac
            read lien
        }<<<"$(echo $l|sed "s/ -> /\n/1")"
        relier_ressource "$lien"  "$destination/$rac"
    } || {
        relier_ressource "$ressources/$l" "$destination/$l"
    }
    done
}

