#!/bin/bash
set -euo pipefail

new_tmp_dir() {
    local dirname
    dirname=$(mktemp -d)
    mkdir -p "$dirname"
    cd "$dirname"
    trap "rm -rf '$dirname'" EXIT
}

run_command() {
  echo "\$ $@"
  # `bash` often resets $COLUMNS, so we also
  # allow $RUN_COMMAND_COLUMNS
  COLUMNS=${RUN_COMMAND_COLUMNS-${COLUMNS-80}} eval "$@"
}

run_command_output_redacted() {
  echo "\$ $@"
  eval "$@" > /dev/null 2>&1
  echo -e "\033[0;90m... (output redacted) ...\033[0m"
}

run_command_allow_broken_pipe() {
  run_command "$@" || {
    EXITCODE="$?"
    case $EXITCODE in
    3)
      # `jj` exits with error coded 3 on broken pipe,
      # which can happen simply because of running
      # `jj|head`.
      return 0;;
    *)
      return $EXITCODE;;
    esac
  }
}

blank() {
  echo ""
}

comment() {
  indented="$(echo "$@"| sed 's/^/# /g')"
  blank
  echo -e "\033[0;32m${indented}\033[0m"
  blank
}
