Intégration de la branche release-8.2.0
This commit is contained in:
commit
f7f560312d
12
CHANGES.md
12
CHANGES.md
|
@ -1,3 +1,15 @@
|
|||
## Version 8.2.0 du 02/11/2018-15:06
|
||||
|
||||
* `7583ded` Intégration de la branche update-pff
|
||||
* `96c146e` ajout de l'option NOMERGES pour ne pas tenter de fusionner avec git des fichiers binaires
|
||||
* `4f7cb90` dk: support de .compose.env pour le nom du projet
|
||||
* `9d991e2` pcrone: possibilité de créer des dépôts gogs
|
||||
* `e3ba580` dk: corriger push
|
||||
* `48c662b` gérer les tags autrement. ajouter push
|
||||
* `566f1d7` tailor.py: possibilité de modifier les préréglages par les options
|
||||
* `f34b63a` bug
|
||||
* `2873638` afficher le profil courant
|
||||
|
||||
## Version 8.1.0 du 28/09/2018-08:39
|
||||
|
||||
* `e74480c` dk: action build par défaut
|
||||
|
|
|
@ -1 +1 @@
|
|||
8.1.0
|
||||
8.2.0
|
||||
|
|
86
dk
86
dk
|
@ -10,6 +10,7 @@ USAGE
|
|||
|
||||
COMMANDES
|
||||
build
|
||||
push
|
||||
run
|
||||
up
|
||||
logs
|
||||
|
@ -79,11 +80,34 @@ function compose_set_env_args() {
|
|||
if [ -f docker-compose.override.yml ]; then
|
||||
replace_env_args+=(-f docker-compose.override.yml)
|
||||
fi
|
||||
if [ -n "$profile" -a -f "docker-compose.$profile.yml" ]; then
|
||||
replace_env_args+=(-f "docker-compose.$profile.yml")
|
||||
local PROJECT_NAME=--none--
|
||||
[ -f .compose.env ] && source ./.compose.env
|
||||
if [ -n "$profile" ]; then
|
||||
if [ -f "docker-compose.$profile.yml" ]; then
|
||||
replace_env_args+=(-f "docker-compose.$profile.yml")
|
||||
fi
|
||||
if [ "$PROJECT_NAME" != --none-- ]; then
|
||||
if [ -z "$COMPOSE_PROJECT_NAME" ]; then
|
||||
[ -n "$PROJECT_NAME" ] || PROJECT_NAME="$(basename -- "$(pwd)")"
|
||||
COMPOSE_PROJECT_NAME="${PROJECT_NAME}_${profile}"
|
||||
fi
|
||||
export COMPOSE_PROJECT_NAME
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
function initialize_build_env() {
|
||||
CTXDIR=.
|
||||
NAME=
|
||||
TAGS=(latest)
|
||||
VERSION=
|
||||
}
|
||||
function default_update_build_env() {
|
||||
[ -n "$VERSION" ] || docker_add_build_arg VERSION "$(get_version)"
|
||||
[ -n "$VERSION" ] && TAGS+=("$VERSION")
|
||||
}
|
||||
function update_build_env() { default_update_build_env; }
|
||||
|
||||
function default_compose_build() {
|
||||
docker-compose \
|
||||
"${replace_env_args[@]}" "${env_args[@]}" \
|
||||
|
@ -91,8 +115,10 @@ function default_compose_build() {
|
|||
"$@"
|
||||
}
|
||||
function default_docker_build() {
|
||||
[ -n "$VERSION" ] || docker_add_build_arg VERSION "$(get_version)"
|
||||
replace_build_args+=(-t "$NAME:$VERSION" -t "$NAME:latest")
|
||||
local tag
|
||||
for tag in "${TAGS[@]}"; do
|
||||
replace_build_args+=(-t "$NAME:$tag")
|
||||
done
|
||||
docker build \
|
||||
"${replace_env_args[@]}" "${env_args[@]}" \
|
||||
"${replace_build_args[@]}" "${build_args[@]}" \
|
||||
|
@ -103,20 +129,38 @@ function docker_build() { default_docker_build "$@"; }
|
|||
function auto_build() {
|
||||
local -a replace_env_args env_args
|
||||
local -a replace_build_args build_args
|
||||
CTXDIR=.
|
||||
NAME=
|
||||
VERSION=
|
||||
initialize_build_env
|
||||
if [ -f docker-compose.yml ]; then
|
||||
compose_set_env_args
|
||||
update_build_env
|
||||
compose_build
|
||||
else
|
||||
docker_parse_env_args
|
||||
docker_check_name
|
||||
docker_add_build_arg build_date "$(date +%y%m%d)"
|
||||
update_build_env
|
||||
docker_build
|
||||
fi
|
||||
}
|
||||
|
||||
function auto_push() {
|
||||
local -a replace_env_args env_args
|
||||
local -a replace_build_args build_args
|
||||
local tag
|
||||
initialize_build_env
|
||||
if [ -f docker-compose.yml ]; then
|
||||
compose_set_env_args
|
||||
update_build_env
|
||||
else
|
||||
docker_parse_env_args
|
||||
docker_check_name
|
||||
update_build_env
|
||||
fi
|
||||
for tag in "${TAGS[@]}"; do
|
||||
docker push "$NAME:$tag"
|
||||
done
|
||||
}
|
||||
|
||||
function default_compose_up() {
|
||||
docker-compose \
|
||||
"${replace_env_args[@]}" "${env_args[@]}" \
|
||||
|
@ -234,9 +278,13 @@ function auto_down() {
|
|||
fi
|
||||
}
|
||||
|
||||
DEFAULT_PROFILE=devel
|
||||
PROFILE=
|
||||
set_defaults dk
|
||||
|
||||
chdir=
|
||||
profile=devel
|
||||
args=(+
|
||||
profile="$PROFILE"
|
||||
args=(
|
||||
--help '$exit_with display_help'
|
||||
-d:,--chdir: chdir=
|
||||
-p:,--profile: profile=
|
||||
|
@ -245,10 +293,11 @@ args=(+
|
|||
)
|
||||
parse_args "$@"; set -- "${args[@]}"
|
||||
|
||||
[ -n "$chdir" ] && { cd "$chdir" || die; }
|
||||
|
||||
# construire par défaut
|
||||
[ $# -eq 0 ] && set -- build
|
||||
[ -n "$profile" ] || profile="$DEFAULT_PROFILE"
|
||||
|
||||
[ -n "$chdir" ] && { cd "$chdir" || die; }
|
||||
|
||||
while [ $# -gt 0 ]; do
|
||||
[ "$1" == -- ] && { shift; continue; }
|
||||
|
@ -261,16 +310,29 @@ while [ $# -gt 0 ]; do
|
|||
while [ $# -gt 0 -a "$1" != -- ]; do
|
||||
args+=("$1"); shift
|
||||
done
|
||||
enote "Profil $profile"
|
||||
auto_build "${args[@]}" || die
|
||||
;;
|
||||
push)
|
||||
[ -f .build.scripts.sh ] && source ./.build.scripts.sh
|
||||
[ -f build.scripts.sh ] && source ./build.scripts.sh
|
||||
args=()
|
||||
while [ $# -gt 0 -a "$1" != -- ]; do
|
||||
args+=("$1"); shift
|
||||
done
|
||||
enote "Profil $profile"
|
||||
auto_push "${args[@]}" || die
|
||||
;;
|
||||
s|run|start)
|
||||
args=()
|
||||
while [ $# -gt 0 -a "$1" != -- ]; do
|
||||
args+=("$1"); shift
|
||||
done
|
||||
enote "Profil $profile"
|
||||
auto_up "${args[@]}" || die
|
||||
;;
|
||||
k|stop)
|
||||
enote "Profil $profile"
|
||||
auto_stop || die
|
||||
;;
|
||||
1|up)
|
||||
|
@ -278,6 +340,7 @@ while [ $# -gt 0 ]; do
|
|||
while [ $# -gt 0 -a "$1" != -- ]; do
|
||||
args+=("$1"); shift
|
||||
done
|
||||
enote "Profil $profile"
|
||||
auto_up "${args[@]}" && auto_logs || die
|
||||
;;
|
||||
l|logs) auto_logs || die;;
|
||||
|
@ -293,6 +356,7 @@ while [ $# -gt 0 ]; do
|
|||
while [ $# -gt 0 -a "$1" != -- ]; do
|
||||
args+=("$1"); shift
|
||||
done
|
||||
enote "Profil $profile"
|
||||
if auto_build; then
|
||||
auto_up "${args[@]}" && auto_logs || die
|
||||
else
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
|
||||
# Profil par défaut
|
||||
#PROFILE=prod
|
|
@ -0,0 +1,15 @@
|
|||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
|
||||
# Définitions des types de dépôt. Le format est NAME:TYPE:PREFIX
|
||||
# * NAME est utilisé pour définir des configurations supplémentaires
|
||||
# * TYPE peut valoir gitolite ou gogs. Le type par défaut est 'gitolite'
|
||||
REPO_TYPES=(
|
||||
ur:gogs:https://gogs.univ-reunion.fr/
|
||||
)
|
||||
|
||||
# Configuration de l'accès à l'API gogs
|
||||
# un nom de dépôt est de la forme user/repo. Si user != $GOGS_USER alors on crée
|
||||
# dans une organisation
|
||||
#ur_GOGS_URL=https://gogs.univ-reunion.fr
|
||||
#ur_GOGS_USER="$USER"
|
||||
#ur_GOGS_KEY=
|
39
pff
39
pff
|
@ -29,6 +29,7 @@ PFFCONFVARS=(
|
|||
"PROTECTS=//Fichiers locaux à protéger lors de l'intégration e.g /dir/, /file, etc."
|
||||
"MKDIRS//Répertoires qui doivent toujours exister"
|
||||
"FILTERS//Filtres appliqués aux fichiers lors de l'intégration"
|
||||
"NOMERGES=//Fichiers qu'il ne faut pas chercher à fusionner"
|
||||
)
|
||||
|
||||
if [ "$#" -eq 1 -a "$1" == --nutools-makelinks ]; then
|
||||
|
@ -447,6 +448,27 @@ function get_vlfiles() {
|
|||
get_vlfiles_nostrip "$@" | sed "s|^$pffdir/pff/$profile/||"
|
||||
}
|
||||
|
||||
function is_nomerge() {
|
||||
local file="$1" pffdir="$2"
|
||||
local nomerge rfile
|
||||
setx rfile=get_rfile "$file" "$pffdir"
|
||||
setx file=basename -- "$rfile" # utilisé pour le match sur le nom du fichier
|
||||
for nomerge in "${NOMERGES[@]}"; do
|
||||
if [[ "$nomerge" == */* ]]; then
|
||||
# matcher sur le chemin relatif
|
||||
if eval "[[ $(qval "$rfile") == $(qwc "$nomerge") ]]"; then
|
||||
return 0
|
||||
fi
|
||||
else
|
||||
# matcher uniquement sur le nom du fichier
|
||||
if eval "[[ $(qval "$file") == $(qwc "$nomerge") ]]"; then
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
done
|
||||
return 1
|
||||
}
|
||||
|
||||
function sync_vlfiles() {
|
||||
# synchroniser les fichiers de version $3..@ dans tous les répertoires de
|
||||
# profil, ou seulement le répertoire de profil $2 si la valeur n'est pas
|
||||
|
@ -986,6 +1008,15 @@ function patch_cmd() {
|
|||
have_base_vlfiles=
|
||||
for profile in "${profiles[@]}"; do
|
||||
array_from_lines vlfiles "$(get_vlfiles_nostrip "$pffdir" "" "$profile" "$version")"
|
||||
# filtrer les fichiers de NOMERGES
|
||||
mergefiles=()
|
||||
for vlfile in "${vlfiles[@]}"; do
|
||||
setx rfile=get_rfile "${vlfile%__pv-${version}__}" "$pffdir"
|
||||
is_nomerge "$rfile" "$pffdir" && continue
|
||||
array_add mergefiles "$vlfile"
|
||||
done
|
||||
vlfiles=("${mergefiles[@]}")
|
||||
# on en a trouvé
|
||||
if [ ${#vlfiles[*]} -gt 0 ]; then
|
||||
have_profile_vlfiles=1
|
||||
break
|
||||
|
@ -993,6 +1024,14 @@ function patch_cmd() {
|
|||
done
|
||||
[ -n "$have_profile_vlfiles" ] && break
|
||||
array_from_lines vlfiles "$(get_vlfiles_nostrip "$pffdir" "" Base "$version")"
|
||||
# filtrer les fichiers de NOMERGES
|
||||
mergefiles=()
|
||||
for vlfile in "${vlfiles[@]}"; do
|
||||
setx rfile=get_rfile "${vlfile%__pv-${version}__}" "$pffdir"
|
||||
is_nomerge "$rfile" "$pffdir" && continue
|
||||
array_add mergefiles "$vlfile"
|
||||
done
|
||||
vlfiles=("${mergefiles[@]}")
|
||||
have_base_vlfiles=1
|
||||
break
|
||||
done
|
||||
|
|
|
@ -170,7 +170,7 @@ Si cet argument n'est pas spécifié, l'entrée standard est utilisée comme sou
|
|||
description=__doc__,
|
||||
formatter_class=FancyHelpFormatter,
|
||||
)
|
||||
AP.set_defaults(inputfile=None, follow=False, patterns=None, defaults=True, presets=None)
|
||||
AP.set_defaults(inputfile=None, follow=None, patterns=None, defaults=None, presets=None)
|
||||
AP.add_argument('-e', '--pattern', action='append', dest='patterns', metavar='PATTERN:FORMAT', help=pattern_help)
|
||||
AP.add_argument('-z', '--no-defaults', action='store_false', dest='defaults', help=no_defaults_help)
|
||||
AP.add_argument('-d', '--defaults', action='store_true', dest='defaults', help=no_defaults_help)
|
||||
|
@ -184,8 +184,14 @@ Si cet argument n'est pas spécifié, l'entrée standard est utilisée comme sou
|
|||
if presets not in PRESETS:
|
||||
raise ValueError("%s: argument invalide" % presets)
|
||||
inputfile, follow, opatterns, odefaults = PRESETS.get(presets)
|
||||
if o.inputfile is not None: inputfile = o.inputfile
|
||||
if o.follow is not None: follow = o.follow
|
||||
if o.patterns is not None: opatterns = o.patterns
|
||||
if o.defaults is not None: odefaults = o.defaults
|
||||
else:
|
||||
inputfile, follow, opatterns, odefaults = o.inputfile, o.follow, o.patterns, o.defaults
|
||||
if follow is None: follow = False
|
||||
if odefaults is None: odefaults = True
|
||||
|
||||
if opatterns is None:
|
||||
patterns = DEFAULT_PATTERNS
|
||||
|
|
98
uproject
98
uproject
|
@ -417,24 +417,53 @@ NR <= 2 { next }
|
|||
fi
|
||||
|
||||
elif [ "$CMD" == crone ]; then
|
||||
REPO_TYPES=()
|
||||
set_defaults pcrone
|
||||
|
||||
repourl="${1%.git}"
|
||||
[ -n "$repourl" ] || die "Vous devez spécifier l'url du dépôt git"
|
||||
if [ "${repourl#http://}" != "$repourl" -o "${repourl#https://}" != "$repourl" ]; then
|
||||
# accès par http
|
||||
mode=http
|
||||
splitfsep "$repourl" :// scheme hostuserpath
|
||||
splitfsep "$hostuserpath" / host userpath
|
||||
|
||||
found=
|
||||
for repo_ntp in "${REPO_TYPES[@]}"; do
|
||||
splitfsep "$repo_ntp" : name tmp
|
||||
splitfsep "$tmp" : type prefix
|
||||
if [ "${repourl#$prefix}" != "$repourl" ]; then
|
||||
found=1
|
||||
break
|
||||
fi
|
||||
done
|
||||
if [ -z "$found" ]; then
|
||||
name=
|
||||
type=gitolite
|
||||
prefix=
|
||||
fi
|
||||
if [ "$type" == "gitolite" ]; then
|
||||
if [ "${repourl#http://}" != "$repourl" -o "${repourl#https://}" != "$repourl" ]; then
|
||||
# accès par http
|
||||
mode=gitolite_http
|
||||
splitfsep "$repourl" :// scheme hostuserpath
|
||||
splitfsep "$hostuserpath" / host userpath
|
||||
splitfsep "$userpath" / user path
|
||||
[ -n "$host" -a -n "$user" ] || die "Vous devez spécifier l'hôte e.g http://host/git/repo"
|
||||
hostuser="$scheme://$host/$user"
|
||||
else
|
||||
# accès par ssh
|
||||
mode=gitolite_ssh
|
||||
splitfsep "$repourl" : userhost path
|
||||
splituserhost "$userhost" user host
|
||||
[ -n "$user" ] || user=git
|
||||
[ -n "$host" ] || die "Vous devez spécifier l'hôte"
|
||||
userhost="$user@$host"
|
||||
fi
|
||||
elif [ "$type" == "gogs" ]; then
|
||||
mode=gogs_http
|
||||
gogs_url="${name}_GOGS_URL"; gogs_url="${!gogs_url}"
|
||||
gogs_user="${name}_GOGS_USER"; gogs_user="${!gogs_user}"
|
||||
gogs_key="${name}_GOGS_KEY"; gogs_key="${!gogs_key}"
|
||||
userpath="${repourl#$prefix}"
|
||||
splitfsep "$userpath" / user path
|
||||
[ -n "$host" -a -n "$user" ] || die "Vous devez spécifier l'hôte e.g http://host/git/repo"
|
||||
hostuser="$scheme://$host/$user"
|
||||
else
|
||||
# accès par ssh
|
||||
mode=ssh
|
||||
splitfsep "$repourl" : userhost path
|
||||
splituserhost "$userhost" user host
|
||||
[ -n "$user" ] || user=git
|
||||
[ -n "$host" ] || die "Vous devez spécifier l'hôte"
|
||||
userhost="$user@$host"
|
||||
die "$type: type de dépôt non supporté"
|
||||
fi
|
||||
[ -n "$path" ] || die "Vous devez spécifier le chemin du dépôt git"
|
||||
|
||||
|
@ -449,7 +478,7 @@ elif [ "$CMD" == crone ]; then
|
|||
ac_set_tmpdir tmpdestdir
|
||||
fi
|
||||
|
||||
if [ "$mode" == http ]; then
|
||||
if [ "$mode" == gitolite_http ]; then
|
||||
setx result=curl -fs "$hostuser/create?$path" || die
|
||||
echo "$result"
|
||||
[[ "$result" == FATAL:* ]] && die
|
||||
|
@ -461,7 +490,7 @@ elif [ "$CMD" == crone ]; then
|
|||
else
|
||||
git clone "$hostuser/$path" "$destdir" || die
|
||||
fi
|
||||
elif [ "$mode" == ssh ]; then
|
||||
elif [ "$mode" == gitolite_ssh ]; then
|
||||
git_annex_use_ssh_wrapper
|
||||
ssh "$userhost" create "$path" || die
|
||||
if [ -n "$tmpdestdir" ]; then
|
||||
|
@ -472,19 +501,50 @@ elif [ "$CMD" == crone ]; then
|
|||
else
|
||||
git clone "$userhost:$path" "$destdir" || die
|
||||
fi
|
||||
elif [ "$mode" == gogs_http ]; then
|
||||
payload='{"private":true,"name":"'"$path"'"}'
|
||||
if [ "$gogs_user" != "$user" ]; then
|
||||
url="$gogs_url/api/v1/org/$user/repos"
|
||||
else
|
||||
url="$gogs_url/api/v1/user/repos"
|
||||
fi
|
||||
setx result=curl -fs \
|
||||
-H 'Content-Type: application/json' \
|
||||
-H "Authorization: token $gogs_key" \
|
||||
-d "$payload" \
|
||||
"$url" || die "Une erreur s'est produite lors de la tentative de création du dépôt"
|
||||
echo "$result"
|
||||
if [ -n "$tmpdestdir" ]; then
|
||||
setxx destname=abspath "$destdir" // basename
|
||||
git clone "$repourl" "$tmpdestdir/$destname" || die
|
||||
mv "$tmpdestdir/$destname/.git" "$destdir" || die
|
||||
ac_clean "$tmpdestdir"
|
||||
else
|
||||
git clone "$repourl" "$destdir" || die
|
||||
fi
|
||||
else
|
||||
die "bug: mode non prévu"
|
||||
fi
|
||||
if ask_yesno "Voulez-vous créer des fichiers .gitignore et .gitattributes initiaux?" O; then
|
||||
echo >"$destdir/.gitignore" "\
|
||||
if [ ! -f "$destdir/.gitignore" -o ! -f "$destdir/.gitattributes" ]; then
|
||||
if ask_yesno "Voulez-vous créer les fichiers initiaux .gitignore et/ou .gitattributes?" O; then
|
||||
if [ -f "$destdir/.gitignore" ]; then
|
||||
einfo "Refus d'écraser le fichier .gitignore existant"
|
||||
else
|
||||
echo >"$destdir/.gitignore" "\
|
||||
.~lock*#
|
||||
.*.swp"
|
||||
echo >"$destdir/.gitattributes" "\
|
||||
fi
|
||||
if [ -f "$destdir/.gitattributes" ]; then
|
||||
einfo "Refus d'écraser le fichier .gitattributes existant"
|
||||
else
|
||||
echo >"$destdir/.gitattributes" "\
|
||||
*.zip -delta
|
||||
*.gz -delta
|
||||
*.bz2 -delta
|
||||
*.whl -delta
|
||||
*.exe -delta"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
elif [ "$CMD" == xconfig-export ]; then
|
||||
|
|
Loading…
Reference in New Issue