fgof-watch Public
Go to file
T
Code
Use Git or checkout with SVN using the web URL.
No matching headings.
fgof-watch
Portable file watching helpers for modern Fortran tools.
fgof-watch is intended to be a small, standalone library for directory and file watching in shells, editors, live-reload tools, sync utilities, and developer loops.
It is part of the FortranGoingOnForty lib-modules catalog, but it is intended to stand on its own as a normal fpm package.
Current v1 target:
- high-level watch-session API
- portable polling backend as a dependable baseline
- normalized events for create, modify, remove, and move
- debounce and filtering hooks that app authors can actually use
- clean boundaries with
fgof-processand futurefgof-devloop
Future scope:
- native backends once the public API is stable
- richer event coalescing and ignore-rule helpers
- higher-level dev-loop orchestration in companion packages
Status
Polling-first v0.1.0 candidate is in place.
Implemented today:
- public
fgof_watchandfgof_watch_typesmodules - polling-backed
watch_session,watch_options, andwatch_eventtypes - initialization, reset, and batch polling helpers
- normalized create, modify, remove, and move events
- recursive and nonrecursive polling behavior
- hidden-path filtering and ignored-prefix filtering
- optional suppression of directory create or remove noise
- debounce-based quieting for bursty paths
- snapshot-failure reporting without false remove storms
- ignored and hidden subtrees pruned before deep traversal
- literal path bytes preserved across snapshot transport, including tabs and newlines
- smoke-test and change-detection coverage with CI wiring
Still to implement:
- native backend strategy
- further event coalescing and policy helpers
Why Use It
- file watching is still one of the biggest remaining tooling gaps in Fortran
- app authors want a reusable library surface, not only standalone watcher tools
- it should compose naturally with
fgof-process, futurefgof-devloop, editors, and live-reload workflows
Public API Shape
Primary modules:
fgof_watchfgof_watch_types
Public types:
watch_eventwatch_entrywatch_optionswatch_session
Current public procedures:
clear_ignore_prefixesinit_watchpoll_watchreset_watchset_ignore_prefixes
Event constants:
FGOF_WATCH_EVT_NONEFGOF_WATCH_EVT_CREATEDFGOF_WATCH_EVT_MODIFIEDFGOF_WATCH_EVT_REMOVEDFGOF_WATCH_EVT_MOVED
Error constants:
FGOF_WATCH_ERR_NONEFGOF_WATCH_ERR_SNAPSHOT_FAILED
Quick Start
program demo_watch
use fgof_watch, only : init_watch, poll_watch, set_ignore_prefixes
use fgof_watch_types, only : watch_event, watch_options, watch_session
implicit none
type(watch_event), allocatable :: events(:)
type(watch_options) :: options
type(watch_session) :: session
options%debounce_polls = 1
options%ignore_hidden = .true.
options%emit_directory_events = .false.
call set_ignore_prefixes(options, [character(len=9) :: "src/.git"])
call init_watch(session, "src", options)
events = poll_watch(session)
print "(I0)", size(events)
end program demo_watch
Build And Test
fpm test
That is the baseline verification command locally and in CI.
Supported Platforms
- macOS
- Linux
Boundaries
- intended to stay independently versioned and releasable
- focused on reusable watch primitives, not a full dev-loop tool
- polling will be the first dependable backend; native backends can come later without changing the high-level surface
- the current polling backend reports event batches and suppresses directory-only metadata churn, so nested file activity is the signal that rises to the top
- current shaping controls include
debounce_polls,ignore_hidden, ignored path prefixes, andemit_directory_events - snapshot read failures preserve the previous watch state, emit no events for that poll, and surface detail through
watch_session%last_error_codeandwatch_session%last_error_message - hidden and ignored prefixes are pruned during snapshot collection, so excluded subtrees do not need to be fully scanned first
License
MIT