TDB2 Merge

- Migrated TDB::merge to TDB2::merge.
- Removed obsoleted code from TDB.
- Modified unit tests for merge to use export instead of export.csv.
This commit is contained in:
Paul Beckingham 2011-09-01 23:48:35 -04:00
parent 45666ebfc5
commit 63eb22fc7e
7 changed files with 740 additions and 1118 deletions

View file

@ -28,8 +28,9 @@
use strict;
use warnings;
use Test::More tests => 53;
use Test::More tests => 31;
use File::Copy;
use File::Path;
use constant false => 0;
use constant true => 1;
@ -175,65 +176,50 @@ like ($output, qr/up-to-date/, "res2: up-to-date");
unlike ($output, qr/Missing/, "no missing entry");
# Cleanup.
unlink 'data1/pending.data';
ok (!-r 'data1/pending.data', 'Removed data1/pending.data');
unlink 'data1/completed.data';
ok (!-r 'data1/completed.data', 'Removed data1/completed.data');
unlink 'data1/undo.data';
ok (!-r 'data1/undo.data', 'Removed data1/undo.data');
unlink 'data1/backlog.data';
ok (!-r 'data1/backlog.data', 'Removed data1/backlog.data');
unlink 'data1/synch.key';
ok (!-r 'data1/synch.key', 'Removed data1/synch.key');
unlink qw(data1/pending.data data1/completed.data data1/undo.data data1/undo.save data1/backlog.data data1/synch.key 1.rc);
ok (! -r 'data1/pending.data' &&
! -r 'data1/completed.data' &&
! -r 'data1/undo.data' &&
! -r 'data1/undo.save' &&
! -r 'data1/backlog.data' &&
! -r 'data1/synch_key.data' &&
! -r '1.rc', 'data1 Cleanup');
unlink 'data2/pending.data';
ok (!-r 'data2/pending.data', 'Removed data2/pending.data');
unlink 'data2/completed.data';
ok (!-r 'data2/completed.data', 'Removed data2/completed.data');
unlink 'data2/undo.data';
ok (!-r 'data2/undo.data', 'Removed data2/undo.data');
unlink 'data2/backlog.data';
ok (!-r 'data2/backlog.data', 'Removed data2/backlog.data');
unlink 'data2/synch.key';
ok (!-r 'data2/synch.key', 'Removed data2/synch.key');
unlink qw(data2/pending.data data2/completed.data data2/undo.data data2/undo.save data2/backlog.data data2/synch.key 2.rc);
ok (! -r 'data2/pending.data' &&
! -r 'data2/completed.data' &&
! -r 'data2/undo.data' &&
! -r 'data2/undo.save' &&
! -r 'data2/backlog.data' &&
! -r 'data2/synch_key.data' &&
! -r '2.rc', 'data2 Cleanup');
unlink 'data3/pending.data';
ok (!-r 'data3/pending.data', 'Removed data3/pending.data');
unlink 'data3/completed.data';
ok (!-r 'data3/completed.data', 'Removed data3/completed.data');
unlink 'data3/undo.data';
ok (!-r 'data3/undo.data', 'Removed data3/undo.data');
unlink 'data3/backlog.data';
ok (!-r 'data3/backlog.data', 'Removed data3/backlog.data');
unlink 'data3/synch.key';
ok (!-r 'data3/synch.key', 'Removed data3/synch.key');
unlink qw(data3/pending.data data3/completed.data data3/undo.data data3/undo.save data3/backlog.data data3/synch.key 3.rc);
ok (! -r 'data3/pending.data' &&
! -r 'data3/completed.data' &&
! -r 'data3/undo.data' &&
! -r 'data3/undo.save' &&
! -r 'data3/backlog.data' &&
! -r 'data3/synch_key.data' &&
! -r '3.rc', 'data3 Cleanup');
unlink 'backup/pending.data';
ok (!-r 'backup/pending.data', 'Removed backup/pending.data');
unlink 'backup/completed.data';
ok (!-r 'backup/completed.data', 'Removed backup/completed.data');
unlink 'backup/undo.data';
ok (!-r 'backup/undo.data', 'Removed backup/undo.data');
unlink 'backup/backlog.data';
ok (!-r 'backup/backlog.data', 'Removed backup/backlog.data');
unlink 'backup/synch.key';
ok (!-r 'backup/synch.key', 'Removed backup/synch.key');
unlink qw(backup/pending.data backup/completed.data backup/undo.data backup/undo.save backup/backlog.data backup/synch.key);
ok (! -r 'backup/pending.data' &&
! -r 'backup/completed.data' &&
! -r 'backup/undo.data' &&
! -r 'backup/undo.save' &&
! -r 'backup/backlog.data' &&
! -r 'backup/synch_key.data', 'backup Cleanup');
unlink '1.rc';
ok (!-r '1.rc', 'Removed 1.rc');
unlink '2.rc';
ok (!-r '2.rc', 'Removed 2.rc');
unlink '3.rc';
ok (!-r '3.rc', 'Removed 3.rc');
rmdir("data1");
ok (!-e "data1", "Removed dir data1");
rmdir("data2");
ok (!-e "data2", "Removed dir data2");
rmdir("data3");
ok (!-e "data3", "Removed dir data3");
rmdir("backup");
ok (!-e "backup", "Removed dir backup");
rmtree (['data1/extensions', 'data1', 'data2/extensions', 'data2', 'data3/extensions', 'data3', 'backup/extensions', 'backup'], 0, 1);
ok (! -e 'data1/extensions' &&
! -e 'data1' &&
! -e 'data2/extensions' &&
! -e 'data2' &&
! -e 'data3/extensions' &&
! -e 'data3' &&
! -e 'backup/extensions' &&
! -e 'backup', 'Removed dir local');
exit 0;

View file

@ -28,8 +28,9 @@
use strict;
use warnings;
use Test::More tests => 45;
use Test::More tests => 33;
use File::Copy;
use File::Path;
use constant false => 0;
use constant true => 1;
@ -45,12 +46,12 @@ if (open my $fh, '>', 'local.rc')
{
print $fh "data.location=./local\n",
"confirmation=no\n",
"merge.autopush=no\n",
"merge.autopush=no\n",
"report.list.description=DESC\n",
"report.list.columns=id,project,active,priority,description,tags\n",
"report.list.labels=id,pro,a,pri,d,t\n",
"report.list.sort=id+\n",
"report.list.filter=status:pending\n";
"report.list.columns=id,project,active,priority,description,tags\n",
"report.list.labels=id,pro,a,pri,d,t\n",
"report.list.sort=id+\n",
"report.list.filter=status:pending\n";
close $fh;
ok (-r 'local.rc', 'Created local.rc');
}
@ -59,12 +60,12 @@ if (open my $fh, '>', 'remote.rc')
{
print $fh "data.location=./remote\n",
"confirmation=no\n",
"merge.autopush=no\n",
"merge.autopush=no\n",
"report.list.description=DESC\n",
"report.list.columns=id,project,active,priority,description,tags\n",
"report.list.labels=id,pro,a,pri,d,t\n",
"report.list.sort=id+\n",
"report.list.filter=status:pending\n";
"report.list.columns=id,project,active,priority,description,tags\n",
"report.list.labels=id,pro,a,pri,d,t\n",
"report.list.sort=id+\n",
"report.list.filter=status:pending\n";
close $fh;
ok (-r 'remote.rc', 'Created remote.rc');
}
@ -72,71 +73,71 @@ if (open my $fh, '>', 'remote.rc')
# Create some basic tasks on both sides
qx{../src/task rc:local.rc add left_modified};
diag ("25 second delay");
sleep(1);
sleep 1;
qx{../src/task rc:local.rc add right_modified};
sleep(1);
sleep 1;
qx{../src/task rc:local.rc add left_newer};
sleep(1);
sleep 1;
qx{../src/task rc:local.rc add right_newer};
sleep(1);
sleep 1;
qx{../src/task rc:local.rc add left_deleted};
sleep(1);
sleep 1;
qx{../src/task rc:local.rc add right_deleted};
sleep(1);
sleep 1;
qx{../src/task rc:local.rc add left_completed};
sleep(1);
sleep 1;
qx{../src/task rc:local.rc add right_completed};
sleep(1);
sleep 1;
copy("local/undo.data", "remote/undo.data") or fail("copy local/undo.data to remote/undo.data");
copy("local/pending.data", "remote/pending.data") or fail("copy local/undo.data to remote/undo.data");
copy("local/completed.data", "remote/completed.data") or fail("copy local/undo.data to remote/undo.data");
copy ("local/undo.data", "remote/undo.data") or fail ("copy local/undo.data to remote/undo.data");
copy ("local/pending.data", "remote/pending.data") or fail ("copy local/undo.data to remote/undo.data");
copy ("local/completed.data", "remote/completed.data") or fail ("copy local/undo.data to remote/undo.data");
# make local modifications
qx{../src/task rc:local.rc add left_added}; #left_added
sleep(1);
sleep 1;
qx{../src/task rc:local.rc 1 modify prio:H}; #left_modified
sleep(1);
sleep 1;
qx{../src/task rc:local.rc 3 modify +stay}; #left_newer
sleep(1);
sleep 1;
qx{../src/task rc:local.rc 4 modify project:test}; #right_newer
sleep(1);
sleep 1;
qx{../src/task rc:local.rc 6 modify +delete}; #right_deleted
sleep(1);
sleep 1;
# make remote modifications
qx{../src/task rc:remote.rc add right_added}; #right_added
sleep(1);
sleep 1;
qx{../src/task rc:remote.rc 2 modify prio:L}; #right_modified
sleep(1);
sleep 1;
qx{../src/task rc:remote.rc 2 modify wait:tomorrow}; #right_modified
sleep(1);
sleep 1;
qx{../src/task rc:remote.rc 4 modify proj:realProject}; #right_newer
sleep(1);
sleep 1;
qx{../src/task rc:remote.rc 5 modify project:deletion}; #left_deleted
sleep(1);
sleep 1;
qx{../src/task rc:remote.rc 8 done}; #right_completed
sleep(1);
sleep 1;
qx{../src/task rc:remote.rc 6 del}; #right_deleted
sleep(1);
sleep 1;
qx{../src/task rc:remote.rc 3 done}; #left_newer
sleep(1);
sleep 1;
# make new local modifications
qx{../src/task rc:local.rc 3 start}; #left_newer
sleep(1);
sleep 1;
qx{../src/task rc:local.rc 4 modify +car}; #right_newer
sleep(1);
sleep 1;
qx{../src/task rc:local.rc 7 done}; #left_completed
sleep(1);
sleep 1;
qx{../src/task rc:local.rc 5 del}; #left_deleted
sleep(1);
sleep 1;
# make new remote modifications
qx{../src/task rc:remote.rc 4 modify +gym}; # right_newer
# merge remote into local
copy("local/undo.data", "local/undo.save") or fail("copy local/undo.data to local/undo.save");
copy ("local/undo.data", "local/undo.save") or fail ("copy local/undo.data to local/undo.save");
my $output_l = qx{../src/task rc:local.rc merge remote/};
#check output
@ -151,37 +152,37 @@ unlike ($output_r, qr/Missing/, "remote-merge: no missing entry")
unlike ($output_r, qr/Not adding duplicate/, "remote-merge: no duplicates");
# check reports
my $report_l = qx{../src/task rc:local.rc};
my $report_r = qx{../src/task rc:remote.rc};
my $report_l = qx{../src/task rc:local.rc list};
my $report_r = qx{../src/task rc:remote.rc list};
# local-merge
like ($report_l, qr/left_added/, "local-merge: left_added is present");
like ($report_l, qr/right_added/, "local-merge: right_added is present");
like ($report_l, qr/H.*left_modified/, "local-merge: left_modified ok");
like ($report_l, qr/\*.*left_newer.*stay/, "local-merge: left_newer ok");
like ($report_l, qr/left_added/, "local-merge: left_added is present");
like ($report_l, qr/right_added/, "local-merge: right_added is present");
like ($report_l, qr/H.*left_modified/, "local-merge: left_modified ok");
like ($report_l, qr/\*.*left_newer.*stay/, "local-merge: left_newer ok");
like ($report_l, qr/realProject.*right_newer.*gym/, "local-merge: right_newer ok");
$report_l = qx{../src/task rc:local.rc export.csv};
like ($report_l, qr/deleted.*left_deleted/, "local-merge: left_deleted ok");
like ($report_l, qr/deleted.*right_deleted/, "local-merge: right_deleted ok");
like ($report_l, qr/completed.*left_completed/, "local-merge: left_completed ok");
like ($report_l, qr/completed.*right_completed/, "local-merge: right_completed ok");
$report_l = qx{../src/task rc:local.rc export};
like ($report_l, qr/deleted.*left_deleted/, "local-merge: left_deleted ok");
like ($report_l, qr/deleted.*right_deleted/, "local-merge: right_deleted ok");
like ($report_l, qr/completed.*left_completed/, "local-merge: left_completed ok");
like ($report_l, qr/completed.*right_completed/, "local-merge: right_completed ok");
$report_l = qx(../src/task rc:local.rc waiting);
like ($report_l, qr/L.*right_modified/, "local-merge: right_modified ok");
like ($report_l, qr/L.*right_modified/, "local-merge: right_modified ok");
# remote-merge
like ($report_r, qr/left_added/, "remote-merge: left_added is present");
like ($report_r, qr/right_added/, "remote-merge: right_added is present");
like ($report_r, qr/H.*left_modified/, "remote-merge: left_modified ok");
like ($report_r, qr/\*.*left_newer.*stay/, "remote-merge: left_newer ok");
like ($report_r, qr/left_added/, "remote-merge: left_added is present");
like ($report_r, qr/right_added/, "remote-merge: right_added is present");
like ($report_r, qr/H.*left_modified/, "remote-merge: left_modified ok");
like ($report_r, qr/\*.*left_newer.*stay/, "remote-merge: left_newer ok");
like ($report_r, qr/realProject.*right_newer.*gym/, "remote-merge: right_newer ok");
$report_r = qx{../src/task rc:remote.rc export.csv};
like ($report_r, qr/deleted.*left_deleted/, "remote-merge: left_deleted ok");
like ($report_r, qr/deleted.*right_deleted/, "remote-merge: right_deleted ok");
like ($report_r, qr/completed.*left_completed/, "remote-merge: left_completed ok");
like ($report_r, qr/completed.*right_completed/, "remote-merge: right_completed ok");
$report_r = qx{../src/task rc:remote.rc export};
like ($report_r, qr/deleted.*left_deleted/, "remote-merge: left_deleted ok");
like ($report_r, qr/deleted.*right_deleted/, "remote-merge: right_deleted ok");
like ($report_r, qr/completed.*left_completed/, "remote-merge: left_completed ok");
like ($report_r, qr/completed.*right_completed/, "remote-merge: right_completed ok");
$report_r = qx(../src/task rc:remote.rc waiting);
like ($report_r, qr/L.*right_modified/, "remote-merge: right_modified ok");
@ -228,49 +229,28 @@ if (open my $fh, 'remote/undo.data') {
ok ($good, "remote-merge: timestamps ok");
# Cleanup.
unlink 'local/pending.data';
ok (!-r 'local/pending.data', 'Removed local/pending.data');
unlink qw(local/pending.data local/completed.data local/undo.data local/undo.save local/backlog.data local/synch.key local.rc);
ok (! -r 'local/pending.data' &&
! -r 'local/completed.data' &&
! -r 'local/undo.data' &&
! -r 'local/undo.save' &&
! -r 'local/backlog.data' &&
! -r 'local/synch_key.data' &&
! -r 'local.rc', 'Local Cleanup');
unlink 'local/completed.data';
ok (!-r 'local/completed.data', 'Removed local/completed.data');
unlink qw(remote/pending.data remote/completed.data remote/undo.data remote/backlog.data remote/synch.key remote.rc);
ok (! -r 'remote/pending.data' &&
! -r 'remote/completed.data' &&
! -r 'remote/undo.data' &&
! -r 'remote/backlog.data' &&
! -r 'remote/synch_key.data' &&
! -r 'remote.rc', 'Remove Cleanup');
unlink 'local/undo.data';
ok (!-r 'local/undo.data', 'Removed local/undo.data');
unlink 'local/backlog.data';
ok (!-r 'local/backlog.data', 'Removed local/backlog.data');
unlink 'local/synch.key';
ok (!-r 'local/synch.key', 'Removed local/synch.key');
unlink 'local/undo.save';
ok (!-r 'local/undo.save', 'Removed local/undo.save');
unlink 'local.rc';
ok (!-r 'local.rc', 'Removed local.rc');
unlink 'remote/pending.data';
ok (!-r 'remote/pending.data', 'Removed remote/pending.data');
unlink 'remote/completed.data';
ok (!-r 'remote/completed.data', 'Removed remote/completed.data');
unlink 'remote/undo.data';
ok (!-r 'remote/undo.data', 'Removed remote/undo.data');
unlink 'remote/backlog.data';
ok (!-r 'remote/backlog.data', 'Removed remote/backlog.data');
unlink 'remote/synch.key';
ok (!-r 'remote/synch.key', 'Removed remote/synch.key');
unlink 'remote.rc';
ok (!-r 'remote.rc', 'Removed remote.rc');
rmdir("remote");
ok (!-e "remote", "Removed dir remote");
rmdir("local");
ok (!-e "local", "Removed dir local");
rmtree (['remote/extensions', 'remote', 'local/extensions', 'local'], 0, 1);
ok (! -e 'remote/extensions' &&
! -e 'remote' &&
! -e 'local/extensions' &&
! -e 'local', 'Removed dir local');
exit 0;