"""Match command line calls to appropriate scripts."""
# standard libs
+from subprocess import CalledProcessError, run as subprocess_run
from sys import argv, exit as sys_exit
# non-standard libs
from plomlib.setup import dependency_hint
case _:
raise HandledException('Unknown argument.')
case _:
- raise HandledException('Bad number of command arguments.')
+ if argv[1] == 'upgrade_dep':
+ _PATH_UPGRADER = './upgrade_dep.sh'
+ try:
+ subprocess_run([_PATH_UPGRADER] + argv[2:], check=True)
+ except CalledProcessError as e:
+ sys_exit(e.returncode)
+ else:
+ raise HandledException('Bad number of command arguments.')
except HandledException as e:
print(e)
sys_exit(1)
--- /dev/null
+#!/usr/bin/sh
+set -e
+
+MODULE="$1"
+if [ -z "${MODULE}" ] || [ -n "$2" ]; then
+ echo 'Need to pass exactly one module name!'
+ exit 1
+fi
+
+MSG_INTRO='^Would install '"${MODULE}-"
+NEW_VERSION=$(pip3 install --dry-run --upgrade "${MODULE}" | grep "${MSG_INTRO}"'[0-9.]*$' | sed 's/'"${MSG_INTRO}"'//')
+if [ -z "${NEW_VERSION}" ]; then
+ echo 'Nothing to update.'
+ exit 0
+fi
+
+PATH_REQS="$(pwd)/requirements.txt"
+TOK_EQ='=='
+OLD_REQ=$(grep "^${MODULE}${TOK_EQ}" "${PATH_REQS}")
+NEW_REQ="${MODULE}${TOK_EQ}${NEW_VERSION}"
+
+if [ "${OLD_REQ}" = "${NEW_REQ}" ]; then
+ echo "Entry in ${PATH_REQS} already is '${NEW_REQ}'."
+else
+ echo "In ${PATH_REQS} replacing '${OLD_REQ}' with '${NEW_REQ}'."
+ PATH_TMP_REQS=$(mktemp)
+ while read -r LINE; do
+ if [ "${LINE}" = "${OLD_REQ}" ]; then
+ echo "${NEW_REQ}" >> "${PATH_TMP_REQS}"
+ else
+ echo "${LINE}" >> "${PATH_TMP_REQS}"
+ fi
+ done < "${PATH_REQS}"
+ mv "${PATH_TMP_REQS}" "${PATH_REQS}"
+fi
+
+echo "Run install_deps to apply, and let upstream know."