mirror of
https://github.com/GothenburgBitFactory/taskwarrior.git
synced 2025-06-26 10:54:26 +02:00
Bug #1104
Fixed the bug where the sort order of transactions with equal timestamps was not stable, i.e. due to the lack of a total order, different merges produced different sortings and hence messed up transactions which have already been merged.
This commit is contained in:
parent
89a7f2a459
commit
68c1ca3f69
4 changed files with 104 additions and 24 deletions
|
@ -30,14 +30,16 @@ use strict;
|
|||
use warnings;
|
||||
use File::Copy;
|
||||
use File::Path;
|
||||
use Test::More tests => 18;
|
||||
use Test::More tests => 28;
|
||||
|
||||
mkdir("1", 0755);
|
||||
mkdir("2", 0755);
|
||||
mkdir("3", 0755);
|
||||
mkdir("dropbox", 0755);
|
||||
|
||||
ok (-e "1", 'Created directory 1/');
|
||||
ok (-e "2", 'Created directory 2/');
|
||||
ok (-e "3", 'Created directory 3/');
|
||||
ok (-e "dropbox", 'Created directory dropbox/');
|
||||
|
||||
# Create the rc file.
|
||||
|
@ -68,25 +70,47 @@ if (open my $fh, '>', '2.rc')
|
|||
ok (-r '2.rc', 'Created 2.rc');
|
||||
}
|
||||
|
||||
# Create the rc file.
|
||||
if (open my $fh, '>', '3.rc')
|
||||
{
|
||||
print $fh "data.location=3/\n";
|
||||
print $fh "confirmation=no\n";
|
||||
print $fh "merge.autopush=yes\n";
|
||||
print $fh "merge.default.uri=./dropbox/\n";
|
||||
print $fh "push.default.uri=./dropbox/\n";
|
||||
print $fh "pull.default.uri=./dropbox/\n";
|
||||
|
||||
close $fh;
|
||||
ok (-r '3.rc', 'Created 3.rc');
|
||||
}
|
||||
|
||||
# Once-only push from 1 --> dropbox
|
||||
my $output = qx{../src/task rc:1.rc add one 2>&1};
|
||||
ok ($? == 0, 'Exit status check');
|
||||
$output = qx{../src/task rc:1.rc add two 2>&1};
|
||||
ok ($? == 0, 'Exit status check');
|
||||
$output = qx{../src/task rc:1.rc add three 2>&1};
|
||||
ok ($? == 0, 'Exit status check');
|
||||
$output = qx{../src/task rc:1.rc push 2>&1};
|
||||
ok ($? == 0, 'Exit status check');
|
||||
|
||||
# Merges to 2
|
||||
# Merges to 2 and 3
|
||||
$output = qx{../src/task rc:2.rc merge 2>&1};
|
||||
ok ($? == 0, 'Exit status check');
|
||||
$output = qx{../src/task rc:3.rc merge 2>&1};
|
||||
ok ($? == 0, 'Exit status check');
|
||||
|
||||
# Make a different change in both locations
|
||||
$output = qx{../src/task rc:1.rc add two 2>&1};
|
||||
$output = qx{../src/task rc:1.rc add four 2>&1};
|
||||
ok ($? == 0, 'Exit status check');
|
||||
$output = qx{../src/task rc:1.rc two done 2>&1};
|
||||
$output = qx{../src/task rc:1.rc four done 2>&1};
|
||||
ok ($? == 0, 'Exit status check');
|
||||
$output = qx{../src/task rc:2.rc 1 done 2>&1};
|
||||
$output = qx{../src/task rc:2.rc one done 2>&1};
|
||||
ok ($? == 0, 'Exit status check');
|
||||
$output = qx{../src/task rc:3.rc three delete 2>&1};
|
||||
ok ($? == 0, 'Exit status check');
|
||||
|
||||
# Merges everywhere
|
||||
# Merges 1 and 2
|
||||
$output = qx{../src/task rc:1.rc merge 2>&1};
|
||||
ok ($? == 0, 'Exit status check');
|
||||
$output = qx{../src/task rc:2.rc merge 2>&1};
|
||||
|
@ -102,8 +126,18 @@ ok ($? == 0, 'Exit status check');
|
|||
$output = qx{../src/task rc:1.rc diag 2>&1};
|
||||
unlike ($output, qr/Found duplicate/, "Found duplicate");
|
||||
|
||||
# Merges 3
|
||||
$output = qx{../src/task rc:3.rc merge 2>&1};
|
||||
ok ($? == 0, 'Exit status check');
|
||||
unlike ($output, qr/Retaining/, "Must not retain changes");
|
||||
|
||||
# Merges 1
|
||||
$output = qx{../src/task rc:1.rc merge 2>&1};
|
||||
ok ($? == 0, 'Exit status check');
|
||||
unlike ($output, qr/Retaining/, "Must not retain changes");
|
||||
|
||||
# Cleanup.
|
||||
unlink qw(1.rc 1/pending.data 1/completed.data 1/undo.data 1/backlog.data 1/synch.key 2/pending.data 2/completed.data 2/undo.data 2.rc 2/backlog.data 2/synch.key dropbox/completed.data dropbox/pending.data dropbox/undo.data);
|
||||
unlink qw(1.rc 1/pending.data 1/completed.data 1/undo.data 1/backlog.data 1/synch.key 2/pending.data 2/completed.data 2/undo.data 2.rc 2/backlog.data 2/synch.key dropbox/completed.data dropbox/pending.data dropbox/undo.data 3/pending.data 3/undo.data 3/completed.data 3/backlog.data 3/synch.key 3.rc);
|
||||
ok (! -r '1/pending.data' &&
|
||||
! -r '1/completed.data' &&
|
||||
! -r '1/undo.data' &&
|
||||
|
@ -116,13 +150,20 @@ ok (! -r '1/pending.data' &&
|
|||
! -r '2/backlog.data' &&
|
||||
! -r '2/synch.key' &&
|
||||
! -r '2.rc' &&
|
||||
! -r '3/pending.data' &&
|
||||
! -r '3/completed.data' &&
|
||||
! -r '3/undo.data' &&
|
||||
! -r '3/backlog.data' &&
|
||||
! -r '3/synch.key' &&
|
||||
! -r '3.rc' &&
|
||||
! -r 'dropbox/pending.data' &&
|
||||
! -r 'dropbox/completed.data' &&
|
||||
! -r 'dropbox/undo.data' , 'Cleanup');
|
||||
|
||||
rmtree (['1', '2', 'dropbox'], 0, 1);
|
||||
rmtree (['1', '2', '3', 'dropbox'], 0, 1);
|
||||
ok (! -e '1' &&
|
||||
! -e '2' &&
|
||||
! -e '3' &&
|
||||
! -e 'dropbox', 'Removed directories');
|
||||
|
||||
exit 0;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue