r41342 - in /trunk/libnet-managesieve-perl: Changes META.yml SIGNATURE debian/changelog debian/compat debian/control debian/copyright debian/rules lib/Net/ManageSieve.pm
jawnsy-guest at users.alioth.debian.org
jawnsy-guest at users.alioth.debian.org
Wed Aug 5 02:46:47 UTC 2009
Author: jawnsy-guest
Date: Wed Aug 5 02:46:41 2009
New Revision: 41342
URL: http://svn.debian.org/wsvn/pkg-perl/?sc=1&rev=41342
Log:
* New upstream release
+ Accept ucfirst options on new() constructor (RT#48349)
+ on_fail option for constructor (RT#48286)
+ Now calls _set_error() when TLS fails
* Rewrote control description
* Standards-Version 3.8.2 (no changes)
* Bump to debhelper 7
* Use short debhelper rules format
Modified:
trunk/libnet-managesieve-perl/Changes
trunk/libnet-managesieve-perl/META.yml
trunk/libnet-managesieve-perl/SIGNATURE
trunk/libnet-managesieve-perl/debian/changelog
trunk/libnet-managesieve-perl/debian/compat
trunk/libnet-managesieve-perl/debian/control
trunk/libnet-managesieve-perl/debian/copyright
trunk/libnet-managesieve-perl/debian/rules
trunk/libnet-managesieve-perl/lib/Net/ManageSieve.pm
Modified: trunk/libnet-managesieve-perl/Changes
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libnet-managesieve-perl/Changes?rev=41342&op=diff
==============================================================================
--- trunk/libnet-managesieve-perl/Changes (original)
+++ trunk/libnet-managesieve-perl/Changes Wed Aug 5 02:46:41 2009
@@ -1,4 +1,14 @@
Revision history for Perl extension Net::ManageSieve.
+
+0.08 Tue Aug 4 13:56:26 CEST 2009
+ - chg: accept ucfirst options on new() constructor for all options
+ CPAN bug #48349 MDOM
+ - fix: documentation bug about to pass "tls" to IO::Socket
+
+0.07 Tue Aug 4 13:56:26 CEST 2009
+ - add: on_fail option for constructor
+ CPAN bug #48286 Mario Domgoergen
+ - fix: missing call to _set_error() when TLS fails
0.06 Wed Oct 29 08:33:41 CET 2008
- fix: empty token is treated as error in _response()
Modified: trunk/libnet-managesieve-perl/META.yml
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libnet-managesieve-perl/META.yml?rev=41342&op=diff
==============================================================================
--- trunk/libnet-managesieve-perl/META.yml (original)
+++ trunk/libnet-managesieve-perl/META.yml Wed Aug 5 02:46:41 2009
@@ -1,7 +1,7 @@
# http://module-build.sourceforge.net/META-spec.html
#XXXXXXX This is a prototype!!! It will change in the future!!! XXXXX#
name: Net-ManageSieve
-version: 0.06
+version: 0.08
version_from: lib/Net/ManageSieve.pm
installdirs: site
requires:
Modified: trunk/libnet-managesieve-perl/SIGNATURE
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libnet-managesieve-perl/SIGNATURE?rev=41342&op=diff
==============================================================================
--- trunk/libnet-managesieve-perl/SIGNATURE (original)
+++ trunk/libnet-managesieve-perl/SIGNATURE Wed Aug 5 02:46:41 2009
@@ -15,15 +15,15 @@
Hash: SHA1
SHA1 9b1e6ccab9aae1f3abbc00a8bbc1a948c92d7dca COPYING
-SHA1 aade5e4798781e14fdffdddaadfb0894b8cd7253 Changes
+SHA1 a28bc0e489c4189da665ad846946ba1132cfaf09 Changes
SHA1 dcaa0c0dc2cbd898152fb57a8b3e1747fd857504 LICENSE
SHA1 a2e4e1d7b15aa75d31c28d4dd3721deaacf5215d MANIFEST
SHA1 f6aafb59d1c051fde474599535891fc5e49bc31b MANIFEST.SKIP
-SHA1 03a317d348a19e5ce03418ef9f55e951909f04f0 META.yml
+SHA1 4f7f8b2a9ecbd0d62c5becc542f6e2a46fb4260c META.yml
SHA1 60083cedbf92adea30b31c96c1fa07005f5ca52f Makefile.PL
SHA1 4761910f6e1d95d00a89008dff894a94fc77731a README
SHA1 b810608c247c68111eb2d95d809116e7d6548c92 TODO
-SHA1 11f8265130da9b5e6b57a64adba8951700ec60f0 lib/Net/ManageSieve.pm
+SHA1 7d12e72dd87ad89e20f22f4d2939e45e6834324a lib/Net/ManageSieve.pm
SHA1 e1fd5931b8c313a295550da26b7914f4fd4c05bc managesieve-test-account.sample
SHA1 e84b212ac2a465c56266c9bb2d3b1f8016ac4b21 t/00-signature.t
SHA1 4bd8d2b8ee556deb6c6151bf7108c731e8004919 t/Net-ManageSieve.t
@@ -32,11 +32,11 @@
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
-iQEVAwUBSQgbbzLh+Gx9F1xpAQKoHgf+It1RSOPBDuW1eJaPIW5a8FfSvTCvv3bp
-a4x+DXNhUAxde+47vvujOP8kBKpx9dOgf+ys+p/xLVlMaXhYVcKsHjeLWt8iDXVf
-dzVJkE5ctPcS+0gSQ2VTRb7u3Wk2Y5tDb9ETVLT64aFUR2t/JGueuDHB2T9EezqT
-5iJcV5/75wXFPTG4VWEQ0kwQo5xU6RhEw0Nr3TPreFDKcyLkEaY7hmN2iKj5ynMZ
-ic9DA0Smhs7wO79prjNxRZj0YCus6xQlexvOlITloSWr5lyWEadu7nhBRuEhLms6
-xjro1ORZZ1/w7IbM/34NbY1N5YHlXLBthnq5dlaT1fCfw1QMN6K0OQ==
-=t880
+iQEVAwUBSngsajLh+Gx9F1xpAQJcFQf/UZ6fBIMGSeJwYgeJVbT5eluttMKDo3+c
+eCrxHs9H43FyFndPmZ9StI+m3sHqJwlZ/i0OSuH347GwvcJbovAlQZ8HtAMvarm4
+Fd3YbazLfkblTsefFM78XsPECoH+xykCqoIxBw/Kh6q0WW+PWEQZjeNIFsSp31Uw
+sMQmEAaEQJtZ4k/n0SlMllaXJmyNcFFssqgalG0vB28U9MuirZUM8iU9r+iRwTdJ
+Nhw/uc5RT7XIxhVWx4FG4a4HTW0uQBqStdCQAmaQZC5mHy8AXTD0mqJH5bXO0QL2
+zEcZjQBe1Qq0yNnKog+WrW5mbEPHz8UA5Dm4VOI0Php8QwhyiBAhHA==
+=O20p
-----END PGP SIGNATURE-----
Modified: trunk/libnet-managesieve-perl/debian/changelog
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libnet-managesieve-perl/debian/changelog?rev=41342&op=diff
==============================================================================
--- trunk/libnet-managesieve-perl/debian/changelog (original)
+++ trunk/libnet-managesieve-perl/debian/changelog Wed Aug 5 02:46:41 2009
@@ -1,8 +1,19 @@
-libnet-managesieve-perl (0.06-2) UNRELEASED; urgency=low
+libnet-managesieve-perl (0.08-1) UNRELEASED; urgency=low
+ [ Jonathan Yu ]
+ * New upstream release
+ + Accept ucfirst options on new() constructor (RT#48349)
+ + on_fail option for constructor (RT#48286)
+ + Now calls _set_error() when TLS fails
+ * Rewrote control description
+ * Standards-Version 3.8.2 (no changes)
+ * Bump to debhelper 7
+ * Use short debhelper rules format
+
+ [ Nathan Handler ]
* debian/watch: Update to ignore development releases.
- -- Nathan Handler <nhandler at ubuntu.com> Sat, 06 Jun 2009 01:36:38 +0000
+ -- Jonathan Yu <frequency at cpan.org> Tue, 04 Aug 2009 18:40:12 -0400
libnet-managesieve-perl (0.06-1) unstable; urgency=low
Modified: trunk/libnet-managesieve-perl/debian/compat
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libnet-managesieve-perl/debian/compat?rev=41342&op=diff
==============================================================================
--- trunk/libnet-managesieve-perl/debian/compat (original)
+++ trunk/libnet-managesieve-perl/debian/compat Wed Aug 5 02:46:41 2009
@@ -1,1 +1,1 @@
-5
+7
Modified: trunk/libnet-managesieve-perl/debian/control
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libnet-managesieve-perl/debian/control?rev=41342&op=diff
==============================================================================
--- trunk/libnet-managesieve-perl/debian/control (original)
+++ trunk/libnet-managesieve-perl/debian/control Wed Aug 5 02:46:41 2009
@@ -1,11 +1,11 @@
Source: libnet-managesieve-perl
Section: perl
Priority: optional
-Build-Depends: debhelper (>= 5)
-Build-Depends-Indep: perl (>= 5.6.10-12)
+Build-Depends: debhelper (>= 7)
+Build-Depends-Indep: perl (>= 5.6.0-16)
Maintainer: Debian Perl Group <pkg-perl-maintainers at lists.alioth.debian.org>
-Uploaders: Christoph Berg <myon at debian.org>
-Standards-Version: 3.8.1
+Uploaders: Christoph Berg <myon at debian.org>, Jonathan Yu <frequency at cpan.org>
+Standards-Version: 3.8.2
Homepage: http://search.cpan.org/dist/Net-ManageSieve/
Vcs-Svn: svn://svn.debian.org/pkg-perl/trunk/libnet-managesieve-perl/
Vcs-Browser: http://svn.debian.org/viewsvn/pkg-perl/trunk/libnet-managesieve-perl/
@@ -13,10 +13,8 @@
Package: libnet-managesieve-perl
Architecture: all
Depends: ${perl:Depends}, ${misc:Depends}
-Description: ManageSieve Protocol Client
- This module implements a client interface to the ManageSieve protocol
- (http://tools.ietf.org/html/draft-martin-managesieve-09).
- .
- Note: ManageSieve allows to manipulate scripts on a host running a
- ManageSieve service; this module does not perform, validate or something
- like that Sieve scripts themselves.
+Description: Perl client module for ManageSieve
+ Net::ManageSieve is a Perl module that provides a client interface to the
+ ManageSieve protocol. It manipulates scripts on a host running a ManageSieve
+ service; this module does not perform, validate or do anything else like the
+ Sieve scripts themselves.
Modified: trunk/libnet-managesieve-perl/debian/copyright
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libnet-managesieve-perl/debian/copyright?rev=41342&op=diff
==============================================================================
--- trunk/libnet-managesieve-perl/debian/copyright (original)
+++ trunk/libnet-managesieve-perl/debian/copyright Wed Aug 5 02:46:41 2009
@@ -1,24 +1,29 @@
-This is the debian package for the Net-ManageSieve module.
-It was created by Christoph Berg <myon at debian.org> using dh-make-perl.
+Format-Specification:
+ http://wiki.debian.org/Proposals/CopyrightFormat?action=recall&rev=196
+Upstream-Maintainer: Steffen Kaiser
+Upstream-Source: http://search.cpan.org/dist/Net-ManageSieve/
+Upstream-Name: Net-ManageSieve
-It was downloaded from http://search.cpan.org/dist/Net-ManageSieve/
+Files: *
+Copyright: 2008, Steffen Kaiser
+License-Alias: Perl
+License: Artistic | GPL-1+
-The upstream author is: Steffen Kaiser.
+Files: debian/*
+Copyright: 2009, Jonathan Yu <frequency at cpan.org>
+ 2009, Christoph Berg <myon at debian.org>
+License: Artistic | GPL-1+
-This module heavily bases on Net::SMTP and Net::Cmd.
-Copyright:
+License: Artistic
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the Artistic License, which comes with Perl.
+ On Debian GNU/Linux systems, the complete text of the Artistic License
+ can be found in `/usr/share/common-licenses/Artistic'
- Copyright 2007-2008, Steffen Kaiser All rights reserved.
-
+License: GPL-1+
This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- a) the GNU General Public License as published by the Free Software
- Foundation; either version 1, or (at your option) any later
- version, or
-
- b) the "Artistic License" which comes with Perl.
-
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
On Debian GNU/Linux systems, the complete text of the GNU General
- Public License can be found in `/usr/share/common-licenses/GPL' and
- the Artistic Licence in `/usr/share/common-licenses/Artistic'.
+ Public License can be found in `/usr/share/common-licenses/GPL'
Modified: trunk/libnet-managesieve-perl/debian/rules
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libnet-managesieve-perl/debian/rules?rev=41342&op=diff
==============================================================================
--- trunk/libnet-managesieve-perl/debian/rules (original)
+++ trunk/libnet-managesieve-perl/debian/rules Wed Aug 5 02:46:41 2009
@@ -1,56 +1,4 @@
#!/usr/bin/make -f
-# If set to a true value then MakeMaker's prompt function will
-# always return the default without waiting for user input.
-export PERL_MM_USE_DEFAULT=1
-
-PERL ?= /usr/bin/perl
-PACKAGE = $(shell dh_listpackages)
-TMP = $(CURDIR)/debian/$(PACKAGE)
-
-build: build-stamp
-build-stamp:
- dh_testdir
- # Add commands to compile the package here
- $(PERL) Makefile.PL INSTALLDIRS=vendor
- $(MAKE)
- $(MAKE) test
- touch $@
-
-clean:
- dh_testdir
- dh_testroot
- dh_clean build-stamp install-stamp
- # Add commands to clean up after the build process here
- [ ! -f Makefile ] || $(MAKE) realclean
-
-install: install-stamp
-install-stamp: build-stamp
- dh_testdir
- dh_testroot
- dh_clean -k
- # Add commands to install the package into $(TMP) here
- $(MAKE) install DESTDIR=$(TMP) PREFIX=/usr
- [ ! -d $(TMP)/usr/lib/perl5 ] || \
- rmdir --ignore-fail-on-non-empty --parents --verbose \
- $(TMP)/usr/lib/perl5
- touch $@
-
-binary-arch:
-# We have nothing to do here for an architecture-independent package
-
-binary-indep: build install
- dh_testdir
- dh_testroot
- dh_installdocs TODO README
- dh_installchangelogs Changes
- dh_perl
- dh_compress
- dh_fixperms
- dh_installdeb
- dh_gencontrol
- dh_md5sums
- dh_builddeb
-
-binary: binary-indep binary-arch
-.PHONY: build clean binary-indep binary-arch binary install
+%:
+ dh $@
Modified: trunk/libnet-managesieve-perl/lib/Net/ManageSieve.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libnet-managesieve-perl/lib/Net/ManageSieve.pm?rev=41342&op=diff
==============================================================================
--- trunk/libnet-managesieve-perl/lib/Net/ManageSieve.pm (original)
+++ trunk/libnet-managesieve-perl/lib/Net/ManageSieve.pm Wed Aug 5 02:46:41 2009
@@ -62,6 +62,48 @@
, "\n";
$sieve->logout;
+=head1 ERROR HANDLING
+
+By default all functions return C<undef> on failure and set an
+error description into C<$@>, which can be retrieved with the
+method C<error()> as well.
+
+The constructor accepts the setting C<on_fail>, which alters this
+behaviour by changing the step to assign C<$@>:
+If its value is:
+
+=over 4
+
+=item C<warn>
+
+the program carps the error description.
+
+If C<debug> is enabled, too, the description is printed twice.
+
+=item C<die>
+
+the program croaks.
+
+=item is a CODE ref
+
+this subroutine is called with the arguments:
+
+ &code_ref ( $object, $error_message )
+
+The return value controls, whether or not the error message will be
+assigned to C<$@>. Private functions may just signal that an error
+occured, but keep C<$@> unchanged. In this case C<$@> remains unchanged,
+if code_ref returns true.
+
+I<Note>: Even if the code ref returns false, C<$@> might bi clobberred
+by called modules. This is especially true in the C<new()> constructor.
+
+=item otherwise
+
+the default behaviour is retained by setting C<$@>.
+
+=back
+
=cut
require 5.001;
@@ -73,7 +115,7 @@
use IO::Socket;
use Encode;
-$VERSION = "0.06";
+$VERSION = "0.08";
@ISA = qw();
@@ -107,14 +149,19 @@
B<Port> - Select a port on the remote host to connect to (default is 2000)
B<Debug> or B<debug> - enable debugging if true (default OFF)
+
+I<Note>: All of the above options are passed through to L<IO::Socket::INET>.
B<tls> - issue STARTTLS right after connect. If B<tls> is a HASH ref,
the mode is in member C<mode>, otherwise C<tls> itself is the mode and
an empty SSL option HASH is passed to L<starttls()>. The C<mode> may be
one of C<require> to fail, if TLS negotiation fails, or C<auto>,
C<on> or C<yes>, if TLS is to attempt, but a failure is ignored.
-
-I<Note>: All options are passed through to L<IO::Socket::INET>.
+(Aliases: B<TLS>, B<Tls>)
+
+B<on_fail> - Changes the error handling of all functions that would
+otherwise return undef and set C<$@>. See section ERROR HANDLING
+(Aliases: B<On_fail>)
Example:
@@ -183,6 +230,8 @@
$self->{_last_error} = '';
$self->{_last_command} = '';
$self->{_debug} = 1 if $arg{Debug} || $arg{debug};
+ $self->{_on_fail} = delete $arg{on_fail} || delete $arg{On_fail};
+ $self->{_tls} = delete $arg{tls} || delete $arg{Tls} || delete $arg{TLS};
foreach my $h (@{ref($host) ? $host : [ $host ]}) {
$arg{PeerAddr} = $h;
@@ -192,7 +241,12 @@
}
}
- return undef unless defined $self->{host};
+ unless(defined $self->{host}) {
+ my $err = $@;
+ $err = 'failed to connect to host(s): '.$! unless defined $err;
+ $self->_set_error($err);
+ return undef;
+ }
$self->{fh}->autoflush(1);
@@ -201,7 +255,7 @@
return undef unless $self->ok($cap);
$self->_decodeCap($cap);
- if(my $mode = $arg{tls}) {
+ if(my $mode = $self->{_tls}) {
my $tls;
if(ref($mode) eq 'HASH') {
$tls = $mode;
@@ -214,11 +268,8 @@
my $rc = $self->starttls(%$tls);
if(!$rc && $mode eq 'require') {
my $err = $@;
- unless($err) {
- $self->_set_error('Failed to enable TLS');
- } else {
- $@ = $err;
- }
+ $err = 'unknown error' unless defined $err;
+ $self->_set_error('failed to enable TLS: '.$err);
return undef;
}
}
@@ -230,10 +281,11 @@
=head1 METHODS
Unless otherwise stated all methods return either a I<true> or I<false>
-value, with I<true> meaning that the operation was a success. When a method
-states that it returns a value, failure will be returned as I<undef> or an
-empty list. The error is specified in C<$@> and can be returned with the
-L</error> method.
+value, with I<true> meaning that the operation was a success. When
+a method states that it returns a value, failure will be returned as
+I<undef> or an empty list. The error is specified in C<$@> and can be
+returned with the L</error> method. Please see section ERROR HANDLING
+for an alternative error handling scheme.
=over 4
@@ -281,9 +333,9 @@
# Initiate TLS
unless(defined &IO::Socket::SSL::new) {
- eval " require IO::Socket::SSL ";
+ eval { require IO::Socket::SSL };
if($@) {
- $self->_set_error('Cannot find module IO::Socket::SSL', 'skipAd');
+ $self->_set_error('cannot find module IO::Socket::SSL', 'skipAd');
return undef;
}
}
@@ -324,11 +376,11 @@
sub _encrypted {
my $fh = $_[0]->{fh};
unless($fh) {
- $_[0]->_set_error('No connection opened');
+ $_[0]->_set_error('no connection opened');
return undef;
}
unless(encrypted($_[0])) {
- $_[0]->_set_error('Connection not encrypted');
+ $_[0]->_set_error('connection not encrypted');
return undef;
}
return $fh;
@@ -369,7 +421,7 @@
unless(defined &MIME::Base64::encode_base64) { # Automatically load it
eval { require MIME::Base64; };
if($@) {
- $self->_set_error('Failed to load MIME::Base64: ' . $@);
+ $self->_set_error('failed to load MIME::Base64: ' . $@);
return undef;
}
}
@@ -388,7 +440,7 @@
unless(defined &Authen::SASL::new) { # Automatically load it
eval { require Authen::SASL; };
if($@) {
- $self->_set_error("Failed to load Authen::SASL: $@\nFallback to PLAIN\n");
+ $self->_set_error("failed to load Authen::SASL: $@\nFallback to PLAIN\n");
$doSASL = undef;
}
}
@@ -399,7 +451,7 @@
# $sasl->mechanism($mech);
} else {
unless(length $username) {
- $self->_set_error("Need username or Authen::SASL object");
+ $self->_set_error("need username or Authen::SASL object");
return undef;
}
# for unknown reason to pass in a space
@@ -460,7 +512,7 @@
$self->_set_error('SASL authentification failed');
return undef;
}
- $self->_set_error("Start of SASL failed");
+ $self->_set_error("start of SASL failed");
# Circumvent SASL problems by falling back to plain PLAIN
}
}
@@ -682,8 +734,10 @@
=begin COMMENT
-arg1 :- error string
+arg1 :- error string, always != undef
arg2 :- if passed, but not true: DO NOT assign $@
+
+See ERROR HANDLING about C<_on_fail>
=end COMMENT
@@ -692,11 +746,19 @@
sub _set_error {
my ($self, $err, $Ad) = @_;
- if($err) {
- dbgPrint('ERROR:', $err) if $self->{_debug};
- $self->{_last_error} = $err;
- $@ = $err if !defined $Ad || $Ad;
- }
+ dbgPrint('ERROR:', $err) if $self->{_debug};
+ $self->{_last_error} = $err;
+ my $assignAd = !defined $Ad || $Ad;
+ my $op = $self->{_on_fail} if exists $self->{_on_fail};
+ if(defined($op) && ref($op) eq 'CODE') {
+ $assignAd &&= $op->($self, $err);
+ } elsif(defined($op) && $op eq 'warn') {
+ Carp::carp $err;
+ } elsif(defined($op) && $op eq 'die') {
+ Carp::croak $err."\n";
+ # } else {
+ }
+ $@ = $err if $assignAd;
return $self;
}
@@ -778,7 +840,7 @@
}
if($name =~ /[\0\r\n]/) {
- $self->_set_error("Invalid character in name");
+ $self->_set_error("invalid character in name");
return undef;
}
@@ -826,7 +888,7 @@
$cmt ||= $c;
unless($c =~ /\A(OK|NO|BYE)\b/i) {
- $self->_set_error("Invalid response: $cmt");
+ $self->_set_error("invalid response: $cmt");
return undef;
}
return $c if uc($1) eq 'OK'
@@ -841,7 +903,7 @@
my $fh = $self->{fh};
unless($fh) {
- $self->_set_error("No connection open");
+ $self->_set_error("no connection open");
return undef;
}
@@ -913,7 +975,7 @@
my $fh = $self->{fh};
unless($fh) {
- $self->_set_error("No connection open");
+ $self->_set_error("no connection open");
return undef;
}
@@ -984,7 +1046,7 @@
# so that a quoted string must not cross line boundaries
# that makes parsing easier
unless($l =~ s/\A((?:[^"\\]|\\.)*)"//) {
- $self->_set_error("Missing final quote on line: $l");
+ $self->_set_error("missing final quote on line: $l");
return undef;
}
$self->_unget($l);
@@ -1013,7 +1075,7 @@
$self->_unget($l) if $l;
$l = [ "\n", $1 ];
} else {
- $self->_set_error("Invalid token: $l");
+ $self->_set_error("invalid token: $l");
return undef;
}
More information about the Pkg-perl-cvs-commits
mailing list