#!/bin/bash
# root crontab 里 04:55 和开机 sleep 30 那两条「更新 aaden-cli」调的就是它（fixCronJob.sh 装到 /usr/local/sbin/aaden-cli-install）。
#
# 按 /usr/local/bin/aaden-cli 这个链接实际指向哪里决定怎么更新，不看标记文件：
# - 指向 /opt/aaden-cli 下面（私有分发，POS-46 第 2 期）：跑 `aaden-cli self-update`，绝不跑 npm ——
#   这种情况下 `npm i -g aaden-cli` 会报 EEXIST 失败，还会把 /usr/local/lib/node_modules/aaden-cli 整个删掉，--back-to-npm 就没得退了；
# - 其他（npm 装的那份，或者链接不在）：和以前一样 `npm install aaden-cli -g`。
#
# npm 不用 exec：npm 6 起来以后会把自己的进程名改成 `npm`，命令行里就没有 `npm install aaden-cli` 这串了，
# upgrade.sh 的 waitOtherNpm、self-update 的 otherNpmInstallRunning 靠的是这串字（以及本脚本名 aaden-cli-install），
# 外壳活到 npm 结束，它们才看得见「有人在装」，04:55 和 04:59 两次 npm 才不会撞车（10-07 的 ENOTEMPTY）。
#
# 只给自测留的口子：AADEN_CLI_BIN / AADEN_CLI_OPT_DIR / AADEN_CLI_NPM / AADEN_CLI_SELF_UPDATE_NO_SUDO，设备上从不设置。
export PATH="/usr/local/bin:$PATH"
BIN="${AADEN_CLI_BIN:-/usr/local/bin/aaden-cli}"
OPT="${AADEN_CLI_OPT_DIR:-/opt/aaden-cli}"
NPM="${AADEN_CLI_NPM:-npm}"

# 只读一层（不加 -f）：/opt 那边的版本目录丢了、链接悬空时 -f 读不出来，会误走 npm 分支把 npm 那份也弄坏
target=$(readlink "$BIN" 2>/dev/null)
case "$target" in
  "$OPT"/*)
    echo "aaden-cli 指向 $target（私有分发）：跑 self-update，不跑 npm"
    exec "$BIN" self-update
    ;;
esac
if [ "$(id -u)" = 0 ] || [ -n "$AADEN_CLI_SELF_UPDATE_NO_SUDO" ]; then
  "$NPM" install aaden-cli -g
  exit $?
fi
echo "Innerken322." | sudo -S -p '' "$NPM" install aaden-cli -g
exit $?
