support des filtres avec wildcards
This commit is contained in:
parent
747c563a2b
commit
f7f8889bba
92
pff
92
pff
|
@ -26,10 +26,10 @@ PFFCONFVARS=(
|
|||
"DISTTYPE=auto//Type de distribution upstream: full ou patch"
|
||||
-a
|
||||
"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"
|
||||
"FILTERS//Filtres appliqués aux fichiers lors de l'intégration"
|
||||
"NOMERGES=//Fichiers qu'il ne faut pas chercher à fusionner"
|
||||
"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. Cf la doc pour le détail du format"
|
||||
)
|
||||
|
||||
if [ "$#" -eq 1 -a "$1" == --nutools-makelinks ]; then
|
||||
|
@ -152,6 +152,44 @@ sont:
|
|||
USAGE
|
||||
$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
|
||||
Les arguments du script dépendent de la commande utilisée. Les commandes
|
||||
supportées sont:
|
||||
|
@ -456,6 +494,7 @@ function is_nomerge() {
|
|||
for nomerge in "${NOMERGES[@]}"; do
|
||||
if [[ "$nomerge" == */* ]]; then
|
||||
# matcher sur le chemin relatif
|
||||
nomerge="${nomerge#/}"
|
||||
if eval "[[ $(qval "$rfile") == $(qwc "$nomerge") ]]"; then
|
||||
return 0
|
||||
fi
|
||||
|
@ -572,6 +611,39 @@ function pff_filter_normalize_properties() {
|
|||
return $r
|
||||
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() {
|
||||
# Appliquer les filtres définis au fichier $1 dans le projet pff $2
|
||||
|
@ -580,13 +652,23 @@ function apply_filter() {
|
|||
# produite, 2 si aucun filtre n'existe pour ce fichier
|
||||
local pfile="$1" pffdir="$2"
|
||||
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 file=basename -- "$rfile" # utilisé pour le match sur le nom du fichier
|
||||
for filter in "${FILTERS[@]}"; do
|
||||
splitpair "$filter" ffile filter
|
||||
if [ "$ffile" == "$rfile" ]; then
|
||||
if [[ "$ffile" == */* ]]; then
|
||||
# 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
|
||||
done
|
||||
return $r
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue