From 4f11cc40d69340b6cd5e8dfcf7ebb08c3fe56c2e Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Sat, 28 Oct 2017 11:25:11 +0400 Subject: [PATCH 1/6] =?UTF-8?q?ufile:=20possibilit=C3=A9=20d'=C3=A9craser?= =?UTF-8?q?=20les=20fichiers=20sans=20confirmation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ufile | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/ufile b/ufile index 22f9dda..e8b0dbc 100755 --- a/ufile +++ b/ufile @@ -61,6 +61,9 @@ OPTIONS Toujours utiliser scp pour une copie distante. Par défaut s'il est déterminé que l'hôte distant est en réalité l'hôte courant, alors la copie est effectuée directement. + -f, --force + Si le fichier destination existe, alors l'écraser sans confirmation. + Cette option est ignorée pour un classement distant. -r, --recursive Classer récursivement tous les fichiers d'un répertoire. Sans cette option, il n'est pas autorisé de fournir un répertoire comme argument. @@ -124,6 +127,7 @@ args=(% --force-cp force_cp=1 -S:,--ssh: SSH= --force-scp force_scp=1 + -f,--force force=1 -r,--recursive recursive=1 -n,--fake fake=1 -l,--list action=list @@ -256,6 +260,7 @@ for file in "${files[@]}"; do i=1 mvi=${#dests[*]} + [ -z "$force" ] && mvint=-i || mvint= for dest in "${dests[@]}"; do if [[ "$dest" == *:* ]]; then [ "$interaction" == --DEFAULT-- ] && int= || int="$interaction" @@ -280,7 +285,7 @@ for file in "${files[@]}"; do mvdesc="de la copie" mvcmd=cp fi - docmd "$mvcmd" -i "$file" "$dest" || die "problème lors $mvdesc du fichier" + docmd "$mvcmd" $mvint "$file" "$dest" || die "problème lors $mvdesc du fichier" fi i=$(($i + 1)) done From 4f520db786749bf3289096a8c97339d742db8d63 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Mon, 13 Nov 2017 11:21:17 +0400 Subject: [PATCH 2/6] =?UTF-8?q?authftp:=20support=20pr=C3=A9liminaire=20de?= =?UTF-8?q?=20--sftp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- authftp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/authftp b/authftp index d7e8fe6..abba8a6 100755 --- a/authftp +++ b/authftp @@ -31,6 +31,8 @@ OPTIONS --verify-certificate Avec la connexion --tls, forcer la vérification du certificat, qui est désactivée par défaut. + --sftp + Indiquer que la connexion se fait via SFTP. Implique --lftp --noproxy note: A cause d'une limitation de lftp, ce n'est pas possible de se connecter automatiquement avec lftp si le mot de passe contient une virgule. A cause de la @@ -47,6 +49,7 @@ lftp= options=() tls= verify_certificate=no +sftp= parse_opts "${PRETTYOPTS[@]}" \ --help '$exit_with display_help' \ -p,--proxy noproxy= \ @@ -55,6 +58,7 @@ parse_opts "${PRETTYOPTS[@]}" \ -o:,--option: options \ --tls tls=1 \ --verify-certificate verify_certificate=yes \ + --sftp sftp=1 \ @ args -- "$@" && set -- "${args[@]}" || die "$args" [ -n "$noproxy" -o -n "$AUTHFTP_PROXY_HOST" ] || die "AUTHFTP_PROXY_HOST doit être défini" @@ -67,17 +71,24 @@ read_value -i "Entrez l'identifiant de connexion" login "$2" read_value -i "Entrez le mot de passe" password "$3" read_value -i "Entrez le chemin" path "$4" N -[ -n "$tls" ] && lftp=1 +[ -n "$tls" -o -n "$sftp" ] && lftp=1 +[ -n "$sftp" ] && noproxy=1 if [ -n "$lftp" ]; then if [ -n "$noproxy" ]; then + if [ -n "$sftp" ]; then + url="sftp://$host/$path" + else + url="ftp://$host/$path" + fi exec lftp "${options[@]}" -e "\ set ssl:verify-certificate $verify_certificate -open -u $login,$password ftp://$host/$path" +open -u $login,$password $url" else + url="ftp://$AUTHFTP_PROXY_HOST/$path" exec lftp "${options[@]}" -e "\ set ssl:verify-certificate $verify_certificate -open -u ${login}@${my_login}@${host},${password}@${my_password} ftp://$AUTHFTP_PROXY_HOST/$path" +open -u ${login}@${my_login}@${host},${password}@${my_password} $url" fi else if [ -n "$noproxy" ]; then From 0b595837ba2493e81d1cb40e37f2afd37aee1d49 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Mon, 13 Nov 2017 12:05:12 +0400 Subject: [PATCH 3/6] support de quelques combinaisons de diacritiques --- lib/ulib/base | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/lib/ulib/base b/lib/ulib/base index 63e97d1..72ac651 100644 --- a/lib/ulib/base +++ b/lib/ulib/base @@ -1229,6 +1229,18 @@ s/[œ]/oe/g s/[Œ]/OE/g s/[æ]/ae/g s/[Æ]/AE/g +s/a\xCC\x80/à/g +s/e\xCC\x81/é/g; s/e\xCC\x80/è/g; s/e\xCC\x82/ê/g; s/e\xCC\x88/ë/g +s/i\xCC\x88/ï/g; s/i\xCC\x82/î/g +s/o\xCC\x82/ô/g; s/o\xCC\x88/ö/g +s/u\xCC\x88/ü/g; s/u\xCC\x82/û/g +s/c\xCC\xA7/ç/g +s/A\xCC\x80/À/g +s/E\xCC\x81/É/g; s/E\xCC\x80/È/g; s/E\xCC\x82/Ê/g; s/E\xCC\x88/Ë/g +s/I\xCC\x88/Ï/g; s/I\xCC\x82/Î/g +s/O\xCC\x82/Ô/g; s/O\xCC\x88/Ö/g +s/U\xCC\x88/Ü/g; s/U\xCC\x82/Û/g +s/C\xCC\xA7/Ç/g ' } function _noaccents() { From a7e62286697bf252cc8f1a6304047d3fb6db3149 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Sun, 17 Dec 2017 11:46:58 +0400 Subject: [PATCH 4/6] =?UTF-8?q?ufile:=20par=20d=C3=A9faut=20-c=20ne=20char?= =?UTF-8?q?ge=20que=20le=20fichier=20sp=C3=A9cifi=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ufile | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/ufile b/ufile index e8b0dbc..0146819 100755 --- a/ufile +++ b/ufile @@ -46,7 +46,10 @@ USAGE OPTIONS -c, --config CONFIG Utiliser le fichier de configuration spécifié au lieu de la valeur par - défaut ~/etc/default/ufile + défaut ~/etc/default/ufile et ~/etc/ufile.d/*.conf + -C, --other-configs + Charger les fichiers ~/etc/ufile.d/*.conf en plus du fichier spécifié + avec --config. Cette option est ignorée si --config n'est pas utilisé. --file Classer les fichiers spécifiés. C'est l'action par défaut --force-cp @@ -123,6 +126,7 @@ function __set_dest() { args=(% --help '$exit_with display_help' -c:,--config: config= + -C,--other-configs other_configs=1 --file action=file --force-cp force_cp=1 -S:,--ssh: SSH= @@ -149,10 +153,11 @@ if [ -n "$config" ]; then if [ -f "$config" ]; then source "$config" || die "$config: erreur lors de la lecture du fichier" fi + [ -n "$other_configs" ] && conf_load "$HOME/etc/ufile.d/*.conf" else set_defaults ufile + conf_load "$HOME/etc/ufile.d/*.conf" fi -conf_load "$HOME/etc/ufile.d/*.conf" ## actions particulières From 48e43599b83f1eb005f04ab389562cea24e3c387 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Wed, 20 Dec 2017 19:01:10 +0400 Subject: [PATCH 5/6] =?UTF-8?q?sqlcsv:=20possibilit=C3=A9=20de=20sp=C3=A9c?= =?UTF-8?q?ifier=20le=20chemin=20de=20chargement=20des=20drivers=20jdbc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sqlcsv | 49 +++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 43 insertions(+), 6 deletions(-) diff --git a/sqlcsv b/sqlcsv index 91e080c..7af00e4 100755 --- a/sqlcsv +++ b/sqlcsv @@ -1050,6 +1050,15 @@ public class sqlcsv { + "\najoutés au CLASSPATH. La présence de certains fichiers est testée pour activer" + "\néventuellement les logs détaillés." + "\n\nOPTIONS" + + "\n -J" + + "\n +J" + + "\n Spécifier un répertoire de chargement des drivers JDBC." + + "\n Avec l'option -J, le répertoire spécifié est ajouté aux répertoires de" + + "\n configuration par défaut ~/.sqlcsv et /etc/sqlcsv. Avec la variante +J," + + "\n seul le répertoire spécifié est analysé." + + "\n Cette option *doit* être spécifiée en premier et il ne doit pas y avoir" + + "\n d'espace entre l'option et son argument." + + "\n" + "\n -C, --config CONFIG" + "\n Prendre les informations de connexion depuis le fichier de propriété" + "\n spécifié. Pour l'identifiant CONN, la propriété 'CONN.url' doit exister" @@ -1071,8 +1080,8 @@ public class sqlcsv { + "\n Si -C n'est pas spécifié et que -l est spécifié, alors l'identifiant de" + "\n connexion est enregistré dans les préférences utilisateur. Si ni -C" + "\n ni -l ne sont spécifiés, alors le dernier identifiant est utilisé s'il" - + "\n existe. L'option -z permet de démarrer comme si aucun identifiant n'avait" - + "\n jamais été enregistré." + + "\n existe. L'option -z permet de démarrer comme si aucun identifiant" + + "\n n'avait jamais été enregistré." + "\n -u, --user USER" + "\n -p, --password PASSWORD" + "\n Spécifier un nom de connexion et un mot de passe si l'url ne le fournit" @@ -1091,7 +1100,7 @@ public class sqlcsv { + "\n requête. Sinon, il est possible de spécifier plusieurs fois cette option" + "\n pour nommer les fichiers correspondant à chaque requête." + "\n -t, --autocommit" - + "\n Activer le mode autocommit" + + "\n Activer le mode autocommit. Par défaut, le mode autocommit n'est pas activé" + "\n -c, --ignore-io-error" + "\n Continuer le traitement même en cas d'erreur du système de fichiers." + "\n Cependant le traitement s'arrête et la transaction est annulée si une" @@ -1146,7 +1155,9 @@ public class sqlcsv { int i = 0, max = args.length; while (i < max) { String arg = args[i]; - if (arg.equals("-C") || arg.equals("--config")) { + if (arg.substring(0, 2).equals("-J") || arg.substring(0, 2).equals("+J")) { + die("L'option -J doit être spécifiée en premier", null); + } else if (arg.equals("-C") || arg.equals("--config")) { config = getArg(args, ++i, "Vous devez spécifier le fichier de configuration"); } else if (arg.equals("-l") || arg.equals("--conn")) { connid = getArg(args, ++i, "Vous devez spécifier l'identifiant de connexion"); @@ -1387,10 +1398,36 @@ public class sqlcsv { || new File(SYSTEM_CONFDIR + "/SQL_DEBUG").exists()) { DriverManager.setLogWriter(new PrintWriter(System.err)); } + boolean jardirOption = false; + String jardir = null; + boolean jardirOnly = false; + if (args.length > 0) { + String firstOption = args[0].substring(0, 2); + if (firstOption.equals("-J")) { + jardirOption = true; + jardir = args[0].substring(2); + jardirOnly = false; + } else if (firstOption.equals("+J")) { + jardirOption = true; + jardir = args[0].substring(2); + jardirOnly = true; + } + if (jardirOption) { + if (jardir.length() == 0) die("L'option -J doit avoir un argument", null); + String[] newArgs = new String[args.length - 1]; + System.arraycopy(args, 1, newArgs, 0, newArgs.length); + args = newArgs; + } + } boolean shouldUpdateClasspath = false; ArrayList urls = new ArrayList(); - shouldUpdateClasspath |= findJars(new File(USER_CONFDIR), urls); - shouldUpdateClasspath |= findJars(new File(SYSTEM_CONFDIR), urls); + if (jardirOption) { + shouldUpdateClasspath |= findJars(new File(jardir), urls); + } + if (!jardirOption || !jardirOnly) { + shouldUpdateClasspath |= findJars(new File(USER_CONFDIR), urls); + shouldUpdateClasspath |= findJars(new File(SYSTEM_CONFDIR), urls); + } if (shouldUpdateClasspath) { ClassLoader parentLoader = Thread.currentThread().getContextClassLoader(); ClassLoader loader = new URLClassLoader(urls.toArray(new URL[0]), parentLoader); From b40388f3a5672e1a969cad34c5975c72fa24e812 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Wed, 20 Dec 2017 19:01:55 +0400 Subject: [PATCH 6/6] Init changelog & version 7.4.0 --- CHANGES.md | 8 ++++++++ VERSION.txt | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index dc9a708..638069c 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,11 @@ +## Version 7.4.0 du 20/12/2017-19:01 + +* `48e4359` sqlcsv: possibilité de spécifier le chemin de chargement des drivers jdbc +* `a7e6228` ufile: par défaut -c ne charge que le fichier spécifié +* `0b59583` support de quelques combinaisons de diacritiques +* `4f520db` authftp: support préliminaire de --sftp +* `4f11cc4` ufile: possibilité d'écraser les fichiers sans confirmation + ## Version 7.3.0 du 19/10/2017-12:12 * `72d7d15` maj version ulib diff --git a/VERSION.txt b/VERSION.txt index 1502020..ba7f754 100644 --- a/VERSION.txt +++ b/VERSION.txt @@ -1 +1 @@ -7.3.0 +7.4.0