From f508dae60f5a8977cb8f95ef930c11c4244bb86d Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Thu, 20 Jun 2019 14:58:00 +0400 Subject: [PATCH] =?UTF-8?q?support=20des=20mises=20=C3=A0=20jour=20en=20mo?= =?UTF-8?q?de=20devel?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dk | 76 ++++++++++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 57 insertions(+), 19 deletions(-) diff --git a/dk b/dk index e1221d0..2810d89 100755 --- a/dk +++ b/dk @@ -122,9 +122,12 @@ OPTIONS build -g, --ug, --no-update-apps ne pas mettre à jour les dépôts dépendants. ces dépôts sont définis dans le fichier update-apps.conf qui a le format suivant: + DEFAULT_ORIGIN= DEFAULT_BRANCH= + DEFAULT_DEVEL_SRCDIR= APPS=() # liste d'applications à mettre à jour app_URL= # url du dépôt + app_DEVEL_SRCDIR= # répertoire source en mode devel app_DEST= # répertoire dans lequel faire le checkout app_PROFILE_ORIGIN= # origine spécifique à un profil app_PROFILE_BRANCH= # branche spécifique à un profil @@ -134,6 +137,10 @@ OPTIONS build app_AFTER_UPDATE=() # liste de commandes à lancer après le checkout -u, --uu, --update-apps-only Ne faire que la mise à jour depuis les dépôts dépendants. + -w, --ww, --update-apps-devel + Faire la mise à jour en mode devel: le projet ainsi que ses fichiers des + répertoires vendor/lib et vendor/ur sont synchronisés via rsync depuis + \$DEFAULT_DEVEL_SRCDIR qui vaut par défaut \$HOME/wop/php --uo, --update-apps-origin ORIGIN Spécifier l'origine par défaut pour update-apps --ub, --update-apps-branch BRANCH @@ -145,6 +152,10 @@ OPTIONS deploy (c'est à dire ne pas utiliser l'option --with-registry-auth) VARIABLES de update-apps.conf + DEVEL_SRCDIR + répertoire source pour le mode devel. attention, il s'agit du répertoire + du projet, alors que DEFAULT_DEVEL_SRCDIR est le répertoire de base par + défaut des projets ORIGIN vaut 'origin' par défaut BRANCH @@ -355,11 +366,12 @@ BUILD_BUILD= UPDATE_APPS_ORIGIN= UPDATE_APPS_BRANCH= function build_set_options() { - case "$1" in - u) BUILD_UPDATE_APPS=1; BUILD_BUILD=;; - b) BUILD_UPDATE_APPS=; BUILD_BUILD=1;; - *) BUILD_UPDATE_APPS=1; BUILD_BUILD=1;; - esac + BUILD_BUILD= + BUILD_UPDATE_APPS= + BUILD_UPDATE_DEVEL= + [[ "$1" == *b* ]] && BUILD_BUILD=1 + [[ "$1" == *u* ]] && BUILD_UPDATE_APPS=1 + [[ "$1" == *w* ]] && BUILD_UPDATE_DEVEL=1 UPDATE_APPS_ORIGIN="$2" UPDATE_APPS_BRANCH="$3" } @@ -403,6 +415,7 @@ function build_update_apps() { #XXX à terme, on déploiera la branche master en prod [ -z "$DEFAULT_BRANCH" -a "$PROFILE" == prod ] && DEFAULT_BRANCH=develop #master [ -z "$DEFAULT_BRANCH" ] && DEFAULT_BRANCH=develop + DEFAULT_DEVEL_SRCDIR="$HOME/wop/php" APPS=() [ -f update-apps.conf ] && source ./update-apps.conf [ ${#APPS[*]} -gt 0 ] || return 0 @@ -415,7 +428,7 @@ function build_update_apps() { esac etitle "Mise à jour des dépendances" - local app var type url dest branch after_update after_updates + local app var type url devel_srcdir dest branch after_update after_updates for app in "${APPS[@]}"; do etitle "$app" @@ -427,6 +440,9 @@ function build_update_apps() { eend; return 1 } + devel_srcdir="${var}_DEVEL_SRCDIR"; devel_srcdir="${!devel_srcdir}" + [ -n "$devel_srcdir" ] || devel_srcdir="$DEFAULT_DEVEL_SRCDIR/${url##*/}" + dest="${var}_DEST"; dest="${!dest}" [ -n "$dest" ] || dest="$app/b" mkdir -p "$dest" || { eend; return 1; } @@ -440,18 +456,35 @@ function build_update_apps() { [ -n "$branch" ] || branch="$DEFAULT_BRANCH" dest="$dest/$app" - if [ ! -d "$dest" ]; then - # clonage initial - estep "Clonage $url:$branch --> $dest" - git clone -o "$origin" -b "$branch" "$url" "$dest" || { eend; return 1; } + if [ -n "$BUILD_UPDATE_DEVEL" ]; then + # synchronisation en mode devel + local -a rsync_opts; rsync_opts=(-a --delete --exclude .git/ --delete-excluded) + estep "Synchro $devel_srcdir --> $dest" + rsync "${rsync_opts[@]}" "$devel_srcdir/" "$dest" || { eend; return 1; } + local -a depdirs; local depdir pname + setx -a depdirs=ls -d "$dest/vendor/"{lib,ur}/* 2>/dev/null + for depdir in "${depdirs[@]}"; do + [ -L "$depdir" ] && rm "$depdir" + pname="${depdir#$dest/vendor/}"; pname="${pname/\//-}" + estep "Synchro $DEFAULT_DEVEL_SRCDIR/$pname --> $depdir" + rsync "${rsync_opts[@]}" --exclude /vendor/ "$DEFAULT_DEVEL_SRCDIR/$pname/" "$depdir" + done else - # mise à jour - estep "Maj dépôt $url:$branch --> $dest" - setx cwd=pwd - cd "$dest" - git fetch --all -p -f || { eend; return 1; } - git reset --hard "$origin/$branch" || { eend; return 1; } - cd "$cwd" + if [ -d "$dest" -a -d "$dest/.git" ]; then + # mise à jour + estep "Maj dépôt $url:$branch --> $dest" + setx cwd=pwd + cd "$dest" + git fetch --all -p -f || { eend; return 1; } + git reset --hard "$origin/$branch" || { eend; return 1; } + cd "$cwd" + else + # reliquat mode devel? + [ -d "$dest" ] && rm -rf "$dest" + # clonage initial + estep "Clonage $url:$branch --> $dest" + git clone -o "$origin" -b "$branch" "$url" "$dest" || { eend; return 1; } + fi fi type="${var}_TYPE"; type="${!type}" @@ -477,8 +510,10 @@ function build_update_apps() { composer=/usr/bin/composer [ -x "$dest/composer.phar" ] && composer="$dest/composer.phar" - estep "Installation des dépendances composer" - "$composer" -d"$dest" install ${PRODUCTION:+--no-dev -o} || { eend; return 1; } + if [ -z "$BUILD_UPDATE_DEVEL" ]; then + estep "Installation des dépendances composer" + "$composer" -d"$dest" install ${PRODUCTION:+--no-dev -o} || { eend; return 1; } + fi fi for after_update in "${after_updates[@]}"; do @@ -944,6 +979,7 @@ NO_CACHE= HOST= WITH_REGISTRY_AUTH=1 update_apps_mode=ub +update_apps_devel= update_apps_origin= update_apps_branch= args=( @@ -960,6 +996,7 @@ args=( -h:,--host: HOST= -g,--ug,--no-update-apps update_apps_mode=b -u,--uu,--update-apps-only update_apps_mode=u + -w,--uw,--update-apps-devel update_apps_devel=1 --uo:,--update-apps-origin: update_apps_origin= --ub:,--update-apps-branch: update_apps_branch= -l,--without-registry-auth WITH_REGISTRY_AUTH= @@ -987,6 +1024,7 @@ fi [ -n "$PROFILE" ] || PROFILE="$DEFAULT_PROFILE" [ -n "$chdir" ] && { cd "$chdir" || die; } +update_apps_mode="${update_apps_mode}${update_apps_devel:+w}" while [ $# -gt 0 ]; do [ "$1" == -- ] && { shift; continue; }