[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[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: