From 3247a8d7c75f83b66548ef098163c7959093e4a0 Mon Sep 17 00:00:00 2001 From: bel Date: Sat, 7 Dec 2019 13:15:31 -0700 Subject: [PATCH] Create migrate script --- testdata/migrate.sh | 110 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 testdata/migrate.sh diff --git a/testdata/migrate.sh b/testdata/migrate.sh new file mode 100644 index 0000000..9450171 --- /dev/null +++ b/testdata/migrate.sh @@ -0,0 +1,110 @@ +#! /bin/bash + +function main() { + set -e + set -u + local from_addr="$1" + local to_addr="$2" + log migrating $from_addr to $to_addr + for list in $(get_lists "$from_addr"); do + migrate_tasks "$from_addr" "$to_addr" "$list" + done +} + +function log() { + echo "> $@" >&2 +} + +function CURL() { + curl "$@" 2> /dev/null +} + +function get_lists() { + local addr="$1" + CURL "$addr/ajax.php?loadLists" \ + | jq -r .list[].id +} + +function migrate_tasks() { + local from_addr="$1" + local to_addr="$2" + local from_list="$3" + local to_list=$(lookup_list "$from_addr" "$from_list" "$to_addr") + local has_tasks="$(list_tasks "$to_addr" "$to_list" | base64 --decode | jq .title)" + for task in $(list_tasks "$from_addr" "$from_list"); do + add_task "$to_addr" "$to_list" "$task" "$has_tasks" + done +} + +function lookup_list() { + local from_addr="$1" + local from_list="$2" + local to_addr="$3" + local name=$(CURL "$from_addr/ajax.php?loadLists" \ + | jq -c .list[] \ + | grep "\"$from_list\"" \ + | jq -r .name) + if ! CURL "$to_addr/ajax.php?loadLists" \ + | jq -c .list[] \ + | grep "\"$name\"" \ + | jq -r .id \ + | grep .; then + CURL \ + -X POST \ + "$to_addr/ajax.php?addList" \ + --data-urlencode "name=$name" \ + | jq -r .list[0].id + fi +} + +function list_tasks() { + local addr="$1" + local list="$2" + CURL "$addr/ajax.php?loadTasks&list=$list&compl=1" \ + | jq -c .list[] | while read -r task; do + printf "%s }\n" "${task%\}}" | base64 | tr -d ' ' | tr -d '\n' + echo "" + done +} + +function add_task() { + local addr="$1" + local list="$2" + local task="$(echo -n "$3" | base64 --decode | jq "del(.id, .listId)")" + local has_tasks="$4" + local title="$(echo "$task" | jq -r .title)" + local tags="$(echo "$task" | jq -r .tags)" + if echo "$has_tasks" | grep "\"$title\"" > /dev/null; then + return + fi + log migrating title=$title + local id="$(CURL \ + -X POST \ + "$addr/ajax.php?newTask" \ + --data-urlencode "list=$list" \ + --data-urlencode "title=$title /$tags/" \ + 2> /dev/null \ + | jq -r .list[0].id + )" + if echo "$task" | jq -r .compl | grep 1 > /dev/null; then + CURL \ + -X POST \ + "$addr/ajax.php?completeTask=$id" \ + -d "id=$id" \ + -d "compl=1" \ + > /dev/null + fi + if echo "$task" | jq -r .noteText | grep . > /dev/null; then + local text="$(printf "$task" | jq -r .noteText)" + CURL \ + -X POST \ + "$addr/ajax.php?editNote=$id" \ + -d "id=$id" \ + --data-urlencode "note=$text" \ + > /dev/null + fi +} + +if [ "$0" == "$BASH_SOURCE" ]; then + time main "$@" +fi