Intégration de la branche release-3.5.0
This commit is contained in:
commit
e00a63ea6b
|
@ -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
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
3.4.2
|
3.5.0
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
011002001
|
011003000
|
||||||
|
|
37
lib/ulib/awk
37
lib/ulib/awk
|
@ -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().
|
||||||
|
|
|
@ -1863,7 +1863,6 @@ function qhtml(s) {
|
||||||
gsub(/</, "\\<", s)
|
gsub(/</, "\\<", s)
|
||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
function quote_html(s) { return qhtml(s) }
|
|
||||||
function unquote_html(s) {
|
function unquote_html(s) {
|
||||||
gsub(/</, "<", s)
|
gsub(/</, "<", s)
|
||||||
gsub(/>/, ">", s)
|
gsub(/>/, ">", 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)
|
||||||
|
|
11
lib/ulib/vcs
11
lib/ulib/vcs
|
@ -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
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue