Intégration de la branche release-3.5.0

This commit is contained in:
Jephté Clain 2016-02-26 11:35:19 +04:00
commit e00a63ea6b
7 changed files with 1419 additions and 35 deletions

View File

@ -1,3 +1,11 @@
## Version 3.5.0 du 26/02/2016-11:35
4648b3f awkrun: ajout de la fonction qarr()
81e7f9b correction de certains messages affichés
0ea24ec ajout de sqlcsv
ad06535 pu: autoriser fast-forward même en cas de modifications locales
1c397e8 ajout des fonctions awk cqsql(), sval(), cval(). réorganiser et clarifier la doc
## Version 3.4.2 du 10/02/2016-11:45 ## Version 3.4.2 du 10/02/2016-11:45
## Version 3.4.1 du 10/02/2016-11:45 ## Version 3.4.1 du 10/02/2016-11:45

View File

@ -1 +1 @@
3.4.2 3.5.0

View File

@ -1 +1 @@
011002001 011003000

View File

@ -53,10 +53,11 @@ qval(s)
--> 'here, \"there\" and '\\''everywhere'\\''.' --> 'here, \"there\" and '\\''everywhere'\\''.'
L'alias quote_value(s) existe pour compatibilité L'alias quote_value(s) existe pour compatibilité
qsval(s) sqval(s)
comme qval() mais ajouter un espace avant la valeur quotée. ceci permet de comme qval() mais ajouter un espace avant la valeur quotée. ceci permet de
construire facilement une ligne de commande, e.g.: construire facilement une ligne de commande, e.g.:
print \"mycmd\" qsval(arg1) qsval(arg2) print \"mycmd\" sqval(arg1) sqval(arg2)
L'alias qsval(s) existe pour compatibilité
qvals() qvals()
quoter les valeurs \$1..\$NF pour les passer comme argument sur la ligne de quoter les valeurs \$1..\$NF pour les passer comme argument sur la ligne de
@ -65,10 +66,15 @@ qvals()
La ligne qui est affichée pourra être évaluée avec eval dans le shell. La ligne qui est affichée pourra être évaluée avec eval dans le shell.
L'alias quoted_values(s) existe pour compatibilité L'alias quoted_values(s) existe pour compatibilité
qsvals(s) sqvals(s)
comme qvals() mais ajouter un espace avant la valeur quotée. ceci permet de comme qvals() mais ajouter un espace avant la valeur quotée. ceci permet de
construire facilement une ligne de commande, e.g.: construire facilement une ligne de commande, e.g.:
print \"mycmd\" qsvals() print \"mycmd\" sqvals()
L'alias qsvals(s) existe pour compatibilité
qarr(vs)
quoter les valeurs du tableau vs pour le shell, e.g:
print \"values=(\" qarr(values) \")\"
qsubrepl(s) qsubrepl(s)
quoter une valeur pour l'argument r des fonctions sub() et gsub(). Les quoter une valeur pour l'argument r des fonctions sub() et gsub(). Les
@ -87,10 +93,16 @@ qegrep(s)
qsql(s) qsql(s)
quoter une valeur pour un script sql. la valeur est entourée de quotes, e.g: quoter une valeur pour un script sql. la valeur est entourée de quotes, e.g:
quote_sql(\"hello'there\") qsql(\"hello'there\")
--> 'hello''there' --> 'hello''there'
L'alias quote_sql(s) existe pour compatibilité L'alias quote_sql(s) existe pour compatibilité
cqsql(s)
comme qsql() mais ajouter une virgule avant la valeur quotée. ceci permet de
construire facilement une requête SQL, e.g:
print \"insert into t(a, b, c) values (\" qsql(a) cqsql(b) cqsql(c) \");\"
--> insert into t(a, b, c) values ('a', 'b', 'c');
unquote_mysqlcsv(s) unquote_mysqlcsv(s)
Analyser une valeur exportée de MySQL avec mysqlcsv. Les transformations Analyser une valeur exportée de MySQL avec mysqlcsv. Les transformations
suivantes sont effectuées: suivantes sont effectuées:
@ -99,6 +111,16 @@ unquote_mysqlcsv(s)
\\0 --> <caractère NUL> \\0 --> <caractère NUL>
\\\\ --> \\ \\\\ --> \\
sval(s)
retourner la valeur s précédée d'un espace si elle est non vide, e.g:
sval(\"\") --> \"\"
sval(\"any\") --> \" any\"
cval(s)
retourner la valeur s précédée d'une virgule si elle est non vide, e.g:
sval(\"\") --> \"\"
sval(\"any\") --> \",any\"
mkindices(values, indices) mkindices(values, indices)
créer le tableau indices qui contient les indices du tableau values, de 1 à N, créer le tableau indices qui contient les indices du tableau values, de 1 à N,
et retourner la valeur N. Il faudra utiliser les valeurs de cette manière: et retourner la valeur N. Il faudra utiliser les valeurs de cette manière:
@ -115,6 +137,11 @@ array_new(dest)
array_newsize(dest, size) array_newsize(dest, size)
créer un nouveau tableau de taille size, rempli de chaines vides créer un nouveau tableau de taille size, rempli de chaines vides
array_len(src)
calculer la taille d'un tableau. length(array) a un bug sur GNUawk 3.1.5.
cette fonction est plus lente, mais fonctionne sur toutes les versions de
awk et GNUawk
array_copy(dest, src) array_copy(dest, src)
faire une copie d'un tableau. Cette fonction nécessite gnuawk, puisqu'elle faire une copie d'un tableau. Cette fonction nécessite gnuawk, puisqu'elle
utilise mkindices(). utilise mkindices().

View File

@ -1863,7 +1863,6 @@ function qhtml(s) {
gsub(/</, "\\&lt;", s) gsub(/</, "\\&lt;", s)
return s return s
} }
function quote_html(s) { return qhtml(s) }
function unquote_html(s) { function unquote_html(s) {
gsub(/&lt;/, "<", s) gsub(/&lt;/, "<", s)
gsub(/&gt;/, ">", s) gsub(/&gt;/, ">", s)
@ -1875,48 +1874,53 @@ function qval(s) {'"
gsub(/'/, \"'\\\\''\", s) gsub(/'/, \"'\\\\''\", s)
return \"'\" s \"'\" return \"'\" s \"'\"
"'} "'}
function quote_value(s) { return qval(s) } function sqval(s) {
function qsval(s) {
return " " qval(s) return " " qval(s)
} }
function qvals( i, line) { function qvals( i, line) {
line = "" line = ""
for (i = 1; i <= NF; i++) { for (i = 1; i <= NF; i++) {
if (i > 1) line = line " " if (i > 1) line = line " "
line = line quote_value($i) line = line qval($i)
} }
return line return line
} }
function quoted_values() { return qvals() } function sqvals() {
function qsvals() {
return " " qvals() return " " qvals()
} }
function qarr(values, i, count, line) {
line = ""
count = array_len(values)
for (i = 1; i <= count; i++) {
if (i > 1) line = line " "
line = line qval(values[i])
}
return line
}
function qregexp(s) { function qregexp(s) {
gsub(/[[\\.^$*+?()|{]/, "\\\\&", s) gsub(/[[\\.^$*+?()|{]/, "\\\\&", s)
return s return s
} }
function quote_regexp(s) { return qregexp(s) }
function qsubrepl(s) { function qsubrepl(s) {
gsub(/\\/, "\\\\", s) gsub(/\\/, "\\\\", s)
gsub(/&/, "\\\\&", s) gsub(/&/, "\\\\&", s)
return s return s
} }
function quote_subrepl(s) { return qsubrepl(s) }
function qgrep(s) { function qgrep(s) {
gsub(/[[\\.^$*]/, "\\\\&", s) gsub(/[[\\.^$*]/, "\\\\&", s)
return s return s
} }
function quote_grep(s) { return qgrep(s) }
function qegrep(s) { function qegrep(s) {
gsub(/[[\\.^$*+?()|{]/, "\\\\&", s) gsub(/[[\\.^$*+?()|{]/, "\\\\&", s)
return s return s
} }
function quote_egrep(s) { return qegrep(s) }
function qsql(s) {'" function qsql(s) {'"
gsub(/'/, \"''\", s) gsub(/'/, \"''\", s)
return \"'\" s \"'\" return \"'\" s \"'\"
"'} "'}
function quote_sql(s) { return qsql(s) } function cqsql(s) {
return "," qsql(s)
}
function unquote_mysqlcsv(s) { function unquote_mysqlcsv(s) {
gsub(/\\n/, "\n", s) gsub(/\\n/, "\n", s)
gsub(/\\t/, "\t", s) gsub(/\\t/, "\t", s)
@ -1924,6 +1928,25 @@ function unquote_mysqlcsv(s) {
gsub(/\\\\/, "\\", s) gsub(/\\\\/, "\\", s)
return s return s
} }
function sval(s) {
if (s == "") return s
else return " " s
}
function cval(s) {
if (s == "") return s
else return "," s
}
# aliases pour compatibilité
function quote_html(s) { return qhtml(s) }
function quote_value(s) { return qval(s) }
function qsval(s) { return sqval(s) }
function quoted_values() { return qvals() }
function qsvals(s) { return sqvals(s) }
function quote_regexp(s) { return qregexp(s) }
function quote_subrepl(s) { return qsubrepl(s) }
function quote_grep(s) { return qgrep(s) }
function quote_egrep(s) { return qegrep(s) }
function quote_sql(s) { return qsql(s) }
function __parse_date_fr(date, parts, y, m, d) { function __parse_date_fr(date, parts, y, m, d) {
if (match(date, /([0-9][0-9]?)\/([0-9][0-9]?)\/([0-9][0-9][0-9][0-9])/, parts)) { if (match(date, /([0-9][0-9]?)\/([0-9][0-9]?)\/([0-9][0-9][0-9][0-9])/, parts)) {
@ -1970,6 +1993,14 @@ function date_add(date, nbdays, serial) {
return strftime("%d/%m/%Y", serial) return strftime("%d/%m/%Y", serial)
} }
function mkindices(values, indices, i, j) {
array_new(indices)
j = 1
for (i in values) {
indices[j++] = int(i)
}
return asort(indices)
}
function array_new(dest) { function array_new(dest) {
dest[0] = 0 # forcer awk à considérer dest comme un tableau dest[0] = 0 # forcer awk à considérer dest comme un tableau
delete dest delete dest
@ -1991,14 +2022,6 @@ function array_len(values, count, i) {
} }
return count return count
} }
function mkindices(values, indices, i, j) {
array_new(indices)
j = 1
for (i in values) {
indices[j++] = int(i)
}
return asort(indices)
}
function array_copy(dest, src, count, indices, i) { function array_copy(dest, src, count, indices, i) {
array_new(dest) array_new(dest)
count = mkindices(src, indices) count = mkindices(src, indices)

View File

@ -466,16 +466,9 @@ function git_update() {
remote="$(git_get_branch_remote "$branch")" remote="$(git_get_branch_remote "$branch")"
rbranch="$(git_get_branch_rbranch "$branch" "$remote")" rbranch="$(git_get_branch_rbranch "$branch" "$remote")"
pbranch="${rbranch#refs/remotes/}" pbranch="${rbranch#refs/remotes/}"
if [ -z "$remote" -o -z "$rbranch" ]; then if git merge -q --ff-only "$rbranch"; then
echo "Note: there are uncommitted local changes" echo "* There are uncommitted local changes: only CURRENT branch were updated"
return 0
elif git_is_ancestor "$branch" "$rbranch"; then
echo "* Uncommitted changes, unwilling to fast-forward local branch $branch from $pbranch"
else
echo "* Cannot fast-forward local branch $branch from $pbranch"
echo " (and there are uncommitted local changes)"
fi fi
echo "Try to merge manually with: git merge $pbranch"
return 0 return 0
fi fi

1333
sqlcsv Executable file

File diff suppressed because it is too large Load Diff