diff --git a/ChangeLog b/ChangeLog index 9005e3c08..acbedffc9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -82,6 +82,7 @@ not located (thanks to Christopher J. Pilkington). # Untracked Bugs, biggest first. + + Fixed bug that required the '%YAML' prologue in a YAML import. ------ old releases ------------------------------ diff --git a/src/import.cpp b/src/import.cpp index 29284f53b..93b7ec41b 100644 --- a/src/import.cpp +++ b/src/import.cpp @@ -80,9 +80,15 @@ static fileType determineFileType (const std::vector & lines) return task_1_4_3; } - if (lines.size () > 2 && - lines[0] == "%YAML 1.1" && - lines[1] == "---") + if ((lines.size () > 2 && + lines[0] == "%YAML 1.1" && + lines[1] == "---") + || + (lines.size () > 3 && + (lines[0].find ("task:") != std::string::npos || + lines[1].find ("task:") != std::string::npos || + lines[2].find ("task:") != std::string::npos || + lines[3].find ("task:") != std::string::npos))) { return yaml; } @@ -1249,6 +1255,23 @@ static std::string importYAML (const std::vector & lines) t.set (name, value); } + if (t.size ()) + { + // Generate a UUID if not present. + if (t.get ("uuid") == "") + t.set ("uuid", uuid ()); + + // Add defaults. + decorateTask (t); + t.setStatus (status); + + // TODO Fail on UUID collision. + + context.tdb.add (t); + t.clear (); + ++count; + } + context.tdb.commit (); context.tdb.unlock (); diff --git a/test/import.yaml.t b/test/import.yaml.t index 82a1ca827..688a08ca4 100755 --- a/test/import.yaml.t +++ b/test/import.yaml.t @@ -28,7 +28,7 @@ use strict; use warnings; -use Test::More tests => 15; +use Test::More tests => 18; # Create the rc file. if (open my $fh, '>', 'import.rc') @@ -100,10 +100,32 @@ like ($output, qr/2\/13\/2009.+two/, 't3 present'); $output = qx{../src/task rc:import.rc import import.txt}; like ($output, qr/Cannot add task because the uuid .+ is not unique\./, 'error on duplicate uuid'); +# Create import file. +if (open my $fh, '>', 'import2.txt') +{ + print $fh <