diff --git a/office/.local/share/task/hooks/DISABLED.on-exit.sync-to-server-silent.py b/office/.local/share/task/hooks/DISABLED.on-exit.sync-to-server-silent.py deleted file mode 100755 index f444c69..0000000 --- a/office/.local/share/task/hooks/DISABLED.on-exit.sync-to-server-silent.py +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env python3 - -# From: https://gist.github.com/varunagrawal/2b93c5dc721520ff6876e940c420ab05 -# This hooks script syncs task warrior to the configured task server. -# The on-exit event is triggered once, after all processing is complete. - -# Make sure hooks are enabled and this hook script is executable. -# Run `task diag` for diagnostics on the hook. - -import sys -import json -import subprocess - -try: - tasks = json.loads(sys.stdin.readline()) -except: - # No input - sys.exit(0) - -# no tasks to work through, don't error -if len(tasks) <= 0: - sys.exit(0) - -# Call the `sync` command -# hooks=0 ensures that the sync command doesn't call the on-exit hook -# verbose=nothing sets the verbosity to print nothing at all -subprocess.Popen(["task", "rc.verbose=nothing", "rc.hooks=0", "sync"], close_fds=True) - -sys.exit(0) diff --git a/office/.local/share/task/hooks/on-exit.git-backup b/office/.local/share/task/hooks/on-exit.git-backup new file mode 100755 index 0000000..eb4d96b --- /dev/null +++ b/office/.local/share/task/hooks/on-exit.git-backup @@ -0,0 +1,65 @@ +#!/bin/sh +# Automatically git commits, pushes and pulls if doable in the taskwarrior data directory +# +# Much of this taken from: https://github.com/mrschyte/taskwarrior-hooks/ +# with much gratitude +# +# The minimum amount of time required between 2 commits in seconds. +# So only if the last commit is at least x seconds old will a new one +# be created. Set to 0 to sync each taskwarrior change. +MINIMUM_WAIT_TIME=600 + +# Do not display status information. +QUIET=true + +# Removes the tasks.json file after each run, keeping the +# task directory clean. +REMOVE_JSON=false + +if [ "${DISABLE_HOOKS}" = "true" ] || ! command -v git >/dev/null 2>&1; then + exit 0; +fi + +if [ "$1" != "api:2" ]; then + printf "Taskwarrior uses different data API version than git plugin. Aborting!" 1>&2 + exit 1 +fi + + +data_dir="$(echo "$5" | cut -f2 -d:)" +command_run="$(echo "$3" | cut -f2 -d:)" + +if [ "$command_run" = "synchronize" ]; then + DISABLE_HOOKS=true env task sync + + git -C "$data_dir" pull >/dev/null 2>&1 + pull_ret="$?" + git -C "$data_dir" push >/dev/null 2>&1 + push_ret="$?" + if [ "$pull_ret" -eq 0 ] && [ "$push_ret" -eq 0 ]; then + [ $QUIET = "true" ] || echo "Git upstream synchronized." + fi +fi + +last_commit=$(git -C "$data_dir" log -1 --format="%at") +# if now is not yet greater than last commit + wait time do nothing +if [ "$(date "+%s")" -lt $((last_commit + MINIMUM_WAIT_TIME)) ]; then + # TODO: Implement DEBUG msg level (info/debug) system + # echo "Too early to check for changes, exiting." + exit 0 +fi + +# echo "EXPORTING TASKS" +DISABLE_HOOKS=true env task export > "$data_dir/tasks.json" +# after any command, if there's changes add and commit +if ! git -C "$data_dir" diff --exit-code >/dev/null 2>&1; then + # echo "found changes" + # need to run to fully update tasks that just got done + DISABLE_HOOKS=true env task next >/dev/null 2>&1 + + header="auto: ${2##* }" + msg="full command: $2" + git -C "$data_dir" commit "$data_dir/tasks.json" -m "$header" -m "$msg" --no-gpg-sign >/dev/null 2>&1 + [ $QUIET = "true" ] || echo "Backup up to git." +fi +[ "$REMOVE_JSON" = true ] && rm "$data_dir/tasks.json" >/dev/null 2>&1 diff --git a/office/.local/share/task/hooks/on-exit.git-sync b/office/.local/share/task/hooks/on-exit.git-sync deleted file mode 100755 index 9de25c4..0000000 --- a/office/.local/share/task/hooks/on-exit.git-sync +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/sh -# Automatically git commits, pushes and pulls if doable in the taskwarrior data directory -# -# Much of this taken from: https://github.com/mrschyte/taskwarrior-hooks/ -# with much gratitude - -if [ "${DISABLE_HOOKS}" = "true" ] || ! command -v git >/dev/null 2>&1; then - exit 0; -fi - -if [ "$1" != "api:2" ]; then - printf "Taskwarrior uses different data API version than git plugin. Aborting!" 1>&2 - exit 1 -fi - -data_dir="$(echo "$5" | cut -f2 -d:)" -command_run="$(echo "$3" | cut -f2 -d:)" - -# after any command, if there's changes add and commit -if ! git -C "$data_dir" diff --exit-code >/dev/null 2>&1; then - # need to run to fully update tasks that just got done - DISABLE_HOOKS=true env task next >/dev/null 2>&1 - - header="auto: ${2##* }" - msg="full command: $2" - git -C "$data_dir" commit -a -m "$header" -m "$msg" --no-gpg-sign >/dev/null 2>&1 -fi - -if [ "$command_run" = "synchronize" ]; then - DISABLE_HOOKS=true env task sync - - git -C "$data_dir" pull >/dev/null 2>&1 - pull_ret="$?" - git -C "$data_dir" push >/dev/null 2>&1 - push_ret="$?" - if [ "$pull_ret" -eq 0 ] && [ "$push_ret" -eq 0 ]; then - echo Git upstream synchronized. - fi -fi