#!/usr/bin/env bash

# This hook script replaces the shadow file feature, found in Taskwarrior
# prior to version 2.4.0.
#
# This script assumes that the legacy shadow file settings are still used.
# Although those settings are now not recognized by Taskwarrior, іt is
# harmless to store configuration settings for extensions in .taskrc.

# The command to run, to generate the shadow file. If this is not available,
# then the default.command is used.
SHADOW_COMMAND=$(task _get rc.shadow.command)
if [[ -z "$SHADOW_COMMAND" ]]
then
  SHADOW_COMMAND=$(task _get rc.default.command)
fi

# The file to overwrite.
SHADOW_FILE=$(task _get rc.shadow.file)

# Run the command, inserting a series of override settings:
#   rc.detection=off       Disables terminal size detection
#   rc.gc=off              Disables GC, thus not changing IDs unexpectedly
#   rc.color=off           Disable color in the shadow file
#   rc.locking=off         Disable file locking, to prevent race condition
#   rc.hooks=off           Disable hooks, to prevent race condition
task $SHADOW_COMMAND rc.detection=off rc.gc=off rc.color=off rc.locking=off rc.hooks=off > $SHADOW_FILE 2>/dev/null
if [[ $? != 0 ]]
then
  echo Could not create $SHADOW_FILE
  exit 1
fi

echo Shadow file $SHADOW_FILE updated.
exit 0

