ajout de die_unless(), die_if(), eerror_unless() et eerror_if()
ajout du module base.tools
This commit is contained in:
parent
429f246946
commit
c70a20ba26
104
lib/ulib/base
104
lib/ulib/base
|
@ -38,9 +38,10 @@ fi
|
||||||
##@include base.quote
|
##@include base.quote
|
||||||
##@include base.split
|
##@include base.split
|
||||||
##@include base.args
|
##@include base.args
|
||||||
|
##@include base.tools
|
||||||
##@include base.compat
|
##@include base.compat
|
||||||
uprovide base
|
uprovide base
|
||||||
urequire base.init base.core base.string base.num base.bool base.array base.quote base.split base.args base.compat
|
urequire base.init base.core base.string base.num base.bool base.array base.quote base.split base.args base.tools base.compat
|
||||||
|
|
||||||
## Informations sur l'hôte sur lequel tourne ce script
|
## Informations sur l'hôte sur lequel tourne ce script
|
||||||
# Type de système
|
# Type de système
|
||||||
|
@ -1299,7 +1300,7 @@ function list_all() {
|
||||||
cd "$curdir"
|
cd "$curdir"
|
||||||
}
|
}
|
||||||
function __la_cmd() {
|
function __la_cmd() {
|
||||||
[ -n "$*" ] || set '*'
|
[ $# -gt 0 ] || set '*'
|
||||||
local arg
|
local arg
|
||||||
local cmd="/bin/ls -1d"
|
local cmd="/bin/ls -1d"
|
||||||
for arg in "$@"; do
|
for arg in "$@"; do
|
||||||
|
@ -2582,7 +2583,7 @@ function utools_local() {
|
||||||
# définitions de PRETTYOPTS.
|
# définitions de PRETTYOPTS.
|
||||||
# Si aucun arguments n'est fourni, toutes les définitions sont affichées.
|
# Si aucun arguments n'est fourni, toutes les définitions sont affichées.
|
||||||
local arg
|
local arg
|
||||||
[ -n "$*" ] || set -- opts verbosity interaction
|
[ $# -gt 0 ] || set -- opts verbosity interaction
|
||||||
for arg in "$@"; do
|
for arg in "$@"; do
|
||||||
case "$arg" in
|
case "$arg" in
|
||||||
parse_opts|opts|o|args) echo "local -a args";;
|
parse_opts|opts|o|args) echo "local -a args";;
|
||||||
|
@ -2608,14 +2609,89 @@ function err_isatty() {
|
||||||
# tester si STDERR n'est pas une redirection
|
# tester si STDERR n'est pas une redirection
|
||||||
tty -s <&2
|
tty -s <&2
|
||||||
}
|
}
|
||||||
function die() {
|
function die() { [ $# -gt 0 ] && eerror "$@"; exit 1; }
|
||||||
[ -n "$*" ] && eerror "$@"; exit 1
|
function exit_with { if [ $# -gt 0 ]; then "$@"; fi; exit $?; }
|
||||||
|
function die_with { [ $# -gt 0 ] && eerror "$1"; shift; [ $# -gt 0 ] && "$@"; exit 1; }
|
||||||
|
function die_unless() {
|
||||||
|
# Afficher $-1 et quitter le script avec die() si la commande $1..-2 retourne
|
||||||
|
# FAUX
|
||||||
|
local count=$#
|
||||||
|
if [ $count -eq 0 ]; then
|
||||||
|
exit 1
|
||||||
|
elif [ $count -eq 1 ]; then
|
||||||
|
"$@" || exit $?
|
||||||
|
else
|
||||||
|
local m r
|
||||||
|
m="${@:$count}"
|
||||||
|
count=$(($count - 1))
|
||||||
|
set -- "${@:1:$count}"
|
||||||
|
if "$@"; then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
r=$?
|
||||||
|
eerror "$m"
|
||||||
|
exit $r
|
||||||
|
fi
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
function exit_with {
|
function eerror_unless() {
|
||||||
[ -n "$*" ] && "$@"; exit $?
|
# Afficher $-1 avec eerror() et retourner $? si la commande $1..-2 retourne FAUX
|
||||||
|
local count=$#
|
||||||
|
if [ $count -eq 0 ]; then
|
||||||
|
return 1
|
||||||
|
elif [ $count -eq 1 ]; then
|
||||||
|
"$@" || return $?
|
||||||
|
else
|
||||||
|
local m r
|
||||||
|
m="${@:$count}"
|
||||||
|
count=$(($count - 1))
|
||||||
|
set -- "${@:1:$count}"
|
||||||
|
if "$@"; then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
r=$?
|
||||||
|
eerror "$m"
|
||||||
|
return $r
|
||||||
|
fi
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
function die_with {
|
function die_if() {
|
||||||
[ -n "$1" ] && eerror "$1"; shift; [ -n "$*" ] && "$@"; exit 1
|
# Afficher $-1 et quitter le script avec die() si la commande $1..-2 retourne
|
||||||
|
# VRAI
|
||||||
|
local count=$#
|
||||||
|
if [ $count -eq 0 ]; then
|
||||||
|
:
|
||||||
|
elif [ $count -eq 1 ]; then
|
||||||
|
"$@" && exit 1
|
||||||
|
else
|
||||||
|
local m r
|
||||||
|
m="${@:$count}"
|
||||||
|
count=$(($count - 1))
|
||||||
|
set -- "${@:1:$count}"
|
||||||
|
if "$@"; then
|
||||||
|
eerror "$m"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
function eerror_if() {
|
||||||
|
# Afficher $-1 avec eerror() et retourner le code d'erreur 1 si la commande
|
||||||
|
# $1..-2 retourne VRAI
|
||||||
|
local count=$#
|
||||||
|
if [ $count -eq 0 ]; then
|
||||||
|
:
|
||||||
|
elif [ $count -eq 1 ]; then
|
||||||
|
"$@" && return 1
|
||||||
|
else
|
||||||
|
local m r
|
||||||
|
m="${@:$count}"
|
||||||
|
count=$(($count - 1))
|
||||||
|
set -- "${@:1:$count}"
|
||||||
|
if "$@"; then
|
||||||
|
eerror "$m"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
TAB=$'\t'
|
TAB=$'\t'
|
||||||
|
@ -2706,7 +2782,7 @@ function toienc() {
|
||||||
function uread() {
|
function uread() {
|
||||||
# Lire une valeur sur stdin et la placer dans la variable $1. On assume que la
|
# Lire une valeur sur stdin et la placer dans la variable $1. On assume que la
|
||||||
# valeur en entrée est encodée dans l'encoding d'entrée par défaut
|
# valeur en entrée est encodée dans l'encoding d'entrée par défaut
|
||||||
[ -n "$*" ] || set -- REPLY
|
[ $# -gt 0 ] || set -- REPLY
|
||||||
local __r_var
|
local __r_var
|
||||||
read "$@"
|
read "$@"
|
||||||
for __r_var in "$@"; do
|
for __r_var in "$@"; do
|
||||||
|
@ -2999,7 +3075,7 @@ function __t_etitle() {
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
# commande
|
# commande
|
||||||
if [ -n "$*" ]; then
|
if [ $# -gt 0 ]; then
|
||||||
"$@"
|
"$@"
|
||||||
__t_s=$?
|
__t_s=$?
|
||||||
[ "$__t_eend" == "default" ] && __t_eend=1
|
[ "$__t_eend" == "default" ] && __t_eend=1
|
||||||
|
@ -3076,7 +3152,7 @@ function ebegin() {
|
||||||
__ebegin "$__b_msg" 1>&2
|
__ebegin "$__b_msg" 1>&2
|
||||||
fi
|
fi
|
||||||
# commande
|
# commande
|
||||||
if [ -n "$*" ]; then
|
if [ $# -gt 0 ]; then
|
||||||
"$@"
|
"$@"
|
||||||
__b_s=$?
|
__b_s=$?
|
||||||
[ "$__b_eend" == "default" ] && __b_eend=1
|
[ "$__b_eend" == "default" ] && __b_eend=1
|
||||||
|
@ -3100,7 +3176,7 @@ function edot() {
|
||||||
else
|
else
|
||||||
__edotx 1>&2
|
__edotx 1>&2
|
||||||
fi
|
fi
|
||||||
show_verbose && [ -n "$*" ] && __edotd "$*" 1>&2
|
show_verbose && [ $# -gt 0 ] && __edotd "$*" 1>&2
|
||||||
return $s
|
return $s
|
||||||
}
|
}
|
||||||
function edotw() {
|
function edotw() {
|
||||||
|
@ -3113,7 +3189,7 @@ function edotw() {
|
||||||
[ -n "$1" ] && s="$1"
|
[ -n "$1" ] && s="$1"
|
||||||
shift
|
shift
|
||||||
__edotw 1>&2
|
__edotw 1>&2
|
||||||
show_verbose && [ -n "$*" ] && __edotd "$*" 1>&2
|
show_verbose && [ $# -gt 0 ] && __edotd "$*" 1>&2
|
||||||
return $s
|
return $s
|
||||||
}
|
}
|
||||||
function ewait() {
|
function ewait() {
|
||||||
|
|
|
@ -0,0 +1,72 @@
|
||||||
|
##@cooked comments # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
## Fonctions de base: outils divers
|
||||||
|
##@cooked nocomments
|
||||||
|
##@include base
|
||||||
|
uprovide base.tools
|
||||||
|
urequire base
|
||||||
|
|
||||||
|
function base_umove() {
|
||||||
|
# Outil de haut niveau pour déplacer un fichier ou un lien. Si c'est un lien qui
|
||||||
|
# est déplacé, la destination du lien est mise à jour si elle est relative.
|
||||||
|
# l'option '-d UPDATEDIR' permet de spécifier un répertoire dans lequel tous les
|
||||||
|
# liens qui pointent vers le fichier déplacé sont mis à jour si le déplacement
|
||||||
|
# du fichier se fait avec succès.
|
||||||
|
local -a args
|
||||||
|
local updatedir
|
||||||
|
args=(-d:,--updatedir: .)
|
||||||
|
parse_args_check || return
|
||||||
|
|
||||||
|
eerror_unless [ -z "$updatedir" -o -d "$updatedir" ] "$updatedir: doit être un répertoire" || return
|
||||||
|
eerror_if [ $# -eq 0 ] "Vous devez spécifier les fichiers à déplacer" || return
|
||||||
|
eerror_if [ $# -eq 1 ] "Vous devez spécifier la destination" || return
|
||||||
|
|
||||||
|
local -a srcs
|
||||||
|
local dest
|
||||||
|
|
||||||
|
srcs=("$@")
|
||||||
|
setx dest=last_value srcs
|
||||||
|
array_del_last srcs
|
||||||
|
|
||||||
|
if [ $# -eq 2 ]; then
|
||||||
|
# S'il n'y a que deux arguments, permettre que le deuxième argument ne
|
||||||
|
# soit pas un répertoire
|
||||||
|
if [ -d "$dest" ]; then
|
||||||
|
: # ce cas sera traité ci-dessous
|
||||||
|
elif [ -e "$dest" ]; then
|
||||||
|
eerror "$dest: refus d'écraser la destination"
|
||||||
|
return 1
|
||||||
|
else
|
||||||
|
src="${srcs[0]}"
|
||||||
|
if [ -n "$updatedir" ]; then
|
||||||
|
if [ -L "$src" ]; then
|
||||||
|
ldest="$(readlinka "$src")"
|
||||||
|
array_find_links update_links "$ldest" "$updatedir"
|
||||||
|
else
|
||||||
|
array_find_links update_links "$src" "$updatedir"
|
||||||
|
fi
|
||||||
|
move_file "$src" "$dest" "${update_links[@]}"
|
||||||
|
else
|
||||||
|
move_link "$src" "$dest"
|
||||||
|
fi
|
||||||
|
return $?
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# S'il y a plus de deux arguments, il FAUT que dest soit un répertoire
|
||||||
|
[ -d "$dest" ] || {
|
||||||
|
eerror "$dest: doit être un répertoire"
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
for src in "${srcs[@]}"; do
|
||||||
|
if [ -n "$updatedir" ]; then
|
||||||
|
if [ -L "$src" ]; then
|
||||||
|
move_link "$src" "$dest"
|
||||||
|
else
|
||||||
|
array_find_links update_links "$src" "$updatedir"
|
||||||
|
move_file "$src" "$dest" "${update_links[@]}"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
move_link "$src" "$dest"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
53
umove
53
umove
|
@ -20,55 +20,4 @@ OPTIONS
|
||||||
args=(--help '$exit_with display_help' -d:,--updatedir: .)
|
args=(--help '$exit_with display_help' -d:,--updatedir: .)
|
||||||
parse_args "$@"; set -- "${args[@]}"
|
parse_args "$@"; set -- "${args[@]}"
|
||||||
|
|
||||||
if [ $# -eq 0 ]; then
|
base_umove ${updatedir:+-d "$updatedir"} "$@"
|
||||||
die "Vous devez spécifier les fichiers à déplacer"
|
|
||||||
elif [ $# -eq 1 ]; then
|
|
||||||
die "Vous devez spécifier la destination"
|
|
||||||
fi
|
|
||||||
|
|
||||||
[ -z "$updatedir" -o -d "$updatedir" ] || die "$updatedir: doit être un répertoire"
|
|
||||||
|
|
||||||
srcs=("$@")
|
|
||||||
setx dest=last_value srcs
|
|
||||||
array_del_last srcs
|
|
||||||
|
|
||||||
if [ $# -eq 2 ]; then
|
|
||||||
# S'il n'y a que deux arguments, permettre que le deuxième argument ne soit
|
|
||||||
# pas un répertoire
|
|
||||||
if [ -d "$dest" ]; then
|
|
||||||
: # ce cas sera traité ci-dessous
|
|
||||||
elif [ -e "$dest" ]; then
|
|
||||||
die "$dest: refus d'écraser la destination"
|
|
||||||
else
|
|
||||||
src="${srcs[0]}"
|
|
||||||
if [ -n "$updatedir" ]; then
|
|
||||||
if [ -L "$src" ]; then
|
|
||||||
link="$src"
|
|
||||||
linkdir="$(dirname -- "$link")"
|
|
||||||
ldest="$(abspath "$(readlink "$link")" "$linkdir")"
|
|
||||||
array_find_links update_links "$ldest" "$updatedir"
|
|
||||||
else
|
|
||||||
array_find_links update_links "$src" "$updatedir"
|
|
||||||
fi
|
|
||||||
move_file "$src" "$dest" "${update_links[@]}"
|
|
||||||
else
|
|
||||||
move_link "$src" "$dest"
|
|
||||||
fi
|
|
||||||
exit $?
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# S'il y a plus de deux arguments, il FAUT que dest soit un répertoire
|
|
||||||
[ -d "$dest" ] || die "$dest: doit être un répertoire"
|
|
||||||
for src in "${srcs[@]}"; do
|
|
||||||
if [ -n "$updatedir" ]; then
|
|
||||||
if [ -L "$src" ]; then
|
|
||||||
move_link "$src" "$dest"
|
|
||||||
else
|
|
||||||
array_find_links update_links "$src" "$updatedir"
|
|
||||||
move_file "$src" "$dest" "${update_links[@]}"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
move_link "$src" "$dest"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
Loading…
Reference in New Issue