Re: ddts-script_0.4.14.deb
On Sat, Feb 09, 2002 at 11:43:40PM +0100, Nicolas Bertolissio wrote:
> Bonjour,
>
> Journal des modification :
> ddts-script (0.4.14) unstable; urgency=low
>
> * fix typo for ppart match due to ddts fix
> * turn `until' loop into `while'
> * prevent from using `me@my.isp.org' sample address
> thanks to Martin Quinson for reporting these bugs
>
> Je ne comprends pas pourquoi la deuxième modification est nécessaire, il
> me semble que ça fait la même chose, si quelqu'un peut m'expliquer...
Le while sort dès que <> rend un truc non defini. On peut le rééecrire en
while (defined($_ = <>))
Ca s'arrete donc immédiatement si le résultat n'est pas défini.
La version en until s'arrete quand $_ concorde avec la chaine vide. Bon,
#UNDEF concorde avec cette chaine, mais c'est tout de meme mal de manipuler
#UNDEF. La preuve, on prend un warning dans les dents.
En fait, j'ai beaucoup de problemes avec le script. Il n'arrive pas à
décoder les morceaux en base64 correctement. Les symptomes, c'est qu'il
prétend qu'il n'y a rien dans le base64, et ne dit rien de plus, meme en
débug 9. Meme en ajoutant un print "Seen $_" brutal la ou la copie se fait
(autour de la ligne 891, qui est celle sur laquelle porte mon patch
précédent), on a rien. Visiblement, l'analyse du base64 s'arrete avant meme
d'avoir commencé. J'ai remplacé le corps de la boucle "Read the mail text"
par ca:
# Read the mail text
while (<>) {
$filename = $1 if (/filename="([^"]*)"/);
if (/Content-Transfer-Encoding: base64/) {
$base64 = 1;
next; # skip the first empty line
}
if (/$boundary/) {
undef $filename;
undef $base64;
next;
}
next unless (defined $base64);
next unless (defined $filename);
next if ($filename =~ /^close-bug/); # skip bug closure
next if /^$/;
$filename =~ s/^new(\..*)?/new/; # new\..* contains descriptions to translate
open FILE, ">$temp_dir/ddts-$filename-$$" || die "Can't create temp file `ddts-$filename-$$': $!";
print FILE "begin-base64 400 $temp_dir/ddts-$filename-$$\n";
while (<>) {
last if /^$/;
print FILE $_;
}
print FILE "====";
close FILE || die "Can't write temp file `ddts-$filename-$$': $!";
&parse_uuencoded("$temp_dir/ddts-$filename-$$", $report_id);
unlink "$temp_dir/ddts-$filename-$$" || die "Can't remove temp file `ddts-$filename-$$': $!";
}
Ce qui change, c'est que maintenant, j'arrive à commencer à lire le bout en
base64, et j'ai bien les fichiers à faire sur mon disque. Mais par contre,
c'est la derniere chose que fait le script. Apres avoir parsé le boulot à
faire, il échoue avec un "ERROR unknown line" tout à fait compréhensible,
puisque la ligne donnée comme inconnue n'est pas faite de caractères
affichables. Alors c'est pas tres grave, puisque je recois le boulot a
faire, mais j'ai pas les bugs attachés (dans le cas d'une traduction à
reprendre de quelqu'un d'autre).
Et pis, j'ai l'impression que j'ai tout cassé dans ton beau script, Nico.
D'ou ma question, est ce que quelqu'un arrive à demander une traduction au
serveur, et à la parser avec le script en ce moment ?
Merci, Mt.
Reply to: