From ed3de6d6e1f33db0c8e3d349c73445c0a6b7d392 Mon Sep 17 00:00:00 2001 From: Jephte CLAIN Date: Tue, 8 Mar 2016 16:16:40 +0400 Subject: [PATCH 1/6] umail: ajout de l'option --gencmd --- lib/pyulib/src/uapps/umail.py | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/lib/pyulib/src/uapps/umail.py b/lib/pyulib/src/uapps/umail.py index 310554a..23e9452 100755 --- a/lib/pyulib/src/uapps/umail.py +++ b/lib/pyulib/src/uapps/umail.py @@ -27,13 +27,25 @@ OPTIONS Corps du mail. Il est spécifié sur l'entrée standard. -f, --body FILE 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 < Date: Wed, 23 Mar 2016 00:02:07 +0400 Subject: [PATCH 2/6] uproject: ajouter la commande xconfig-export --- uproject | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/uproject b/uproject index 0f97ad7..3276c60 100755 --- a/uproject +++ b/uproject @@ -96,6 +96,11 @@ COMMANDS 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 '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] Afficher le modeline pour un fichier du type spécifié @@ -153,6 +158,7 @@ CMD_ALIASES=( xs:xsync xw:xwhereis xwa:xwebapp + xce:xconfig-export gr:grep ) DEFAULT_CMD=status @@ -293,6 +299,49 @@ elif [ "$CMD" == crone ]; then git clone "$userhost:$path" "$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 exec "$scriptdir/lib/pywrapper" uproject.py "$CMD" "$@" From 1864cdf4dd2e391ed1e5819e82863ca8eb2b35de Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Tue, 5 Apr 2016 12:23:10 +0400 Subject: [PATCH 3/6] =?UTF-8?q?fonctions=20pour=20faciliter=20la=20gestion?= =?UTF-8?q?=20des=20d=C3=A9pendances=20sous=20debian?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ulib/debian | 9 +++++++ lib/ulib/sysinfos | 66 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+) diff --git a/lib/ulib/debian b/lib/ulib/debian index 7f735a6..1e9d06a 100644 --- a/lib/ulib/debian +++ b/lib/ulib/debian @@ -50,6 +50,15 @@ function pkg_installm() { 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 diff --git a/lib/ulib/sysinfos b/lib/ulib/sysinfos index 5c8d1e2..99cd0ea 100644 --- a/lib/ulib/sysinfos +++ b/lib/ulib/sysinfos @@ -479,3 +479,69 @@ function check_sysinfos() { done 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 +} From ba969e3788c198a440f2474c9f2e981bbb9dce4d Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Wed, 6 Apr 2016 14:24:53 +0400 Subject: [PATCH 4/6] =?UTF-8?q?ajout=20de=20stdredir=20pour=20pallier=20l'?= =?UTF-8?q?absence=20=C3=A9ventuelle=20de=20/dev/std*?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ulib/awk | 4 ++-- lib/ulib/base | 47 +++++++++++++++++++++++++++++++++++++++++++++++ utrigger | 8 ++------ 3 files changed, 51 insertions(+), 8 deletions(-) diff --git a/lib/ulib/awk b/lib/ulib/awk index d224539..8684a64 100644 --- a/lib/ulib/awk +++ b/lib/ulib/awk @@ -1731,7 +1731,7 @@ parse_headers && do_once("parse-headers") { # résultat [ -n "$output" ] || output=/dev/stdout - <"$tmpsorted" >"$output" awkrun -f \ + stdredir "$tmpsorted" "$output" "" awkrun -f \ padlen:int="$padlen" \ headerscsv="$headers" show_headers:int="$show_headers" \ ' @@ -1916,7 +1916,7 @@ function lprintcsv() { [ -n "$output" ] || output=/dev/stdout values=("$@") - awkrun -f >>"$output" fields[@] show_headers:int="$show_headers" values[@] ' + stdredir "" ">>$output" "" awkrun -f fields[@] show_headers:int="$show_headers" values[@] ' BEGIN { if (show_headers) array_printcsv(fields) if (fields_count > 0) count = fields_count diff --git a/lib/ulib/base b/lib/ulib/base index f7aeef3..2e2571f 100644 --- a/lib/ulib/base +++ b/lib/ulib/base @@ -2742,6 +2742,53 @@ function utools_local() { 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() { # tester si STDOUT n'est pas une redirection tty -s <&1 diff --git a/utrigger b/utrigger index 6b83fad..490cf60 100755 --- a/utrigger +++ b/utrigger @@ -147,12 +147,8 @@ uspid="$base.uspid" function __update_pending() { touch "$podata" [ "$datafile" == "-" ] && datafile=/dev/stdin - if [ -n "$datafile" ]; then - cat "$datafile" >>"$podata" - fi - if [ -n "$data" ]; then - echo "$data" >>"$podata" - fi + [ -n "$datafile" ] && stdredir "$datafile" ">>$podata" "" cat + [ -n "$data" ] && echo "$data" >>"$podata" } function __run_command() { ( From e120fa6f8fca8661db14d4a7bdabe35fc4db22fe Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Wed, 6 Apr 2016 14:25:18 +0400 Subject: [PATCH 5/6] Init changelog & version 4.2.0 --- CHANGES.txt | 9 +++++++++ VERSION.txt | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index 304ba3c..69426d4 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -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 0bd2b1f correction de bugs avec apacheconfig diff --git a/VERSION.txt b/VERSION.txt index 627a3f4..6aba2b2 100644 --- a/VERSION.txt +++ b/VERSION.txt @@ -1 +1 @@ -4.1.1 +4.2.0 From 2df5603ba343a1c1be868455d644ac825b2599da Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Wed, 6 Apr 2016 14:25:41 +0400 Subject: [PATCH 6/6] maj ulib --- lib/ulib/.ulibver | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ulib/.ulibver b/lib/ulib/.ulibver index dcf5bb7..79e5135 100644 --- a/lib/ulib/.ulibver +++ b/lib/ulib/.ulibver @@ -1 +1 @@ -012000001 +012001000