mirror of
https://github.com/GothenburgBitFactory/taskwarrior.git
synced 2025-06-26 10:54:26 +02:00
parent
d4fabba8ee
commit
061bf4882e
3 changed files with 28 additions and 19 deletions
|
@ -50,6 +50,7 @@ Bugs
|
||||||
Wilk).
|
Wilk).
|
||||||
+ #1263 The 'waiting' report properly lists only pending tasks with a wait date
|
+ #1263 The 'waiting' report properly lists only pending tasks with a wait date
|
||||||
(thanks to Fidel Mato).
|
(thanks to Fidel Mato).
|
||||||
|
+ #1300 Encode/decode pairing is now properly balanced.
|
||||||
+ Fixed bug so that 'limit:page' now considers footnote messages.
|
+ Fixed bug so that 'limit:page' now considers footnote messages.
|
||||||
|
|
||||||
------ old releases ------------------------------
|
------ old releases ------------------------------
|
||||||
|
|
13
src/Task.cpp
13
src/Task.cpp
|
@ -461,6 +461,7 @@ void Task::parse (const std::string& input)
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Note that all fields undergo encode/decode.
|
||||||
void Task::parseJSON (const std::string& line)
|
void Task::parseJSON (const std::string& line)
|
||||||
{
|
{
|
||||||
// Parse the whole thing.
|
// Parse the whole thing.
|
||||||
|
@ -477,7 +478,6 @@ void Task::parseJSON (const std::string& line)
|
||||||
{
|
{
|
||||||
// If the attribute is a recognized column.
|
// If the attribute is a recognized column.
|
||||||
std::string type = Task::attributes[i->first];
|
std::string type = Task::attributes[i->first];
|
||||||
|
|
||||||
if (type != "")
|
if (type != "")
|
||||||
{
|
{
|
||||||
// Any specified id is ignored.
|
// Any specified id is ignored.
|
||||||
|
@ -509,6 +509,10 @@ void Task::parseJSON (const std::string& line)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Strings are decoded.
|
||||||
|
else if (type == "string")
|
||||||
|
set (i->first, json::decode (unquoteText (i->second->dump ())));
|
||||||
|
|
||||||
// Other types are simply added.
|
// Other types are simply added.
|
||||||
else
|
else
|
||||||
set (i->first, unquoteText (i->second->dump ()));
|
set (i->first, unquoteText (i->second->dump ()));
|
||||||
|
@ -540,8 +544,7 @@ void Task::parseJSON (const std::string& line)
|
||||||
throw format (STRING_TASK_NO_DESC, line);
|
throw format (STRING_TASK_NO_DESC, line);
|
||||||
|
|
||||||
std::string name = "annotation_" + Date (when->_data).toEpochString ();
|
std::string name = "annotation_" + Date (when->_data).toEpochString ();
|
||||||
|
annos.insert (std::make_pair (name, json::decode (what->_data)));
|
||||||
annos.insert (std::make_pair (name, what->_data));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
setAnnotations (annos);
|
setAnnotations (annos);
|
||||||
|
@ -559,7 +562,7 @@ void Task::parseJSON (const std::string& line)
|
||||||
<< "' --> preserved\n";
|
<< "' --> preserved\n";
|
||||||
context.debug (message.str ());
|
context.debug (message.str ());
|
||||||
#endif
|
#endif
|
||||||
set (i->first, unquoteText (i->second->dump ()));
|
set (i->first, json::decode (unquoteText (i->second->dump ())));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1964,4 +1967,4 @@ bool Task::next_mod_group (const A3& input, Arg& arg, unsigned int& pos)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
use Test::More tests => 4;
|
use Test::More tests => 5;
|
||||||
|
|
||||||
# Create the rc file.
|
# Create the rc file.
|
||||||
if (open my $fh, '>', 'roundtrip.rc')
|
if (open my $fh, '>', 'roundtrip.rc')
|
||||||
|
@ -43,36 +43,41 @@ if (open my $fh, '>', 'roundtrip.rc')
|
||||||
}
|
}
|
||||||
|
|
||||||
# Add two tasks.
|
# Add two tasks.
|
||||||
qx{../src/task rc:roundtrip.rc add priority:H project:A one 2>&1};
|
qx{../src/task rc:roundtrip.rc add priority:H project:A one/1 2>&1};
|
||||||
qx{../src/task rc:roundtrip.rc add +tag1 +tag2 two 2>&1};
|
qx{../src/task rc:roundtrip.rc add +tag1 +tag2 two 2>&1};
|
||||||
|
|
||||||
# trip 1.
|
# trip 1.
|
||||||
qx{../src/task rc:roundtrip.rc export > ./roundtrip.txt 2>&1};
|
qx{../src/task rc:roundtrip.rc export > ./roundtrip1.json 2>&1};
|
||||||
unlink 'pending.data', 'completed.data', 'undo.data';
|
unlink 'pending.data', 'completed.data', 'undo.data';
|
||||||
qx{../src/task rc:roundtrip.rc rc.debug:1 import ./roundtrip.txt 2>&1};
|
qx{../src/task rc:roundtrip.rc rc.debug:1 import ./roundtrip1.json 2>&1};
|
||||||
|
|
||||||
# trip 2.
|
# trip 2.
|
||||||
qx{../src/task rc:roundtrip.rc export > ./roundtrip.txt 2>&1};
|
qx{../src/task rc:roundtrip.rc export > ./roundtrip2.json 2>&1};
|
||||||
unlink 'pending.data', 'completed.data', 'undo.data';
|
unlink 'pending.data', 'completed.data', 'undo.data';
|
||||||
qx{../src/task rc:roundtrip.rc import ./roundtrip.txt 2>&1};
|
qx{../src/task rc:roundtrip.rc import ./roundtrip2.json 2>&1};
|
||||||
|
|
||||||
# Exammine.
|
# Exammine.
|
||||||
|
|
||||||
# ID Project Pri Added Started Due Recur Countdown Age Deps Tags Description
|
# ID Project Pri Added Started Due Recur Countdown Age Deps Tags Description
|
||||||
# -- ------- --- -------- ------- --- ----- --------- --- ---- --------- ---------
|
# -- ------- --- -------- ------- --- ----- --------- --- ---- --------- ---------
|
||||||
# 1 A H 8/7/2010 - one
|
# 1 A H 8/7/2010 - one/1
|
||||||
# 2 8/7/2010 - tag1 tag2 two
|
# 2 8/7/2010 - tag1 tag2 two
|
||||||
my $output = qx{../src/task rc:roundtrip.rc long 2>&1};
|
my $output = qx{../src/task rc:roundtrip.rc long 2>&1};
|
||||||
like ($output, qr/1.+A.+H.+\d+\/\d+\/\d+.+(?:-|\d+).+one/, '2 round trips task 1 identical');
|
like ($output, qr/1.+A.+H.+\d+\/\d+\/\d+.+(?:-|\d+).+one\/1/, '2 round trips task 1 identical');
|
||||||
like ($output, qr/2.+\d+\/\d+\/\d+.+(?:-|\d+).+tag1\stag2\stwo/, '2 round trips task 2 identical');
|
like ($output, qr/2.+\d+\/\d+\/\d+.+(?:-|\d+).+tag1\stag2\stwo/, '2 round trips task 2 identical');
|
||||||
|
|
||||||
|
# Compare the actual JSON files.
|
||||||
|
$output = qx{diff ./roundtrip1.json ./roundtrip2.json 2>&1};
|
||||||
|
like ($output, qr/^$/, 'JSON files roundtrip1.json and roundtrip2.json identical');
|
||||||
|
|
||||||
# Cleanup.
|
# Cleanup.
|
||||||
unlink qw(roundtrip.txt pending.data completed.data undo.data backlog.data roundtrip.rc);
|
unlink qw(roundtrip1.json roundtrip2.json pending.data completed.data undo.data backlog.data roundtrip.rc);
|
||||||
ok (! -r 'roundtrip.txt' &&
|
ok (! -r 'roundtrip1.json' &&
|
||||||
! -r 'pending.data' &&
|
! -r 'roundtrip2.json' &&
|
||||||
! -r 'completed.data' &&
|
! -r 'pending.data' &&
|
||||||
! -r 'undo.data' &&
|
! -r 'completed.data' &&
|
||||||
! -r 'backlog.data' &&
|
! -r 'undo.data' &&
|
||||||
|
! -r 'backlog.data' &&
|
||||||
! -r 'roundtrip.rc', 'Cleanup');
|
! -r 'roundtrip.rc', 'Cleanup');
|
||||||
|
|
||||||
exit 0;
|
exit 0;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue