1
0
mirror of https://github.com/imapsync/imapsync.git synced 2024-11-17 00:02:29 +01:00
This commit is contained in:
Nick Bebout 2011-03-12 02:45:02 +00:00
parent 804a713af1
commit 3f8607bd96
32 changed files with 6408 additions and 1456 deletions

26
CONCEPTION Normal file
View File

@ -0,0 +1,26 @@
===== Synopsis =====
$mailbox_1 = Mail::imapsync::mailbox->new();
$mailbox_2 = Mail::imapsync::mailbox->new();
$mailbox_1->host('imap1.lala.org');
$mailbox_1->user('toto1');
...
$mailbox_2->host('imap2.lala.org');
$mailbox_2->user('toto2');
...
$transfer = Mail::imapsync::transfer->new();
$transfer->sync($mailbox_1, $mailbox_2);
- an object for mailbox
- an object for a transfer
- ?an object for a folder?
- ?an object for a message?

51
CREDITS
View File

@ -1,7 +1,8 @@
#!/bin/cat #!/bin/cat
# $Id: CREDITS,v 1.144 2010/09/06 01:08:41 gilles Exp gilles $ # $Id: CREDITS,v 1.150 2010/10/24 23:54:09 gilles Exp gilles $
If you want to make a donation to the author, Gilles LAMIRAL: If you want to make a donation to the author, Gilles LAMIRAL,
use any of the following ways:
a) you can use the imapsync wishlist : a) you can use the imapsync wishlist :
http://www.amazon.com/gp/registry/wishlist/1C9UNDIH3P7R7/ http://www.amazon.com/gp/registry/wishlist/1C9UNDIH3P7R7/
@ -14,12 +15,50 @@ b) If you can read french, please use the following wishlist :
c) its paypal account : gilles.lamiral@laposte.net c) its paypal account : gilles.lamiral@laposte.net
http://www.linux-france.org/prj/imapsync/paypal.html http://www.linux-france.org/prj/imapsync/paypal.html
Here are the persons who helped me to develop imapsync. d) If you prefer making your donation with
Feel free to tell me if a name is missing or if you want cash or cheque then my postal address is:
to remove one.
Gilles LAMIRAL
4 La Billais
35580 Baulon
FRANCE
Here are the persons who helped me to develop and maintain imapsync.
Feel free to tell me if a name is missing or if you want to remove one.
I thank very much all of these people. I thank very much all of these people.
Roger Schmid
Contributed by giving money 100 USD
Danny Schulz
Contributed by giving money 15 USD
Christian Kowarzik
Contributed by giving money 90 USD
for --deletefolder2 option.
Harald Petrovitsch
Contributed by giving the book
29.95 "Families and How to Survive Them"
Tobias Fink
Contributed by giving money 5 Eur
Yanick Cyr
Contributed by giving money 25 USD
Trony Tigno
Contributed by giving money 5 USD
Paul Garner
Contributed by giving money 5 USD
Kevin Kretz
Contributed by giving the books
15.25 "Tres Cubano: A Complete Guide To Playing The Cuban Tres Guitar (Book & CD)"
24.00 "Creative Clowning"
Kirk Ismay Kirk Ismay
Contributed by giving money 50 USD Contributed by giving money 50 USD
@ -907,6 +946,8 @@ Eric Yung
Total amount of book prices : Total amount of book prices :
c \ c \
29.95
\
11.20+\ 11.20+\
24.95+\ 24.95+\
13.57+\ 13.57+\

View File

@ -1,17 +1,90 @@
RCS file: RCS/imapsync,v RCS file: RCS/imapsync,v
Working file: imapsync Working file: imapsync
head: 1.350 head: 1.366
branch: branch:
locks: strict locks: strict
gilles: 1.350 gilles: 1.366
access list: access list:
symbolic names: symbolic names:
keyword substitution: kv keyword substitution: kv
total revisions: 350; selected revisions: 350 total revisions: 366; selected revisions: 366
description: description:
---------------------------- ----------------------------
revision 1.350 locked by: gilles; revision 1.366 locked by: gilles;
date: 2010/10/25 17:15:52; author: gilles; state: Exp; lines: +11 -12
Permit host* to have change the case of headers.
----------------------------
revision 1.365
date: 2010/10/25 11:42:41; author: gilles; state: Exp; lines: +131 -157
Fix tls getline pb (read too early)
Changes place of starttls() myconnect() and other functions.
----------------------------
revision 1.364
date: 2010/10/25 09:56:27; author: gilles; state: Exp; lines: +10 -15
Fix STARTTLS capability detection bug.
----------------------------
revision 1.363
date: 2010/10/24 17:16:43; author: gilles; state: Exp; lines: +99 -48
Added --delete2folders option. Deletes folders in host2 that are not in host1.
----------------------------
revision 1.362
date: 2010/10/22 19:23:34; author: gilles; state: Exp; lines: +24 -8
Added imapsync basename to see how imapsync.exe is used.
----------------------------
revision 1.361
date: 2010/10/19 22:58:06; author: gilles; state: Exp; lines: +28 -8
Added --nomodules_version option to avoid Roger libeay32.dll missing problem.
Added test to ckeck if the release number from lfo VERSION file is a number.
----------------------------
revision 1.360
date: 2010/10/19 22:08:23; author: gilles; state: Exp; lines: +8 -7
Better documentation to subscribe to the imapsync list.
----------------------------
revision 1.359
date: 2010/10/08 01:17:29; author: gilles; state: Exp; lines: +15 -9
Fixed "Your vendor has not defined POSIX macro SIGALRM" bug on win32.
----------------------------
revision 1.358
date: 2010/10/08 00:40:42; author: gilles; state: Exp; lines: +97 -18
Add memory_consumption for win32.
----------------------------
revision 1.357
date: 2010/10/04 21:50:56; author: gilles; state: Exp; lines: +10 -10
Suppressed ref passage in foldersizes() sub.
----------------------------
revision 1.356
date: 2010/10/04 02:44:00; author: gilles; state: Exp; lines: +1270 -1251
Move all subroutines below main.
Changed "local $SIG{ALRM}" to "POSIX::sigaction(SIGALRM"
----------------------------
revision 1.355
date: 2010/09/21 01:50:34; author: gilles; state: Exp; lines: +39 -19
Added tests_max() max() functions.
Added memory consumption.
Added memory consumption ratio to biggest message transfered.
----------------------------
revision 1.354
date: 2010/09/16 00:25:20; author: gilles; state: Exp; lines: +27 -15
Added memory_consumption_ratio()
Added memory_consumption_of_pid()
Removed memory_consumption
----------------------------
revision 1.353
date: 2010/09/14 22:46:33; author: gilles; state: Exp; lines: +19 -9
Added --minsize option.
----------------------------
revision 1.352
date: 2010/09/14 21:53:55; author: gilles; state: Exp; lines: +48 -12
Added memory_consumption()
Added tests_memory_consumption()
Started to analyse memory consumption.
----------------------------
revision 1.351
date: 2010/09/06 16:28:17; author: gilles; state: Exp; lines: +9 -7
Fixed PERL_VERSION format in imapsync_version_lfo()
----------------------------
revision 1.350
date: 2010/09/06 01:05:09; author: gilles; state: Exp; lines: +33 -24 date: 2010/09/06 01:05:09; author: gilles; state: Exp; lines: +33 -24
Added --noreleasecheck option. Added --noreleasecheck option.
Added User-agent information (OS, perl version, Mail::IMAPClient version) Added User-agent information (OS, perl version, Mail::IMAPClient version)

23
FAQ
View File

@ -1,5 +1,5 @@
#!/bin/cat #!/bin/cat
# $Id: FAQ,v 1.73 2010/08/08 23:09:04 gilles Exp gilles $ # $Id: FAQ,v 1.75 2010/10/19 23:31:10 gilles Exp gilles $
+------------------+ +------------------+
| FAQ for imapsync | | FAQ for imapsync |
@ -595,6 +595,14 @@ Examples:
3) to substitute all characters dot "." by underscores "_" 3) to substitute all characters dot "." by underscores "_"
--regextrans2 's/\./_/g' --regextrans2 's/\./_/g'
4) to change folder names like this:
[mail/Sent Items] -> [Sent]
[mail/Test] -> [INBOX/Test]
[mail/Test2] -> [INBOX/Test2]
--regextrans2 's#^mail/Sent Items$#Sent#' \
--regextrans2 's#^mail/#INBOX/#'
======================================================================= =======================================================================
Q. I would like to move emails from InBox to a sub-folder called, Q. I would like to move emails from InBox to a sub-folder called,
say "2005-InBox" based on the date (Like all emails received in the say "2005-InBox" based on the date (Like all emails received in the
@ -755,13 +763,16 @@ Q. Synchronising from Gmail to XXX
R. Gmail needs SSL R. Gmail needs SSL
./imapsync \ ./imapsync \
--host1 imap.gmail.com --ssl1 \ --host1 imap.gmail.com \
--ssl1 \
--authmech1 LOGIN \
--user1 gilles.lamiral@gmail.com \ --user1 gilles.lamiral@gmail.com \
--passfile1 /var/tmp/secret.gilles_gmail \ --password1 gmailsecret \
--host2 localhost --host2 localhost
--user2 tata@est.belle \ --user2 tata \
--passfile2 /var/tmp/secret.tata \ --password2 tatasecret \
--useheader="X-Gmail-Received" --skipsize --useheader="X-Gmail-Received" \
--useheader 'Message-Id'
If your destination imap server doesn't like "[Gmail]" name, just add If your destination imap server doesn't like "[Gmail]" name, just add
option: option:

17
INSTALL
View File

@ -1,4 +1,4 @@
# $Id: INSTALL,v 1.17 2010/07/16 22:01:57 gilles Exp gilles $ # $Id: INSTALL,v 1.18 2010/10/25 09:32:49 gilles Exp gilles $
# #
# INSTALL file for imapsync # INSTALL file for imapsync
# imapsync : IMAP sync or copy tool. # imapsync : IMAP sync or copy tool.
@ -84,9 +84,6 @@ Here is some individual module help:
- IO:Socket:SSL.pm - IO:Socket:SSL.pm
perl -mIO::Socket::SSL -e '' perl -mIO::Socket::SSL -e ''
- Date::Manip
perl -mDate::Manip -e ''
- File::Spec - File::Spec
perl -mFile::Spec -e '' perl -mFile::Spec -e ''
@ -98,7 +95,7 @@ Here is some individual module help:
Everything in one command: Everything in one command:
perl -mMail::IMAPClient -mDigest::MD5 -mTerm::ReadKey -mIO::Socket::SSL -mDate::Manip -mFile::Spec -mDigest::HMAC_MD5 -e '' perl -mMail::IMAPClient -mDigest::MD5 -mTerm::ReadKey -mIO::Socket::SSL -mFile::Spec -mDigest::HMAC_MD5 -e ''
INSTALLING INSTALLING
---------- ----------
@ -115,10 +112,14 @@ or copy the file imapsync where you want it to be.
WINDOWS WINDOWS
------- -------
a) Simplest way:
- Use imapsync.exe
b) Hard way:
- Install Perl if it isn't already installed. - Install Perl if it isn't already installed.
ActivePerl from ActiveState is a good candidate if Strawberry Perl is a good candidate
you understand nothing at free/open software
and want to run imapsync with success.
- Use PPM to install modules listed in the PREREQUISITES section. - Use PPM to install modules listed in the PREREQUISITES section.
PPM is Perl Package Manager. PPM is Perl Package Manager.

View File

@ -1,5 +1,5 @@
# $Id: Makefile,v 1.37 2010/08/24 01:46:36 gilles Exp gilles $ # $Id: Makefile,v 1.42 2010/10/24 23:52:31 gilles Exp gilles $
.PHONY: help usage all .PHONY: help usage all
@ -15,6 +15,7 @@ usage:
@echo "make all " @echo "make all "
@echo "make upload_index" @echo "make upload_index"
@echo "make imapsync.exe" @echo "make imapsync.exe"
@echo "make upload_imapsync_exe"
DIST_NAME=imapsync-$(VERSION) DIST_NAME=imapsync-$(VERSION)
@ -137,6 +138,9 @@ upload_index: index.shtml
../../public_html/www.linux-france.org/html/prj/imapsync/ ../../public_html/www.linux-france.org/html/prj/imapsync/
sh $(HOME)/memo/lfo-rsync sh $(HOME)/memo/lfo-rsync
.dosify_bat: build_exe.bat test_exe.bat test.bat .dosify_bat: build_exe.bat test_exe.bat test.bat
unix2dos build_exe.bat test.bat test_exe.bat unix2dos build_exe.bat test.bat test_exe.bat
touch .dosify_bat touch .dosify_bat
@ -149,18 +153,39 @@ dosify_bat: .dosify_bat
imapsync_cidone: .imapsync_cidone imapsync_cidone: .imapsync_cidone
copy_win32:
scp imapsync Admin@c:'C:/msys/1.0/home/Admin/imapsync/'
tests_win32: dosify_bat
scp imapsync test.bat Admin@c:'C:/msys/1.0/home/Admin/imapsync/'
ssh Admin@c 'perl C:/msys/1.0/home/Admin/imapsync/imapsync --tests_debug'
# ssh Admin@c 'perl C:/msys/1.0/home/Admin/imapsync/imapsync'
# ssh Admin@c 'C:/msys/1.0/home/Admin/imapsync/test.bat'
# ssh Admin@c 'tasklist /FI "PID eq 0"'
# ssh Admin@c 'tasklist /NH /FO CSV'
upload_imapsync_exe:
rsync -avH imapsync.exe \
../../public_html/www.linux-france.org/html/prj/imapsync/
#sh $(HOME)/memo/lfo-rsync
test_imapsync_exe: dosify_bat test_imapsync_exe: dosify_bat
scp test_exe.bat Admin@c:'C:/msys/1.0/home/Admin/imapsync/' scp test_exe.bat Admin@c:'C:/msys/1.0/home/Admin/imapsync/'
time ssh Admin@c 'C:/msys/1.0/home/Admin/imapsync/test_exe.bat' time ssh Admin@c 'C:/msys/1.0/home/Admin/imapsync/test_exe.bat'
imapsync.exe: imapsync imapsync_cidone dosify_bat imapsync.exe: imapsync imapsync_cidone dosify_bat
(date "+%s"| tr "\n" " "; echo -n "BEGIN " $(VERSION) ": "; date) >> .BUILD_EXE_TIME
scp imapsync build_exe.bat test_exe.bat \ scp imapsync build_exe.bat test_exe.bat \
Admin@c:'C:/msys/1.0/home/Admin/imapsync/' Admin@c:'C:/msys/1.0/home/Admin/imapsync/'
time ssh Admin@c 'C:/msys/1.0/home/Admin/imapsync/build_exe.bat' time ssh Admin@c 'C:/msys/1.0/home/Admin/imapsync/build_exe.bat'
time ssh Admin@c 'C:/msys/1.0/home/Admin/imapsync/test_exe.bat' time ssh Admin@c 'C:/msys/1.0/home/Admin/imapsync/test_exe.bat'
scp Admin@c:'C:/msys/1.0/home/Admin/imapsync/imapsync.exe' . scp Admin@c:'C:/msys/1.0/home/Admin/imapsync/imapsync.exe' .
ssh Admin@c 'C:/msys/1.0/home/Admin/imapsync/imapsync.exe --version' > VERSION_EXE ssh Admin@c 'C:/msys/1.0/home/Admin/imapsync/imapsync.exe --version' > VERSION_EXE
(date "+%s"| tr "\n" " "; echo -n "END " $(VERSION) ": "; date) >> .BUILD_EXE_TIME
zzz:
(date "+%s"| tr "\n" " "; echo -n "BEGIN " $(VERSION) ": "; date) >> .BUILD_EXE_TIME
(date "+%s"| tr "\n" " "; echo -n "END " $(VERSION) ": "; date) >> .BUILD_EXE_TIME
lfo: dist niouze_lfo upload_lfo lfo: dist niouze_lfo upload_lfo
@ -173,10 +198,10 @@ upload_lfo:
sh ~/memo/lfo-rsync sh ~/memo/lfo-rsync
niouze_lfo : VERSION niouze_lfo : VERSION
. memo && lfo_announce . ./memo && lfo_announce
niouze_fm: VERSION niouze_fm: VERSION
. memo && fm_announce . ./memo && fm_announce
public: niouze_fm public: niouze_fm

19
README
View File

@ -3,7 +3,7 @@ NAME
Synchronise mailboxes between two imap servers. Good at IMAP migration. Synchronise mailboxes between two imap servers. Good at IMAP migration.
More than 36 different IMAP server softwares supported with success. More than 36 different IMAP server softwares supported with success.
$Revision: 1.350 $ $Revision: 1.366 $
SYNOPSIS SYNOPSIS
To synchronise imap account "foo" on "imap.truc.org" to imap account To synchronise imap account "foo" on "imap.truc.org" to imap account
@ -16,12 +16,13 @@ SYNOPSIS
INSTALL INSTALL
imapsync works fine under any Unix OS with perl. imapsync works fine under any Unix OS with perl.
imapsync works fine under Windows (2000, XP) with ActiveState's 5.8 Perl imapsync works fine under Windows (2000, XP)
or as a standalone binary software. with Strawberry Perl 5.10 or 5.12
or as a standalone binary software imapsync.exe
imapsync is already available directly on the following distributions imapsync is already available directly on the following distributions
(at least): FreeBSD, Debian, Ubuntu, Gentoo, NetBSD, Darwin, Mandriva (at least): FreeBSD, Debian, Ubuntu, Gentoo, Fedora, NetBSD, Darwin,
and OpenBSD (yeah!). Mandriva and OpenBSD (yeah!).
Get imapsync at Get imapsync at
http://www.linux-france.org/prj/imapsync/ http://www.linux-france.org/prj/imapsync/
@ -70,6 +71,7 @@ USAGE
[--syncacls] [--syncacls]
[--regexmess <regex>] [--regexmess <regex>] [--regexmess <regex>] [--regexmess <regex>]
[--maxsize <int>] [--maxsize <int>]
[--minsize <int>]
[--maxage <int>] [--maxage <int>]
[--minage <int>] [--minage <int>]
[--skipheader <regex>] [--skipheader <regex>]
@ -185,8 +187,9 @@ MAILING-LIST
To write on the mailing-list, the address is: To write on the mailing-list, the address is:
<imapsync@linux-france.org> <imapsync@linux-france.org>
To subscribe, send a message to: To subscribe, send any message (even empty) to:
<imapsync-subscribe@listes.linux-france.org> <imapsync-subscribe@listes.linux-france.org> then just reply to the
confirmation message.
To unsubscribe, send a message to: To unsubscribe, send a message to:
<imapsync-unsubscribe@listes.linux-france.org> <imapsync-unsubscribe@listes.linux-france.org>
@ -401,5 +404,5 @@ SIMILAR SOFTWARES
Feedback (good or bad) will often be welcome. Feedback (good or bad) will often be welcome.
$Id: imapsync,v 1.350 2010/09/06 01:05:09 gilles Exp gilles $ $Id: imapsync,v 1.366 2010/10/25 17:15:52 gilles Exp gilles $

17
TIME
View File

@ -1,3 +1,20 @@
90 Permit host* to change the case of headers. 1.366 release.
120 Fix tls capability. 1.365 release.
150 1.363 public release.
240 Added --delete2folders option.
150 Try to fix again win32 libeay32.dll issue. Upload 1.361 and .exe
270 Draw imapsync logo with inkscape. Had a crash after 2 hours of drawing and saved file was also buggy...
120 Bugfix win32. Email. Added and tested linkage with --link libeay32.dll --link ssleay32.dll
120 Bugfix about POSIX alarm on win32. imapsync 1.359 public release.
160 Added memory consumption for win32. imapsync 1.358
300 Local environment. Tests. Moved subroutines below main. Changed alarm call.
90 Memory consumption on Win32
50 Better memory consumption statistics
35 Added memory consumption to final stats.
240 Wrote a message_string_raw() function. Tests.
120 Thinking about performance. Email to italian compagny.
100 Tracking memory consumption. Wrote learn/memory_consumption. Sent bug report to bug-Mail-IMAPClient [at] rt.cpan.org.
180 Tracking memory consumption.
360 Date::Manip away. good_date() rewriting. release check on lfo 360 Date::Manip away. good_date() rewriting. release check on lfo
210 Better output when copying messages. Profiling memory. 210 Better output when copying messages. Profiling memory.
80 Gmail efficiency. Wanted! on homepage, email on list. 80 Gmail efficiency. Wanted! on homepage, email on list.

26
TODO
View File

@ -1,5 +1,5 @@
#!/bin/cat #!/bin/cat
# $Id: TODO,v 1.85 2010/09/06 01:08:14 gilles Exp gilles $ # $Id: TODO,v 1.86 2010/10/08 00:43:09 gilles Exp gilles $
TODO file for imapsync TODO file for imapsync
---------------------- ----------------------
@ -13,6 +13,8 @@ Start a wiki for imapsync.
Add a best practice migration tips document. Add a best practice migration tips document.
Write a Mail::imapsync package and use it.
Fix the mailing-list archive bug with From at Fix the mailing-list archive bug with From at
the beginning of a line the beginning of a line
http://www.linux-france.org/prj/imapsync_list/msg00307.html http://www.linux-france.org/prj/imapsync_list/msg00307.html
@ -21,19 +23,11 @@ Evaluate
http://www.rackspace.com/apps/email_hosting/migrations http://www.rackspace.com/apps/email_hosting/migrations
http://www.yippiemove.com/ http://www.yippiemove.com/
Evaluate memory consumption with (or better):
print qx{ ps o pid,pcpu,comm,vsz,rss,size $$ }, "\n"
Search memory leaks with
Test-Weaken Test-Memory-Cycle Devel-Cycle Devel-Leak Test-Weaken
sh -x tests.sh ll_bigmail
is a good candidate to stress memory.
Suggestion: it's very difficult to track down messages which are behaving Suggestion: it's very difficult to track down messages which are behaving
funny during the sync. It would be great - and presumably easy to code - funny during the sync. It would be great - and presumably easy to code -
to have an option to have imapsync display e.g. the subject of an to have an option to have imapsync display e.g. the subject of an
e-mail when it gets synced, rather than just the message ID and the date/time. e-mail when it gets synced, rather than just the message ID and the date/time.
Add --noauthmd51 --noauthmd52 to permit noauthmd5 by host Add --noauthmd51 --noauthmd52 to permit noauthmd5 by host
Add a well described problem for each problem detected Add a well described problem for each problem detected
@ -109,13 +103,14 @@ Add a --skipheaderinfolder option
Fix this: Fix this:
> - Erreur avec la traditionnelle différence entre Windows > - Erreur avec la traditionnelle différence entre Windows
> et LInux sur les retour-chariots : le calcul de la > et Linux sur les retour-chariots : le calcul de la
> longueur du message ou des entêtes à envoyer au serveur > longueur du message ou des entêtes à envoyer au serveur
> cible n'est pas bon sur une machine Windows. > cible n'est pas bon sur une machine Windows.
> Ci-dessous la modif : > Ci-dessous la modif :
> >
> # No NL Count on Windows my $length = ( -s $file ) + $bare_nl_count; > # No NL Count on Windows my $length = ( -s $file ) + $bare_nl_count;
> my $length = ( -s $file ); > my $length = ( -s $file );
I wonder if it is Windows or the imap server used.
Add stdin/stdout filter before transfer: Add stdin/stdout filter before transfer:
@ -170,6 +165,17 @@ Explain expunge behavior.
=========================================================================== ===========================================================================
DONE. Evaluate memory consumption with (or better):
print qx{ ps o pid,pcpu,comm,vsz,rss,size $$ }, "\n"
Search memory leaks with
Test-Weaken Test-Memory-Cycle Devel-Cycle Devel-Leak Test-Weaken
sh -x tests.sh ll_bigmail
sh -x tests.sh ll_memory_consumption
are good candidate to stress memory.
No memory leak detected just up to 8 memory copies of the same data
in Mail::IMAPClient.
Wrote ./learn/memory_consumption to show that it is a Mail::IMAPClient issue.
DONE.Be more effiscient with large mailboxes DONE.Be more effiscient with large mailboxes
Write a Mail::IMAPClient::fetch_hash allowing selecting messages to fetch Write a Mail::IMAPClient::fetch_hash allowing selecting messages to fetch
4 hours estimated time coding. Time spent 4h30 (with public release and emails) 4 hours estimated time coding. Time spent 4h30 (with public release and emails)

View File

@ -1 +1 @@
1.350 1.366

View File

@ -1 +1 @@
1.350 1.366

View File

@ -1,10 +1,10 @@
REM $Id: build_exe.bat,v 1.3 2010/09/06 02:16:24 gilles Exp gilles $ REM $Id: build_exe.bat,v 1.6 2010/10/24 23:51:48 gilles Exp gilles $
echo Building imapsync.exe echo Building imapsync.exe
cd C:\msys\1.0\home\Admin\imapsync cd C:\msys\1.0\home\Admin\imapsync
perl -mMail::IMAPClient -mDigest::MD5 -mTerm::ReadKey -mIO::Socket::SSL -mFile::Spec -mDigest::HMAC_MD5 -e '' perl -mMail::IMAPClient -mDigest::MD5 -mTerm::ReadKey -mIO::Socket::SSL -mFile::Spec -mDigest::HMAC_MD5 -e ''
pp -o imapsync.exe -M Term::ReadKey -M IO::Socket::SSL -M Digest::HMAC_MD5 imapsync pp -o imapsync.exe -M Mail::IMAPClient -M IO::Socket -M IO::Socket::SSL -M Digest::MD5 -M Digest::HMAC_MD5 -M Term::ReadKey imapsync
echo Done building imapsync.exe echo Done building imapsync.exe

View File

@ -3,8 +3,8 @@
#RELEASE_FOCUS="Initial freshmeat announcement" #RELEASE_FOCUS="Initial freshmeat announcement"
#RELEASE_FOCUS="Documentation" #RELEASE_FOCUS="Documentation"
#RELEASE_FOCUS="Code cleanup" #RELEASE_FOCUS="Code cleanup"
#RELEASE_FOCUS="Minor feature enhancements" RELEASE_FOCUS="Minor feature enhancements"
RELEASE_FOCUS="Major feature enhancements" #RELEASE_FOCUS="Major feature enhancements"
#RELEASE_FOCUS="Minor bugfixes" #RELEASE_FOCUS="Minor bugfixes"
#RELEASE_FOCUS="Major bugfixes" #RELEASE_FOCUS="Major bugfixes"
#RELEASE_FOCUS="Minor security fixes" #RELEASE_FOCUS="Minor security fixes"
@ -12,9 +12,4 @@ RELEASE_FOCUS="Major feature enhancements"
#TEXT_BODY="Syntax cleanup" #TEXT_BODY="Syntax cleanup"
#TEXT_BODY="Updated documentation" #TEXT_BODY="Updated documentation"
TEXT_BODY=" TEXT_BODY="Since last public release 1.350: Added --minsize option to transfer messages bigger than a given size. Added memory consumption to know how much concurent imapsync can run in parallel on a system. Thanks to the freshmeat guy who corrects my bad and poorly English!"
Since 1.350:
Bug fixes.
Many thanks to the freshmeat folk that correct my bad and poorly English!
"

View File

@ -1,31 +1,9 @@
{ {
"release": { "release": {
"tag_list": "Major feature enhancements", "tag_list": "stable, Minor feature enhancements",
"version": "1.350", "version": "1.359",
"hidden_from_frontpage": false, "hidden_from_frontpage": false,
"changelog": " "changelog": "Since last public release 1.350: Added --minsize option to transfer messages bigger than a given size.Added memory consumption to know how much concurent imapsync can run in parallel on a system. Many thanks to the freshmeat folk that correct my bad and poorly English!"
Since 1.286:
Added --noreleasecheck option.
Added new release checking.
Removed Date::Manip dependancy.
Better output when copying messages.
More effiscient with large mailboxes.
Clarity: print capability after authenticated state.
Duplicate messages on host2 are now deleted with --delete2
--skipsize turned on by default.
Usability fix: examples with --password1 instead of --passfile1
Added --debugimap1 --debugimap2 to permit imap outpout with only one host.
Added reconnect statistics.
Added reconnect behavior with Mail::IMAPClient 2.2.9
Added statistic about messages deleted.
Added statistic about average bandwith rate.
Flags are now exactly synced from host1 to host2
(Previous releases just added flags).
Added TLSv1 support.
Filter flags sync with the list given by PERMANENTFLAGS on --host2
and bug fixes.
Many thanks to the freshmeat folk that correct my bad and poorly English!
"
} }
} }

2248
imapsync

File diff suppressed because it is too large Load Diff

View File

@ -5,7 +5,7 @@
<title>imapsync <!--#exec cmd="cat VERSION" --> </title> <title>imapsync <!--#exec cmd="cat VERSION" --> </title>
<meta name="generator" content="Bluefish 1.0.7"/> <meta name="generator" content="Bluefish 1.0.7"/>
<meta name="author" content="Gilles LAMIRAL"/> <meta name="author" content="Gilles LAMIRAL"/>
<meta name="date" content="2010-08-21T15:39:13+0200"/> <meta name="date" content="2010-10-25T01:49:57+0200"/>
<meta name="copyright" content="None"/> <meta name="copyright" content="None"/>
<meta name="keywords" content="imap, transfert, migration"/> <meta name="keywords" content="imap, transfert, migration"/>
<meta name="description" content="imap migration tool"/> <meta name="description" content="imap migration tool"/>
@ -13,15 +13,37 @@
<meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8"/> <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8"/>
<meta http-equiv="content-style-type" content="text/css"/> <meta http-equiv="content-style-type" content="text/css"/>
<meta http-equiv="expires" content="0"/> <meta http-equiv="expires" content="0"/>
<link rel="icon" type="image/png" href="logo_imapsync_s.png" />
<style type="text/css">
body {
color: black;
background-color: #ccdddd
}
div.center {
text-align: center;
}
</style>
</head> </head>
<body> <body>
<div class="center">
<img src="logo_imapsync.png" width="486" height="309" alt="imapsync logo"/>
</div>
<h1><a href="http://www.linux-france.org/prj/imapsync/">imapsync web site</a></h1> <h1><a href="http://www.linux-france.org/prj/imapsync/">imapsync web site</a></h1>
<h2>What is imapsync?</h2> <h2>What is imapsync?</h2>
<p><b>imapsync</b> software is a command line tool allowing incremental and <p><b>imapsync</b> software is a command line tool allowing incremental and
recursive <b>imap</b> transfers from one mailbox to another, both anywhere on the internet. recursive <b>imap</b> transfers from one mailbox to another, both anywhere on the internet
or in your local network.
</p> </p>
<p><b>imapsync</b> is useful for imap account <b>migration</b> or imap account <b>backup</b>. <p><b>imapsync</b> is useful for imap account <b>migration</b> or imap account <b>backup</b>.
@ -36,26 +58,37 @@ where the user plays independently on both sides. Use <b>offlineimap</b>
<h2><a id="AUTHOR"></a> AUTHOR</h2> <h2><a id="AUTHOR"></a> AUTHOR</h2>
<p>Gilles LAMIRAL<br/> <p>Gilles LAMIRAL<br/>
Email: <b>lamiral@linux-france.org</b></p> Email: <b>gilles.lamiral@laposte.net</b></p>
<p>Feedback good or bad is often welcome.</p> <p>Good feedback is always welcome, bad feedback is often welcome.</p>
<p>A good place to talk about imapsync is the public <p>A nice place to talk about imapsync is the public
imapsync mailing-list (see below).</p> imapsync mailing-list (see below).</p>
<p>Gilles LAMIRAL earns his living writing, installing, configuring and
teaching free, open and gratis softwares. <br/>
Do not hesitate to pay him for that services.</p>
<p>If you <b>use imapsync</b> as a <b>professionnal worker</b> you may <p>If you <b>use imapsync</b> as a <b>professionnal worker</b> you may
<b><a href="http://www.linux-france.org/prj/imapsync_list/msg00470.html">read this call</a></b> <b><a href="http://www.linux-france.org/prj/imapsync_list/msg00470.html">read this call</a></b>
for feedback. for rewarding.
</p> </p>
<p>Other ways to consider the situation:</p>
<ul>
<li>stop beeing a
<a href="http://en.wikipedia.org/wiki/Leech_%28computing%29">leech</a>.
</li>
<li>think about
<a href="http://en.wikipedia.org/wiki/Free_rider_problem">helping back</a>
a software developper and helper.
</li>
</ul>
<h2><a id="donation"></a> imapsync call for donation</h2> <h2><a id="donation"></a> imapsync call for donation</h2>
<p>Are you happy with this <b>free</b>, <b>open</b> and <b>gratis</b> software?<br/></p> <p>Are you happy with this <b>free</b>, <b>open</b> and <b>gratis</b> software?<br/></p>
<p>Then <b>you</b> can help the author to <b>maintain</b> imapsync and <b>support</b> happy (or unhappy) users: <b>YOU!</b></p> <p>Then <b>you</b> can help me back to <b>maintain</b> imapsync
and <b>support you!</b> <br/>
I will personally thank each donation
with an email and add an entry in the imapsync <a href="CREDITS">CREDITS</a> file.</p>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post"> <form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<p> <p>
@ -68,10 +101,25 @@ where the user plays independently on both sides. Use <b>offlineimap</b>
</form> </form>
<p> <p>
Or offer him a book on his You can also offer me a book on my imapsync amazon
<a href="http://www.amazon.com/gp/registry/wishlist/1C9UNDIH3P7R7/"><b>wishlist</b></a><br/> <a href="http://www.amazon.com/gp/registry/wishlist/1C9UNDIH3P7R7/"><b>wishlist</b></a><br/>
</p>
<b><i>Thanks in advance!</i></b></p> <p>
If you prefer making your donation with cash or cheque then my postal address is:<br/>
<b>Gilles LAMIRAL<br/>
4 La Billais<br/>
35580 Baulon<br/>
FRANCE<br/></b>
</p>
<p>
My phone numbers are:<br/>
<b>+33 951 84 42 42</b> (home/work)<br/>
<b>+33 620 79 76 06</b> (mobile)<br/>
<b>+33 956 84 42 42</b> (fax)<br/>
</p>
<p><b><i>Thanks in advance!</i></b></p>
<h2><a id="latest"></a><a href="imapsync">Latest release <h2><a id="latest"></a><a href="imapsync">Latest release
@ -85,13 +133,13 @@ Or offer him a book on his
<p><b>Standalone</b> <p><b>Standalone</b>
<a href="imapsync.exe"><b>imapsync <!--#exec cmd="cat VERSION_EXE" --> executable for win32</b></a>, <a href="imapsync.exe"><b>imapsync <!--#exec cmd="cat VERSION_EXE" --> executable for win32</b></a>,
thanks to Strawberry Perl 5.12 and Par::Packed module.<br/> thanks to Strawberry Perl 5.12 and Par::Packer module.<br/>
(imapsync.exe built time is <!--#flastmod file="imapsync.exe" -->)</p> The imapsync.exe built time is <!--#flastmod file="imapsync.exe" -->.<br/>
The build system for imapsync.exe is XP Pro SP2 on a Intel Celeron 400 MHz 256 Mo RAM.
</p>
<h2><a href="INSTALL">imapsync installation</a></h2> <h2><a href="INSTALL">imapsync installation</a></h2>
<h2><a href="README">README</a></h2> <h2><a href="README">README</a></h2>
<h2><a href="FAQ">Frequently Asked Questions</a></h2> <h2><a href="FAQ">Frequently Asked Questions</a></h2>
@ -100,7 +148,9 @@ thanks to Strawberry Perl 5.12 and Par::Packed module.<br/>
<h2><a id="MAILING-LIST"></a>MAILING-LIST</h2> <h2><a id="MAILING-LIST"></a>MAILING-LIST</h2>
<p> <p>
The public mailing-list may be the best way to get support.<br/> The public mailing-list may be the best way to get free support.<br/>
You can write to the mailing-list even if you're not subscribed to it.<br/>
In that case you will receive a confirmation message each time you post (to avoid spam).
</p> </p>
<p> <p>
To <b>write</b> on the mailing-list, the address is: To <b>write</b> on the mailing-list, the address is:
@ -123,17 +173,24 @@ thanks to Strawberry Perl 5.12 and Par::Packed module.<br/>
</p> </p>
<p> <p>
The <b>list archives</b> may be available at The <b>list archives</b> are available at
<a href="http://www.linux-france.org/prj/imapsync_list/"> <a href="http://www.linux-france.org/prj/imapsync_list/">
http://linux-france.org/prj/imapsync_list/</a><br/> http://linux-france.org/prj/imapsync_list/</a><br/>
So consider that the list is public, anyone can see your post.<br/> So consider that the list is public, anyone can see your post.<br/>
<i>Use a pseudonym or do not post to <i>Use a pseudonym or do not post to
this list if you want to stay private</i>.<br/> this list if you want to stay private</i>.<br/>
</p> </p>
<form method="get" action="http://www.google.com/search">
<p> <b>Search</b> in the imapsync list <b>archives</b>:
<input type="text" name="q" value="migrate gmail exchange" size="30" />
<input type="hidden" name="as_sitesearch" value="www.linux-france.org/prj/imapsync_list/" />
(change the keywords with your own request and press <b>Enter</b>)
</p>
</form>
<p> <p>
<b>Thank you for your participation!</b> <b>Thank you for your participation to the imapsync mailing-list!</b>
</p> </p>
@ -142,8 +199,9 @@ thanks to Strawberry Perl 5.12 and Par::Packed module.<br/>
<a href="TODO">WANTED</a></h2> <a href="TODO">WANTED</a></h2>
<p>I code new features for free when I have time and when I find it useful.<br/> <p>I code new features and fix bugs for free when I have time and when I find it useful.<br/>
If you really want a feature you can donate money and I'll code it.<br/> If you really want a feature or a fix you can donate money and my next development time
will be to code it or fix it.<br/>
</p> </p>
<p>Some features and their time/money to be done evaluation</p> <p>Some features and their time/money to be done evaluation</p>
@ -151,11 +209,12 @@ If you really want a feature you can donate money and I'll code it.<br/>
<table cellpadding="10" cellspacing="0" border="1"> <table cellpadding="10" cellspacing="0" border="1">
<tr align="right"><th>DONE</th><th>Feature </th><th>Time guessed</th><th>Time spent</th><th>Money received</th><th>Money needed</th></tr> <tr align="right"><th>DONE</th><th>Feature </th><th>Time guessed</th><th>Time spent</th><th>Money received</th><th>Money needed</th></tr>
<tr align="right"><td> No</td><td>Efficient Gmail backup </td><td> 8 hours </td><td> 80 min </td><td> 0 $ </td><td>240 $ </td></tr> <tr align="right"><td> No</td><td>Efficient Gmail backup </td><td> 8 hours </td><td> 80 min </td><td> 0 $ </td><td>240 $ </td></tr>
<tr align="right"><td> No</td><td>Speedup 50% </td><td>10 hours </td><td> 80 min </td><td>10 $ </td><td>300 $ </td></tr> <tr align="right"><td> No</td><td>Speedup 50% </td><td>10 hours </td><td> 80 min </td><td> 10 $ </td><td>300 $ </td></tr>
<tr align="right"><td> No</td><td>Backup to files </td><td> 8 hours </td><td> 60 min </td><td> 0 $ </td><td>240 $ </td></tr> <tr align="right"><td> No</td><td>Backup to files </td><td> 8 hours </td><td> 60 min </td><td> 0 $ </td><td>240 $ </td></tr>
<tr align="right"><td> No</td><td>--deletefolder2 </td><td> 3 hours </td><td> 30 min </td><td> 0 $ </td><td> 90 $ </td></tr> <tr align="right"><td><b>Yes</b></td><td>--delete2folders </td><td> 3 hours </td><td>270 min </td><td> 90 $ </td><td> 0 $ </td></tr>
<tr align="right"><td> No</td><td>NTLM auth </td><td> 3 hours </td><td> 60 min </td><td> 0 $ </td><td> 90 $ </td></tr> <tr align="right"><td> No</td><td>NTLM auth </td><td> 3 hours </td><td> 60 min </td><td> 0 $ </td><td> 90 $ </td></tr>
<tr align="right"><td> Yes</td><td>Win32 imapsync.exe </td><td> 8 hours </td><td>520 min </td><td> 0 $ </td><td>240 $ </td></tr> <tr align="right"><td> Yes</td><td>Win32 imapsync.exe </td><td> 8 hours </td><td>520 min </td><td> 0 $ </td><td>240 $ </td></tr>
<tr align="right"><td> Yes</td><td>Win32 bug fixes </td><td> various </td><td>370 min </td><td>100 $ </td><td> 85 $ </td></tr>
<tr align="right"><td> Yes</td><td>Fix capability changes </td><td> 1 hour </td><td> 80 min </td><td> 0 $ </td><td> 30 $ </td></tr> <tr align="right"><td> Yes</td><td>Fix capability changes </td><td> 1 hour </td><td> 80 min </td><td> 0 $ </td><td> 30 $ </td></tr>
<tr align="right"><td> Yes</td><td>Large mailbox --maxage </td><td> 4 hours </td><td>270 min </td><td> 0 $ </td><td>120 $ </td></tr> <tr align="right"><td> Yes</td><td>Large mailbox --maxage </td><td> 4 hours </td><td>270 min </td><td> 0 $ </td><td>120 $ </td></tr>
</table> </table>
@ -175,7 +234,7 @@ If you really want a feature you can donate money and I'll code it.<br/>
<!--#config timefmt="%D" --> <!--#config timefmt="%D" -->
<!--#config timefmt="%A %B %d, %Y" --> <!--#config timefmt="%A %B %d, %Y" -->
This document last modified <!--#echo var="LAST_MODIFIED" --> <br/> This document last modified <!--#echo var="LAST_MODIFIED" --> <br/>
$Id: index.shtml,v 1.22 2010/08/21 13:39:35 gilles Exp gilles $ $Id: index.shtml,v 1.31 2010/10/25 00:05:35 gilles Exp gilles $
</p> </p>
</body> </body>

View File

@ -13,7 +13,7 @@ my $imap = Mail::IMAPClient->new();
$imap->Debug(1); $imap->Debug(1);
$imap->Server($host); $imap->Server($host);
$imap->connect() or die; $imap->connect() or die;
$imap->isUnconnected(); $imap->IsUnconnected();
$imap->User($user); $imap->User($user);
$imap->Password($password); $imap->Password($password);
$imap->login() or die; $imap->login() or die;

0
learn/io_socket_get Normal file → Executable file
View File

57
learn/memory_consumption Executable file
View File

@ -0,0 +1,57 @@
#!/usr/bin/perl
use warnings;
use strict;
use English;
use Mail::IMAPClient;
$ARGV[3] or die "usage: $0 host user password folder\n";
my $host = $ARGV[0];
my $user = $ARGV[1];
my $password = $ARGV[2];
my $folder = $ARGV[3];
my $imap = Mail::IMAPClient->new();
$imap->Debug(0);
$imap->Server($host);
$imap->connect() or die;
$imap->User($user);
$imap->Password($password);
$imap->login() or die;
$imap->Uid(1);
$imap->Peek(1);
$imap->Clear(1);
#print map {"$_\n"} $imap->folders();
$imap->select($folder) or die;
my @msgs = $imap->messages or die "Could not messages: $@\n";
print "@msgs\n";
print memory_consumption();
foreach my $msg (@msgs) {
my $size = $imap->size($msg);
print "message size of $msg = $size bytes\n";
my $string = $imap->message_string($msg);
print memory_consumption();
$imap->append('INBOX.Trash', $string);
print memory_consumption();
}
$imap->close();
print memory_consumption();
sub memory_consumption {
my @PID = (@_) ? @_ : ($PROCESS_ID);
my $val;
my ($package, $filename, $line, $subroutine) = caller(0);
$val = "$package $filename line $line: ";
my @ps = qx{ ps o vsz @PID };
my $vsz = $ps[1];
chomp($vsz);
$val .= $vsz * 1024 . " bytes\n";
#$val .= '-' x 80 . "\n";
return($val);
}

110
learn/message_string_raw Executable file
View File

@ -0,0 +1,110 @@
#!/usr/bin/perl
use warnings;
use strict;
use English;
use Mail::IMAPClient;
use Socket;
$ARGV[3] or die "usage: $0 host user password folder\n";
my $host = $ARGV[0];
my $user = $ARGV[1];
my $password = $ARGV[2];
my $folder = $ARGV[3];
my $imap = Mail::IMAPClient->new();
$imap->Debug(0);
$imap->Server($host);
$imap->connect() or die;
$imap->User($user);
$imap->Password($password);
$imap->login() or die;
$imap->Uid(1);
$imap->Peek(1);
$imap->Clear(1);
#print map {"$_\n"} $imap->folders();
$imap->select($folder) or die;
my @msgs = $imap->messages or die "Could not messages: $@\n";
print "@msgs\n";
print memory_consumption_ratio(), "\n";
my $size_max = 0;
foreach my $msg (@msgs) {
my $size = $imap->size($msg);
$size_max = ($size_max > $size) ? $size_max : $size;
print "message size of $msg = $size bytes\n";
my $string_raw = $imap->message_string_raw($msg);
print "ms raw: ", memory_consumption_ratio($size_max), "\n";
my $string = $imap->message_string($msg);
print "ms nor: ", memory_consumption_ratio($size_max), "\n";
print "NOT EQUAL\n" if ($string_raw ne $string);
#print substr($string_raw, 0, 80), "]\n";
#print substr($string_raw, -80, 80), "]\n";
$imap->append('INBOX.Trash', $string_raw);
$imap->append('INBOX.Trash', $string);
}
$imap->close();
print "ap nor: ", memory_consumption_ratio($size_max), "\n";
sub memory_consumption_of_pid {
my @PID = (@_) ? @_ : ($PROCESS_ID);
my $val;
my @ps = qx{ ps o vsz @PID };
shift @ps;
chomp @ps;
my @val = map { $_ * 1024 } @ps;
return(@val);
}
sub memory_consumption_ratio {
my ($base) = @_;
$base ||= 1;
my ($consu) = memory_consumption_of_pid();
return($consu / $base);
}
package Mail::IMAPClient;
sub message_string_raw {
my $self = shift;
my ($msg) = @_;
my $sock = $self->{Socket};
print "Socket:[$sock]\n";
my $count = $self->Count($self->Count+1);
print $sock "$count UID FETCH 1 BODY.PEEK[]\r\n";
my $buf;
my $line;
CORE::select( undef, undef, undef, 0.025 );
my $expected_size;
local $/ = "\r\n";
$line = <$sock>;
print $line;
if ( $line =~ m/.*{(\d+)\}\r\n/o ) {
$expected_size = $1;
print "\nEXPECT $expected_size\n";
}
#local $/;
while ($buf .= <$sock> and (length $buf <= $expected_size)){
#print length $buf, "\n";
#CORE::select( undef, undef, undef, 0.025 );
}
$line = <$sock>;
print $line;
if ( $line =~ m/$count OK FETCH.*\r\n/o ) {
return(substr($buf, 0, $expected_size))
}else{
return(undef);
}
}

209
learn/message_string_raw_pb Executable file
View File

@ -0,0 +1,209 @@
#!/usr/bin/perl
use warnings;
use strict;
use English;
use Mail::IMAPClient;
use Socket;
$ARGV[3] or die "usage: $0 host user password folder\n";
my $host = $ARGV[0];
my $user = $ARGV[1];
my $password = $ARGV[2];
my $folder = $ARGV[3];
my $imap = Mail::IMAPClient->new();
$imap->Debug(0);
$imap->Server($host);
$imap->connect() or die;
$imap->User($user);
$imap->Password($password);
$imap->login() or die;
$imap->Uid(1);
$imap->Peek(1);
$imap->Clear(1);
#print map {"$_\n"} $imap->folders();
$imap->select($folder) or die;
my @msgs = $imap->messages or die "Could not messages: $@\n";
print "@msgs\n";
print memory_consumption_ratio(), "\n";
my $size_max = 0;
foreach my $msg (@msgs) {
my $size = $imap->size($msg);
$size_max = ($size_max > $size) ? $size_max : $size;
print "message size of $msg = $size bytes\n";
my $string_raw = $imap->message_string_raw($msg);
print "ms raw: ", memory_consumption_ratio($size_max), "\n";
#$imap->append_string('INBOX.Trash', $string_raw);
my $uid_raw = $imap->append_string_raw('INBOX.Trash', $string_raw);
print "ap raw $uid_raw: ", memory_consumption_ratio($size_max), "\n";
my $string = $imap->message_string($msg);
print "ms nor: ", memory_consumption_ratio($size_max), "\n";
print "NOT EQUAL\n" if ($string_raw ne $string);
#print substr($string_raw, 0, 80), "]\n";
#print substr($string_raw, -80, 80), "]\n";
my $uid_nor = $imap->append_string('INBOX.Trash', $string_raw);
print "ap nor $uid_nor: ", memory_consumption_ratio($size_max), "\n";
$imap->select('INBOX.Trash') or die;
$string_raw = $imap->message_string_raw($uid_raw);
print "msraw $uid_raw D:", substr($string_raw, 0, 80), "]\n";
print "msraw $uid_raw F:", substr($string_raw, -80, 80), "]\n";
$string = $imap->message_string_raw($uid_nor);
print "msraw $uid_nor D:", substr($string, 0, 80), "]\n";
print "msraw $uid_nor F:", substr($string, -80, 80), "]\n";
print "NOT EQUAL app\n" if ($string_raw ne $string);
print "eq: ", memory_consumption_ratio($size_max), "\n";
}
$imap->close();
sub memory_consumption_of_pid {
my @PID = (@_) ? @_ : ($PROCESS_ID);
my $val;
my @ps = qx{ ps o vsz @PID };
shift @ps;
chomp @ps;
my @val = map { $_ * 1024 } @ps;
return(@val);
}
sub memory_consumption_ratio {
my ($base) = @_;
$base ||= 1;
my ($consu) = memory_consumption_of_pid();
return($consu / $base);
}
package Mail::IMAPClient;
use Errno qw(EAGAIN EPIPE ECONNRESET);
sub message_string_raw {
my $self = shift;
my ($msg) = @_;
my $sock = $self->{Socket};
my $io_sel= IO::Select->new($sock);
my $count = $self->Count($self->Count+1);
print "$count UID FETCH $msg BODY.PEEK[]\r\n";
print $sock "$count UID FETCH $msg BODY.PEEK[]\r\n";
my $buf;
my $line;
CORE::select( undef, undef, undef, 0.025 );
my $expected_size;
local $/ = "\r\n";
$line = <$sock>;
print "msr <> [$line]";
if ( $line =~ m/.*{(\d+)\}\r\n/o ) {
$expected_size = $1;
print "\nEXPECT $expected_size\n";
}
#local $/;
while ($buf .= <$sock> and (length $buf <= $expected_size)){
}
CORE::select( undef, undef, undef, 0.025 );
$line = <$sock>;
print "[$line][$count OK FETCH]\n";
if ( $line =~ m/$count OK FETCH/o ) {
print "GOOD\n";
return(substr($buf, 0, $expected_size))
}else{
print "BAD\n";
return(undef);
}
}
sub append_string_raw {
my $self = shift;
my $folder = $self->Massage(shift);
my ( $text, $flags, $date ) = @_;
defined $text or $text = '';
my $sock = $self->{Socket};
my $io_sel = IO::Select->new($sock);
my($count, $line);
if ( defined $flags ) {
$flags =~ s/^\s+//g;
$flags =~ s/\s+$//g;
$flags = "($flags)" if $flags !~ /^\(.*\)$/;
}
if ( defined $date ) {
$date =~ s/^\s+//g;
$date =~ s/\s+$//g;
$date = qq("$date") if $date !~ /^"/;
}
#$text =~ s/\r?\n/\r\n/og;
my $command =
"APPEND $folder "
. ( $flags ? "$flags " : "" )
. ( $date ? "$date " : "" ) . "{"
. length($text)
. "}\r\n";
local $/ = "\r\n";
#print $command;
$count = $self->Count($self->Count+1);
my $string = "$count ". $command . $text . "\r\n";
$io_sel->can_write();
$self->_send_bytes_2(\$string);
$io_sel->can_read();
$line = <$sock>;
#print "APP 1 [$line]\n";
$io_sel->can_read();
$line = <$sock>;
print "APP 2 [$line]\n";
my $ret;
# <tag> OK [APPENDUID <size> <uid>] APPEND completed
if ($line =~ m{^$count\s+OK\s+\[APPENDUID\s+\d+\s+(\d+)\]}) {
$ret = $1;
}else{
$ret = undef;
}
return($ret);
}
sub _send_bytes_2 {
my ( $self, $byteref ) = @_;
my ( $total ) = ( 0 );
local $SIG{PIPE} = 'IGNORE'; # handle SIGPIPE as normal error
while ( $total < length $$byteref ) {
my $written =
syswrite( $self->Socket, $$byteref, length($$byteref) - $total,
$total );
if ( defined $written ) {
$total += $written;
next;
}
next if ( $! == EAGAIN ) ;
return undef; # no luck
}
$self->_debug("Sent $total bytes");
return $total;
}

4
learn/mi2 Executable file
View File

@ -0,0 +1,4 @@
#!/bin/sh
perl -I../Mail-IMAPClient-2.2.9 "$@"

4
learn/mi3 Executable file
View File

@ -0,0 +1,4 @@
#!/bin/sh
perl -I../Mail-IMAPClient-3.25/lib "$@"

BIN
logo_imapsync.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

149
logo_imapsync_2.svg Normal file
View File

@ -0,0 +1,149 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="210mm"
height="297mm"
id="svg2"
sodipodi:version="0.32"
inkscape:version="0.46"
sodipodi:docname="logo_imapsync_2.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape">
<defs
id="defs4">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 526.18109 : 1"
inkscape:vp_y="6.1230318e-14 : 1000 : 0"
inkscape:vp_z="740.22719 : 526.39646 : 1"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
id="perspective10" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.4"
inkscape:cx="375"
inkscape:cy="651.75749"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1420"
inkscape:window-height="851"
inkscape:window-x="396"
inkscape:window-y="103" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Calque 1"
inkscape:groupmode="layer"
id="layer1">
<g
sodipodi:type="inkscape:box3d"
style="fill:#000080;stroke:#000000;stroke-width:2.5999999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="g2383"
inkscape:perspectiveID="#perspective10"
inkscape:corner0="2.736105 : 0.56278247 : 0 : 1"
inkscape:corner7="0.42090469 : 0.35662757 : 0.42521183 : 1">
<path
sodipodi:type="inkscape:box3dside"
id="path2395"
style="fill:#e9e9ff;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
inkscape:box3dsidetype="11"
d="M 165.04405,433.06625 L 372.02451,316.29166 L 372.02451,427.96116 L 165.04405,482.60704 L 165.04405,433.06625 z" />
<path
sodipodi:type="inkscape:box3dside"
id="path2385"
style="fill:#353564;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
inkscape:box3dsidetype="6"
d="M 99.58158,422.49322 L 99.58158,477.67232 L 165.04405,482.60704 L 165.04405,433.06625 L 99.58158,422.49322 z" />
<path
sodipodi:type="inkscape:box3dside"
id="path2387"
style="fill:#4d4d9f;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
inkscape:box3dsidetype="5"
d="M 99.58158,422.49322 L 261.83828,253.5458 L 372.02451,316.29166 L 165.04405,433.06625 L 99.58158,422.49322 z" />
<path
sodipodi:type="inkscape:box3dside"
id="path2393"
style="fill:#afafde;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
inkscape:box3dsidetype="13"
d="M 99.58158,477.67232 L 261.83828,398.63287 L 372.02451,427.96116 L 165.04405,482.60704 L 99.58158,477.67232 z" />
<path
sodipodi:type="inkscape:box3dside"
id="path2391"
style="fill:#d7d7ff;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
inkscape:box3dsidetype="14"
d="M 261.83828,253.5458 L 261.83828,398.63287 L 372.02451,427.96116 L 372.02451,316.29166 L 261.83828,253.5458 z" />
<path
sodipodi:type="inkscape:box3dside"
id="path2389"
style="fill:#8686bf;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
inkscape:box3dsidetype="3"
d="M 99.58158,422.49322 L 261.83828,253.5458 L 261.83828,398.63287 L 99.58158,477.67232 L 99.58158,422.49322 z" />
</g>
<g
sodipodi:type="inkscape:box3d"
style="fill:#000080;stroke:#000000;stroke-width:2.5999999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="g2397"
inkscape:perspectiveID="#perspective10"
inkscape:corner0="-0.13561373 : 0.35358015 : 0 : 1"
inkscape:corner7="-0.32046499 : 0.25593579 : 1.63751 : 1">
<path
sodipodi:type="inkscape:box3dside"
id="path2409"
style="fill:#e9e9ff;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
inkscape:box3dsidetype="11"
d="M 633.19039,454.81957 L 683.70561,449.12643 L 683.70561,491.26819 L 633.19039,493.84771 L 633.19039,454.81957 z" />
<path
sodipodi:type="inkscape:box3dside"
id="path2399"
style="fill:#353564;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
inkscape:box3dsidetype="6"
d="M 430.4178,320.03894 L 430.4178,433.00274 L 633.19039,493.84771 L 633.19039,454.81957 L 430.4178,320.03894 z" />
<path
sodipodi:type="inkscape:box3dside"
id="path2401"
style="fill:#4d4d9f;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
inkscape:box3dsidetype="5"
d="M 430.4178,320.03894 L 547.50268,263.96289 L 683.70561,449.12643 L 633.19039,454.81957 L 430.4178,320.03894 z" />
<path
sodipodi:type="inkscape:box3dside"
id="path2407"
style="fill:#afafde;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
inkscape:box3dsidetype="13"
d="M 430.4178,433.00274 L 547.50268,407.65579 L 683.70561,491.26819 L 633.19039,493.84771 L 430.4178,433.00274 z" />
<path
sodipodi:type="inkscape:box3dside"
id="path2405"
style="fill:#d7d7ff;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
inkscape:box3dsidetype="14"
d="M 547.50268,263.96289 L 547.50268,407.65579 L 683.70561,491.26819 L 683.70561,449.12643 L 547.50268,263.96289 z" />
<path
sodipodi:type="inkscape:box3dside"
id="path2403"
style="fill:#8686bf;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
inkscape:box3dsidetype="3"
d="M 430.4178,320.03894 L 547.50268,263.96289 L 547.50268,407.65579 L 430.4178,433.00274 L 430.4178,320.03894 z" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.0 KiB

BIN
logo_imapsync_s.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

19
memo
View File

@ -1,5 +1,6 @@
#!/bin/sh #!/bin/sh
# $Id: memo,v 1.23 2010/10/24 23:49:28 gilles Exp gilles $
software_version() { software_version() {
@ -7,6 +8,24 @@ software_version() {
} }
statistics_lfo() {
#grep prj/imapsync/VERSION /usr/local/apache/logs/access_log | sort -n | cut -d ' ' -f 1,12,13|uniq -c | sort -n # list ip
cat <<EOFF
grep -h prj/imapsync/VERSION /usr/local/apache/logs/access_log*|sort -n|cut -d ' ' -f 1,12,13|uniq -c|sort -n # list ip
grep -h prj/imapsync/VERSION /usr/local/apache/logs/access_log*|grep MSWin32|cut -d ' ' -f 1,12,13|sort -n|uniq -c| sort -n # Win32
grep -h prj/imapsync/VERSION /usr/local/apache/logs/access_log*|grep -v MSWin32|cut -d ' ' -f 1,12,13|sort -n|uniq -c| sort -n # No Win32
grep -h prj/imapsync/VERSION /usr/local/apache/logs/access_log*|cut -d ' ' -f 13|sort -n|uniq -c| sort -n # OS usage
grep -h prj/imapsync/VERSION /usr/local/apache/logs/access_log*|cut -d ' ' -f 12|sort -n|uniq -c| sort -n # imapsync release
tail -f /usr/local/apache/logs/access_log|cat -n|grep prj/imapsync/VERSION|cat -n |grep VERSION # lfo frequency'
EOFF
}
niouzes_compil() { niouzes_compil() {
DIR_SAVE=`pwd` DIR_SAVE=`pwd`
cd /home/gilles/public_html/www.linux-france.org/html/ cd /home/gilles/public_html/www.linux-france.org/html/

4079
patches/imapsync_minsize Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,17 +1,10 @@
REM $Id: test.bat,v 1.6 2010/08/15 11:10:49 gilles Exp gilles $ REM $Id: test.bat,v 1.7 2010/10/08 01:43:35 gilles Exp gilles $
cd C:\msys\1.0\home\Admin\imapsync cd C:\msys\1.0\home\Admin\imapsync
perl -mMail::IMAPClient -mDigest::MD5 -mTerm::ReadKey -mIO::Socket::SSL -mDate::Manip -mFile::Spec -mDigest::HMAC_MD5 -e '' perl -mMail::IMAPClient -mDigest::MD5 -mTerm::ReadKey -mIO::Socket::SSL -mDate::Manip -mFile::Spec -mDigest::HMAC_MD5 -e ''
set TZ="GMT" perl ./imapsync
REM perl ./imapsync --host1 l --user1 toto --passfile1 secret.toto --host2 l --user2 titi --passfile2 secret.titi --noauthmd5 --delete2 --expunge2 perl ./imapsync --host1 l --user1 toto --passfile1 secret.toto --host2 l --user2 titi --passfile2 secret.titi --noauthmd5 --delete2 --expunge2
REM perl ./imapsync --host1 l --user1 tata --passfile1 secret.tata --host2 l --user2 titi --passfile2 secret.titi --noauthmd5 --delete2 --expunge2 --folder INBOX perl ./imapsync --host1 l --user1 tata --passfile1 secret.tata --host2 l --user2 titi --passfile2 secret.titi --noauthmd5 --delete2 --expunge2 --folder INBOX
REM -M Date::Manip 6.xx buggy?
pp -o imapsync.exe -M Term::ReadKey -M IO::Socket::SSL -M Digest::HMAC_MD5 imapsync
echo Checking imapsync.exe
.\imapsync.exe --host1 l --user1 toto --passfile1 secret.toto --host2 l --user2 titi --passfile2 secret.titi --noauthmd5 --delete2 --expunge2
.\imapsync.exe --host1 l --user1 tata --passfile1 secret.tata --host2 l --user2 titi --passfile2 secret.titi --noauthmd5 --delete2 --expunge2 --folder INBOX
echo Done Checking imapsync.exe

View File

@ -3,6 +3,7 @@
cd C:\msys\1.0\home\Admin\imapsync cd C:\msys\1.0\home\Admin\imapsync
perl -mMail::IMAPClient -mDigest::MD5 -mTerm::ReadKey -mIO::Socket::SSL -mFile::Spec -mDigest::HMAC_MD5 -e '' perl -mMail::IMAPClient -mDigest::MD5 -mTerm::ReadKey -mIO::Socket::SSL -mFile::Spec -mDigest::HMAC_MD5 -e ''
.\imapsync.exe --host1 l --user1 toto --passfile1 secret.toto --host2 l --user2 titi --passfile2 secret.titi --noauthmd5 --delete2 --expunge2 .\imapsync.exe
.\imapsync.exe --host1 l --user1 tata --passfile1 secret.tata --host2 l --user2 titi --passfile2 secret.titi --noauthmd5 --delete2 --expunge2 --folder INBOX .\imapsync.exe --host1 p --user1 toto --passfile1 secret.toto --host2 p --user2 titi --passfile2 secret.titi --noauthmd5 --delete2 --expunge2
.\imapsync.exe --host1 p --user1 tata --passfile1 secret.tata --host2 p --user2 titi --passfile2 secret.titi --noauthmd5 --delete2 --expunge2 --folder INBOX

2
test_exe_2.bat Normal file
View File

@ -0,0 +1,2 @@
imapsync \ --host1 p --user1 toto --passfile1 secret.toto \ --host2 p --user2 titi --passfile2 secret.titi
imapsync \ --host1 p --user1 tata --passfile1 secret.tata \ --host2 p --user2 titi --passfile2 secret.titi

386
tests.sh
View File

@ -1,6 +1,6 @@
#!/bin/sh #!/bin/sh
# $Id: tests.sh,v 1.116 2010/09/06 01:06:52 gilles Exp gilles $ # $Id: tests.sh,v 1.127 2010/10/25 17:59:09 gilles Exp gilles $
# Example 1: # Example 1:
# CMD_PERL='perl -I./Mail-IMAPClient-3.25/lib' sh -x tests.sh # CMD_PERL='perl -I./Mail-IMAPClient-3.25/lib' sh -x tests.sh
@ -8,8 +8,11 @@
# Example 2: # Example 2:
# To select which Mail-IMAPClient within arguments: # To select which Mail-IMAPClient within arguments:
# sh -x tests.sh 2 locallocal 3 locallocal # sh -x tests.sh 2 locallocal 3 locallocal
# run locallocal() with Mail-IMAPClient-2.2.9 then # This runs locallocal() with Mail-IMAPClient-2.2.9 then
# again with Mail-IMAPClient-3.xx # again with Mail-IMAPClient-3.xx
# 2 means "use Mail-IMAPClient-2.2.9"
# 3 means "use Mail-IMAPClient-3.xx"
HOST1=${HOST1:-'localhost'} HOST1=${HOST1:-'localhost'}
echo HOST1=$HOST1 echo HOST1=$HOST1
@ -86,11 +89,15 @@ no_args() {
# mailbox tata titi on most ll_*() tests # mailbox tata titi on most ll_*() tests
# mailbox tete@est.belle # used on big size tests # mailbox tete@est.belle used on big size tests:
# big_transfert() # big_transfert()
# big_transfert_sizes_only() # big_transfert_sizes_only()
# dprof() # dprof()
# mailbox big1 big2 used on bigmail tests
# ll_bigmail()
# ll_memory_consumption
sendtestmessage() { sendtestmessage() {
email=${1:-"tata"} email=${1:-"tata"}
rand=`pwgen 16 1` rand=`pwgen 16 1`
@ -122,6 +129,10 @@ option_tests() {
$CMD_PERL ./imapsync --tests $CMD_PERL ./imapsync --tests
} }
option_tests_debug() {
$CMD_PERL ./imapsync --tests_debug
}
option_bad_delete2() { option_bad_delete2() {
! $CMD_PERL ./imapsync --delete 2 --blabla ! $CMD_PERL ./imapsync --delete 2 --blabla
} }
@ -145,8 +156,7 @@ first_sync() {
--passfile1 ../../var/pass/secret.toto \ --passfile1 ../../var/pass/secret.toto \
--host2 $HOST2 --user2 titi \ --host2 $HOST2 --user2 titi \
--passfile2 ../../var/pass/secret.titi \ --passfile2 ../../var/pass/secret.titi \
--noauthmd5 \ --noauthmd5
--allow3xx
} }
@ -162,11 +172,10 @@ locallocal() {
--host1 $HOST1 --user1 tata \ --host1 $HOST1 --user1 tata \
--passfile1 ../../var/pass/secret.tata \ --passfile1 ../../var/pass/secret.tata \
--host2 $HOST2 --user2 titi \ --host2 $HOST2 --user2 titi \
--passfile2 ../../var/pass/secret.titi \ --passfile2 ../../var/pass/secret.titi
--allow3xx
} }
ll_pidfile() { pidfile() {
$CMD_PERL ./imapsync \ $CMD_PERL ./imapsync \
--justbanner \ --justbanner \
@ -174,6 +183,17 @@ ll_pidfile() {
! test -f /var/tmp/imapsync.pid ! test -f /var/tmp/imapsync.pid
} }
justbanner() {
$CMD_PERL ./imapsync \
--justbanner
}
nomodules_version() {
$CMD_PERL ./imapsync \
--justbanner \
--nomodules_version
}
ll_ask_password() { ll_ask_password() {
@ -204,8 +224,7 @@ ll_timeout_ssl() {
--passfile1 ../../var/pass/secret.tata \ --passfile1 ../../var/pass/secret.tata \
--host2 $HOST2 --user2 titi \ --host2 $HOST2 --user2 titi \
--passfile2 ../../var/pass/secret.titi \ --passfile2 ../../var/pass/secret.titi \
--folder INBOX --timeout 5 --ssl1 --ssl2 \ --folder INBOX --timeout 5 --ssl1 --ssl2
--allow3xx
} }
@ -217,8 +236,7 @@ ll_folder() {
--passfile1 ../../var/pass/secret.tata \ --passfile1 ../../var/pass/secret.tata \
--host2 $HOST2 --user2 titi \ --host2 $HOST2 --user2 titi \
--passfile2 ../../var/pass/secret.titi \ --passfile2 ../../var/pass/secret.titi \
--folder INBOX.yop --folder INBOX.Trash \ --folder INBOX.yop --folder INBOX.Trash
--allow3xx
} }
ll_oneemail() { ll_oneemail() {
@ -246,8 +264,7 @@ ll_folderrec() {
--passfile1 ../../var/pass/secret.tata \ --passfile1 ../../var/pass/secret.tata \
--host2 $HOST2 --user2 titi \ --host2 $HOST2 --user2 titi \
--passfile2 ../../var/pass/secret.titi \ --passfile2 ../../var/pass/secret.titi \
--folderrec INBOX.yop \ --folderrec INBOX.yop
--allow3xx
} }
@ -258,8 +275,7 @@ ll_buffersize() {
--passfile1 ../../var/pass/secret.tata \ --passfile1 ../../var/pass/secret.tata \
--host2 $HOST2 --user2 titi \ --host2 $HOST2 --user2 titi \
--passfile2 ../../var/pass/secret.titi \ --passfile2 ../../var/pass/secret.titi \
--buffersize 8 \ --buffersize 8
--allow3xx
} }
@ -269,19 +285,31 @@ ll_justfolders() {
--passfile1 ../../var/pass/secret.tata \ --passfile1 ../../var/pass/secret.tata \
--host2 $HOST2 --user2 titi \ --host2 $HOST2 --user2 titi \
--passfile2 ../../var/pass/secret.titi \ --passfile2 ../../var/pass/secret.titi \
--justfolders \ --justfolders --nofoldersizes
--allow3xx
echo "rm -rf /home/vmail/titi/.new_folder/" echo "rm -rf /home/vmail/titi/.new_folder/"
} }
ll_delete2folders() {
$CMD_PERL ./imapsync \
--host1 $HOST1 --user1 tata \
--passfile1 ../../var/pass/secret.tata \
--host2 $HOST2 --user2 titi \
--passfile2 ../../var/pass/secret.titi \
--justfolders --nofoldersizes \
--delete2folders
}
ll_bug_folder_name_with_blank() { ll_bug_folder_name_with_blank() {
$CMD_PERL ./imapsync \ $CMD_PERL ./imapsync \
--host1 $HOST1 --user1 tata \ --host1 $HOST1 --user1 tata \
--passfile1 ../../var/pass/secret.tata \ --passfile1 ../../var/pass/secret.tata \
--host2 $HOST2 --user2 titi \ --host2 $HOST2 --user2 titi \
--passfile2 ../../var/pass/secret.titi \ --passfile2 ../../var/pass/secret.titi \
--justfolders \ --justfolders
--allow3xx
echo "rm -rf /home/vmail/titi/.bugs/" echo "rm -rf /home/vmail/titi/.bugs/"
} }
@ -294,8 +322,7 @@ ll_prefix12() {
--passfile2 ../../var/pass/secret.titi \ --passfile2 ../../var/pass/secret.titi \
--folder INBOX.qqq \ --folder INBOX.qqq \
--prefix1 INBOX.\ --prefix1 INBOX.\
--prefix2 INBOX. \ --prefix2 INBOX.
--allow3xx
} }
@ -342,8 +369,7 @@ ll_idatefromheader() {
--host2 $HOST2 --user2 titi \ --host2 $HOST2 --user2 titi \
--passfile2 ../../var/pass/secret.titi \ --passfile2 ../../var/pass/secret.titi \
--folder INBOX.oneemail \ --folder INBOX.oneemail \
--idatefromheader --debug --dry \ --idatefromheader --debug --dry
--allow3xx
} }
@ -354,8 +380,7 @@ ll_folder_rev() {
--passfile1 ../../var/pass/secret.titi \ --passfile1 ../../var/pass/secret.titi \
--host2 $HOST2 --user2 tata \ --host2 $HOST2 --user2 tata \
--passfile2 ../../var/pass/secret.tata \ --passfile2 ../../var/pass/secret.tata \
--folder INBOX.yop \ --folder INBOX.yop
--allow3xx
} }
ll_subscribed() ll_subscribed()
@ -365,8 +390,7 @@ ll_subscribed()
--passfile1 ../../var/pass/secret.tata \ --passfile1 ../../var/pass/secret.tata \
--host2 $HOST2 --user2 titi \ --host2 $HOST2 --user2 titi \
--passfile2 ../../var/pass/secret.titi \ --passfile2 ../../var/pass/secret.titi \
--subscribed \ --subscribed
--allow3xx
} }
@ -377,8 +401,7 @@ ll_subscribe()
--passfile1 ../../var/pass/secret.tata \ --passfile1 ../../var/pass/secret.tata \
--host2 $HOST2 --user2 titi \ --host2 $HOST2 --user2 titi \
--passfile2 ../../var/pass/secret.titi \ --passfile2 ../../var/pass/secret.titi \
--subscribed --subscribe \ --subscribed --subscribe
--allow3xx
} }
ll_justconnect() ll_justconnect()
@ -386,8 +409,7 @@ ll_justconnect()
$CMD_PERL ./imapsync \ $CMD_PERL ./imapsync \
--host2 $HOST2 \ --host2 $HOST2 \
--host1 $HOST1 \ --host1 $HOST1 \
--justconnect \ --justconnect
--allow3xx
} }
ll_justfoldersizes() ll_justfoldersizes()
@ -432,8 +454,7 @@ ll_authmd5()
--passfile1 ../../var/pass/secret.tata \ --passfile1 ../../var/pass/secret.tata \
--host2 $HOST2 --user2 titi \ --host2 $HOST2 --user2 titi \
--passfile2 ../../var/pass/secret.titi \ --passfile2 ../../var/pass/secret.titi \
--justlogin --authmd5 \ --justlogin --authmd5
--allow3xx
} }
ll_noauthmd5() ll_noauthmd5()
@ -443,11 +464,12 @@ ll_noauthmd5()
--passfile1 ../../var/pass/secret.tata \ --passfile1 ../../var/pass/secret.tata \
--host2 $HOST2 --user2 titi \ --host2 $HOST2 --user2 titi \
--passfile2 ../../var/pass/secret.titi \ --passfile2 ../../var/pass/secret.titi \
--justfoldersizes --noauthmd5 \ --justlogin --noauthmd5
--allow3xx
} }
ll_maxage() ll_maxage()
{ {
can_send && sendtestmessage can_send && sendtestmessage
@ -499,8 +521,7 @@ ll_maxsize()
--passfile1 ../../var/pass/secret.tata \ --passfile1 ../../var/pass/secret.tata \
--host2 $HOST2 --user2 titi \ --host2 $HOST2 --user2 titi \
--passfile2 ../../var/pass/secret.titi \ --passfile2 ../../var/pass/secret.titi \
--maxsize 10 \ --maxsize 10
--allow3xx
} }
ll_skipsize() ll_skipsize()
@ -517,8 +538,7 @@ ll_skipsize()
--passfile1 ../../var/pass/secret.tata \ --passfile1 ../../var/pass/secret.tata \
--host2 $HOST2 --user2 titi \ --host2 $HOST2 --user2 titi \
--passfile2 ../../var/pass/secret.titi \ --passfile2 ../../var/pass/secret.titi \
--skipsize --folder INBOX.yop.yap \ --skipsize --folder INBOX.yop.yap
--allow3xx
} }
ll_skipheader() ll_skipheader()
@ -535,7 +555,7 @@ ll_skipheader()
--host2 $HOST2 --user2 titi \ --host2 $HOST2 --user2 titi \
--passfile2 ../../var/pass/secret.titi \ --passfile2 ../../var/pass/secret.titi \
--skipheader '^X-.*|^Date' --folder INBOX.yop.yap \ --skipheader '^X-.*|^Date' --folder INBOX.yop.yap \
--allow3xx --debug --debug
} }
@ -553,8 +573,7 @@ ll_include()
--passfile1 ../../var/pass/secret.tata \ --passfile1 ../../var/pass/secret.tata \
--host2 $HOST2 --user2 titi \ --host2 $HOST2 --user2 titi \
--passfile2 ../../var/pass/secret.titi \ --passfile2 ../../var/pass/secret.titi \
--include '^INBOX.yop' \ --include '^INBOX.yop'
--allow3xx
} }
ll_exclude() ll_exclude()
@ -570,8 +589,7 @@ ll_exclude()
--passfile1 ../../var/pass/secret.tata \ --passfile1 ../../var/pass/secret.tata \
--host2 $HOST2 --user2 titi \ --host2 $HOST2 --user2 titi \
--passfile2 ../../var/pass/secret.titi \ --passfile2 ../../var/pass/secret.titi \
--exclude '^INBOX.yop' \ --exclude '^INBOX.yop'
--allow3xx
} }
@ -637,8 +655,7 @@ ll_sep2()
--host2 $HOST2 --user2 titi \ --host2 $HOST2 --user2 titi \
--passfile2 ../../var/pass/secret.titi \ --passfile2 ../../var/pass/secret.titi \
--folder INBOX.yop.yap \ --folder INBOX.yop.yap \
--sep2 '\\' --dry \ --sep2 '\\' --dry
--allow3xx
} }
ll_bad_login() ll_bad_login()
@ -647,8 +664,7 @@ ll_bad_login()
--host1 $HOST1 --user1 toto \ --host1 $HOST1 --user1 toto \
--passfile1 ../../var/pass/secret.toto \ --passfile1 ../../var/pass/secret.toto \
--host2 $HOST2 --user2 notiti \ --host2 $HOST2 --user2 notiti \
--passfile2 ../../var/pass/secret.titi \ --passfile2 ../../var/pass/secret.titi
--allow3xx
} }
@ -658,8 +674,7 @@ ll_bad_host()
--host1 badhost --user1 toto \ --host1 badhost --user1 toto \
--passfile1 ../../var/pass/secret.toto \ --passfile1 ../../var/pass/secret.toto \
--host2 badhost --user2 titi \ --host2 badhost --user2 titi \
--passfile2 ../../var/pass/secret.titi \ --passfile2 ../../var/pass/secret.titi
--allow3xx
} }
@ -670,8 +685,7 @@ ll_bad_host_ssl()
--passfile1 ../../var/pass/secret.toto \ --passfile1 ../../var/pass/secret.toto \
--host2 badhost --user2 titi \ --host2 badhost --user2 titi \
--passfile2 ../../var/pass/secret.titi \ --passfile2 ../../var/pass/secret.titi \
--ssl1 --ssl2 \ --ssl1 --ssl2
--allow3xx
} }
@ -684,9 +698,8 @@ ll_useheader()
--passfile2 ../../var/pass/secret.titi \ --passfile2 ../../var/pass/secret.titi \
--folder INBOX.yop.yap \ --folder INBOX.yop.yap \
--useheader 'Message-ID' \ --useheader 'Message-ID' \
--dry --debug \ --dry --debug
--allow3xx echo 'rm /home/vmail/titi/.yop.yap/cur/*'
echo 'rm /home/vmail/tata/.yop.yap/cur/*'
} }
@ -703,8 +716,7 @@ ll_regexmess()
--folder INBOX.yop.yap \ --folder INBOX.yop.yap \
--regexmess 's/\157/O/g' \ --regexmess 's/\157/O/g' \
--regexmess 's/p/Z/g' \ --regexmess 's/p/Z/g' \
--debug \ --debug
--allow3xx
if can_send; then if can_send; then
file=`ls -t /home/vmail/titi/.yop.yap/cur/* | tail -1` file=`ls -t /home/vmail/titi/.yop.yap/cur/* | tail -1`
@ -723,8 +735,7 @@ ll_regexmess_scwchu()
--folder INBOX.scwchu \ --folder INBOX.scwchu \
--regexmess 's{\A(.*?(?! ^$))^Date:(.*?)$}{$1Date:$2\nReceived: From; $2}gxms' \ --regexmess 's{\A(.*?(?! ^$))^Date:(.*?)$}{$1Date:$2\nReceived: From; $2}gxms' \
--skipsize --skipheader 'Received: From;' \ --skipsize --skipheader 'Received: From;' \
--debug \ --debug
--allow3xx
echo 'rm /home/vmail/titi/.scwchu/cur/*' echo 'rm /home/vmail/titi/.scwchu/cur/*'
} }
@ -802,8 +813,8 @@ ll_regex_flag_keep_only()
ll_tls_justconnect() { ll_tls_justconnect() {
$CMD_PERL ./imapsync \ $CMD_PERL ./imapsync \
--host1 l \ --host1 $HOST1 \
--host2 l \ --host2 $HOST2 \
--tls1 --tls2 \ --tls1 --tls2 \
--justconnect --debug --justconnect --debug
} }
@ -869,8 +880,7 @@ ll_ssl() {
--passfile1 ../../var/pass/secret.tata \ --passfile1 ../../var/pass/secret.tata \
--host2 $HOST2 --user2 titi \ --host2 $HOST2 --user2 titi \
--passfile2 ../../var/pass/secret.titi \ --passfile2 ../../var/pass/secret.titi \
--ssl1 --ssl2 \ --ssl1 --ssl2
--allow3xx
} }
ll_authmech_PLAIN() { ll_authmech_PLAIN() {
@ -880,8 +890,7 @@ ll_authmech_PLAIN() {
--host2 $HOST2 --user2 titi \ --host2 $HOST2 --user2 titi \
--passfile2 ../../var/pass/secret.titi \ --passfile2 ../../var/pass/secret.titi \
--justfoldersizes --nofoldersizes \ --justfoldersizes --nofoldersizes \
--authmech1 PLAIN --authmech2 PLAIN \ --authmech1 PLAIN --authmech2 PLAIN
--allow3xx
} }
@ -893,13 +902,10 @@ ll_authuser() {
--host2 $HOST2 --user2 titi \ --host2 $HOST2 --user2 titi \
--passfile2 ../../var/pass/secret.titi \ --passfile2 ../../var/pass/secret.titi \
--justfoldersizes --nofoldersizes \ --justfoldersizes --nofoldersizes \
--authuser2 titi \ --authuser2 titi
--allow3xx
} }
ll_authmech_LOGIN() { ll_authmech_LOGIN() {
$CMD_PERL ./imapsync \ $CMD_PERL ./imapsync \
@ -908,8 +914,7 @@ ll_authmech_LOGIN() {
--host2 $HOST2 --user2 titi \ --host2 $HOST2 --user2 titi \
--passfile2 ../../var/pass/secret.titi \ --passfile2 ../../var/pass/secret.titi \
--justfoldersizes --nofoldersizes \ --justfoldersizes --nofoldersizes \
--authmech1 LOGIN --authmech2 LOGIN \ --authmech1 LOGIN --authmech2 LOGIN
--allow3xx
} }
ll_authmech_CRAMMD5() { ll_authmech_CRAMMD5() {
@ -919,8 +924,7 @@ ll_authmech_CRAMMD5() {
--host2 $HOST2 --user2 titi \ --host2 $HOST2 --user2 titi \
--passfile2 ../../var/pass/secret.titi \ --passfile2 ../../var/pass/secret.titi \
--justfoldersizes --nofoldersizes \ --justfoldersizes --nofoldersizes \
--authmech1 CRAM-MD5 --authmech2 CRAM-MD5 \ --authmech1 CRAM-MD5 --authmech2 CRAM-MD5
--allow3xx
} }
ll_delete2() { ll_delete2() {
@ -952,12 +956,23 @@ ll_delete() {
ll_bigmail() { ll_bigmail() {
$CMD_PERL ./imapsync \ $CMD_PERL ./imapsync \
--host1 $HOST1 --user1 tata \ --host1 $HOST1 --user1 big1 \
--passfile1 ../../var/pass/secret.tata \ --passfile1 ../../var/pass/secret.big1 \
--host2 $HOST2 --user2 titi \ --host2 $HOST2 --user2 big2 \
--passfile2 ../../var/pass/secret.titi \ --passfile2 ../../var/pass/secret.big2 \
--folder INBOX.bigmail --folder INBOX.bigmail
echo 'sudo rm -v /home/vmail/titi/.bigmail/cur/*' echo 'sudo rm -v /home/vmail/big2/.bigmail/cur/*'
}
ll_memory_consumption() {
$CMD_PERL ./imapsync \
--host1 $HOST1 --user1 big1 \
--passfile1 ../../var/pass/secret.big1 \
--host2 $HOST2 --user2 big2 \
--passfile2 ../../var/pass/secret.big2 \
--folder INBOX.bigmail2 \
--nofoldersizes
echo 'sudo rm -v /home/vmail/big2/.bigmail2/cur/*'
} }
@ -995,27 +1010,22 @@ msw2() {
gmail() { gmail() {
$CMD_PERL ./imapsync \ $CMD_PERL ./imapsync \
--allow3xx \
--host1 imap.gmail.com \ --host1 imap.gmail.com \
--ssl1 \ --ssl1 \
--authmech1 LOGIN \
--user1 gilles.lamiral@gmail.com \ --user1 gilles.lamiral@gmail.com \
--passfile1 ../../var/pass/secret.gilles_gmail \ --passfile1 ../../var/pass/secret.gilles_gmail \
--host2 $HOST2 \ --host2 $HOST2 \
--ssl2 \
--user2 tata \ --user2 tata \
--passfile2 ../../var/pass/secret.tata \ --passfile2 ../../var/pass/secret.tata \
--useheader 'Message-Id' --skipsize \ --useheader 'Message-Id' \
--regextrans2 's/\[Gmail\]/Gmail/' \ --useheader="X-Gmail-Received" \
--authmech1 LOGIN \ --regextrans2 's/\[Gmail\]/Gmail/'
--allowsizemismatch
#--dry # --debug --debugimap # --authmech1 LOGIN
} }
gmail_gmail() { gmail_gmail() {
$CMD_PERL ./imapsync \ $CMD_PERL ./imapsync \
--allow3xx \
--host1 imap.gmail.com \ --host1 imap.gmail.com \
--ssl1 \ --ssl1 \
--user1 gilles.lamiral@gmail.com \ --user1 gilles.lamiral@gmail.com \
@ -1029,13 +1039,11 @@ gmail_gmail() {
--folder INBOX \ --folder INBOX \
--authmech1 LOGIN --authmech2 LOGIN \ --authmech1 LOGIN --authmech2 LOGIN \
--allowsizemismatch --allowsizemismatch
#--dry # --debug --debugimap # --authmech1 LOGIN
} }
gmail_gmail2() { gmail_gmail2() {
$CMD_PERL ./imapsync \ $CMD_PERL ./imapsync \
--allow3xx \
--host1 imap.gmail.com \ --host1 imap.gmail.com \
--ssl1 \ --ssl1 \
--user1 gilles.lamiral@gmail.com \ --user1 gilles.lamiral@gmail.com \
@ -1084,8 +1092,7 @@ archiveopteryx_1() {
--passfile1 ../../var/pass/secret.aox_je \ --passfile1 ../../var/pass/secret.aox_je \
--host2 lupus.aox.org --user2 je \ --host2 lupus.aox.org --user2 je \
--passfile2 ../../var/pass/secret.aox_je \ --passfile2 ../../var/pass/secret.aox_je \
--folder INBOX --regextrans2 's/INBOX/copy/' \ --folder INBOX --regextrans2 's/INBOX/copy/'
--allow3xx
} }
ll_justlogin() { ll_justlogin() {
@ -1096,7 +1103,7 @@ ll_justlogin() {
--passfile1 ../../var/pass/secret.tata \ --passfile1 ../../var/pass/secret.tata \
--host2 $HOST2 --user2 titi \ --host2 $HOST2 --user2 titi \
--passfile2 ../../var/pass/secret.titi \ --passfile2 ../../var/pass/secret.titi \
--allow3xx --justlogin --noauthmd5 --justlogin --noauthmd5
} }
ll_justlogin_backslash_char() { ll_justlogin_backslash_char() {
@ -1107,7 +1114,7 @@ ll_justlogin_backslash_char() {
--passfile1 ../../var/pass/secret.tata \ --passfile1 ../../var/pass/secret.tata \
--host2 $HOST2 --user2 tptp@est.belle \ --host2 $HOST2 --user2 tptp@est.belle \
--passfile2 ../../var/pass/secret.tptp \ --passfile2 ../../var/pass/secret.tptp \
--allow3xx --justlogin --noauthmd5 --justlogin --noauthmd5
} }
@ -1210,172 +1217,6 @@ dprof_bigmail()
essnet_justconnect()
{
./imapsync \
--host1 mail2.softwareuno.com \
--user1 gilles@mail2.softwareuno.com \
--passfile1 ../../var/pass/secret.prw \
--host2 mail.softwareuno.com \
--user2 gilles@softwareuno.com \
--passfile2 ../../var/pass/secret.prw \
--dry --noauthmd5 --sep1 / --foldersizes --justconnect
}
essnet_mail2_mail()
{
./imapsync \
--host1 mail2.softwareuno.com \
--user1 gilles@mail2.softwareuno.com \
--passfile1 ../../var/pass/secret.prw \
--host2 mail.softwareuno.com \
--user2 gilles@softwareuno.com \
--passfile2 ../../var/pass/secret.prw \
--noauthmd5 --sep1 / --foldersizes \
--prefix2 "INBOX/" --regextrans2 's¤INBOX/INBOX¤INBOX¤'
}
essnet_mail2_mail_t123()
{
for user1 in test1 test2 test3; do
./imapsync \
--host1 mail2.softwareuno.com \
--user1 ${user1}@mail2.softwareuno.com \
--passfile1 ../../var/pass/secret.prw \
--host2 mail.softwareuno.com \
--user2 gilles@softwareuno.com \
--passfile2 ../../var/pass/secret.prw \
--noauthmd5 --sep1 / --foldersizes \
--prefix2 "INBOX/" --regextrans2 's¤INBOX/INBOX¤INBOX¤' \
--debug \
|| true
done
}
essnet_plume2()
{
./imapsync \
--host1 mail2.softwareuno.com \
--user1 gilles@mail2.softwareuno.com \
--passfile1 ../../var/pass/secret.prw \
--host2 plume --user2 tata \
--passfile2 ../../var/pass/secret.tata \
--noauthmd5 --sep1 / --foldersizes \
--prefix2 INBOX. --regextrans2 's¤INBOX.INBOX¤INBOX¤'
}
dynamicquest_1()
{
perl -I bugs/lib ./imapsync \
--host1 69.38.48.81 \
--user1 testuser1@dq.com \
--passfile1 ../../var/pass/secret.dynamicquest \
--host2 69.38.48.81 \
--user2 testuser2@dq.com \
--passfile2 ../../var/pass/secret.dynamicquest \
--noauthmd5 --sep1 "/" --sep2 "/" \
--justconnect --dry
}
dynamicquest_2()
{
perl -I bugs/lib ./imapsync \
--host1 mail.dynamicquest.com \
--user1 gomez \
--passfile1 ../../var/pass/secret.dynamicquestgomez \
--host2 69.38.48.81 \
--user2 testuser2@dq.com \
--passfile2 ../../var/pass/secret.dynamicquest \
--noauthmd5 \
--justconnect --dry
}
dynamicquest_3()
{
perl -I bugs/lib ./imapsync \
--host1 loul \
--user1 tata \
--passfile1 ../../var/pass/secret.tata \
--host2 69.38.48.81 \
--user2 testuser2@dq.com \
--passfile2 ../../var/pass/secret.dynamicquest \
--noauthmd5 --sep2 "/" --debug --debugimap
}
mailenable() {
./imapsync \
--user1 imapsync@damashekconsulting.com \
--host1 imap.damashekconsulting.com \
--passfile1 ../../var/pass/secret.damashek \
--sep1 "." --prefix1 "" \
--host2 $HOST2 --user2 toto \
--passfile2 ../../var/pass/secret.toto \
--noauthmd5
}
ariasolutions() {
./imapsync \
--host1 209.17.174.20 \
--user1 chrisw@canadapack.com \
--passfile1 ../../var/pass/secret.ariasolutions \
--host2 209.17.174.20 \
--user2 chrisw@canadapack.com \
--passfile2 ../../var/pass/secret.ariasolutions \
--dry --noauthmd5 --justfoldersizes
./imapsync \
--host1 209.17.174.20 \
--user1 test@domain.local \
--passfile1 ../../var/pass/secret.ariasolutions \
--host2 209.17.174.20 \
--user2 test@domain.local \
--passfile2 ../../var/pass/secret.ariasolutions \
--dry --noauthmd5 --ssl1
# hang after auth failure
./imapsync \
--host1 209.17.174.20 \
--user1 test@domain.local \
--passfile1 ../../var/pass/secret.ariasolutions \
--host2 209.17.174.20 \
--user2 test@domain.local \
--passfile2 ../../var/pass/secret.ariasolutions \
--dry --debug --debugimap
}
ariasolutions2() {
./imapsync \
--host1 209.17.174.12 \
--user1 chrisw@basebuilding.net \
--passfile1 ../../var/pass/secret.ariasolutions2 \
--host2 209.17.174.20 \
--user2 chrisw@basebuilding.net\
--passfile2 ../../var/pass/secret.ariasolutions2 \
--noauthmd5 --syncinternaldates
# --dry --debug --debugimap
}
genomics() {
# Blocked, timeout ignored
./imapsync \
--host1 mail.genomics.org.cn --user1 lamiral --passfile1 ../../var/pass/secret.genomics \
--host2 szmail.genomics.cn --user2 lamiral --passfile2 ../../var/pass/secret.genomics \
--sep1 . --prefix1 'INBOX.' --folder INBOX --useheader 'Message-Id' --expunge --skipsize \
--timeout 7 --debug --debugimap
}
########################## ##########################
########################## ##########################
@ -1385,12 +1226,18 @@ mandatory_tests='
no_args no_args
option_version option_version
option_tests option_tests
option_tests_debug
option_bad_delete2 option_bad_delete2
passwords_masked passwords_masked
first_sync_dry first_sync_dry
first_sync first_sync
locallocal locallocal
ll_pidfile pidfile
justbanner
nomodules_version
gmail
gmail_gmail
gmail_gmail2
ll_ask_password ll_ask_password
ll_bug_folder_name_with_blank ll_bug_folder_name_with_blank
ll_timeout ll_timeout
@ -1439,18 +1286,21 @@ ll_authuser
ll_delete2 ll_delete2
ll_delete ll_delete
ll_folderrec ll_folderrec
ll_bigmail
gmail
gmail_gmail
gmail_gmail2
archiveopteryx_1
allow3xx allow3xx
noallow3xx noallow3xx
ll_newmessage' ll_memory_consumption
ll_newmessage
ll_delete2folders
'
other_tests=' other_tests='
archiveopteryx_1
msw msw
ll_justlogin_backslash_char' msw2
ll_bigmail
ll_justlogin_backslash_char
option_tests_debug
'
l() { l() {
echo "$mandatory_tests" "$other_tests" echo "$mandatory_tests" "$other_tests"