#!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 source "$(dirname "$0")/lib/ulib/ulib" || exit 1 urequire DEFAULTS function display_help() { uecho "$scriptname: mettre à jour un module ur/* ou lib/* sans utiliser composer ça permet de faire du développement plus rapidement sans utiliser les dépôts de type path USAGE $scriptname modules... OPTIONS -n, --fake Afficher simplement ce qui serait fait -q, --quiet Ne pas lancer rsync en mode verbose -l, --link Transformer les clones de dépôts en liens directs vers les projets -k, --copy Transformer les liens directs vers les projets en copies des projets -i, --install Supprimer les répertoires et les faire recréer par composer i -u, --update Supprimer les répertoires et les faire recréer par composer u" } fake= verbose=1 action= args=( --help '$exit_with display_help' -n,--fake fake=1 -q,--quiet verbose= -l,--link action=link -k,--copy action=copy -i,--install action=install -u,--update action=update ) parse_args "$@"; set -- "${args[@]}" found= first=1 while true; do if [ -f composer.json ]; then found=1 break fi first= cd .. if [ "$(pwd)" == "$HOME" ]; then die "Cette commande ne peut être lancée que depuis un projet Composer" fi done if [ -z "$first" ]; then enote "Le répertoire du projet est $(ppath . ~)" fi case "$action" in install|update) [ -x ./composer.phar ] || die "Impossible de trouver composer.phar" ;; esac ### if [ $# -eq 0 ]; then setx -a ms=list_dirs vendor "ur/*" "lib/*" set -- "${ms[@]}" fi function check_module() { [ -d "../$m" ] || die "$m: module introuvable" } function update_with_rsync() { local -a rsync_args rsync_args=( -a ${fake:+-n} ${verbose:+-v} --delete -f "- /.git/" -f "- /vendor/" "../$m/" "vendor/$p" ) rsync "${rsync_args[@]}" } deps=() for m in "$@"; do m="${m#vendor/}" # pour permettre de spécifier le chemin directement m="${m//\//-}" case "$m" in ur-*|lib-*) ;; *) m="ur-$m";; esac p="${m//-/\/}" check_module case "$action" in link) # Ignorer les liens et transformer les copies en liens if [ ! -L "vendor/$p" ]; then link="$m" path="/project/vendor/$p" path="${path%/*}" while [ -n "$path" ]; do link="../$link" path="${path%/*}" done etitle "$m" estep "suppr. vendor/$p" rm -rf "vendor/$p" mkdirof "vendor/$p" estep "vendor/$p --> $link" ln -s "$link" "vendor/$p" eend fi ;; copy) # Transformer les liens en copie et les synchroniser etitle "$m" if [ -L "vendor/$p" ]; then estep "suppr. vendor/$p" rm -f "vendor/$p" fi update_with_rsync eend ;; install) # Supprimer les liens et répertoires... etitle "$m" if [ -e "vendor/$p" ]; then estep "suppr. vendor/$p" rm -rf "vendor/$p" fi array_add deps "$p" eend ;; update) # Supprimer les liens et répertoires... etitle "$m" if [ -e "vendor/$p" ]; then estep "suppr. vendor/$p" rm -rf "vendor/$p" fi array_add deps "$p" eend ;; *) # Action par défaut: ignorer les liens et synchroniser les copies if [ ! -L "vendor/$p" ]; then etitle "$m" update_with_rsync eend fi ;; esac done case "$action" in install) # ... puis installer les dépendances etitle "Installation des dépendances" ./composer.phar i eend ;; update) # ... puis mettre à jour les dépendances etitle "Mise à jour des dépendances" ./composer.phar u "${deps[@]}" eend ;; esac