mirror of
https://github.com/dgtlmoon/changedetection.io.git
synced 2026-10-21 11:11:05 +00:00
Build and push containers / metadata (push) Canceled after 0s
Build and push containers / build-push-containers (push) Canceled after 0s
ChangeDetection.io Container Build Test / Build linux/amd64 (alpine) (push) Canceled after 0s
ChangeDetection.io Container Build Test / Build linux/arm64 (alpine) (push) Canceled after 0s
ChangeDetection.io Container Build Test / Build linux/amd64 (main) (push) Canceled after 0s
ChangeDetection.io Container Build Test / Build linux/arm/v7 (main) (push) Canceled after 0s
ChangeDetection.io Container Build Test / Build linux/arm/v8 (main) (push) Canceled after 0s
ChangeDetection.io Container Build Test / Build linux/arm64 (main) (push) Canceled after 0s
Publish Python 🐍distribution 📦 to PyPI and TestPyPI / Build distribution 📦 (push) Canceled after 0s
Publish Python 🐍distribution 📦 to PyPI and TestPyPI / Test the built package works basically. (push) Canceled after 0s
Publish Python 🐍distribution 📦 to PyPI and TestPyPI / Publish Python 🐍 distribution 📦 to PyPI (push) Canceled after 0s
ChangeDetection.io App Test / lint-code (push) Canceled after 0s
ChangeDetection.io App Test / lint-translations (push) Canceled after 0s
ChangeDetection.io App Test / lint-template-i18n (push) Canceled after 0s
ChangeDetection.io App Test / test-application-3-11 (push) Canceled after 0s
ChangeDetection.io App Test / test-application-3-12 (push) Canceled after 0s
ChangeDetection.io App Test / test-application-3-13 (push) Canceled after 0s
ChangeDetection.io App Test / test-application-3-14 (push) Canceled after 0s
Watch.history ran os.path.realpath() twice and os.path.exists() once for every line in history.txt (~10 syscalls per snapshot), on every watch at startup and on every history read after that. basename() already reduces each entry to a plain filename, so the only way out of the watch data dir is a symlink. One os.scandir() of the data dir now answers "does it exist", and only symlinks pay for a realpath() containment check. scandir() never lists '.' or '..', so those are still rejected. ~13x faster on 200 watches x 500 snapshots (1.18s -> 0.09s, warm cache), identical output. Adds tests for symlinks escaping/inside the data dir, dangling symlinks, and missing snapshots/blank lines. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>