Merge branch '1.9.3' of tasktools.org:task into 1.9.3
This commit is contained in:
@@ -153,6 +153,24 @@ modifying the:
|
|||||||
|
|
||||||
configuration variable. Check out DropBox at http://www.dropbox.com.
|
configuration variable. Check out DropBox at http://www.dropbox.com.
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.B Q: I don't like dropbox. Is there another way to synchronize my tasks?
|
||||||
|
Of course. Especially if you want to modify tasks offline on both machines and
|
||||||
|
synchronize them later on. For this purpose task provides a 'merge' command which
|
||||||
|
is able to insert the modifications you made to one of your task databases into a
|
||||||
|
second database.
|
||||||
|
|
||||||
|
Here is a basic example of the procedure:
|
||||||
|
|
||||||
|
$ rsync myremotehost:.task/undo.data /tmp/undo_remote.data
|
||||||
|
$ task merge /tmp/undo_remote.data
|
||||||
|
$ rsync ${HOME}/.task/*.data myremotehost:.task/
|
||||||
|
|
||||||
|
First you need to get the undo.data file from the remote system with a network
|
||||||
|
protocol of your choice or a removable medium as well. When task finished the merge
|
||||||
|
command you should copy all the local .data files to the remote system. This way you
|
||||||
|
ensure that both systems are fully synchronized.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B Q: The undo.data file gets very large - do I need it?
|
.B Q: The undo.data file gets very large - do I need it?
|
||||||
You need it if you want the undo capability. But if it gets large, you can
|
You need it if you want the undo capability. But if it gets large, you can
|
||||||
@@ -286,6 +304,7 @@ non-exact match:
|
|||||||
|
|
||||||
This will remove the second annotation - the first non-exact match.
|
This will remove the second annotation - the first non-exact match.
|
||||||
|
|
||||||
|
|
||||||
.SH "CREDITS & COPYRIGHTS"
|
.SH "CREDITS & COPYRIGHTS"
|
||||||
task was written by P. Beckingham <paul@beckingham.net>.
|
task was written by P. Beckingham <paul@beckingham.net>.
|
||||||
.br
|
.br
|
||||||
|
|||||||
@@ -142,6 +142,11 @@ Redirect the output to a file, if you wish to save it, or pipe it to another com
|
|||||||
Exports all tasks in YAML 1.1 format.
|
Exports all tasks in YAML 1.1 format.
|
||||||
Redirect the output to a file, if you wish to save it, or pipe it to another command.
|
Redirect the output to a file, if you wish to save it, or pipe it to another command.
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.B merge path/to/remote/undo.data
|
||||||
|
Merges two task databases by comparing the modifications that are stored in the
|
||||||
|
undo.data files. The location of the second undo.data file must be passed on as argument.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B color [sample | legend]
|
.B color [sample | legend]
|
||||||
Displays all possible colors, a named sample, or a legend containing all
|
Displays all possible colors, a named sample, or a legend containing all
|
||||||
|
|||||||
@@ -117,6 +117,14 @@ _task()
|
|||||||
COMPREPLY=( $(compgen -W "${config}" -- ${cur}) )
|
COMPREPLY=( $(compgen -W "${config}" -- ${cur}) )
|
||||||
return 0
|
return 0
|
||||||
;;
|
;;
|
||||||
|
*)
|
||||||
|
case "${prev}" in
|
||||||
|
merge)
|
||||||
|
COMPREPLY=( $(compgen -o "default" -- ${cur}) )
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|||||||
@@ -134,7 +134,6 @@ void Cmd::load ()
|
|||||||
commands.push_back ("_ids");
|
commands.push_back ("_ids");
|
||||||
commands.push_back ("_config");
|
commands.push_back ("_config");
|
||||||
commands.push_back ("_version");
|
commands.push_back ("_version");
|
||||||
commands.push_back ("_merge");
|
|
||||||
commands.push_back ("_urgency");
|
commands.push_back ("_urgency");
|
||||||
commands.push_back ("export.csv");
|
commands.push_back ("export.csv");
|
||||||
commands.push_back ("export.ical");
|
commands.push_back ("export.ical");
|
||||||
@@ -174,6 +173,7 @@ void Cmd::load ()
|
|||||||
commands.push_back (context.stringtable.get (CMD_TIMESHEET, "timesheet"));
|
commands.push_back (context.stringtable.get (CMD_TIMESHEET, "timesheet"));
|
||||||
commands.push_back (context.stringtable.get (CMD_UNDO, "undo"));
|
commands.push_back (context.stringtable.get (CMD_UNDO, "undo"));
|
||||||
commands.push_back (context.stringtable.get (CMD_VERSION, "version"));
|
commands.push_back (context.stringtable.get (CMD_VERSION, "version"));
|
||||||
|
commands.push_back (context.stringtable.get (CMD_MERGE, "merge"));
|
||||||
|
|
||||||
// Now load the custom reports.
|
// Now load the custom reports.
|
||||||
std::vector <std::string> all;
|
std::vector <std::string> all;
|
||||||
@@ -264,7 +264,7 @@ bool Cmd::isReadOnlyCommand ()
|
|||||||
// Commands that directly modify the data files.
|
// Commands that directly modify the data files.
|
||||||
bool Cmd::isWriteCommand ()
|
bool Cmd::isWriteCommand ()
|
||||||
{
|
{
|
||||||
if (command == "_merge" ||
|
if (command == context.stringtable.get (CMD_MERGE, "merge") ||
|
||||||
command == context.stringtable.get (CMD_ADD, "add") ||
|
command == context.stringtable.get (CMD_ADD, "add") ||
|
||||||
command == context.stringtable.get (CMD_APPEND, "append") ||
|
command == context.stringtable.get (CMD_APPEND, "append") ||
|
||||||
command == context.stringtable.get (CMD_ANNOTATE, "annotate") ||
|
command == context.stringtable.get (CMD_ANNOTATE, "annotate") ||
|
||||||
|
|||||||
@@ -241,7 +241,7 @@ int Context::dispatch (std::string &out)
|
|||||||
else if (cmd.command == "shell") { handleShell ( ); }
|
else if (cmd.command == "shell") { handleShell ( ); }
|
||||||
#endif
|
#endif
|
||||||
else if (cmd.command == "undo") { handleUndo ( ); }
|
else if (cmd.command == "undo") { handleUndo ( ); }
|
||||||
else if (cmd.command == "_merge") { tdb.gc ();
|
else if (cmd.command == "merge") { tdb.gc ();
|
||||||
handleMerge (out); }
|
handleMerge (out); }
|
||||||
else if (cmd.command == "_projects") { rc = handleCompletionProjects (out); }
|
else if (cmd.command == "_projects") { rc = handleCompletionProjects (out); }
|
||||||
else if (cmd.command == "_tags") { rc = handleCompletionTags (out); }
|
else if (cmd.command == "_tags") { rc = handleCompletionTags (out); }
|
||||||
|
|||||||
@@ -98,6 +98,7 @@
|
|||||||
#define CMD_SHELL 229
|
#define CMD_SHELL 229
|
||||||
#define CMD_CONFIG 230
|
#define CMD_CONFIG 230
|
||||||
#define CMD_SHOW 231
|
#define CMD_SHOW 231
|
||||||
|
#define CMD_MERGE 232
|
||||||
|
|
||||||
// 3xx Attributes
|
// 3xx Attributes
|
||||||
#define ATT_PROJECT 300
|
#define ATT_PROJECT 300
|
||||||
|
|||||||
@@ -134,7 +134,7 @@ sleep(1);
|
|||||||
qx{../task rc:remote.rc 4 +gym}; # right_newer
|
qx{../task rc:remote.rc 4 +gym}; # right_newer
|
||||||
|
|
||||||
# merge remote into local
|
# merge remote into local
|
||||||
my $output_l = qx{../task rc:local.rc _merge remote/undo.data};
|
my $output_l = qx{../task rc:local.rc merge remote/undo.data};
|
||||||
|
|
||||||
#check output
|
#check output
|
||||||
like ($output_l, qr/Running redo/, "local-merge finished");
|
like ($output_l, qr/Running redo/, "local-merge finished");
|
||||||
@@ -142,7 +142,7 @@ unlike ($output_l, qr/Missing/, "local-merge: no missing entry");
|
|||||||
unlike ($output_l, qr/Not adding duplicate/, "local-merge: no duplicates");
|
unlike ($output_l, qr/Not adding duplicate/, "local-merge: no duplicates");
|
||||||
|
|
||||||
# merge local into remote
|
# merge local into remote
|
||||||
my $output_r = qx{../task rc:remote.rc _merge local/undo.data};
|
my $output_r = qx{../task rc:remote.rc merge local/undo.data};
|
||||||
|
|
||||||
# check output
|
# check output
|
||||||
like ($output_r, qr/Running redo/, "remote-merge finished");
|
like ($output_r, qr/Running redo/, "remote-merge finished");
|
||||||
|
|||||||
Reference in New Issue
Block a user