diff --git a/src/TDB.cpp b/src/TDB.cpp index 32693f0f1..9481309a5 100644 --- a/src/TDB.cpp +++ b/src/TDB.cpp @@ -1457,7 +1457,7 @@ void TDB::merge (const std::string& mergeFile) // Find the same uuid in completed data for (it = completed.begin (); it != completed.end (); ++it) { - if (it->find (uuid) != std::string::npos) + if (it->find ("uuid:\"" + uuid) != std::string::npos) { // Update the completed record. /* @@ -1500,7 +1500,7 @@ void TDB::merge (const std::string& mergeFile) // Find the same uuid in the pending data. for (it = pending.begin (); it != pending.end (); ++it) { - if (it->find (uuid) != std::string::npos) + if (it->find ("uuid:\"" + uuid) != std::string::npos) { // Update the pending record. std::cout << "Found remote change to " @@ -1555,7 +1555,7 @@ void TDB::merge (const std::string& mergeFile) std::vector ::iterator pit; for (pit = pending.begin (); pit != pending.end (); ++pit) { - if (pit->find (uuid) != std::string::npos) + if (pit->find ("uuid:\"" + uuid) != std::string::npos) { found = true; break; diff --git a/test/bug.mergedeps.t b/test/bug.mergedeps.t new file mode 100755 index 000000000..712cb2e55 --- /dev/null +++ b/test/bug.mergedeps.t @@ -0,0 +1,139 @@ +#! /usr/bin/perl +################################################################################ +## taskwarrior - a command line task list manager. +## +## Copyright 2006 - 2011, Paul Beckingham, Johannes Schlatow. +## All rights reserved. +## +## This program is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free Software +## Foundation; either version 2 of the License, or (at your option) any later +## version. +## +## This program is distributed in the hope that it will be useful, but WITHOUT +## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +## FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +## details. +## +## You should have received a copy of the GNU General Public License along with +## this program; if not, write to the +## +## Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, +## Boston, MA +## 02110-1301 +## USA +## +################################################################################ + +use strict; +use warnings; +use Test::More tests => 19; +use File::Copy; + +use constant false => 0; +use constant true => 1; + +# Create data locations +mkdir("local", 0755); +ok(-e 'local', "Created directory local"); +mkdir("remote", 0755); +ok(-e 'remote', "Created directory remote"); + +# Create the rc files. +if (open my $fh, '>', 'local.rc') +{ + print $fh "data.location=./local\n", + "confirmation=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 depends.none:\n"; + close $fh; + ok (-r 'local.rc', 'Created local.rc'); +} + +if (open my $fh, '>', 'remote.rc') +{ + print $fh "data.location=./remote\n", + "confirmation=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 depends.none:\n"; + close $fh; + ok (-r 'remote.rc', 'Created remote.rc'); +} + +# Create some basic tasks on both sides +qx{../src/task rc:local.rc add both}; +qx{faketime -f '+1s' ../src/task rc:local.rc add blocked}; +qx{faketime -f '+2s' ../src/task rc:local.rc add blocking}; +qx{faketime -f '+3s' ../src/task rc:local.rc 2 dep:3}; + +# run gc +qx{../src/task rc:remote.rc}; + +# push to remote +qx{../src/task rc:local.rc push ./remote/}; + +# make remote modifications +#qx{faketime -f '+10s' ../src/task rc:remote.rc add right}; +qx{faketime -f '+11s' ../src/task rc:remote.rc done 3}; #blocking + +# run gc +qx{../src/task rc:remote.rc}; + +my $output_l = qx{../src/task rc:local.rc merge remote/}; + +#check output +unlike ($output_l, qr/Missing/, "merge: no missing entry"); +unlike ($output_l, qr/Not adding duplicate/, "merge: no duplicates"); + +# check reports +my $report_l = qx{../src/task rc:local.rc}; + +like ($report_l, qr/blocked/, 'merge: "blocked" pending'); +unlike ($report_l, qr/blocking/, 'merge: "blocking" not pending'); + +$report_l = qx{../src/task rc:local.rc blocked}; +unlike ($report_l, qr/blocked/, 'merge: "blocked" unblocked'); + +#exit + +# Cleanup. +unlink 'local/pending.data'; +ok (!-r 'local/pending.data', 'Removed local/pending.data'); + +unlink 'local/completed.data'; +ok (!-r 'local/completed.data', 'Removed local/completed.data'); + +unlink 'local/undo.data'; +ok (!-r 'local/undo.data', 'Removed local/undo.data'); + +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.rc'; +ok (!-r 'remote.rc', 'Removed remote.rc'); + +rmdir("remote"); +ok (!-e "remote", "Removed dir remote"); +rmdir("local"); +ok (!-e "local", "Removed dir local"); + +exit 0; +