pkgsrc-Changes archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
CVS commit: pkgsrc/sysutils/py-watchdog
Module Name: pkgsrc
Committed By: adam
Date: Mon Nov 2 11:21:10 UTC 2026
Modified Files:
pkgsrc/sysutils/py-watchdog: Makefile PLIST distinfo
Log Message:
py-watchdog: updated to 7.0.0
7.0.0
**Breaking Changes**
- Drop support for Python 3.9 and 3.10.
- [core] Changed pattern matching mechanism from using ``path.match()`` to ``path.full_match()``. Users must update patterns to glob-like syntax: e.g., `*.py` to `**/*.py`.
- [core] Added ``FileAttribEvent`` and ``DirAttribEvent`` for file and directory metadata modifications (such as permissions or timestamps), separate from content modifications. These events no
longer trigger ``on_modified()``; implement ``on_attrib()`` to handle them. On Windows 10 (1709+) and Windows Server 2016+, ``ReadDirectoryChangesExW`` is used to differentiate attribute
modifications, with fallback to ``ReadDirectoryChangesW`` on older versions or unsupported file shares.
- [watchmedo] Changed the default ``--patterns`` value from ``"*"`` to ``"**"``, so the default matches absolute paths at any depth under the ``full_match()`` semantics introduced by 1101, and
updated the CLI help text and docs to the ``**/`` glob syntax.
**Other Changes**
- Add support for Python 3.15
- [core] Add context manager support to ``Observer`` class. The observer can now be used with a ``with`` statement for automatic start/stop management.
- [core] Add support for the ``follow_symlink`` keyword argument to ``ObservedWatch``.
- [core] Added the ``ignore_policy`` argument to ``PatternMatchingEventHandler`` and ``RegexMatchingEventHandler`` to configure multi-path event filtering (moves/renames).
``PatternMatchingEventHandler`` is now strict by default, aligning with ``RegexMatchingEventHandler``.
- [core] Added the ``watchdog.utils.Seconds`` type alias and used it for the time-duration parameters (``timeout``, ``polling_interval``, ``kill_after``, ...) instead of documenting the unit in each
docstring. Duration parameters previously hinted as ``int`` now accept ``float``.
- [core] Adjust ``Observer.schedule()`` ``path`` type annotation to reflect the ``pathlib.Path`` support.
- [core] Allow scheduling watches on individual files in ``Observer.schedule()``.
- [core] Call ``task_done()`` for the stop sentinel in ``dispatch_events()`` to prevent ``join()`` from hanging.
- [core] ``case_sensitive=False`` matching now really ignores case on Python ``<`` 3.13. The ``PurePath.full_match()`` fallback compiled its regex without ``re.IGNORECASE``, so only the patterns were
lower-cased and a path such as ``FOO.PY`` never matched ``**/*.py``.
- [core] ``dispatch_events()`` no longer re-adds a watch that ``unschedule()`` removed, which leaked one ``_handlers`` entry per watch that had an event in flight.
- [core] Do not retain an event handler when ``Observer.schedule()`` fails to create or start its emitter.
- [core] ``EventEmitter`` and ``EventDispatcher`` reject a bool ``timeout``. ``bool`` subclasses ``int``, so ``timeout=True`` was stored and treated as ``1.0`` seconds.
- [core] Fixed ``generate_sub_moved_events()`` corrupting paths when the directory name appears multiple times in the path.
- [core] ``ObservedWatch`` equality now includes ``follow_symlink``, so scheduling a path a second time with a different ``follow_symlink`` value no longer collapses onto the first watch and silently
drops the request.
- [core] ``RegexMatchingEventHandler`` no longer matches its regexes against an empty destination path for events that are not moves. Since events became dataclasses, ``hasattr(event, "dest_path")``
is always true, so a regex matching the empty string (e.g. ``^(?!.*\.pyc$).*$``) let every event through, and such an ignore regex dropped every event. ``PatternMatchingEventHandler`` had the same
check.
- [core] ``remove_handler_for_watch()`` no longer re-adds a watch that ``unschedule()`` removed, which leaked one empty ``_handlers`` entry per call.
- [core] Add ``win_arm64`` to the list of platform-specific wheels published to PyPI.
- [core] Add ``manylinux_2_17`` to the list of platform-specific wheels published to PyPI.
- [inotify] Add support for the ``follow_symlink`` keyword argument.
- [inotify] Do not suppress registration errors for the requested root path. A missing root now raises ``FileNotFoundError`` from ``observer.start()``, or from ``observer.schedule()`` when already
running. Recursive descendant failures remain tolerated.
- [inotify] Keep watching newly created subdirectories when recursive watches filter out creation events.
- [inotify] Reduce number of created inotify instance.
- [inotify] Snapshot the watch group before the blocking read in ``InotifyEmitter.queue_events()`` so stopping the emitter cannot raise ``AttributeError`` on a cleared ``self._inotify``.
- [inotify] Do not suppress registration errors for the requested root path. A missing root now raises ``FileNotFoundError`` from ``observer.start()``, or from ``observer.schedule()`` when already
running. Recursive descendant failures remain tolerated.
- [fsevents] Added the ``latency`` keyword argument to ``FSEventsEmitter`` and ``FSEventsObserver`` (defaulting to ``watchdog.observers.fsevents.DEFAULT_FSEVENTS_LATENCY``), exposing the FSEvents
stream latency previously hard-coded at 10 ms. Raising it coalesces duplicate events.
- [fsevents] Add support for the ``follow_symlink`` keyword argument.
- [fsevents] Support free-threading and give each emitter its own stream and run loop to prevent shutdown leaks.
- [fsevents] Use multi-phase initialization (PEP 489).
- [windows] A rename whose ``RENAMED_OLD`` and ``RENAMED_NEW`` records arrive in different ``get_events()`` batches no longer emits a move event with an empty ``src_path``.
- [windows] Changing only the case of a name no longer emits a deletion event on top of the move event.
- [windows] Event file names are decoded as UTF-16LE, so a name starting with U+FEFF or U+FFFE no longer reports the wrong path.
- [windows] Fixed an unsynchronized access to ``WindowsApiEmitter._reader``: ``queue_events()`` now
reads it under the same lock used by ``on_thread_stop()``.
- [windows] Use double-buffering for ``read_directory_changes`` to avoid missed events under high load.
- [polling] A transient ``OSError`` while polling, such as a network share that is briefly unreachable, no longer emits a ``DirDeletedEvent`` for the watched directory and stops the emitter. The
error is logged and the next poll tries again, so changes made in the meantime are still reported. Only ``FileNotFoundError`` and ``NotADirectoryError`` are still treated as a deletion.
- [polling] Detect permission, ownership, and file attribute modifications in ``DirectorySnapshotDiff`` and emit ``FileAttribEvent`` and ``DirAttribEvent`` in ``PollingObserver``.
- [bsd] Do not let a ``PermissionError`` raised while registering a kevent kill the emitter thread.
- [freebsd] Supports ``inotify`` on FreeBSD 15+.
- [utils] Deduplicate consecutive ``None`` items in ``SkipRepeatsQueue``.
- [utils] Deprecated the ``debounce_interval_seconds`` argument and attribute of ``EventDebouncer`` and ``AutoRestartTrick`` in favour of ``debounce_interval``, and the ``DelayedQueue.delay_sec``
attribute in favour of ``delay``. The old names still work but emit a ``DeprecationWarning``.
- [utils] ``DirectorySnapshotDiff(ignore_device=True)`` now detects moved files and directories when the device ID changes between snapshots.
- [utils] Fix ``EventDebouncer`` starvation on high frequency events and ensure pending events are delivered upon stop.
- [utils] Fixed ``DirectorySnapshotDiff`` reporting a newly created symlink as a move of its target (and a removed symlink as a move onto its target), so ``PollingObserver`` now emits a create/delete
event to match the native observers.
- [utils] Fixed ``repr(EmptyDirectorySnapshot)``, before that it was throwing an ``AttributeError: 'EmptyDirectorySnapshot' object has no attribute '_stat_info'``.
- [utils] Implemented ``len(DirectorySnapshotDiff)`` to return the total number of changes.
- [utils] Make ``SkipRepeatsQueue.put()`` and ``put_nowait()`` reject duplicate items after ``shutdown()`` on Python 3.13+.
- [utils] Serialize ``SkipRepeatsQueue`` producers to prevent consecutive duplicates, respecting blocking and timeout limits while acquiring the producer lock.
- [utils] Use a monotonic clock for ``DelayedQueue`` delays so system clock adjustments do not stall or prematurely release events.
- [utils] Make ``SkipRepeatsQueue.put()`` and ``put_nowait()`` reject duplicate items after ``shutdown()`` on Python 3.13+.
- [utils] Fix ``EventDebouncer`` starvation on high frequency events and ensure pending events are delivered upon stop.
- [tricks] Allow configuring ``shell_executable`` and ``cwd`` for ``ShellCommandTrick`` and ``watchmedo shell-command``.
- [watchmedo] Support running watchmedo via ``python -m watchdog``.
- [watchmedo] The ``AutoRestartTrick`` stop signal is now actually delivered on Windows. The subprocess is started in its own process group and signalled with ``CTRL_BREAK_EVENT``, so it can run
cleanup handlers and its descendants are no longer orphaned on every restart.
- [watchmedo] ``AutoRestartTrick``'s ``--signal SIGBREAK`` now routes through ``CTRL_BREAK_EVENT`` on Windows too, instead of falling back to the hard kill that skips the child's cleanup handlers.
- [watchmedo] Show file system events by default in ``watchmedo log``.
- [tests] Remove the ``eventlet`` tests and test dependency.
- [docs] Document that ``BaseThread`` always runs as a daemon thread, instead of inheriting ``daemon`` from the creating thread as the inherited ``threading.Thread`` documentation states.
- [docs] ``FileSystemEvent`` no longer claims to be immutable; its fields stay writable and the hash is derived from them, so mutating an event held in a dict or set strands it there.
- [docs] Note that ``FileClosedEvent``, ``FileClosedNoWriteEvent`` and ``FileOpenedEvent``, and their ``on_closed()``, ``on_closed_no_write()`` and ``on_opened()`` handlers, are emitted only by
``InotifyObserver`` on Linux.
To generate a diff of this commit:
cvs rdiff -u -r1.30 -r1.31 pkgsrc/sysutils/py-watchdog/Makefile
cvs rdiff -u -r1.7 -r1.8 pkgsrc/sysutils/py-watchdog/PLIST
cvs rdiff -u -r1.16 -r1.17 pkgsrc/sysutils/py-watchdog/distinfo
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: pkgsrc/sysutils/py-watchdog/Makefile
diff -u pkgsrc/sysutils/py-watchdog/Makefile:1.30 pkgsrc/sysutils/py-watchdog/Makefile:1.31
--- pkgsrc/sysutils/py-watchdog/Makefile:1.30 Fri Oct 16 19:44:14 2026
+++ pkgsrc/sysutils/py-watchdog/Makefile Mon Nov 2 11:21:10 2026
@@ -1,8 +1,7 @@
-# $NetBSD: Makefile,v 1.30 2026/10/16 19:44:14 adam Exp $
+# $NetBSD: Makefile,v 1.31 2026/11/02 11:21:10 adam Exp $
-DISTNAME= watchdog-6.0.0
+DISTNAME= watchdog-7.0.0
PKGNAME= ${PYPKGPREFIX}-${DISTNAME}
-PKGREVISION= 1
CATEGORIES= sysutils python
MASTER_SITES= ${MASTER_SITE_PYPI:=w/watchdog/}
@@ -14,18 +13,16 @@ LICENSE= apache-2.0
TOOL_DEPENDS+= ${PYPKGPREFIX}-setuptools>=78:../../devel/py-setuptools
# watchmedo
DEPENDS+= ${PYPKGPREFIX}-yaml>=3.10:../../textproc/py-yaml
-TEST_DEPENDS+= ${PYPKGPREFIX}-mypy-[0-9]*:../../lang/py-mypy
-TEST_DEPENDS+= ${PYPKGPREFIX}-test-cov-[0-9]*:../../devel/py-test-cov
+TEST_DEPENDS+= ${PYPKGPREFIX}-mypy>=0:../../lang/py-mypy
+TEST_DEPENDS+= ${PYPKGPREFIX}-test-cov>=0:../../devel/py-test-cov
TEST_DEPENDS+= ${PYPKGPREFIX}-test-timeout>=0.3:../../devel/py-test-timeout
+PY_RENAME_BINARIES= watchmedo
+
# as of 6.0.0
# 3 failed, 146 passed, 13 skipped, 21 warnings
PYTHON_VERSIONS_INCOMPATIBLE= 311
-post-install:
- cd ${DESTDIR}${PREFIX}/bin && \
- ${MV} watchmedo watchmedo-${PYVERSSUFFIX} || ${TRUE}
-
.include "../../lang/python/wheel.mk"
.include "../../mk/bsd.pkg.mk"
Index: pkgsrc/sysutils/py-watchdog/PLIST
diff -u pkgsrc/sysutils/py-watchdog/PLIST:1.7 pkgsrc/sysutils/py-watchdog/PLIST:1.8
--- pkgsrc/sysutils/py-watchdog/PLIST:1.7 Sun Apr 13 18:29:16 2025
+++ pkgsrc/sysutils/py-watchdog/PLIST Mon Nov 2 11:21:10 2026
@@ -1,16 +1,19 @@
-@comment $NetBSD: PLIST,v 1.7 2025/04/13 18:29:16 wiz Exp $
+@comment $NetBSD: PLIST,v 1.8 2026/11/02 11:21:10 adam Exp $
bin/watchmedo-${PYVERSSUFFIX}
${PYSITELIB}/${WHEEL_INFODIR}/METADATA
${PYSITELIB}/${WHEEL_INFODIR}/RECORD
${PYSITELIB}/${WHEEL_INFODIR}/WHEEL
+${PYSITELIB}/${WHEEL_INFODIR}/entry_points.txt
${PYSITELIB}/${WHEEL_INFODIR}/licenses/AUTHORS
${PYSITELIB}/${WHEEL_INFODIR}/licenses/COPYING
${PYSITELIB}/${WHEEL_INFODIR}/licenses/LICENSE
-${PYSITELIB}/${WHEEL_INFODIR}/entry_points.txt
${PYSITELIB}/${WHEEL_INFODIR}/top_level.txt
${PYSITELIB}/watchdog/__init__.py
${PYSITELIB}/watchdog/__init__.pyc
${PYSITELIB}/watchdog/__init__.pyo
+${PYSITELIB}/watchdog/__main__.py
+${PYSITELIB}/watchdog/__main__.pyc
+${PYSITELIB}/watchdog/__main__.pyo
${PYSITELIB}/watchdog/events.py
${PYSITELIB}/watchdog/events.pyc
${PYSITELIB}/watchdog/events.pyo
@@ -29,12 +32,12 @@ ${PYSITELIB}/watchdog/observers/fsevents
${PYSITELIB}/watchdog/observers/inotify.py
${PYSITELIB}/watchdog/observers/inotify.pyc
${PYSITELIB}/watchdog/observers/inotify.pyo
-${PYSITELIB}/watchdog/observers/inotify_buffer.py
-${PYSITELIB}/watchdog/observers/inotify_buffer.pyc
-${PYSITELIB}/watchdog/observers/inotify_buffer.pyo
${PYSITELIB}/watchdog/observers/inotify_c.py
${PYSITELIB}/watchdog/observers/inotify_c.pyc
${PYSITELIB}/watchdog/observers/inotify_c.pyo
+${PYSITELIB}/watchdog/observers/inotify_move_event_grouper.py
+${PYSITELIB}/watchdog/observers/inotify_move_event_grouper.pyc
+${PYSITELIB}/watchdog/observers/inotify_move_event_grouper.pyo
${PYSITELIB}/watchdog/observers/kqueue.py
${PYSITELIB}/watchdog/observers/kqueue.pyc
${PYSITELIB}/watchdog/observers/kqueue.pyo
@@ -54,6 +57,9 @@ ${PYSITELIB}/watchdog/tricks/__init__.py
${PYSITELIB}/watchdog/utils/__init__.py
${PYSITELIB}/watchdog/utils/__init__.pyc
${PYSITELIB}/watchdog/utils/__init__.pyo
+${PYSITELIB}/watchdog/utils/backwards_compat.py
+${PYSITELIB}/watchdog/utils/backwards_compat.pyc
+${PYSITELIB}/watchdog/utils/backwards_compat.pyo
${PYSITELIB}/watchdog/utils/bricks.py
${PYSITELIB}/watchdog/utils/bricks.pyc
${PYSITELIB}/watchdog/utils/bricks.pyo
Index: pkgsrc/sysutils/py-watchdog/distinfo
diff -u pkgsrc/sysutils/py-watchdog/distinfo:1.16 pkgsrc/sysutils/py-watchdog/distinfo:1.17
--- pkgsrc/sysutils/py-watchdog/distinfo:1.16 Mon Nov 4 18:17:06 2024
+++ pkgsrc/sysutils/py-watchdog/distinfo Mon Nov 2 11:21:10 2026
@@ -1,5 +1,5 @@
-$NetBSD: distinfo,v 1.16 2024/11/04 18:17:06 wiz Exp $
+$NetBSD: distinfo,v 1.17 2026/11/02 11:21:10 adam Exp $
-BLAKE2s (watchdog-6.0.0.tar.gz) = 53f01b5f294ed50b93ecd944db9ba435cfd862aad7124bb3c527614abfd9f41b
-SHA512 (watchdog-6.0.0.tar.gz) = a248e05b538a894a00e38dabbc0cc7490bb1a87689aa14aac5835f611136fcf6f1e3bd45a6ca4f10991ffabd9264c72f981f4619bd77eb8baf297d015975d57f
-Size (watchdog-6.0.0.tar.gz) = 131220 bytes
+BLAKE2s (watchdog-7.0.0.tar.gz) = 072ef1d27b905861e2099c7aab837dbcf8eb93c69e46c6442b459803a4583e84
+SHA512 (watchdog-7.0.0.tar.gz) = c73cec75556a25b5d73a03c2c0eeb4ded07bcf80bc196d1dc345bfa1544f8be467c4ada562e65a48d15b95a8997108a8103ff92de3d9edb8b320217933c8e05f
+Size (watchdog-7.0.0.tar.gz) = 208550 bytes
Home |
Main Index |
Thread Index |
Old Index