[ddr] vrac
Bonjour,
Bon d'accord, c'est un peu particulier comme documents à relire, mais
bon, si quelques uns d'entre vous pouvaient me relire ça, ce serait
sympa.
Même que normalement, ça marche avec « deb-rev »
Dans les deux diff, il ne faut regarder que les lignes commençant par
« + », qui sont celles que j'ajoute/modifie.
Dans le module, il y a tout à regarder, en particulier : « ; » en fin de
ligne, disclavie dans le nom des variables, toutes les fautes
habituelles quoi...
Comment ça marche ?
Pour les diff :
- Si le ddts reçoit un message dont l'objet contient « REVIEW », il va
chercher quand la procédure qui-va-bien ;
- Quand il reçoit une mise à jour de description du traducteur, il faut
la renvoyer aux relecteurs enregistrés ;
- Quand il reçoit une mise à jour de description de quelqu'un d'autre,
qui n'a pas de différence avec celle du traducteur, on incrémente le
compteur de traduction approuvée.
Pour mon module :
Les commentaires devraient suffir, sinon dites-le moi.
a+
Nicolas
--- bin/add_to_db.new Thu Oct 4 07:46:08 2001
+++ add_to_db.new Fri Oct 5 19:15:36 2001
@@ -3,6 +3,7 @@
use strict;
#use diagnostics;
use dt_db;
+use review.pm;
use MIME::Parser;
use MIME::Entity;
use Digest::MD5 qw(md5_hex);
@@ -440,6 +441,25 @@
$new_file="$my_tmpdir/new";
unlink "$new_file";
&get_some_untrans($anzahl,$new_file,$lang_postfix,$from,$section);
+ } elsif ($subject =~ /REVIEW/i) {
+ $anzahl = 1 ;
+ print "DEBUG found REVIEW \n" ;
+ (-$anzahl,$lang_postfix) = ($subject =~ /REVIEW +([0-9]+) +([a-zA-Z_]+)/i);
+ if (not ($lang_postfix =~ /^[a-z][a-z](_[A-Z][A-Z])?$/)) {
+ $lang_postfix="";
+ $anzahl=0;
+ $status_text .= "lang_postfix not found! set count to 0\n";
+ };
+ print "DEBUG anzahl=$anzahl\n" ;
+ print "DEBUG lang_postfix=$lang_postfix\n" ;
+
+ if (($lang_postfix ne "") && ($count>0)) { # if lang postfix is valid and count>0
+ $new_file="$my_tmpdir/newreview"; # create new filename
+ unlink "$new_file"; # delete it if it already exists
+ &get_some_unreviewed($anzahl, $new_file, $lang_postfix, $from) ;
+ # call sub to build the mail
+ }
+ $anzahl=-$anzahl; # negative for review
}
if ($subject =~ /STATUS/i) {
$add_status=1;
@@ -552,8 +572,10 @@
Encoding => "quoted-printable";;
}
}
- if ($add_status >0) { $status_text .= "send STATUS $lang_postfix\n";};
+ if ($add_status != 0) { $status_text .= "send STATUS $lang_postfix\n";};
if ($anzahl >0) { $status_text .= "get untranslated descriptions: $anzahl $lang_postfix\n";};
+ if ($anzahl <0) { $status_text .= "get descriptions for review: ".-$anzahl." $lang_postfix\n";};
+ # status_text stuff for review
$status_text .= "End Status text\n";
print STATUS_TEXT $status_text;
close STATUS_TEXT or die "status_text failed";
@@ -570,7 +592,7 @@
# Part #4:
#print "DEBUG mail from: $my_tmpdir/new\n";
#print "DEBUG mail from: new_file=$new_file\n";
- if ($anzahl > 0) {
+ if ($anzahl != 0) {
if ( -e "$new_file") {
attach $top Path => "$new_file",
Type => "application/debian-dt",
--- bin/dt_db.pm Thu Oct 4 08:42:09 2001
+++ dt_db.pm Fri Oct 5 18:05:15 2001
@@ -1,6 +1,7 @@
package dt_db;
use low_db;
+use review;
use strict;
#use diagnostics;
@@ -105,6 +106,7 @@
my $description_trans= shift(@_);
my $lang_postfix= shift(@_);
+ my $key; # for easy reading with review module
my $md5sum_description;
my $md5sum_description_trans;
my $package="";
@@ -124,7 +126,7 @@
print "DEBUG add_description_to_db: from_address=$from_address, lang_postfix=$lang_postfix\n";
- $md5sum_description=md5_hex($description);
+ $key=$md5sum_description=md5_hex($description); # hash key
$md5sum_description_trans=md5_hex($description_trans);
print "DEBUG add_description_to_db: md5sum_description=$md5sum_description \n";
@@ -160,6 +162,7 @@
$status_text .= " add description to (new) db: @packagelist\n";
add_value_to_db("$db_base/desc_from-$lang_postfix.db","$md5sum_description","$from_address");
add_value_to_db("$db_base/desc-$lang_postfix.db","$md5sum_description","$description_trans");
+ &resend_to_reviewers($key, $lang_postfix); # resend description to reviewers so they review the good one
unlink ("$update_html_base/$md5sum_description-$lang_postfix.txt");
open (SAVEI10LMAIL,">>$basedir/l10n-mails/$lang_postfix.txt");
print SAVEI10LMAIL "$from_address";
@@ -246,6 +249,7 @@
if ($description_trans eq $return_db) {
print "DEBUG translation is unchanged \n";
$status_text .= " and the translation is unchanged\n";
+ &check_if_reviewed($key, $from_address, $lang_postfix); # check if review process is finished
} else {
$status_text .= " and not changed in the db!\n";
$status_text .= " because you are not the 'owner'!\n";
package review;
use low_db;
use strict;
use Exporter;
$VERSION=1.00;
@ISA=qw(Exporter);
@EXPORT =qw(resend_to_reviewers
check_if_reviewed
get_unreviewed_files_from_db
get_some_unreviewed_from_db
);
use MIME::Parser;
use MIME::Entity;
use Digest::MD5 qw(md5_hex);
$basedir="/home/grisu/description_translation_new/";
$db_base="$basedir/db";
$filelistdir="$basedir/fileslists/";
my $bts_html_base="$basedir/bts_html/";
my $update_html_base="$basedir/update_html/";
$tmpdir="$basedir/tmp/";
$bindir="$basedir/bin/";
$charset{'de'}="ISO-8859-1";
$charset{'da'}="ISO-8859-1";
$charset{'fr'}="ISO-8859-1";
$charset{'it'}="ISO-8859-1";
$charset{'nl'}="ISO-8859-1";
$charset{'pl'}="ISO-8859-2";
$charset{'hu'}="ISO-8859-2";
$charset{'pt_BR'}="ISO-5589-1";
$charset{'sk'}="ISO-8859-2";
$charset{'sv_SE'}="ISO-8859-1";
$charset{'ja'}="euc-jp";
$charset{'jp'}="euc-jp"; #alter Fehler
$status_text="";
my $description; # english description
my $description_trans; # translated description
my $first_package_char;
my $md5_name; # md5 key
my $db_item_dir;
my $db_item_name;
my $package=""; # package name
my $lang_postfix; # lang postfix
my $found;
my $my_tmpdir="$tmpdir/$$"; # temp dir
mkdir $my_tmpdir,0700;
# Resend descriptions to all reviewer after it had been changed
# get all reviewers address
# get the descriptions
# build and send the mail
sub resend_to_reviewers {
my $key=shift(@_); # hash key
my $lang_postfix=shift(@_); # language postfix
my @reviewers(); # list of reviewers
my $newmail="$my_tmpdir/new.review"; # filename for temp file
print "DEBUG resend_to_reviewers: lang_postfix=$lang_postfix\n";
unlink "$newmail"; # delete temp file
unshift(@reviewers, &get_value_from_db("$db_base/reviewer1-$lang_postfix.db", $key));
unshift(@reviewers, &get_value_from_db("$db_base/reviewer2-$lang_postfix.db", $key));
unshift(@reviewers, &get_value_from_db("$db_base/reviewer3-$lang_postfix.db", $key));
foreach $reviewer (@reviewers) {
&get_one_unreviewed_from_db($lang_postfix, $newmail, $reviewer, "/$key");
# Create the top-level, and set up the mail headers:
my $top = build MIME::Entity Type =>"multipart/mixed",
From => "grisu-td\@auric.debian.org",
To => "$reviewer",
Bcc => "grisu-tdlog-$lang_postfix\@auric.debian.org",
Subject => "REVIEW $lang_postfix resend due to new version submitted";
if (-R "$basedir/guides/HOT-NEWs-$lang_postfix.txt") {
attach $top Path=>"$basedir/guides/HOT-NEWs-$lang_postfix.txt",
Charset => $charset{$lang_postfix},
Encoding => "quoted-printable";;
}
if (-R "$basedir/guides/HOT-NEWs.txt") {
attach $top Path=>"$basedir/guides/HOT-NEWs.txt",
Charset => "ISO-8859-1",
Encoding => "quoted-printable";;
}
if ( -e "$newmail") {
attach $top Path => "$newmail",
Type => "application/debian-dt",
Encoding => "base64";
}
# Send it:
open MAIL, "| /usr/sbin/sendmail -t -i" or die "open: $!";
$top->print(\*MAIL);
close MAIL;
system("formail -i \"To: grisu-tdlog-$lang_postfix\@auric.debian.org\" -I Cc: <$tmpdir/savemail.$$ | /usr/sbin/sendmail -t -i");
unlink "$newmail";
}
}
# if the review comes from a reviewer, set the right flag
# when the flag is 7, we're done
sub check_if_reviewed {
my $key=shift(@_); # hash key
my $reviewer=shift(@_); # reviewer address
my $lang_postfix=shift(@_); # language postfix
print "DEBUG check_if_reviewed: lang_postfix=$lang_postfix\n";
my $reviewer1=&get_value_from_db("$db_base/reviewer1-$lang_postfix.db", $key);
my $reviewer2=&get_value_from_db("$db_base/reviewer2-$lang_postfix.db", $key);
my $reviewer3=&get_value_from_db("$db_base/reviewer3-$lang_postfix.db", $key);
my $reviewed=&get_value_from_db("$db_base/reviewed-$lang_postfix.db", $key);
$reviewed |= 1 if ($reviewer1=$address_from);
$reviewed |= 2 if ($reviewer2=$address_from);
$reviewed |= 4 if ($reviewer4=$address_from);
&add_value_to_db("$db_base/reviewed-$lang_postfix.db", $key, $reviewed);
if ($reviewed==7) {
&del_value_from_db("$db_base/reviewer1-$lang_postfix.db", $key);
&del_value_from_db("$db_base/reviewer2-$lang_postfix.db", $key);
&del_value_from_db("$db_base/reviewer3-$lang_postfix.db", $key);
}
}
# lists all unreviewed descriptions without 3 reviewers
sub get_all_unreviewed_keys_from_db {
my $lang_postfix=shift(@_); # language postfix
my $reviewer=shift(@_); # reviewer address
my @tranlated; # list of translated descriptions
my @reviewed; # list of reviewed descriptions
my @reviewer3; # list of descriptions having 3 reviewers
my @choices; # list of not reviewed descriptions
my %seen; # hash for not to be sent descriptions
my $item; # hash key
print "DEBUG get_all_unreviewed_keys_from_db: lang_postfix=$lang_postfix\n";
@translated=&get_full_keylist_from_db("$db_base/desc-$lang_postfix.db");
@reviewed=&get_full_keylist_from_db("$db_base/reviewed-$lang_postfix.db");
@reviewer3=&get_full_keylist_from_db("$db_base/reviewer3-$lang_postfix.db");
# Tag reviewed descriptions and descriptions having already 3 reviewers
# as not to be sent
foreach $item (@reviewed) {
$seen{$item}=1 if (&get_value_from_db("$db_base/reviewed-$lang_postfix.db", $key) == 7);
}
foreach $item (@reviewer3) {
$seen{$item}=1;
}
# Get the list of descriptions to be sent but the ones the reviewer is
# already in charge of the review
foreach $item (@descs_trans) {
next if ($reviewer =~ &get_value_from_db("$db_base/reviewer1-$lang_postfix.db"), $item);
next if ($reviewer =~ &get_value_from_db("$db_base/reviewer2-$lang_postfix.db"), $item);
next if $seen{$item};
push (@choices, $item);
}
# Mix all this for sending at random
for (my $i=0; $i<@choices; $i++) {
my $j = int rand @choices;
($choices[$i],$choices[$j])=($choices[$j],$choices[$i]);
}
return (@choices);
}
# get the data (package list, description and translation)
# add them to the mail
# add the reviewer in the right database if not already in. This can append
# when a new description for the same file is added (that is a bug is closed
# or a new version of the same description is sent) and we resend the
# description to the reviewer, so he check the right one
sub get_one_unreviewed_file_from_db {
my $lang_postfix= shift(@_);
my $newmail= shift(@_);
my $from_address= shift(@_);
my $file= shift(@_);
my $description;
my $description_trans;
my $key;
my @packagelist;
my $reviewer1;
my $reviewer2;
my $reviewer3;
print "DEBUG get_one_unreviewed_file_from_db: lang_postfix=$lang_postfix\n";
print "DEBUG newmail=$newmail \n";
print "DEBUG $file \n";
($key) = ($file =~ /.*\/([a-z0-9]*)/);
@packagelist=&get_packagename_by_md5sum($key); # get package name for this file
$description=&get_value_from_db("$db_base/desc.db","$key"); # get description for this file
$description_lang=&get_value_from_db("$db_base/desc-$lang_postfix.db","$key"); # get translation for this file
open (SAVE, ">>$newmail") or die "open newmail failed"; # append to the mail
print SAVE "\n# Package(s): @packagelist\n"; # packages names
print SAVE $description; # description
print SAVE $description_trans; # translation
print SAVE "\n"; # empty line
close SAVE or die " db_file failed"; # close the mail
$reviewer1=&get_value_from_db("$db_base/reviewer1-$lang_postfix.db", $key);
$reviewer2=&get_value_from_db("$db_base/reviewer2-$lang_postfix.db", $key);
$reviewer3=&get_value_from_db("$db_base/reviewer3-$lang_postfix.db", $key);
my $flag=0; # not already reviewer if 0
my $count=1; # nb of reviewers
foreach $rev ($reviewer1, $reviewer2, $reviewer3) {
$flag=1 if ($rev eq $from_address); # already reviewer
$count++ if $rev; # a reviewer exists
}
&add_value_to_db("$db_base/reviewer1-$lang_postfix.db", $key, $from_address) if ($count==1 and $flag==0);
&add_value_to_db("$db_base/reviewer2-$lang_postfix.db", $key, $from_address) if ($count==2 and $flag==0);
&add_value_to_db("$db_base/reviewer3-$lang_postfix.db", $key, $from_address) if ($count==3 and $flag==0);
return 1;
}
# get each wanted description for review, one by one
sub get_unreviewed_files_from_db {
my $lang_postfix=shift(@_); # language postfix
my $newmail=shift(@_); # filename of the mail to build
my $from_address=shift(@_); # address of the reviewer
my @files = @_; # list of wanted descriptions
my $a=0; # count
print "DEBUG get_unreviewed_files_from_db: lang_postfix=$lang_postfix\n";
print "DEBUG @files \n";
&get_one_unreviewed_file_from_db($lang_postfix, $newmail, $from_address, $files[$a++]) while ($a <= $#files );
}
# get all unreviewed package list
# keep the first $count ones
# ask for them
sub get_some_unreviewed {
my $count= shift(@_); # number of review to send
my $newmail=shift(@_); # filename of the mail to build
my $lang_postfix=shift(@_); # language postfix
my $from_address=shift(@_); # address of the reviewer
my @files=(); # filenames of descriptions to be sent
my $description_file; #
print "DEBUG get_some_review: lang_postfix=$lang_postfix\n";
my @unreviewed=&get_all_unreviewed_keys_from_db($lang_postfix, $from_address) ;
$#unreviewed=$count-1; # keep the first $count unreviewed
foreach $description_file (@unreviewed) {
print "DEBUG from trans db: $description_file\n";
@files=(@files,"/$description_file");
}
&get_unreviewed_files_from_db($lang_postfix, $newmail, $from_address, @files);
}
Reply to: