Intégration de la branche release-4.2.0
This commit is contained in:
commit
a3b241962d
|
@ -1,3 +1,12 @@
|
||||||
|
## Version 4.2.0 du 06/04/2016-14:25
|
||||||
|
|
||||||
|
a710c5a Intégration de la branche stdout
|
||||||
|
ba969e3 ajout de stdredir pour pallier l'absence éventuelle de /dev/std*
|
||||||
|
472f2c7 Intégration de la branche sysinfos
|
||||||
|
1864cdf fonctions pour faciliter la gestion des dépendances sous debian
|
||||||
|
2c27f03 uproject: ajouter la commande xconfig-export
|
||||||
|
ed3de6d umail: ajout de l'option --gencmd
|
||||||
|
|
||||||
## Version 4.1.1 du 08/03/2016-12:04
|
## Version 4.1.1 du 08/03/2016-12:04
|
||||||
|
|
||||||
0bd2b1f correction de bugs avec apacheconfig
|
0bd2b1f correction de bugs avec apacheconfig
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
4.1.1
|
4.2.0
|
||||||
|
|
|
@ -27,13 +27,25 @@ OPTIONS
|
||||||
Corps du mail. Il est spécifié sur l'entrée standard.
|
Corps du mail. Il est spécifié sur l'entrée standard.
|
||||||
-f, --body FILE
|
-f, --body FILE
|
||||||
Spécifier un fichier qui contient le corps du message, au lieu de lire
|
Spécifier un fichier qui contient le corps du message, au lieu de lire
|
||||||
sur l'entrée standard."""
|
sur l'entrée standard.
|
||||||
|
--gencmd
|
||||||
|
Afficher la commande complète avec sendmail et l'option -f. En effet, la
|
||||||
|
commande donnée en exemple dans la section USAGE utilise une valeur par
|
||||||
|
défaut pour l'en-tête From: de l'enveloppe. Pour certains serveurs SMTP
|
||||||
|
qui requièrent que le From: de l'enveloppe corresponde à un domaine
|
||||||
|
valide, il faut forcer la valeur avec l'option -f de sendmail:
|
||||||
|
%(scriptname)s [-F FROM] ... | sendmail -t -i -f FROM
|
||||||
|
L'option --gencmd affiche une commande complète qu'il suffit d'évaluer,
|
||||||
|
e.g:
|
||||||
|
sendmail -t -i -f FROM <<EOF
|
||||||
|
...
|
||||||
|
EOF"""
|
||||||
|
|
||||||
DEFAULT_FROM = 'no-reply@univ-reunion.fr'
|
DEFAULT_FROM = 'no-reply@univ-reunion.fr'
|
||||||
|
|
||||||
import i_need_py25 # nécessite module email version 4.0
|
import i_need_py25 # nécessite module email version 4.0
|
||||||
|
|
||||||
import os, sys, mimetypes
|
import os, sys, mimetypes, re
|
||||||
from os import path
|
from os import path
|
||||||
|
|
||||||
from email import encoders
|
from email import encoders
|
||||||
|
@ -47,6 +59,12 @@ from email.generator import Generator
|
||||||
|
|
||||||
from ulib.all import *
|
from ulib.all import *
|
||||||
|
|
||||||
|
RE_UNSAFE_SH = re.compile(r'[^a-zA-Z0-9_^@%+=:,./-]')
|
||||||
|
def quotesh(s):
|
||||||
|
if not s: return "''"
|
||||||
|
if RE_UNSAFE_SH.search(s) is None: return s
|
||||||
|
return "'%s'" % s.replace("'", "'\\''")
|
||||||
|
|
||||||
def display_help():
|
def display_help():
|
||||||
uprint(__doc__ % globals())
|
uprint(__doc__ % globals())
|
||||||
|
|
||||||
|
@ -59,6 +77,7 @@ def run_umail():
|
||||||
('a:', 'attach=', "Attacher un fichier"),
|
('a:', 'attach=', "Attacher un fichier"),
|
||||||
('t:', 'content-type=', "Spécifier le type de contenu du fichier"),
|
('t:', 'content-type=', "Spécifier le type de contenu du fichier"),
|
||||||
('f:', 'body=', "Spécifier un fichier contenant le corps du message"),
|
('f:', 'body=', "Spécifier un fichier contenant le corps du message"),
|
||||||
|
(None, 'gencmd', "Générer une commande à évaluer pour envoyer le mail"),
|
||||||
])
|
])
|
||||||
options, args = get_args(None, options, longoptions)
|
options, args = get_args(None, options, longoptions)
|
||||||
mfrom = DEFAULT_FROM
|
mfrom = DEFAULT_FROM
|
||||||
|
@ -70,6 +89,7 @@ def run_umail():
|
||||||
bodyfile = None
|
bodyfile = None
|
||||||
afiles = []
|
afiles = []
|
||||||
amimetypes = []
|
amimetypes = []
|
||||||
|
gencmd = False
|
||||||
for option, value in options:
|
for option, value in options:
|
||||||
if option in ('-h', '--help'):
|
if option in ('-h', '--help'):
|
||||||
display_help()
|
display_help()
|
||||||
|
@ -90,6 +110,8 @@ def run_umail():
|
||||||
bodyfile = None
|
bodyfile = None
|
||||||
elif not path.exists(bodyfile):
|
elif not path.exists(bodyfile):
|
||||||
die("%s: fichier introuvable" % bodyfile)
|
die("%s: fichier introuvable" % bodyfile)
|
||||||
|
elif option in ('--gencmd',):
|
||||||
|
gencmd = True
|
||||||
|
|
||||||
if not args[0:1]: die("Vous devez spécifier le sujet")
|
if not args[0:1]: die("Vous devez spécifier le sujet")
|
||||||
subject = args[0]
|
subject = args[0]
|
||||||
|
@ -169,7 +191,9 @@ def run_umail():
|
||||||
if mbccs: msg['Bcc'] = ', '.join(mbccs)
|
if mbccs: msg['Bcc'] = ', '.join(mbccs)
|
||||||
msg['Subject'] = Header(subject, 'utf-8')
|
msg['Subject'] = Header(subject, 'utf-8')
|
||||||
|
|
||||||
|
if gencmd: print "sendmail -i -t -f %s <<EOF" % quotesh(mfrom)
|
||||||
Generator(sys.stdout).flatten(msg)
|
Generator(sys.stdout).flatten(msg)
|
||||||
|
if gencmd: print "EOF"
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
run_umail()
|
run_umail()
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
012000001
|
012001000
|
||||||
|
|
|
@ -1731,7 +1731,7 @@ parse_headers && do_once("parse-headers") {
|
||||||
|
|
||||||
# résultat
|
# résultat
|
||||||
[ -n "$output" ] || output=/dev/stdout
|
[ -n "$output" ] || output=/dev/stdout
|
||||||
<"$tmpsorted" >"$output" awkrun -f \
|
stdredir "$tmpsorted" "$output" "" awkrun -f \
|
||||||
padlen:int="$padlen" \
|
padlen:int="$padlen" \
|
||||||
headerscsv="$headers" show_headers:int="$show_headers" \
|
headerscsv="$headers" show_headers:int="$show_headers" \
|
||||||
'
|
'
|
||||||
|
@ -1916,7 +1916,7 @@ function lprintcsv() {
|
||||||
[ -n "$output" ] || output=/dev/stdout
|
[ -n "$output" ] || output=/dev/stdout
|
||||||
values=("$@")
|
values=("$@")
|
||||||
|
|
||||||
awkrun -f >>"$output" fields[@] show_headers:int="$show_headers" values[@] '
|
stdredir "" ">>$output" "" awkrun -f fields[@] show_headers:int="$show_headers" values[@] '
|
||||||
BEGIN {
|
BEGIN {
|
||||||
if (show_headers) array_printcsv(fields)
|
if (show_headers) array_printcsv(fields)
|
||||||
if (fields_count > 0) count = fields_count
|
if (fields_count > 0) count = fields_count
|
||||||
|
|
|
@ -2742,6 +2742,53 @@ function utools_local() {
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function stdredir() {
|
||||||
|
# Lancer la commande $4..@ en redirigeant stdin depuis $1, stdout vers $2,
|
||||||
|
# stderr vers $3. Si $1 est vide ou vaut /dev/stdin, la redirection n'est
|
||||||
|
# pas faite. Si $2 est vide ou vaut /dev/stdout, la redirection n'est pas
|
||||||
|
# faite. Si $3 est vide ou vaut /dev/stderr, la redirection n'est pas faite.
|
||||||
|
# Cette fonction existe parce que sur certaines versions de bash, il semble
|
||||||
|
# que les redirections /dev/std* ne sont pas traitées de façon particulière.
|
||||||
|
# De plus, sur des technologies telles que OpenVZ, les chemins /dev/std* ne
|
||||||
|
# sont pas créés (parce que /proc/self/fd/* n'est pas accessible). Donc,
|
||||||
|
# dans de rares cas où le script tourne sur OpenVZ avec une version de bash
|
||||||
|
# qui est buggée, la redirection n'est pas faite correctement.
|
||||||
|
local __redirs __in __out __err
|
||||||
|
if [ -n "$1" -o "$1" == /dev/stdin ]; then
|
||||||
|
if [ "${1#<}" != "$1" ]; then
|
||||||
|
__in="${1#<}"
|
||||||
|
else
|
||||||
|
__in="$1"
|
||||||
|
fi
|
||||||
|
__redirs="$__redirs"' <"$__in"'
|
||||||
|
fi; shift
|
||||||
|
if [ -n "$1" -o "$1" == /dev/stdout ]; then
|
||||||
|
if [ "${1#>>}" != "$1" ]; then
|
||||||
|
__out="${1#>>}"
|
||||||
|
__redirs="$__redirs"' >>"$__out"'
|
||||||
|
elif [ "${1#>}" != "$1" ]; then
|
||||||
|
__out="${1#>}"
|
||||||
|
__redirs="$__redirs"' >"$__out"'
|
||||||
|
else
|
||||||
|
__out="$1"
|
||||||
|
__redirs="$__redirs"' >"$__out"'
|
||||||
|
fi
|
||||||
|
fi; shift
|
||||||
|
if [ -n "$1" -o "$1" == /dev/stderr ]; then
|
||||||
|
if [ "${1#>>}" != "$1" ]; then
|
||||||
|
__err="${1#>>}"
|
||||||
|
__redirs="$__redirs"' 2>>"$__err"'
|
||||||
|
elif [ "${1#>}" != "$1" ]; then
|
||||||
|
__err="${1#>}"
|
||||||
|
__redirs="$__redirs"' 2>"$__err"'
|
||||||
|
else
|
||||||
|
__err="$1"
|
||||||
|
__redirs="$__redirs"' 2>"$__err"'
|
||||||
|
fi
|
||||||
|
fi; shift
|
||||||
|
eval '"$@"'"$__redirs"
|
||||||
|
}
|
||||||
|
|
||||||
function isatty() {
|
function isatty() {
|
||||||
# tester si STDOUT n'est pas une redirection
|
# tester si STDOUT n'est pas une redirection
|
||||||
tty -s <&1
|
tty -s <&1
|
||||||
|
|
|
@ -50,6 +50,15 @@ function pkg_installm() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function pkg_check_install() {
|
||||||
|
# Si le programme $1 n'existe pas, alors installer les packages $2..$@
|
||||||
|
# S'il n'y a pas d'arguments $2..$@ utiliser $1 comme nom de package
|
||||||
|
# Retourner 0 si au moins un des packages a été installé
|
||||||
|
progexists "$1" && return 1
|
||||||
|
[ $# -gt 1 ] && shift
|
||||||
|
pkg_installm "$@"
|
||||||
|
}
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
# Gestion des services
|
# Gestion des services
|
||||||
|
|
||||||
|
|
|
@ -479,3 +479,69 @@ function check_sysinfos() {
|
||||||
done
|
done
|
||||||
return $r_
|
return $r_
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# fonctions de support pour tester certaines versions de debian
|
||||||
|
# utilisation:
|
||||||
|
# on_debian
|
||||||
|
# if on_jessie; then
|
||||||
|
# elif on_wheezy; then
|
||||||
|
# elif on_squeeze; then
|
||||||
|
# else
|
||||||
|
# fi
|
||||||
|
# OU:
|
||||||
|
# on_debian:
|
||||||
|
# on_jessie xxx
|
||||||
|
# on_wheezy yyy
|
||||||
|
# on_squeeze zzz
|
||||||
|
# on_default ttt
|
||||||
|
# Sans arguments, on_{jessie,wheezy,squeeze} teste si on sur la version demandée
|
||||||
|
# OU SUPERIEURE. Avec un argument, la version EXACTE est testée, et la commande
|
||||||
|
# est lancée en cas de correspondance
|
||||||
|
function on_debian() {
|
||||||
|
NUTOOLS_ON_DEBIAN=
|
||||||
|
if check_sysinfos -d debian; then
|
||||||
|
urequire debian
|
||||||
|
NUTOOLS_ON_DEBIAN=1
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
function on_debian:() { on_debian "$@"; }
|
||||||
|
function __on_debian() {
|
||||||
|
[ -z "$NUTOOLS_ON_DEBIAN" -o "$NUTOOLS_ON_DEBIAN" != 1 ] && return 1
|
||||||
|
local sysver="$1"; shift
|
||||||
|
if [ $# -gt 0 ]; then
|
||||||
|
if check_sysinfos -d debian -v "$sysver"; then
|
||||||
|
NUTOOLS_ON_DEBIAN="$sysver"
|
||||||
|
"$@"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
if check_sysinfos -d debian -v "$sysver+"; then
|
||||||
|
NUTOOLS_ON_DEBIAN="$sysver"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function on_stretch() { __on_debian stretch "$@"; }
|
||||||
|
function on_jessie() { __on_debian jessie "$@"; }
|
||||||
|
function on_wheezy() { __on_debian wheezy "$@"; }
|
||||||
|
function on_squeeze() { __on_debian squeeze "$@"; }
|
||||||
|
function on_default() {
|
||||||
|
if [ "$NUTOOLS_ON_DEBIAN" == 1 ]; then
|
||||||
|
if [ $# -gt 0 ]; then
|
||||||
|
"$@"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
elif [ -n "$NUTOOLS_ON_DEBIAN" ]; then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
#XXX ici, on peut ajouter le code de support pour d'autres systèmes
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
49
uproject
49
uproject
|
@ -96,6 +96,11 @@ COMMANDS
|
||||||
Sur un dépôt fraichement cloné, initialiser le dépôt avec 'annex init'
|
Sur un dépôt fraichement cloné, initialiser le dépôt avec 'annex init'
|
||||||
s'il contient des fichiers annexés. Récupérer aussi ces fichiers avec
|
s'il contient des fichiers annexés. Récupérer aussi ces fichiers avec
|
||||||
'annex get'
|
'annex get'
|
||||||
|
xconfig-export [dir]
|
||||||
|
Installer des hooks pour qu'un dépôt puisse être utilisé pour servir des
|
||||||
|
fichiers, par exemple avec un serveur web. Plus précisément, un hook
|
||||||
|
post-receive est créé avec la commande 'git annex merge', et un hook
|
||||||
|
post-update est créé avec la commande 'git update-server-info'
|
||||||
|
|
||||||
printml [-t TYPE]
|
printml [-t TYPE]
|
||||||
Afficher le modeline pour un fichier du type spécifié
|
Afficher le modeline pour un fichier du type spécifié
|
||||||
|
@ -153,6 +158,7 @@ CMD_ALIASES=(
|
||||||
xs:xsync
|
xs:xsync
|
||||||
xw:xwhereis
|
xw:xwhereis
|
||||||
xwa:xwebapp
|
xwa:xwebapp
|
||||||
|
xce:xconfig-export
|
||||||
gr:grep
|
gr:grep
|
||||||
)
|
)
|
||||||
DEFAULT_CMD=status
|
DEFAULT_CMD=status
|
||||||
|
@ -293,6 +299,49 @@ elif [ "$CMD" == crone ]; then
|
||||||
git clone "$userhost:$path" "$destdir" || die
|
git clone "$userhost:$path" "$destdir" || die
|
||||||
git_annex_initial "$destdir" || die
|
git_annex_initial "$destdir" || die
|
||||||
|
|
||||||
|
elif [ "$CMD" == xconfig-export ]; then
|
||||||
|
unset GIT_DIR; unset GIT_WORK_TREE
|
||||||
|
dir="${1:-.}"
|
||||||
|
[ -d "$dir" ] || die "$dir: répertoire introuvable"
|
||||||
|
setx dir=abspath "$dir"
|
||||||
|
setx repodir=ppath "$dir"
|
||||||
|
cd "$dir"
|
||||||
|
|
||||||
|
git rev-parse 2>/dev/null || die "$repodir: n'est pas un dépôt git"
|
||||||
|
[ -n "$(git config --get annex.uuid)" ] || die "$repodir: n'est pas un dépôt git-annex"
|
||||||
|
cd "$(__vcs_find_root "$dir")"
|
||||||
|
[ -d .git ] || die "$repodir: est un dépôt nu"
|
||||||
|
|
||||||
|
prhook=.git/hooks/post-receive
|
||||||
|
prscript='if [ -n "$GIT_DIR" ]; then cd "$GIT_DIR"; cd ..; unset GIT_DIR; fi
|
||||||
|
git annex merge'
|
||||||
|
puhook=.git/hooks/post-update
|
||||||
|
puscript='git update-server-info'
|
||||||
|
if [ -f "$prhook" ]; then
|
||||||
|
ewarn "Le fichier $prhook existe déjà dans $repodir
|
||||||
|
Vérifiez qu'il contient les commandes suivantes:
|
||||||
|
--------8<--------
|
||||||
|
$prscript
|
||||||
|
--------8<--------"
|
||||||
|
else
|
||||||
|
estep "post-receive"
|
||||||
|
echo "#!/bin/bash
|
||||||
|
$prscript" >"$prhook"
|
||||||
|
chmod +x "$prhook"
|
||||||
|
fi
|
||||||
|
if [ -f "$puhook" ]; then
|
||||||
|
ewarn "Le fichier $puhook existe déjà dans $repodir
|
||||||
|
Vérifiez qu'il contient les commandes suivantes:
|
||||||
|
--------8<--------
|
||||||
|
$puscript
|
||||||
|
--------8<--------"
|
||||||
|
else
|
||||||
|
estep "post-update"
|
||||||
|
echo "#!/bin/bash
|
||||||
|
$puscript" >"$puhook"
|
||||||
|
chmod +x "$puhook"
|
||||||
|
fi
|
||||||
|
|
||||||
elif array_contains PY_CMDS "$CMD"; then
|
elif array_contains PY_CMDS "$CMD"; then
|
||||||
exec "$scriptdir/lib/pywrapper" uproject.py "$CMD" "$@"
|
exec "$scriptdir/lib/pywrapper" uproject.py "$CMD" "$@"
|
||||||
|
|
||||||
|
|
8
utrigger
8
utrigger
|
@ -147,12 +147,8 @@ uspid="$base.uspid"
|
||||||
function __update_pending() {
|
function __update_pending() {
|
||||||
touch "$podata"
|
touch "$podata"
|
||||||
[ "$datafile" == "-" ] && datafile=/dev/stdin
|
[ "$datafile" == "-" ] && datafile=/dev/stdin
|
||||||
if [ -n "$datafile" ]; then
|
[ -n "$datafile" ] && stdredir "$datafile" ">>$podata" "" cat
|
||||||
cat "$datafile" >>"$podata"
|
[ -n "$data" ] && echo "$data" >>"$podata"
|
||||||
fi
|
|
||||||
if [ -n "$data" ]; then
|
|
||||||
echo "$data" >>"$podata"
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function __run_command() { (
|
function __run_command() { (
|
||||||
|
|
Loading…
Reference in New Issue