This commit is contained in:
Nick Bebout 2012-09-02 19:04:29 -05:00
parent 2ca1ed54cb
commit 495d5a9526
15 changed files with 207 additions and 99 deletions

View file

@ -10,5 +10,6 @@ France
Terms and conditions for copying, distribution, modification
or anything else.
0. No limit to do anything with this work and this license.
0 No limit to do anything with this work and this license.
1 GOTO 0

View file

@ -1,5 +1,5 @@
#!/bin/cat
# $Id: CREDITS,v 1.169 2012/07/19 09:43:09 gilles Exp gilles $
# $Id: CREDITS,v 1.170 2012/08/10 11:29:41 gilles Exp gilles $
If you want to make a donation to the author, Gilles LAMIRAL,
use any of the following ways:
@ -30,6 +30,10 @@ I thank very much all of these people.
I thank also very much all people who bought imapsync from the homepage
but I don't cite them here.
David Abrahams
Gave a patch for --authmech PREAUTH
Peter Fuchs
Contributed by giving the book
30.86 "Designed for Use: Create Usable Interfaces for Applications and the Web"

View file

@ -1,17 +1,27 @@
RCS file: RCS/imapsync,v
Working file: imapsync
head: 1.498
head: 1.500
branch:
locks: strict
gilles: 1.498
gilles: 1.500
access list:
symbolic names:
keyword substitution: kv
total revisions: 498; selected revisions: 498
total revisions: 500; selected revisions: 500
description:
----------------------------
revision 1.498 locked by: gilles;
revision 1.500 locked by: gilles;
date: 2012/08/10 04:58:46; author: gilles; state: Exp; lines: +40 -28
Bugfix. The cache system didn't work in Win32 (problem with \ transformation)
Added option --nocheckselectable to fix INBOX issue with Jana-server.
Documentation. Example for --delete2foldersbutnot
----------------------------
revision 1.499
date: 2012/07/30 10:56:26; author: gilles; state: Exp; lines: +45 -31
Bugfix. Check the return of touch calls.
----------------------------
revision 1.498
date: 2012/07/20 14:28:45; author: gilles; state: Exp; lines: +22 -6
Added several connection ckecks like old good imapsync-1.181 to imapsync-1.398
----------------------------

View file

@ -1,5 +1,5 @@
# $Id: Makefile,v 1.95 2012/07/19 05:58:22 gilles Exp gilles $
# $Id: Makefile,v 1.96 2012/07/29 22:03:29 gilles Exp gilles $
.PHONY: help usage all
@ -284,9 +284,9 @@ upload_lfo:
upload_index: index.shtml FAQ paypal.shtml
validate --verbose index.shtml paypal.shtml
rcsdiff index.shtml paypal.shtml FAQ
rsync -avH index.shtml FAQ paypal.shtml root@ks.lamiral.info:/var/www/imapsync/
rsync -avH index.shtml FAQ paypal.shtml \
rcsdiff index.shtml paypal.shtml FAQ COPYING
rsync -avH index.shtml FAQ paypal.shtml COPYING root@ks.lamiral.info:/var/www/imapsync/
rsync -avH index.shtml FAQ paypal.shtml COPYING \
../../public_html/www.linux-france.org/html/prj/imapsync/
sh $(HOME)/memo/lfo-rsync

4
README
View file

@ -3,7 +3,7 @@ NAME
Synchronise mailboxes between two imap servers. Good at IMAP migration.
More than 44 different IMAP server softwares supported with success.
$Revision: 1.498 $
$Revision: 1.500 $
SYNOPSIS
To synchronise imap account "foo" on "imap.truc.org" to imap account
@ -440,5 +440,5 @@ SIMILAR SOFTWARES
Feedback (good or bad) will often be welcome.
$Id: imapsync,v 1.498 2012/07/20 14:28:45 gilles Exp gilles $
$Id: imapsync,v 1.500 2012/08/10 04:58:46 gilles Exp gilles $

View file

@ -1 +1 @@
1.498
1.500

View file

@ -1 +1 @@
1.498
1.500

View file

@ -1,6 +1,6 @@
#!/bin/sh
# $Id: memo,v 1.9 2012/07/05 20:37:53 gilles Exp gilles $
# $Id: memo,v 1.10 2012/08/10 22:25:31 gilles Exp gilles $
echo paypal_bilan_todo
@ -28,7 +28,28 @@ Europe a un autre assujetti : Article 262 ter => Exoneration
EOF
}
echo paypal_bilan_tests_tva
echo paypal_bilan_tests_tva_2
paypal_bilan_tests_tva_2() {
# DID output no diff between paypal_bilan_1.56 and 1.5?
(
#set -x
/g/public_html/imapsync/W/paypal_reply/paypal_bilan_1.56 --bnc --debug --debug_invoice --first_in 147 \
--avoid_numbers '292 293 643 644 731 732 1093 1330 1331 1332 1333 1334 1652 1653' \
/g/paypal/paypal_201?_??_complet.csv \
> /g/var/paypal_bilan/tests/paypal_invoice.out1 2>&1
/g/public_html/imapsync/W/paypal_reply/paypal_bilan --bnc --debug --debug_invoice --first_in 147 \
--avoid_numbers '292 293 643 644 731 732 1093 1330 1331 1332 1333 1334 1652 1653' \
/g/paypal/paypal_201?_??_complet.csv \
> /g/var/paypal_bilan/tests/paypal_invoice.out2 2>&1
echo diff /g/var/paypal_bilan/tests/paypal_invoice.out1 /g/var/paypal_bilan/tests/paypal_invoice.out2
diff /g/var/paypal_bilan/tests/paypal_invoice.out1 /g/var/paypal_bilan/tests/paypal_invoice.out2
)
}
#echo paypal_bilan_tests_tva
paypal_bilan_tests_tva() {
# DID output no diff between paypal_bilan_1.55 and 1.5?
(

View file

@ -1,6 +1,6 @@
#!/usr/bin/perl
# $Id: paypal_bilan,v 1.56 2012/07/16 21:57:51 gilles Exp gilles $
# $Id: paypal_bilan,v 1.58 2012/08/11 00:01:46 gilles Exp gilles $
use strict;
use warnings;
@ -13,7 +13,7 @@ use Test::More 'no_plan' ;
die unless (utf8_supported_charset('ISO-8859-1'));
my $rcs = '$Id: paypal_bilan,v 1.56 2012/07/16 21:57:51 gilles Exp gilles $ ' ;
my $rcs = '$Id: paypal_bilan,v 1.58 2012/08/11 00:01:46 gilles Exp gilles $ ' ;
$rcs =~ m/,v (\d+\.\d+)/ ;
my $VERSION = ($1) ? $1: "UNKNOWN" ;
@ -103,10 +103,10 @@ foreach my $file ( @files ) {
#print $action->{ Nom }, "\n" ;
my( $Date, $Heure, $Fuseau_horaire, $Nom, $Type, $Etat,
$Devise, $Montant, $Numero_davis_de_reception, $Solde,
$Pays, $Nom_Option_1, $Valeur_Option_1, $Hors_taxe, $Titre_de_l_objet )
$Pays, $Nom_Option_1, $Valeur_Option_1, $Hors_taxe, $Titre_de_l_objet, $Nom_Option_2, $Option_2_Valeur )
= @action{ ( 'Date', 'Heure', 'Fuseau horaire', 'Nom', 'Type', 'Etat',
'Devise', 'Montant', "Numéro d'avis de réception", 'Solde',
'Pays', 'Nom Option 1', 'Valeur Option 1', 'Hors taxe', "Titre de l'objet") } ;
'Pays', 'Nom Option 1', 'Valeur Option 1', 'Hors taxe', "Titre de l'objet", 'Nom Option 2', 'Option 2 Valeur') } ;
#print "$Nom\n" ;
( $Etat ) = @action{ ( 'Etat', ) } || @action{ ( 'État' ) } ;
my $invoice = 'NONE' ;
@ -509,12 +509,14 @@ sub build_invoice {
$De_l_adresse_email, $A_l_adresse_email, $N_de_transaction, $Titre_de_l_objet,
$TVA, $Nom_Option_1, $Valeur_Option_1, $N_de_transaction_de_reference,
$Adresse_1, $Adresse_2_district_quartier, $Ville,
$Etat_Province, $Code_postal, $Pays, $line_number, $line_csv, $file_csv )
$Etat_Province, $Code_postal, $Pays, $line_number, $line_csv, $file_csv,
$Nom_Option_2, $Option_2_Valeur )
= @action{ ( 'Date', 'Heure', 'Nom', 'Type', 'Etat', 'Devise', 'Hors taxe', 'Commission', 'Net',
"De l'adresse email", "A l'adresse email", 'N° de transaction', "Titre de l'objet",
'TVA', 'Nom Option 1', 'Valeur Option 1', 'Nº de transaction de référence',
'Adresse 1', 'Adresse 2/district/quartier', 'Ville',
'Etat/Province/Région/Comté/Territoire/Préfecture/République', 'Code postal', 'Pays', 'line_number', 'line_csv', 'file_csv' ) } ;
'Etat/Province/Région/Comté/Territoire/Préfecture/République', 'Code postal', 'Pays', 'line_number', 'line_csv', 'file_csv',
'Nom Option 2', 'Option 2 Valeur' ) } ;
my( $Etat_Province1 ) = @action{ ( 'Etat/Province/Région/Comté/Territoire/Préfecture/République' ) } ;
my( $Etat_Province2 ) = @action{ ( 'État/Province/Région/Comté/Territoire/Préfecture/République' ) } ;
@ -609,6 +611,13 @@ sub build_invoice {
#print "ZZZ $object_type ( $urlSrc, $urlExe )\n" ;
my ( $Nom1 ) = cut( $Nom, 42 ) ;
my $clientVAT = '' ;
if ( ( 'VAT if professional in Europe' eq $Nom_Option_2 ) and $Option_2_Valeur ) {
$clientVAT = $Option_2_Valeur ;
}
my $tex_variables = qq{
%% Begin input from paypal_bilan $VERSION
\\providecommand{\\invoiceNumber}{$invoice}
@ -620,7 +629,7 @@ sub build_invoice {
\\providecommand{\\clientAdrD}{$clientAdrD}
\\providecommand{\\clientAdrE}{$clientAdrE}
\\providecommand{\\clientAdrF}{$clientAdrF}
\\providecommand{\\clientVAT}{}
\\providecommand{\\clientVAT}{$clientVAT}
\\providecommand{\\invoiceDate}{$Date}
\\providecommand{\\invoiceHour}{$Heure}
@ -1031,8 +1040,8 @@ sub tva_stuff {
$priceTVA = 'néant (none)' ;
$priceTTC = $priceHT ;
$HTorTTC = 'HT' ;
$messageTVAFR = 'Exonération de TVA, articles 262 1-2 du Code Général des Impôts';
$messageTVAEN = '(VAT tax-exempt, articles 262 1-2 French General Tax Code)';
$messageTVAFR = 'Exonération de TVA, articles 262 1-2 et ter du Code Général des Impôts';
$messageTVAEN = '(VAT tax-exempt, articles 262 1-2 and ter of French General Tax Code)';
}
foreach my $price ( $priceHT, $priceTVA, $priceTTC, $priceTTCusd ) {
#print "[$price]\n" ;

View file

@ -1,6 +1,6 @@
#!/usr/bin/perl
# $Id: paypal_bilan,v 1.55 2012/07/16 19:33:46 gilles Exp gilles $
# $Id: paypal_bilan,v 1.56 2012/07/16 21:57:51 gilles Exp gilles $
use strict;
use warnings;
@ -13,7 +13,7 @@ use Test::More 'no_plan' ;
die unless (utf8_supported_charset('ISO-8859-1'));
my $rcs = '$Id: paypal_bilan,v 1.55 2012/07/16 19:33:46 gilles Exp gilles $ ' ;
my $rcs = '$Id: paypal_bilan,v 1.56 2012/07/16 21:57:51 gilles Exp gilles $ ' ;
$rcs =~ m/,v (\d+\.\d+)/ ;
my $VERSION = ($1) ? $1: "UNKNOWN" ;
@ -620,6 +620,7 @@ sub build_invoice {
\\providecommand{\\clientAdrD}{$clientAdrD}
\\providecommand{\\clientAdrE}{$clientAdrE}
\\providecommand{\\clientAdrF}{$clientAdrF}
\\providecommand{\\clientVAT}{}
\\providecommand{\\invoiceDate}{$Date}
\\providecommand{\\invoiceHour}{$Heure}

View file

@ -1,6 +1,6 @@
#!/bin/sh
# $Id: paypal_build_invoices,v 1.34 2012/07/16 14:00:28 gilles Exp gilles $
# $Id: paypal_build_invoices,v 1.36 2012/08/10 22:37:18 gilles Exp gilles $
# usage: sh paypal_build_invoices /g/var/paypal_invoices/????
@ -27,8 +27,9 @@ set -x
#/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 1508 /g/paypal/paypal_2012_03_complet.csv
#/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 1575 /g/paypal/paypal_2012_04_complet.csv
#/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 1654 /g/paypal/paypal_2012_05_complet.csv
/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 1743 /g/paypal/paypal_2012_06_complet.csv
#/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 1743 /g/paypal/paypal_2012_06_complet.csv
/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 1824 /g/paypal/paypal_2012_07_complet.csv
/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 1891 /g/paypal/paypal_2012_08_complet.csv
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 147 /g/paypal/paypal_2010_11_complet.csv
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 214 /g/paypal/paypal_2010_12_complet.csv
@ -51,6 +52,7 @@ set -x
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 1654 /g/paypal/paypal_2012_05_complet.csv
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 1743 /g/paypal/paypal_2012_06_complet.csv
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 1824 /g/paypal/paypal_2012_07_complet.csv
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 1891 /g/paypal/paypal_2012_08_complet.csv
set +x

102
imapsync
View file

@ -20,7 +20,7 @@ Synchronise mailboxes between two imap servers.
Good at IMAP migration. More than 44 different IMAP server softwares
supported with success.
$Revision: 1.498 $
$Revision: 1.500 $
=head1 SYNOPSIS
@ -515,7 +515,7 @@ Entries for imapsync:
Feedback (good or bad) will often be welcome.
$Id: imapsync,v 1.498 2012/07/20 14:28:45 gilles Exp gilles $
$Id: imapsync,v 1.500 2012/08/10 04:58:46 gilles Exp gilles $
=cut
@ -626,13 +626,14 @@ my(
$wholeheaderifneeded, %h1_msgs_copy_by_uid, $useuid, $h2_uidguess,
$addheader,
%h1, %h2,
$checkselectable,
);
# main program
# global variables initialisation
$rcs = '$Id: imapsync,v 1.498 2012/07/20 14:28:45 gilles Exp gilles $ ';
$rcs = '$Id: imapsync,v 1.500 2012/08/10 04:58:46 gilles Exp gilles $ ';
$total_bytes_transferred = 0;
$total_bytes_skipped = 0;
@ -712,6 +713,8 @@ if ( $fast ) {
$usecache = 1 if ( $useuid and ( ! defined( $usecache ) ) ) ;
$cacheaftercopy = 1 if ( $usecache and ( ! defined( $cacheaftercopy ) ) ) ;
$checkselectable = defined( $checkselectable ) ? $checkselectable : 1 ;
print banner_imapsync(@argv_copy);
print "Temp directory is $tmpdir\n";
@ -882,17 +885,6 @@ $password2 = ( defined( $passfile2 ) ) ? firstline ( $passfile2 ) : $password2 ;
my $dry_message = '' ;
$dry_message = "\t(not really since --dry mode)" if $dry ;
if ( ! ( 1
or ( $maxsize
or $minsize
or $maxage
or $minage )
and $usecache
and ! $delete ) ) {
die_clean(
"Problem --usecache can not be used safely with options --maxsize --minsize --maxage --minage
Use --nousecache or suppress the --max* --min* options\n" ) ;
}
my $imap1 = ();
my $imap2 = ();
@ -999,13 +991,14 @@ if (scalar(@exclude)) {
# Remove no selectable folders
$checkselectable and do {
foreach my $folder (keys(%requested_folder)) {
if ( not $imap1->selectable($folder)) {
print "Warning: ignoring folder $folder because it is not selectable\n";
remove_from_requested_folders($folder);
}
}
} ;
my @requested_folder = sort(keys(%requested_folder));
@ -1146,6 +1139,8 @@ FOLDER: foreach my $h1_fold (@h1_folders_wanted) {
my $cache_base = "$tmpdir/imapsync_cache/$host1/$user1/$host2/$user2" ;
my $cache_dir = cache_folder( $cache_base, $h1_fold, $h2_fold ) ;
my ( $cache_1_2_ref, $cache_2_1_ref ) = ( {}, {} ) ;
my $h1_uidvalidity = $imap1->uidvalidity( ) || '' ;
my $h2_uidvalidity = $imap2->uidvalidity( ) || '' ;
last FOLDER if $imap1->IsUnconnected() ;
last FOLDER if $imap2->IsUnconnected() ;
@ -1361,8 +1356,11 @@ FOLDER: foreach my $h1_fold (@h1_folders_wanted) {
$debug and print "Host1 found msg $h1_fold/$h1_msg equals Host2 $h2_fold/$h2_msg\n" ;
$total_bytes_skipped += $h1_size ;
$nb_msg_skipped += 1 ;
$debugcache and print "touch $cache_dir/${h1_msg}_$h2_msg\n" if ( $usecache ) ;
touch( "$cache_dir/${h1_msg}_$h2_msg" ) if ( $usecache ) ;
if ( $usecache ) {
$debugcache and print "touch $cache_dir/${h1_msg}_$h2_msg\n" ;
touch( "$cache_dir/${h1_msg}_$h2_msg" )
or die( "Couldn't touch $cache_dir/${h1_msg}_$h2_msg" ) ;
}
}
#$debug and print "MESSAGE $m_id\n";
@ -1901,8 +1899,8 @@ sub banner_imapsync {
my @argv_copy = @_;
my $banner_imapsync = join("",
'$RCSfile: imapsync,v $ ',
'$Revision: 1.498 $ ',
'$Date: 2012/07/20 14:28:45 $ ',
'$Revision: 1.500 $ ',
'$Date: 2012/08/10 04:58:46 $ ',
"\n",localhost_info(), "\n",
"Command line used:\n",
"$0 ", command_line_nopassword(@argv_copy), "\n",
@ -2808,8 +2806,12 @@ sub copy_message {
$h2_uidguess += 1 ;
$total_bytes_transferred += $h1_size;
$nb_msg_transferred += 1;
$debugcache and print "touch $cache_dir/${h1_msg}_$new_id\n" if ( $usecache and $cacheaftercopy and $new_id =~ m{^\d+$} ) ;
touch( "$cache_dir/${h1_msg}_$new_id" ) if ( $usecache and $cacheaftercopy and $new_id =~ m{^\d+$} ) ;
if ( $usecache and $cacheaftercopy and $new_id =~ m{^\d+$} ) {
$debugcache and print "touch $cache_dir/${h1_msg}_$new_id\n" ;
touch( "$cache_dir/${h1_msg}_$new_id" )
or die( "Couldn't touch $cache_dir/${h1_msg}_$new_id" ) ;
}
if ( $delete ) {
print "msg $h1_fold/$h1_msg deleted on host1\n";
unless($dry) {
@ -2906,6 +2908,20 @@ sub tests_cache_map {
}
sub cache_dir_fix {
my $cache_dir = shift ;
$cache_dir =~ s/([;<>\*\|`&\$!#\(\)\[\]\{\}:'"\\])/\\$1/g ;
#print "cache_dir_fix: $cache_dir\n" ;
return( $cache_dir ) ;
}
sub tests_cache_dir_fix {
ok( 'lalala' eq cache_dir_fix('lalala'), 'cache_dir_fix: lalala -> lalala' );
ok( 'ii\\\\ii' eq cache_dir_fix('ii\ii'), 'cache_dir_fix: ii\ii -> ii\\\\ii' );
ok( 'ii@ii' eq cache_dir_fix('ii@ii'), 'cache_dir_fix: ii@ii -> ii@ii' );
ok( 'ii@ii\\:ii' eq cache_dir_fix('ii@ii:ii'), 'cache_dir_fix: ii@ii:ii -> ii@ii\\:ii' );
}
sub get_cache {
$debugcache and print "Entering get_cache\n";
@ -2915,13 +2931,15 @@ sub get_cache {
$debugcache and print "cache_dir : $cache_dir\n";
#$cache_dir =~ s{\\}{\\\\}g;
$cache_dir =~ s/([;<>\*\|`&\$!#\(\)\[\]\{\}:'"\\])/\\$1/g ;
$cache_dir = cache_dir_fix( $cache_dir ) if ( 'MSWin32' ne $OSNAME ) ;
$debugcache and print "cache_dir fix: $cache_dir\n";
$debugcache and print "cache_dir_fix: $cache_dir\n" ;
my @cache_files = bsd_glob( "$cache_dir/*" ) ;
#$debugcache and print "cache_files: [@cache_files]\n" ;
$debugcache and print( "cache_files: ", scalar( @cache_files ), " files found\n" ) ;
my( $cache_1_2_ref, $cache_2_1_ref )
= cache_map( \@cache_files, $h1_msgs_ref, $h2_msgs_ref ) ;
@ -3200,16 +3218,6 @@ sub tests_clean_cache_2 {
}
sub tests_touch {
ok( (-d 'tmp/tests/' or mkpath( 'tmp/tests/' )), 'tests_touch: mkpath tmp/tests/' ) ;
ok( 1 == touch( 'tmp/tests/lala'), 'tests_touch: tmp/tests/lala') ;
ok( 1 == touch( 'tmp/tests/\y'), 'tests_touch: tmp/tests/\y') ;
ok( 0 == touch( '/aaa'), 'tests_touch: not /aaa') ;
ok( 2 == touch( 'tmp/tests/lili', 'tmp/tests/lolo'), 'tests_touch: 2 files') ;
ok( 1 == touch( 'tmp/tests/\y', '/aaa'), 'tests_touch: 2 files, 1 fails' ) ;
}
sub tests_mkpath {
@ -3219,18 +3227,32 @@ sub tests_mkpath {
ok( 1 == 1, 'tests_mkpath: 1 == 1' ) ;
}
sub tests_touch {
ok( (-d 'tmp/tests/' or mkpath( 'tmp/tests/' )), 'tests_touch: mkpath tmp/tests/' ) ;
ok( 1 == touch( 'tmp/tests/lala'), 'tests_touch: tmp/tests/lala') ;
ok( 1 == touch( 'tmp/tests/\y'), 'tests_touch: tmp/tests/\y') ;
ok( 0 == touch( '/aaa'), 'tests_touch: not /aaa') ;
ok( 1 == touch( 'tmp/tests/lili', 'tmp/tests/lolo'), 'tests_touch: 2 files') ;
ok( 0 == touch( 'tmp/tests/\y', '/aaa'), 'tests_touch: 2 files, 1 fails' ) ;
}
sub touch {
my @files = @_ ;
my @result;
my $failures = 0 ;
foreach my $file ( @files ) {
my $fh = new IO::File ;
if ( $fh->open(">> $file" ) ) {
$fh->close ;
push(@result, $file) ;
}else{
print "Could not open file $file in write/append mode\n" ;
$failures++ ;
}
}
return(@result);
return( ! $failures );
}
sub cache_folder {
@ -3545,6 +3567,7 @@ sub get_options {
"useuid!" => \$useuid,
"addheader!" => \$addheader,
"exitwhenover=i" => \$exitwhenover,
"checkselectable!" => \$checkselectable,
);
$debug and print "get options: [$opt_ret]\n";
@ -3734,7 +3757,7 @@ sub check_last_release {
}
sub imapsync_version {
my $rcs = '$Id: imapsync,v 1.498 2012/07/20 14:28:45 gilles Exp gilles $ ';
my $rcs = '$Id: imapsync,v 1.500 2012/08/10 04:58:46 gilles Exp gilles $ ';
$rcs =~ m/,v (\d+\.\d+)/;
my $VERSION = ($1) ? $1: "UNKNOWN";
return($VERSION);
@ -3928,6 +3951,7 @@ Several options are mandatory.
--delete2folders --dry --justfolders --nofoldersizes
--delete2foldersonly <regex>: delete only folders matching regex.
--delete2foldersbutnot <regex>: do not delete folders matching regex.
Example: --delete2foldersbutnot "/Tasks|Contacts|Foo/"
--noexpunge : Do not expunge messages on host1.
Expunge really deletes messages marked deleted.
Expunge is made at the beginning, on host1 only.
@ -4532,7 +4556,7 @@ sub tests_debug {
SKIP: {
skip "No test in normal run" if ( not $tests_debug );
tests_add_header( ) ;
tests_cache_dir_fix( ) ;
}
}
@ -4568,6 +4592,8 @@ sub tests {
tests_extract_header( ) ;
tests_decompose_header( ) ;
tests_epoch( ) ;
tests_add_header( ) ;
tests_cache_dir_fix( ) ;
}
}

View file

@ -5,7 +5,7 @@
<title>Imapsync: an IMAP migration tool ( release <!--#exec cmd="cat VERSION"--> )</title>
<meta name="generator" content="Bluefish 1.0.7"/>
<meta name="author" content="Gilles LAMIRAL"/>
<meta name="date" content="2012-07-20T16:47:33+0200"/>
<meta name="date" content="2012-08-11T03:39:57+0200"/>
<meta name="copyright" content="None"/>
<meta name="keywords" content="imap, transfert, migration"/>
<meta name="description" content="imap migration tool"/>
@ -94,6 +94,15 @@ total is 93 millions for 2011</li>
<p>New features or bugfixes since previous releases:</p>
<ul>
<li><b>1.500</b></li>
<li><b>Enhancement</b>: Added option --nocheckselectable to fix INBOX issue with Jana-server.</li>
<li><b>Bug fix</b>: The cache system didn't work in Win32 (problem with \ transformation).</li>
<li><b>Bug fix</b>: Check the return of touch calls for the cache. </li>
<li><b>Usability</b>: Example for --delete2foldersbutnot "m/Contacts|Agenda|Trash/"</li>
</ul>
<ul>
<li><b>1.498</b></li>
<li><b>Usability</b>: Use KiB MiB GiB etc in result summary. Patch from Mark Atwood.</li>
@ -215,7 +224,7 @@ any Unix, Linux, Windows, or Mac OS operating system.
<p>
<b>+ One year</b> of imapsync <b>updates</b> without extra payment.<br/>
<b>+ 30 days money-back guarantee!</b><br/>
<b>+ 30 days money-back guarantee!</b> (any reason qualifies)<br/>
</p>
<p>
@ -232,7 +241,12 @@ Price <b>42 EUR</b> is equal to around <b>50 USD</b>, no problem to pay in USD (
<select name="os0">
<option value="professional">professional </option>
<option value="individual">individual </option>
</select><br/>
</select>
<br/>
<input type="hidden" name="on1" value="VAT if professional in Europe"/>
Enter your <b>VAT</b> <input type="text" name="os1" size="13" maxlength="13"/> <b> if you're a European professional</b> (for accounting). It's 2 letters followed by 11 digits, for example mine is FR74429303332.
<br/>
<input type="hidden" name="currency_code" value="EUR"/>
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_buynowCC_LG.gif"
name="submit" alt="PayPal - The safer, easier way to pay online!"/>
<img alt="" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1"/>
@ -241,7 +255,7 @@ name="submit" alt="PayPal - The safer, easier way to pay online!"/>
<p>You will receive a <b>download link just after</b> the payment.<br/>
You will also receive a gpg signed <b>invoice</b> within <b>a few days by email</b>.<br/>
Please give a <b>postal address where the invoice will be needed</b> (your company for example),
Please give a <b>delivery postal address where the invoice will be needed</b> (your company for example),
since reedit is not easy (and forbidden by law).
</p>
@ -256,7 +270,7 @@ buying the latest win32 <b>standalone imapsync.exe</b> for <b>42 EUR</b>
<p>
<b>+ One year</b> of imapsync <b>updates</b> without extra payment.<br/>
<b>+ 30 days money-back guarantee!</b><br/>
<b>+ 30 days money-back guarantee!</b> (any reason qualifies)<br/>
</p>
<p>
@ -272,7 +286,12 @@ Price <b>42 EUR</b> is equal to around <b>50 USD</b>, no problem to pay in USD (
<select name="os0">
<option value="professional">professional </option>
<option value="individual">individual </option>
</select> <br/>
</select>
<br/>
<input type="hidden" name="on1" value="VAT if professional in Europe"/>
Enter your <b>VAT</b> <input type="text" name="os1" size="13" maxlength="13"/> <b> if you're a European professional</b> (for accounting). It's 2 letters followed by 11 digits, for example mine is FR74429303332.
<br/>
<input type="hidden" name="currency_code" value="EUR"/>
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_buynowCC_LG.gif"
name="submit" alt="PayPal - The safer, easier way to pay online!"/>
<img alt="" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1"/>
@ -281,7 +300,7 @@ name="submit" alt="PayPal - The safer, easier way to pay online!"/>
<p>You will receive a download link <b>just after</b> the payment.<br/>
You will also receive a gpg signed <b>invoice</b> within <b>a few days by email</b>.<br/>
Please give a <b>postal address where the invoice will be needed</b> (your company for example),
Please give a <b>delivery postal address where the invoice will be needed</b> (your company for example),
since reedit is not easy (and forbidden by law).
</p>
@ -308,6 +327,16 @@ Payment by Paypal account and credit card accepted. <br/>
<p>
<input type="hidden" name="cmd" value="_s-xclick" />
<input type="hidden" name="hosted_button_id" value="E25UVGFNDJWW8" />
<input type="hidden" name="on0" value="imapsync usage"/>imapsync usage
<select name="os0">
<option value="professional">professional </option>
<option value="individual">individual </option>
</select>
<br/>
<input type="hidden" name="on1" value="VAT if professional in Europe"/>
Enter your <b>VAT</b> <input type="text" name="os1" size="13" maxlength="13"/> <b> if you're a European professional</b> (for accounting). It's 2 letters followed by 11 digits, for example mine is FR74429303332.
<br/>
<input type="hidden" name="currency_code" value="EUR"/>
<input type="image"
src="https://www.paypalobjects.com/WEBSCR-640-20110401-1/en_US/i/btn/btn_buynowCC_LG.gif"
name="submit"
@ -318,7 +347,7 @@ Payment by Paypal account and credit card accepted. <br/>
</form>
<p>You will also receive a gpg signed <b>invoice</b> within <b>a few days by email</b>.<br/>
Please give a <b>postal address where the invoice will be needed</b> (your company for example),
Please give a <b>delivery postal address where the invoice will be needed</b> (your company for example),
since reedit is not easy (and forbidden by law).
</p>
@ -492,6 +521,7 @@ Don't hesitate to have a try, I will help you and make efforts to switch them to
<li> imapcopy: <a href="http://home.arcor.de/armin.diehl/imapcopy/imapcopy.html">http://home.arcor.de/armin.diehl/imapcopy/imapcopy.html</a></li>
<li> migrationtool: <a href="http://sourceforge.net/projects/migrationtool/">http://sourceforge.net/projects/migrationtool/</a></li>
<li> imapmigrate: <a href="http://sourceforge.net/projects/cyrus-utils/">http://sourceforge.net/projects/cyrus-utils/</a></li>
<li> larch: <a href="https://github.com/rgrove/larch">https://github.com/rgrove/larch</a> (derived from wonko_imapsync)</li>
<li> wonko_imapsync: <a href="http://wonko.com/article/554">http://wonko.com/article/554</a></li>
<li> pop2imap: <a href="http://www.linux-france.org/prj/pop2imap/">http://www.linux-france.org/prj/pop2imap/</a></li>
<li> exchange-away: <a href="http://exchange-away.sourceforge.net/">http://exchange-away.sourceforge.net/</a></li>
@ -540,8 +570,9 @@ alt="Viewable With Any Browser" />
<!--#config timefmt="%D" -->
<!--#config timefmt="%A %B %d, %Y" -->
<b>This document last modified on <!--#echo var="LAST_MODIFIED" --></b>
($Id: index.shtml,v 1.122 2012/07/20 15:24:40 gilles Exp gilles $)
($Id: index.shtml,v 1.127 2012/08/11 01:40:17 gilles Exp gilles $)
</p>
</body>
</html>

View file

@ -1,5 +1,5 @@
REM $Id: test2.bat,v 1.8 2012/02/25 14:42:23 gilles Exp gilles $
REM $Id: test2.bat,v 1.9 2012/08/10 11:28:30 gilles Exp gilles $
cd C:\msys\1.0\home\Admin\imapsync
REM perl ./imapsync --host1 p --user1 tata --passfile1 secret.tata --host2 p --user2 titi --passfile2 secret.titi --delete2 --expunge2 --folder INBOX
@ -26,6 +26,9 @@ REM --host2 imap.side2.org --user2 %%I --password2 %%J
REM imapsync --host1 p --user1 tata --passfile1 secret.tata ^
REM --host2 p --user2 dollar --password2 "$%%&<>|^"^" --justlogin
imapsync --host1 p --user1 tata --passfile1 secret.tata ^
--host2 p --user2 equal --password2 "==lalala" --justlogin --debugimap2
REM imapsync --host1 p --user1 tata --passfile1 secret.tata ^
REM --host2 p --user2 equal --password2 "==lalala" --justlogin --debugimap2
perl ./imapsync --host1 p --user1 tata --passfile1 secret.tata ^
--host2 p --user2 titi --passfile2 secret.titi ^
--folder INBOX.useuid --useuid --debugcache --delete2

View file

@ -1,6 +1,6 @@
#!/bin/sh
# $Id: tests.sh,v 1.195 2012/07/18 11:10:00 gilles Exp gilles $
# $Id: tests.sh,v 1.196 2012/08/10 11:29:11 gilles Exp gilles $
# Example 1:
# CMD_PERL='perl -I./Mail-IMAPClient-3.25/lib' sh -x tests.sh
@ -486,7 +486,7 @@ ll_delete2foldersbutnot() {
--host2 $HOST2 --user2 titi \
--passfile2 ../../var/pass/secret.titi \
--justfolders --nofoldersizes \
--delete2foldersbutnot '/NEW_2|NEW_3|\[abc\]/' \
--delete2foldersbutnot 'm{NEW_2|NEW_3|\[abc\]}' \
--dry
}