- It is now an error for a failing hook script to fail to also generate some
  feedback.
- Updated NEWS file to mention stricter hook script controls.
This commit is contained in:
Paul Beckingham 2015-02-14 18:15:47 -05:00
parent acce2d5a68
commit 5a060802e7
3 changed files with 29 additions and 3 deletions

7
NEWS
View file

@ -2,10 +2,11 @@
New Features in taskwarrior 2.4.1
- New German translation.
- Hook scripts are now under much stricter control.
New commands in taskwarrior 2.4.1
-
- None
New configuration options in taskwarrior 2.4.1
@ -17,11 +18,11 @@ New configuration options in taskwarrior 2.4.1
Newly deprecated features in taskwarrior 2.4.1
-
- None
Removed features in 2.4.1
-
- None
Known Issues

View file

@ -144,6 +144,8 @@ void Hooks::onLaunch ()
}
else
{
assertFeedback (outputFeedback);
std::vector <std::string>::iterator message;
for (message = outputFeedback.begin (); message != outputFeedback.end (); ++message)
context.error (*message);
@ -209,6 +211,8 @@ void Hooks::onExit ()
}
else
{
assertFeedback (outputFeedback);
std::vector <std::string>::iterator message;
for (message = outputFeedback.begin (); message != outputFeedback.end (); ++message)
context.error (*message);
@ -273,6 +277,8 @@ void Hooks::onAdd (Task& task)
}
else
{
assertFeedback (outputFeedback);
std::vector <std::string>::iterator message;
for (message = outputFeedback.begin (); message != outputFeedback.end (); ++message)
context.error (*message);
@ -342,6 +348,8 @@ void Hooks::onModify (const Task& before, Task& after)
}
else
{
assertFeedback (outputFeedback);
std::vector <std::string>::iterator message;
for (message = outputFeedback.begin (); message != outputFeedback.end (); ++message)
context.error (*message);
@ -493,6 +501,22 @@ void Hooks::assertSameTask (const std::vector <std::string>& input, const Task&
}
}
////////////////////////////////////////////////////////////////////////////////
void Hooks::assertFeedback (const std::vector <std::string>& input) const
{
bool foundSomething = false;
std::vector <std::string>::const_iterator i;
for (i = input.begin (); i != input.end (); ++i)
if (nontrivial (*i))
foundSomething = true;
if (! foundSomething)
{
context.error ("Hook Error: Expected feedback from a failing hook script.");
throw 0;
}
}
////////////////////////////////////////////////////////////////////////////////
int Hooks::callHookScript (
const std::string& script,

View file

@ -56,6 +56,7 @@ private:
void assertValidJSON (const std::vector <std::string>&) const;
void assertNTasks (const std::vector <std::string>&, int) const;
void assertSameTask (const std::vector <std::string>&, const Task&) const;
void assertFeedback (const std::vector <std::string>&) const;
int callHookScript (const std::string&, const std::vector <std::string>&, std::vector <std::string>&);
private: