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.split
|
||||
##@include base.args
|
||||
##@include base.tools
|
||||
##@include base.compat
|
||||
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
|
||||
# Type de système
|
||||
|
@ -1299,7 +1300,7 @@ function list_all() {
|
|||
cd "$curdir"
|
||||
}
|
||||
function __la_cmd() {
|
||||
[ -n "$*" ] || set '*'
|
||||
[ $# -gt 0 ] || set '*'
|
||||
local arg
|
||||
local cmd="/bin/ls -1d"
|
||||
for arg in "$@"; do
|
||||
|
@ -2582,7 +2583,7 @@ function utools_local() {
|
|||
# définitions de PRETTYOPTS.
|
||||
# Si aucun arguments n'est fourni, toutes les définitions sont affichées.
|
||||
local arg
|
||||
[ -n "$*" ] || set -- opts verbosity interaction
|
||||
[ $# -gt 0 ] || set -- opts verbosity interaction
|
||||
for arg in "$@"; do
|
||||
case "$arg" in
|
||||
parse_opts|opts|o|args) echo "local -a args";;
|
||||
|
@ -2608,14 +2609,89 @@ function err_isatty() {
|
|||
# tester si STDERR n'est pas une redirection
|
||||
tty -s <&2
|
||||
}
|
||||
function die() {
|
||||
[ -n "$*" ] && eerror "$@"; exit 1
|
||||
function die() { [ $# -gt 0 ] && 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 {
|
||||
[ -n "$*" ] && "$@"; exit $?
|
||||
function eerror_unless() {
|
||||
# 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 {
|
||||
[ -n "$1" ] && eerror "$1"; shift; [ -n "$*" ] && "$@"; exit 1
|
||||
function die_if() {
|
||||
# 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'
|
||||
|
@ -2706,7 +2782,7 @@ function toienc() {
|
|||
function uread() {
|
||||
# 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
|
||||
[ -n "$*" ] || set -- REPLY
|
||||
[ $# -gt 0 ] || set -- REPLY
|
||||
local __r_var
|
||||
read "$@"
|
||||
for __r_var in "$@"; do
|
||||
|
@ -2999,7 +3075,7 @@ function __t_etitle() {
|
|||
fi
|
||||
fi
|
||||
# commande
|
||||
if [ -n "$*" ]; then
|
||||
if [ $# -gt 0 ]; then
|
||||
"$@"
|
||||
__t_s=$?
|
||||
[ "$__t_eend" == "default" ] && __t_eend=1
|
||||
|
@ -3076,7 +3152,7 @@ function ebegin() {
|
|||
__ebegin "$__b_msg" 1>&2
|
||||
fi
|
||||
# commande
|
||||
if [ -n "$*" ]; then
|
||||
if [ $# -gt 0 ]; then
|
||||
"$@"
|
||||
__b_s=$?
|
||||
[ "$__b_eend" == "default" ] && __b_eend=1
|
||||
|
@ -3100,7 +3176,7 @@ function edot() {
|
|||
else
|
||||
__edotx 1>&2
|
||||
fi
|
||||
show_verbose && [ -n "$*" ] && __edotd "$*" 1>&2
|
||||
show_verbose && [ $# -gt 0 ] && __edotd "$*" 1>&2
|
||||
return $s
|
||||
}
|
||||
function edotw() {
|
||||
|
@ -3113,7 +3189,7 @@ function edotw() {
|
|||
[ -n "$1" ] && s="$1"
|
||||
shift
|
||||
__edotw 1>&2
|
||||
show_verbose && [ -n "$*" ] && __edotd "$*" 1>&2
|
||||
show_verbose && [ $# -gt 0 ] && __edotd "$*" 1>&2
|
||||
return $s
|
||||
}
|
||||
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: .)
|
||||
parse_args "$@"; set -- "${args[@]}"
|
||||
|
||||
if [ $# -eq 0 ]; then
|
||||
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
|
||||
base_umove ${updatedir:+-d "$updatedir"} "$@"
|
||||
|
|
Loading…
Reference in New Issue