support des filtres avec wildcards
This commit is contained in:
parent
747c563a2b
commit
f7f8889bba
94
pff
94
pff
|
@ -26,10 +26,10 @@ PFFCONFVARS=(
|
||||||
"DISTTYPE=auto//Type de distribution upstream: full ou patch"
|
"DISTTYPE=auto//Type de distribution upstream: full ou patch"
|
||||||
-a
|
-a
|
||||||
"ORIGEXTS=//Extensions origines"
|
"ORIGEXTS=//Extensions origines"
|
||||||
"PROTECTS=//Fichiers locaux à protéger lors de l'intégration e.g /dir/, /file, etc."
|
"PROTECTS=//Fichiers locaux à protéger lors de l'intégration au format rsync e.g /dir/, /file, etc."
|
||||||
"MKDIRS//Répertoires qui doivent toujours exister"
|
"MKDIRS//Répertoires qui doivent toujours exister"
|
||||||
"FILTERS//Filtres appliqués aux fichiers lors de l'intégration"
|
"FILTERS//Filtres appliqués aux fichiers lors de l'intégration, de la forme 'filespec:filter'. Cf la doc pour le détail du format"
|
||||||
"NOMERGES=//Fichiers qu'il ne faut pas chercher à fusionner"
|
"NOMERGES=//Fichiers qu'il ne faut pas chercher à fusionner. Cf la doc pour le détail du format"
|
||||||
)
|
)
|
||||||
|
|
||||||
if [ "$#" -eq 1 -a "$1" == --nutools-makelinks ]; then
|
if [ "$#" -eq 1 -a "$1" == --nutools-makelinks ]; then
|
||||||
|
@ -152,6 +152,44 @@ sont:
|
||||||
USAGE
|
USAGE
|
||||||
$scriptname [options]
|
$scriptname [options]
|
||||||
|
|
||||||
|
CONFIGURATION
|
||||||
|
Le fichier $PFFCONF contient des variables qui conditionnent le comportement de
|
||||||
|
pff:
|
||||||
|
|
||||||
|
PROTECTS -- liste de spécifications de fichiers ou de répertoires à protéger
|
||||||
|
lors de l'intégration. Ces spécifications sont au format rsync, e.g
|
||||||
|
/dir/, /file, etc.
|
||||||
|
|
||||||
|
FILTERS -- liste de définitions de filtres à appliquer aux fichiers lors de
|
||||||
|
l'intégration. ces spécifications sont de la forme 'filespec:filter'.
|
||||||
|
Les spécifications de fichier peuvent contenir des wildcards et sont de
|
||||||
|
deux sortes:
|
||||||
|
- sans chemin, e.g 'myfile' ou '*.c', tous les fichiers de ce nom
|
||||||
|
correspondent
|
||||||
|
- avec un chemin, e.g '/myfile', 'path/to/*.jsp', la correspondance est
|
||||||
|
cherchée relativement au répertoire du projet. ainsi '/*.c' ne matche
|
||||||
|
que les fichiers ayant l'extension .c situés dans le répertoire du
|
||||||
|
projet
|
||||||
|
Les filtres disponibles sont:
|
||||||
|
nl2lf -- forcer le caractère de fin de ligne à LF
|
||||||
|
nl2crlf -- forcer le caractère de fin de ligne à CR+LF
|
||||||
|
nl2cr -- forcer le caractère de fin de ligne à CR
|
||||||
|
normalize_properties -- normaliser fichier de propriétés java
|
||||||
|
Il est possible de créer de nouveaux filtres en définissant des
|
||||||
|
fonctions de la forme pff_filter_NAME(). Ces fonctions, si elles sont
|
||||||
|
appelées sans argument, doivent filtrer l'entrée standard. Si un
|
||||||
|
argument est spécifié, il faut filtrer ce fichier-là.
|
||||||
|
|
||||||
|
NOMERGES -- liste de spécifications de fichiers qu'il ne faut pas chercher à
|
||||||
|
fusionner. Les spécifications de fichier peuvent contenir des wildcards
|
||||||
|
et sont de deux sortes:
|
||||||
|
- sans chemin, e.g 'myfile' ou '*.c', tous les fichiers de ce nom
|
||||||
|
correspondent
|
||||||
|
- avec un chemin, e.g '/myfile', 'path/to/*.jsp', la correspondance est
|
||||||
|
cherchée relativement au répertoire du projet. ainsi '/*.c' ne matche
|
||||||
|
que les fichiers ayant l'extension .c situés dans le répertoire du
|
||||||
|
projet
|
||||||
|
|
||||||
COMMANDES / OPTIONS
|
COMMANDES / OPTIONS
|
||||||
Les arguments du script dépendent de la commande utilisée. Les commandes
|
Les arguments du script dépendent de la commande utilisée. Les commandes
|
||||||
supportées sont:
|
supportées sont:
|
||||||
|
@ -456,6 +494,7 @@ function is_nomerge() {
|
||||||
for nomerge in "${NOMERGES[@]}"; do
|
for nomerge in "${NOMERGES[@]}"; do
|
||||||
if [[ "$nomerge" == */* ]]; then
|
if [[ "$nomerge" == */* ]]; then
|
||||||
# matcher sur le chemin relatif
|
# matcher sur le chemin relatif
|
||||||
|
nomerge="${nomerge#/}"
|
||||||
if eval "[[ $(qval "$rfile") == $(qwc "$nomerge") ]]"; then
|
if eval "[[ $(qval "$rfile") == $(qwc "$nomerge") ]]"; then
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
@ -572,6 +611,39 @@ function pff_filter_normalize_properties() {
|
||||||
return $r
|
return $r
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
function pff_filter_nl2lf() {
|
||||||
|
if [ $# -eq 0 ]; then
|
||||||
|
_nl2lf
|
||||||
|
else
|
||||||
|
local mode r
|
||||||
|
mode="$(fix_mode "$1")"
|
||||||
|
doinplace "$1" _nl2lf; r=$?
|
||||||
|
unfix_mode "$1" "$mode"
|
||||||
|
return $r
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
function pff_filter_nl2crlf() {
|
||||||
|
if [ $# -eq 0 ]; then
|
||||||
|
_nl2crlf
|
||||||
|
else
|
||||||
|
local mode r
|
||||||
|
mode="$(fix_mode "$1")"
|
||||||
|
doinplace "$1" _nl2crlf; r=$?
|
||||||
|
unfix_mode "$1" "$mode"
|
||||||
|
return $r
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
function pff_filter_nl2cr() {
|
||||||
|
if [ $# -eq 0 ]; then
|
||||||
|
_nl2cr
|
||||||
|
else
|
||||||
|
local mode r
|
||||||
|
mode="$(fix_mode "$1")"
|
||||||
|
doinplace "$1" _nl2cr; r=$?
|
||||||
|
unfix_mode "$1" "$mode"
|
||||||
|
return $r
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
function apply_filter() {
|
function apply_filter() {
|
||||||
# Appliquer les filtres définis au fichier $1 dans le projet pff $2
|
# Appliquer les filtres définis au fichier $1 dans le projet pff $2
|
||||||
|
@ -580,12 +652,22 @@ function apply_filter() {
|
||||||
# produite, 2 si aucun filtre n'existe pour ce fichier
|
# produite, 2 si aucun filtre n'existe pour ce fichier
|
||||||
local pfile="$1" pffdir="$2"
|
local pfile="$1" pffdir="$2"
|
||||||
local realfile="${3:-$pfile}"
|
local realfile="${3:-$pfile}"
|
||||||
local rfile ffile filter r=2
|
local rfile ffile filter r=2 filedir filespec
|
||||||
setx rfile=get_rfile "$realfile" "$pffdir"
|
setx rfile=get_rfile "$realfile" "$pffdir"
|
||||||
|
setx file=basename -- "$rfile" # utilisé pour le match sur le nom du fichier
|
||||||
for filter in "${FILTERS[@]}"; do
|
for filter in "${FILTERS[@]}"; do
|
||||||
splitpair "$filter" ffile filter
|
splitpair "$filter" ffile filter
|
||||||
if [ "$ffile" == "$rfile" ]; then
|
if [[ "$ffile" == */* ]]; then
|
||||||
"pff_filter_$filter" "$pfile" && r=0 || r=1
|
# matcher sur le chemin relatif
|
||||||
|
ffile="${ffile#/}"
|
||||||
|
if eval "[[ $(qval "$rfile") == $(qwc "$ffile") ]]"; then
|
||||||
|
"pff_filter_$filter" "$pfile" && r=0 || r=1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# matcher uniquement sur le nom du fichier
|
||||||
|
if eval "[[ $(qval "$file") == $(qwc "$ffile") ]]"; then
|
||||||
|
"pff_filter_$filter" "$pfile" && r=0 || r=1
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
return $r
|
return $r
|
||||||
|
|
Loading…
Reference in New Issue