home · contact · privacy
Add upgrade_dep invocation sub-command for quick fixes re yt-dlp or google-api-python...
authorChristian Heller <c.heller@plomlompom.de>
Fri, 3 Oct 2025 03:53:31 +0000 (05:53 +0200)
committerChristian Heller <c.heller@plomlompom.de>
Fri, 3 Oct 2025 03:53:31 +0000 (05:53 +0200)
src/run.py
src/upgrade_dep.sh [new file with mode: 0755]

index adc417992326aa3b99da44744648bde14b96a433..2a01f53dac36ee6e105e35f17e8a596cbaebc3d5 100755 (executable)
@@ -2,6 +2,7 @@
 """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
@@ -39,7 +40,14 @@ if __name__ == '__main__':
                     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)
diff --git a/src/upgrade_dep.sh b/src/upgrade_dep.sh
new file mode 100755 (executable)
index 0000000..22a71e3
--- /dev/null
@@ -0,0 +1,37 @@
+#!/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."