Intégration de la branche release-7.4.0
This commit is contained in:
		
						commit
						9d8787afae
					
				| @ -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 | ## Version 7.3.0 du 19/10/2017-12:12 | ||||||
| 
 | 
 | ||||||
| * `72d7d15` maj version ulib | * `72d7d15` maj version ulib | ||||||
|  | |||||||
| @ -1 +1 @@ | |||||||
| 7.3.0 | 7.4.0 | ||||||
|  | |||||||
							
								
								
									
										21
									
								
								authftp
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								authftp
									
									
									
									
									
								
							| @ -31,6 +31,8 @@ OPTIONS | |||||||
|     --verify-certificate |     --verify-certificate | ||||||
|         Avec la connexion --tls, forcer la vérification du certificat, qui est |         Avec la connexion --tls, forcer la vérification du certificat, qui est | ||||||
|         désactivée par défaut. |         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 | 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 | automatiquement avec lftp si le mot de passe contient une virgule. A cause de la | ||||||
| @ -47,6 +49,7 @@ lftp= | |||||||
| options=() | options=() | ||||||
| tls= | tls= | ||||||
| verify_certificate=no | verify_certificate=no | ||||||
|  | sftp= | ||||||
| parse_opts "${PRETTYOPTS[@]}" \ | parse_opts "${PRETTYOPTS[@]}" \ | ||||||
|     --help '$exit_with display_help' \ |     --help '$exit_with display_help' \ | ||||||
|     -p,--proxy noproxy= \ |     -p,--proxy noproxy= \ | ||||||
| @ -55,6 +58,7 @@ parse_opts "${PRETTYOPTS[@]}" \ | |||||||
|     -o:,--option: options \ |     -o:,--option: options \ | ||||||
|     --tls tls=1 \ |     --tls tls=1 \ | ||||||
|     --verify-certificate verify_certificate=yes \ |     --verify-certificate verify_certificate=yes \ | ||||||
|  |     --sftp sftp=1 \ | ||||||
|     @ args -- "$@" && set -- "${args[@]}" || die "$args" |     @ args -- "$@" && set -- "${args[@]}" || die "$args" | ||||||
| 
 | 
 | ||||||
| [ -n "$noproxy" -o -n "$AUTHFTP_PROXY_HOST" ] || die "AUTHFTP_PROXY_HOST doit être défini" | [ -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 mot de passe" password "$3" | ||||||
| read_value -i "Entrez le chemin" path "$4" N | 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 "$lftp" ]; then | ||||||
|     if [ -n "$noproxy" ]; then |     if [ -n "$noproxy" ]; then | ||||||
|         exec lftp "${options[@]}" -e "\ |         if [ -n "$sftp" ]; then | ||||||
| set ssl:verify-certificate $verify_certificate |             url="sftp://$host/$path" | ||||||
| open -u $login,$password ftp://$host/$path" |  | ||||||
|         else |         else | ||||||
|  |             url="ftp://$host/$path" | ||||||
|  |         fi | ||||||
|         exec lftp "${options[@]}" -e "\ |         exec lftp "${options[@]}" -e "\ | ||||||
| set ssl:verify-certificate $verify_certificate | set ssl:verify-certificate $verify_certificate | ||||||
| open -u ${login}@${my_login}@${host},${password}@${my_password} ftp://$AUTHFTP_PROXY_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} $url" | ||||||
|     fi |     fi | ||||||
| else | else | ||||||
|     if [ -n "$noproxy" ]; then |     if [ -n "$noproxy" ]; then | ||||||
|  | |||||||
| @ -1229,6 +1229,18 @@ s/[œ]/oe/g | |||||||
| s/[Œ]/OE/g | s/[Œ]/OE/g | ||||||
| s/[æ]/ae/g | s/[æ]/ae/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() { | function _noaccents() { | ||||||
|  | |||||||
							
								
								
									
										45
									
								
								sqlcsv
									
									
									
									
									
								
							
							
						
						
									
										45
									
								
								sqlcsv
									
									
									
									
									
								
							| @ -1050,6 +1050,15 @@ public class sqlcsv { | |||||||
|                     + "\najoutés au CLASSPATH. La présence de certains fichiers est testée pour activer" |                     + "\najoutés au CLASSPATH. La présence de certains fichiers est testée pour activer" | ||||||
|                     + "\néventuellement les logs détaillés." |                     + "\néventuellement les logs détaillés." | ||||||
|                     + "\n\nOPTIONS" |                     + "\n\nOPTIONS" | ||||||
|  |                     + "\n    -J<JARDIR>" | ||||||
|  |                     + "\n    +J<JARDIR>" | ||||||
|  |                     + "\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    -C, --config CONFIG" | ||||||
|                     + "\n        Prendre les informations de connexion depuis le fichier de propriété" |                     + "\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" |                     + "\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        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        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        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        existe. L'option -z permet de démarrer comme si aucun identifiant" | ||||||
|                     + "\n        jamais été enregistré." |                     + "\n        n'avait jamais été enregistré." | ||||||
|                     + "\n    -u, --user USER" |                     + "\n    -u, --user USER" | ||||||
|                     + "\n    -p, --password PASSWORD" |                     + "\n    -p, --password PASSWORD" | ||||||
|                     + "\n        Spécifier un nom de connexion et un mot de passe si l'url ne le fournit" |                     + "\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        requête. Sinon, il est possible de spécifier plusieurs fois cette option" | ||||||
|                     + "\n        pour nommer les fichiers correspondant à chaque requête." |                     + "\n        pour nommer les fichiers correspondant à chaque requête." | ||||||
|                     + "\n    -t, --autocommit" |                     + "\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    -c, --ignore-io-error" | ||||||
|                     + "\n        Continuer le traitement même en cas d'erreur du système de fichiers." |                     + "\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" |                     + "\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; |         int i = 0, max = args.length; | ||||||
|         while (i < max) { |         while (i < max) { | ||||||
|             String arg = args[i]; |             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"); |                 config = getArg(args, ++i, "Vous devez spécifier le fichier de configuration"); | ||||||
|             } else if (arg.equals("-l") || arg.equals("--conn")) { |             } else if (arg.equals("-l") || arg.equals("--conn")) { | ||||||
|                 connid = getArg(args, ++i, "Vous devez spécifier l'identifiant de connexion"); |                 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()) { |                 || new File(SYSTEM_CONFDIR + "/SQL_DEBUG").exists()) { | ||||||
|             DriverManager.setLogWriter(new PrintWriter(System.err)); |             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; |         boolean shouldUpdateClasspath = false; | ||||||
|         ArrayList<URL> urls = new ArrayList<URL>(); |         ArrayList<URL> urls = new ArrayList<URL>(); | ||||||
|  |         if (jardirOption) { | ||||||
|  |             shouldUpdateClasspath |= findJars(new File(jardir), urls); | ||||||
|  |         } | ||||||
|  |         if (!jardirOption || !jardirOnly) { | ||||||
|             shouldUpdateClasspath |= findJars(new File(USER_CONFDIR), urls); |             shouldUpdateClasspath |= findJars(new File(USER_CONFDIR), urls); | ||||||
|             shouldUpdateClasspath |= findJars(new File(SYSTEM_CONFDIR), urls); |             shouldUpdateClasspath |= findJars(new File(SYSTEM_CONFDIR), urls); | ||||||
|  |         } | ||||||
|         if (shouldUpdateClasspath) { |         if (shouldUpdateClasspath) { | ||||||
|             ClassLoader parentLoader = Thread.currentThread().getContextClassLoader(); |             ClassLoader parentLoader = Thread.currentThread().getContextClassLoader(); | ||||||
|             ClassLoader loader = new URLClassLoader(urls.toArray(new URL[0]), parentLoader); |             ClassLoader loader = new URLClassLoader(urls.toArray(new URL[0]), parentLoader); | ||||||
|  | |||||||
							
								
								
									
										16
									
								
								ufile
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								ufile
									
									
									
									
									
								
							| @ -46,7 +46,10 @@ USAGE | |||||||
| OPTIONS | OPTIONS | ||||||
|     -c, --config CONFIG |     -c, --config CONFIG | ||||||
|         Utiliser le fichier de configuration spécifié au lieu de la valeur par |         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 |     --file | ||||||
|         Classer les fichiers spécifiés. C'est l'action par défaut |         Classer les fichiers spécifiés. C'est l'action par défaut | ||||||
|     --force-cp |     --force-cp | ||||||
| @ -61,6 +64,9 @@ OPTIONS | |||||||
|         Toujours utiliser scp pour une copie distante. Par défaut s'il est |         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 |         déterminé que l'hôte distant est en réalité l'hôte courant, alors la | ||||||
|         copie est effectuée directement. |         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 |     -r, --recursive | ||||||
|         Classer récursivement tous les fichiers d'un répertoire. Sans cette |         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. |         option, il n'est pas autorisé de fournir un répertoire comme argument. | ||||||
| @ -120,10 +126,12 @@ function __set_dest() { | |||||||
| args=(% | args=(% | ||||||
|     --help '$exit_with display_help' |     --help '$exit_with display_help' | ||||||
|     -c:,--config: config= |     -c:,--config: config= | ||||||
|  |     -C,--other-configs other_configs=1 | ||||||
|     --file action=file |     --file action=file | ||||||
|     --force-cp force_cp=1 |     --force-cp force_cp=1 | ||||||
|     -S:,--ssh: SSH= |     -S:,--ssh: SSH= | ||||||
|     --force-scp force_scp=1 |     --force-scp force_scp=1 | ||||||
|  |     -f,--force force=1 | ||||||
|     -r,--recursive recursive=1 |     -r,--recursive recursive=1 | ||||||
|     -n,--fake fake=1 |     -n,--fake fake=1 | ||||||
|     -l,--list action=list |     -l,--list action=list | ||||||
| @ -145,10 +153,11 @@ if [ -n "$config" ]; then | |||||||
|     if [ -f "$config" ]; then |     if [ -f "$config" ]; then | ||||||
|         source "$config" || die "$config: erreur lors de la lecture du fichier" |         source "$config" || die "$config: erreur lors de la lecture du fichier" | ||||||
|     fi |     fi | ||||||
|  |     [ -n "$other_configs" ] && conf_load "$HOME/etc/ufile.d/*.conf" | ||||||
| else | else | ||||||
|     set_defaults ufile |     set_defaults ufile | ||||||
| fi |  | ||||||
|     conf_load "$HOME/etc/ufile.d/*.conf" |     conf_load "$HOME/etc/ufile.d/*.conf" | ||||||
|  | fi | ||||||
| 
 | 
 | ||||||
| ## actions particulières | ## actions particulières | ||||||
| 
 | 
 | ||||||
| @ -256,6 +265,7 @@ for file in "${files[@]}"; do | |||||||
| 
 | 
 | ||||||
|         i=1 |         i=1 | ||||||
|         mvi=${#dests[*]} |         mvi=${#dests[*]} | ||||||
|  |         [ -z "$force" ] && mvint=-i || mvint= | ||||||
|         for dest in "${dests[@]}"; do |         for dest in "${dests[@]}"; do | ||||||
|             if [[ "$dest" == *:* ]]; then |             if [[ "$dest" == *:* ]]; then | ||||||
|                 [ "$interaction" == --DEFAULT-- ] && int= || int="$interaction" |                 [ "$interaction" == --DEFAULT-- ] && int= || int="$interaction" | ||||||
| @ -280,7 +290,7 @@ for file in "${files[@]}"; do | |||||||
|                     mvdesc="de la copie" |                     mvdesc="de la copie" | ||||||
|                     mvcmd=cp |                     mvcmd=cp | ||||||
|                 fi |                 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 |             fi | ||||||
|             i=$(($i + 1)) |             i=$(($i + 1)) | ||||||
|         done |         done | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user