diff --git a/pff b/pff index 5cbd3e6..64f803c 100755 --- a/pff +++ b/pff @@ -727,8 +727,9 @@ function new_cmd() { if (c == "<") print f >fcreates else if (c == ">") print f >fdeletes }' - cat "$fcreates" "$fdeletes" >"$fcds" - grep -vxf "$fcds" "$flsrc" >"$fupdates" + # contrairement aux fichiers normaux, ajouter le contenu de fdeletes à fupdates + # les fichiers de fdeletes sont des fichiers locaux non identifiés comme tels dans l'origine + { grep -vxf "$fcreates" "$flsrc"; cat "$fdeletes"; } >"$fupdates" array_from_lines creates "$(<"$fcreates")"; [ ${#creates[*]} -gt 0 ] && have_creates=1 || have_creates= array_from_lines updates "$(<"$fupdates")"; [ ${#updates[*]} -gt 0 ] && have_updates=1 || have_updates= enote "Fichiers origines: $((${#creates[*]} + ${#updates[*]})) au total, ${#creates[*]} nouveau(x)" @@ -761,14 +762,24 @@ function new_cmd() { done [ $r == 0 ] || { eend $r; return 1; } for i in "${updates[@]}"; do - src="$srcdir/${losrcs[$i]}" + # du fait qu'on intègre fdeletes dans fupdates, il est possible que + # le fichier n'existe pas dans la source. de plus, l'association + # dans losrcs n'existe pas non plus. dans ce cas, il suffit de + # d'ignorer le fichier + if [ -n "${losrcs[$i]+set}" ]; then + src="$srcdir/${losrcs[$i]}" + else + src="$srcdir/$i" + fi vlfile="${i}__pv-${version}__" dest="$pffdir/pff/Base/$vlfile" - mkdirof "$dest"; r=$? - edot $r "$i"; [ $r == 0 ] || break - cp "$src" "$dest"; r=$? - edot $r "$i"; [ $r == 0 ] || break - array_add vlfiles "$vlfile" + if [ -e "$src" -o -L "$src" ]; then + mkdirof "$dest"; r=$? + edot $r "$i"; [ $r == 0 ] || break + cp "$src" "$dest"; r=$? + edot $r "$i"; [ $r == 0 ] || break + array_add vlfiles "$vlfile" + fi done [ $r == 0 ] || { eend $r; return 1; } eend $r