Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package fswatch for openSUSE:Factory checked in at 2026-07-28 18:14:35 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/fswatch (Old) and /work/SRC/openSUSE:Factory/.fswatch.new.2004 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "fswatch" Tue Jul 28 18:14:35 2026 rev:8 rq:1368044 version:1.22.0 Changes: -------- --- /work/SRC/openSUSE:Factory/fswatch/fswatch.changes 2026-05-12 19:32:33.461728773 +0200 +++ /work/SRC/openSUSE:Factory/.fswatch.new.2004/fswatch.changes 2026-07-28 18:16:33.095681698 +0200 @@ -1,0 +2,8 @@ +Mon Jul 27 13:11:13 UTC 2026 - Michal Vyskocil <[email protected]> + +- update to 1.22.0 + * The inotify monitor now appends the kernel-provided child name + to MovedFrom and MovedTo event paths while forwarding + rename-correlation cookies unchanged. + +------------------------------------------------------------------- Old: ---- fswatch-1.21.0.tar.gz New: ---- fswatch-1.22.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ fswatch.spec ++++++ --- /var/tmp/diff_new_pack.gGgliY/_old 2026-07-28 18:16:35.159753854 +0200 +++ /var/tmp/diff_new_pack.gGgliY/_new 2026-07-28 18:16:35.163753994 +0200 @@ -19,7 +19,7 @@ %global sover 15 Name: fswatch -Version: 1.21.0 +Version: 1.22.0 Release: 0 Summary: Multi platform file change monitor License: GPL-3.0-or-later ++++++ fswatch-1.21.0.tar.gz -> fswatch-1.22.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fswatch-1.21.0/.github/workflows/c-cpp.yml new/fswatch-1.22.0/.github/workflows/c-cpp.yml --- old/fswatch-1.21.0/.github/workflows/c-cpp.yml 2026-05-09 23:51:20.000000000 +0200 +++ new/fswatch-1.22.0/.github/workflows/c-cpp.yml 2026-07-22 11:59:23.000000000 +0200 @@ -36,7 +36,7 @@ runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - name: Install dependencies on Ubuntu if: matrix.os == 'ubuntu-latest' @@ -88,7 +88,7 @@ steps: - name: Report autotools result - uses: actions/github-script@v8 + uses: actions/github-script@v9 with: script: | const buildResult = '${{ needs.build.result }}'; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fswatch-1.21.0/.github/workflows/cmake-libfswatch.yml new/fswatch-1.22.0/.github/workflows/cmake-libfswatch.yml --- old/fswatch-1.21.0/.github/workflows/cmake-libfswatch.yml 2026-05-09 23:51:20.000000000 +0200 +++ new/fswatch-1.22.0/.github/workflows/cmake-libfswatch.yml 2026-07-22 11:59:23.000000000 +0200 @@ -19,7 +19,7 @@ runs-on: windows-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - name: Install MSYS2 MinGW toolchain shell: pwsh diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fswatch-1.21.0/.github/workflows/cmake.yml new/fswatch-1.22.0/.github/workflows/cmake.yml --- old/fswatch-1.21.0/.github/workflows/cmake.yml 2026-05-09 23:51:20.000000000 +0200 +++ new/fswatch-1.22.0/.github/workflows/cmake.yml 2026-07-22 11:59:23.000000000 +0200 @@ -19,7 +19,7 @@ runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - name: Configure CMake # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fswatch-1.21.0/.github/workflows/release-tarball.yml new/fswatch-1.22.0/.github/workflows/release-tarball.yml --- old/fswatch-1.21.0/.github/workflows/release-tarball.yml 2026-05-09 23:51:20.000000000 +0200 +++ new/fswatch-1.22.0/.github/workflows/release-tarball.yml 2026-07-22 11:59:23.000000000 +0200 @@ -13,13 +13,13 @@ runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 with: ref: ${{ github.event.release.tag_name }} - name: Check autotools status id: check_status - uses: actions/github-script@v8 + uses: actions/github-script@v9 with: script: | const owner = context.repo.owner; @@ -83,6 +83,32 @@ --repo "${GITHUB_REPOSITORY}" \ --clobber + - name: Build static Linux x86_64 convenience binary + env: + TAG_NAME: ${{ github.event.release.tag_name }} + run: | + docker run --rm \ + -e JOBS="$(nproc)" \ + -e TAG_NAME="${TAG_NAME}" \ + -v "${PWD}:/work" \ + -w /work \ + alpine:latest \ + sh -euxc ' + apk add --no-cache autoconf automake binutils build-base file gettext-dev git libtool make tar texinfo zsh + git config --global --add safe.directory /work + zsh ./scripts/release/build-static-linux-x86_64.zsh "${TAG_NAME}" + ' + + - name: Upload static Linux x86_64 convenience binary + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + TAG_NAME: ${{ github.event.release.tag_name }} + run: | + gh release upload "${TAG_NAME}" \ + "./fswatch-${TAG_NAME}-linux-x86_64-static.tar.gz#fswatch-${TAG_NAME}-linux-x86_64-static.tar.gz" \ + --repo "${GITHUB_REPOSITORY}" \ + --clobber + - name: Build PDF documentation run: make -j pdf diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fswatch-1.21.0/CMakeLists.txt new/fswatch-1.22.0/CMakeLists.txt --- old/fswatch-1.21.0/CMakeLists.txt 2026-05-09 23:51:20.000000000 +0200 +++ new/fswatch-1.22.0/CMakeLists.txt 2026-07-22 11:59:23.000000000 +0200 @@ -14,7 +14,7 @@ # this program. If not, see <http://www.gnu.org/licenses/>. # cmake_minimum_required(VERSION 3.14) -project(fswatch VERSION 1.21.0 LANGUAGES C CXX) +project(fswatch VERSION 1.22.0 LANGUAGES C CXX) set(VERSION_MODIFIER "") set(FULL_VERSION "${PROJECT_VERSION}${VERSION_MODIFIER}") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fswatch-1.21.0/NEWS new/fswatch-1.22.0/NEWS --- old/fswatch-1.21.0/NEWS 2026-05-09 23:51:20.000000000 +0200 +++ new/fswatch-1.22.0/NEWS 2026-07-22 11:59:23.000000000 +0200 @@ -1,6 +1,16 @@ NEWS **** +New in 1.22.0: + + * The release workflow now provides an experimental static Linux x86_64 + archive. + + * Bug fix, PR 388, Issue 387: On Linux, inotify MovedFrom and MovedTo events + now report the complete child path for one-sided moves and paired renames, + while preserving the kernel rename-correlation cookie. + + New in 1.21.0: * CLI, Issues 104 and 273: Add --filter-mode=conjunctive. In this mode, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fswatch-1.21.0/NEWS.libfswatch new/fswatch-1.22.0/NEWS.libfswatch --- old/fswatch-1.21.0/NEWS.libfswatch 2026-05-09 23:51:20.000000000 +0200 +++ new/fswatch-1.22.0/NEWS.libfswatch 2026-07-22 11:59:23.000000000 +0200 @@ -1,6 +1,13 @@ NEWS **** +New in 1.22.0: + + * Bug fix, PR 388, Issue 387: The inotify monitor now appends the + kernel-provided child name to MovedFrom and MovedTo event paths while + forwarding rename-correlation cookies unchanged. + + New in 1.21.0: * API, Issues 104 and 273: Add conjunctive path filter evaluation mode. In diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fswatch-1.21.0/libfswatch/src/libfswatch/c++/inotify_monitor.cpp new/fswatch-1.22.0/libfswatch/src/libfswatch/c++/inotify_monitor.cpp --- old/fswatch-1.21.0/libfswatch/src/libfswatch/c++/inotify_monitor.cpp 2026-05-09 23:51:20.000000000 +0200 +++ new/fswatch-1.22.0/libfswatch/src/libfswatch/c++/inotify_monitor.cpp 2026-07-22 11:59:23.000000000 +0200 @@ -327,7 +327,17 @@ if (!flags.empty()) { - impl->events.emplace_back(impl->wd_to_path[event->wd], impl->curr_time, flags, event->cookie); + std::ostringstream filename_stream; + filename_stream << impl->wd_to_path[event->wd]; + + if ((event->mask & (IN_MOVED_FROM | IN_MOVED_TO)) && + event->len > 0 && event->name[0] != '\0') + { + filename_stream << "/"; + filename_stream << event->name; + } + + impl->events.emplace_back(filename_stream.str(), impl->curr_time, flags, event->cookie); } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fswatch-1.21.0/m4/fswatch_version.m4 new/fswatch-1.22.0/m4/fswatch_version.m4 --- old/fswatch-1.21.0/m4/fswatch_version.m4 2026-05-09 23:51:20.000000000 +0200 +++ new/fswatch-1.22.0/m4/fswatch_version.m4 2026-07-22 11:59:23.000000000 +0200 @@ -13,5 +13,5 @@ # You should have received a copy of the GNU General Public License along with # this program. If not, see <http://www.gnu.org/licenses/>. # -m4_define([FSWATCH_VERSION], [1.21.0]) +m4_define([FSWATCH_VERSION], [1.22.0]) m4_define([FSWATCH_REVISION], [1]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fswatch-1.21.0/m4/libfswatch_version.m4 new/fswatch-1.22.0/m4/libfswatch_version.m4 --- old/fswatch-1.21.0/m4/libfswatch_version.m4 2026-05-09 23:51:20.000000000 +0200 +++ new/fswatch-1.22.0/m4/libfswatch_version.m4 2026-07-22 11:59:23.000000000 +0200 @@ -37,6 +37,6 @@ # # Libtool documentation, 7.3 Updating library version information # -m4_define([LIBFSWATCH_VERSION], [1.21.0]) -m4_define([LIBFSWATCH_API_VERSION], [15:0:0]) +m4_define([LIBFSWATCH_VERSION], [1.22.0]) +m4_define([LIBFSWATCH_API_VERSION], [15:1:0]) m4_define([LIBFSWATCH_REVISION], [1]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fswatch-1.21.0/po/en.po new/fswatch-1.22.0/po/en.po --- old/fswatch-1.21.0/po/en.po 2026-05-09 23:51:20.000000000 +0200 +++ new/fswatch-1.22.0/po/en.po 2026-07-22 11:59:23.000000000 +0200 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: fswatch 1.11.3\n" "Report-Msgid-Bugs-To: [email protected]\n" -"POT-Creation-Date: 2026-05-09 20:17+0200\n" +"POT-Creation-Date: 2026-07-22 10:43+0200\n" "PO-Revision-Date: 2017-10-29 14:04+0100\n" "Last-Translator: Enrico Maria Crisostomo <[email protected]>\n" "Language-Team: English\n" @@ -342,7 +342,7 @@ #: libfswatch/src/libfswatch/c++/fanotify_monitor.cpp:480 #: libfswatch/src/libfswatch/c++/fen_monitor.cpp:297 #: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:293 -#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:515 +#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:525 #: libfswatch/src/libfswatch/c++/kqueue_monitor.cpp:227 #: libfswatch/src/libfswatch/c++/poll_monitor.cpp:169 #, c-format @@ -350,7 +350,7 @@ msgstr "" #: libfswatch/src/libfswatch/c++/fanotify_monitor.cpp:466 -#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:501 +#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:511 #, c-format msgid "Synthetic event: processing directory: %s\n" msgstr "" @@ -483,23 +483,23 @@ msgid "Added: " msgstr "" -#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:373 +#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:383 msgid "Generic event: " msgstr "" -#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:465 +#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:475 msgid "Removed: " msgstr "" -#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:601 +#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:611 msgid "Number of records: " msgstr "" -#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:607 +#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:617 msgid "read() on inotify descriptor read 0 records." msgstr "" -#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:615 +#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:625 msgid "read() on inotify descriptor returned -1." msgstr "" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fswatch-1.21.0/po/[email protected] new/fswatch-1.22.0/po/[email protected] --- old/fswatch-1.21.0/po/[email protected] 2026-05-09 23:51:20.000000000 +0200 +++ new/fswatch-1.22.0/po/[email protected] 2026-07-22 11:59:23.000000000 +0200 @@ -30,10 +30,10 @@ # msgid "" msgstr "" -"Project-Id-Version: fswatch 1.21.0\n" +"Project-Id-Version: fswatch 1.22.0\n" "Report-Msgid-Bugs-To: [email protected]\n" -"POT-Creation-Date: 2026-05-09 20:17+0200\n" -"PO-Revision-Date: 2026-05-09 20:17+0200\n" +"POT-Creation-Date: 2026-07-22 10:43+0200\n" +"PO-Revision-Date: 2026-07-22 10:43+0200\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: en@boldquot\n" @@ -378,7 +378,7 @@ #: libfswatch/src/libfswatch/c++/fanotify_monitor.cpp:480 #: libfswatch/src/libfswatch/c++/fen_monitor.cpp:297 #: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:293 -#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:515 +#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:525 #: libfswatch/src/libfswatch/c++/kqueue_monitor.cpp:227 #: libfswatch/src/libfswatch/c++/poll_monitor.cpp:169 #, c-format @@ -386,7 +386,7 @@ msgstr "Filesystem error: %s" #: libfswatch/src/libfswatch/c++/fanotify_monitor.cpp:466 -#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:501 +#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:511 #, c-format msgid "Synthetic event: processing directory: %s\n" msgstr "Synthetic event: processing directory: %s\n" @@ -519,23 +519,23 @@ msgid "Added: " msgstr "Added: " -#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:373 +#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:383 msgid "Generic event: " msgstr "Generic event: " -#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:465 +#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:475 msgid "Removed: " msgstr "Removed: " -#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:601 +#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:611 msgid "Number of records: " msgstr "Number of records: " -#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:607 +#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:617 msgid "read() on inotify descriptor read 0 records." msgstr "read() on inotify descriptor read 0 records." -#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:615 +#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:625 msgid "read() on inotify descriptor returned -1." msgstr "read() on inotify descriptor returned -1." diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fswatch-1.21.0/po/[email protected] new/fswatch-1.22.0/po/[email protected] --- old/fswatch-1.21.0/po/[email protected] 2026-05-09 23:51:20.000000000 +0200 +++ new/fswatch-1.22.0/po/[email protected] 2026-07-22 11:59:23.000000000 +0200 @@ -27,10 +27,10 @@ # msgid "" msgstr "" -"Project-Id-Version: fswatch 1.21.0\n" +"Project-Id-Version: fswatch 1.22.0\n" "Report-Msgid-Bugs-To: [email protected]\n" -"POT-Creation-Date: 2026-05-09 20:17+0200\n" -"PO-Revision-Date: 2026-05-09 20:17+0200\n" +"POT-Creation-Date: 2026-07-22 10:43+0200\n" +"PO-Revision-Date: 2026-07-22 10:43+0200\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: en@quot\n" @@ -375,7 +375,7 @@ #: libfswatch/src/libfswatch/c++/fanotify_monitor.cpp:480 #: libfswatch/src/libfswatch/c++/fen_monitor.cpp:297 #: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:293 -#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:515 +#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:525 #: libfswatch/src/libfswatch/c++/kqueue_monitor.cpp:227 #: libfswatch/src/libfswatch/c++/poll_monitor.cpp:169 #, c-format @@ -383,7 +383,7 @@ msgstr "Filesystem error: %s" #: libfswatch/src/libfswatch/c++/fanotify_monitor.cpp:466 -#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:501 +#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:511 #, c-format msgid "Synthetic event: processing directory: %s\n" msgstr "Synthetic event: processing directory: %s\n" @@ -516,23 +516,23 @@ msgid "Added: " msgstr "Added: " -#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:373 +#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:383 msgid "Generic event: " msgstr "Generic event: " -#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:465 +#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:475 msgid "Removed: " msgstr "Removed: " -#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:601 +#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:611 msgid "Number of records: " msgstr "Number of records: " -#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:607 +#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:617 msgid "read() on inotify descriptor read 0 records." msgstr "read() on inotify descriptor read 0 records." -#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:615 +#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:625 msgid "read() on inotify descriptor returned -1." msgstr "read() on inotify descriptor returned -1." diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fswatch-1.21.0/po/es.po new/fswatch-1.22.0/po/es.po --- old/fswatch-1.21.0/po/es.po 2026-05-09 23:51:20.000000000 +0200 +++ new/fswatch-1.22.0/po/es.po 2026-07-22 11:59:23.000000000 +0200 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: fswatch 1.11.3\n" "Report-Msgid-Bugs-To: [email protected]\n" -"POT-Creation-Date: 2026-05-09 20:17+0200\n" +"POT-Creation-Date: 2026-07-22 10:43+0200\n" "PO-Revision-Date: 2017-10-29 14:04+0100\n" "Last-Translator: Enrico Maria Crisostomo <[email protected]>\n" "Language-Team: Spanish <[email protected]>\n" @@ -358,7 +358,7 @@ #: libfswatch/src/libfswatch/c++/fanotify_monitor.cpp:480 #: libfswatch/src/libfswatch/c++/fen_monitor.cpp:297 #: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:293 -#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:515 +#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:525 #: libfswatch/src/libfswatch/c++/kqueue_monitor.cpp:227 #: libfswatch/src/libfswatch/c++/poll_monitor.cpp:169 #, c-format @@ -366,7 +366,7 @@ msgstr "Error del sistema de ficheros: %s" #: libfswatch/src/libfswatch/c++/fanotify_monitor.cpp:466 -#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:501 +#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:511 #, c-format msgid "Synthetic event: processing directory: %s\n" msgstr "Evento sintético: procesando carpeta: %s\n" @@ -499,23 +499,23 @@ msgid "Added: " msgstr "Añadiendo: " -#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:373 +#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:383 msgid "Generic event: " msgstr "Evento genérico: " -#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:465 +#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:475 msgid "Removed: " msgstr "Eliminado: " -#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:601 +#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:611 msgid "Number of records: " msgstr "Numero de registros: " -#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:607 +#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:617 msgid "read() on inotify descriptor read 0 records." msgstr "read() sobre el descriptor inotify leyó 0 registros." -#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:615 +#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:625 msgid "read() on inotify descriptor returned -1." msgstr "read() sobre le descriptor inotify devolvió -1." diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fswatch-1.21.0/po/fswatch.pot new/fswatch-1.22.0/po/fswatch.pot --- old/fswatch-1.21.0/po/fswatch.pot 2026-05-09 23:51:20.000000000 +0200 +++ new/fswatch-1.22.0/po/fswatch.pot 2026-07-22 11:59:23.000000000 +0200 @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: fswatch 1.21.0\n" +"Project-Id-Version: fswatch 1.22.0\n" "Report-Msgid-Bugs-To: [email protected]\n" -"POT-Creation-Date: 2026-05-09 20:17+0200\n" +"POT-Creation-Date: 2026-07-22 10:43+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <[email protected]>\n" @@ -342,7 +342,7 @@ #: libfswatch/src/libfswatch/c++/fanotify_monitor.cpp:480 #: libfswatch/src/libfswatch/c++/fen_monitor.cpp:297 #: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:293 -#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:515 +#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:525 #: libfswatch/src/libfswatch/c++/kqueue_monitor.cpp:227 #: libfswatch/src/libfswatch/c++/poll_monitor.cpp:169 #, c-format @@ -350,7 +350,7 @@ msgstr "" #: libfswatch/src/libfswatch/c++/fanotify_monitor.cpp:466 -#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:501 +#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:511 #, c-format msgid "Synthetic event: processing directory: %s\n" msgstr "" @@ -483,23 +483,23 @@ msgid "Added: " msgstr "" -#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:373 +#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:383 msgid "Generic event: " msgstr "" -#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:465 +#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:475 msgid "Removed: " msgstr "" -#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:601 +#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:611 msgid "Number of records: " msgstr "" -#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:607 +#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:617 msgid "read() on inotify descriptor read 0 records." msgstr "" -#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:615 +#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:625 msgid "read() on inotify descriptor returned -1." msgstr "" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fswatch-1.21.0/po/it.po new/fswatch-1.22.0/po/it.po --- old/fswatch-1.21.0/po/it.po 2026-05-09 23:51:20.000000000 +0200 +++ new/fswatch-1.22.0/po/it.po 2026-07-22 11:59:23.000000000 +0200 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: fswatch 1.11.3\n" "Report-Msgid-Bugs-To: [email protected]\n" -"POT-Creation-Date: 2026-05-09 20:17+0200\n" +"POT-Creation-Date: 2026-07-22 10:43+0200\n" "PO-Revision-Date: 2018-05-02 17:29+0200\n" "Last-Translator: Enrico Maria Crisostomo <[email protected]>\n" "Language-Team: Italian <[email protected]>\n" @@ -361,7 +361,7 @@ #: libfswatch/src/libfswatch/c++/fanotify_monitor.cpp:480 #: libfswatch/src/libfswatch/c++/fen_monitor.cpp:297 #: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:293 -#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:515 +#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:525 #: libfswatch/src/libfswatch/c++/kqueue_monitor.cpp:227 #: libfswatch/src/libfswatch/c++/poll_monitor.cpp:169 #, c-format @@ -369,7 +369,7 @@ msgstr "Errore del file system: %s" #: libfswatch/src/libfswatch/c++/fanotify_monitor.cpp:466 -#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:501 +#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:511 #, c-format msgid "Synthetic event: processing directory: %s\n" msgstr "Evento sintetico: elaborazione directory: %s\n" @@ -502,23 +502,23 @@ msgid "Added: " msgstr "Aggiunto: " -#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:373 +#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:383 msgid "Generic event: " msgstr "Evento generico: " -#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:465 +#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:475 msgid "Removed: " msgstr "Eliminato: " -#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:601 +#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:611 msgid "Number of records: " msgstr "Numero di registri: " -#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:607 +#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:617 msgid "read() on inotify descriptor read 0 records." msgstr "read() sul descrittore inotify ha trovato 0 registri." -#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:615 +#: libfswatch/src/libfswatch/c++/inotify_monitor.cpp:625 msgid "read() on inotify descriptor returned -1." msgstr "read() sul descrittore inotify ha ritornato -1." diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fswatch-1.21.0/scripts/release/build-static-linux-x86_64.zsh new/fswatch-1.22.0/scripts/release/build-static-linux-x86_64.zsh --- old/fswatch-1.21.0/scripts/release/build-static-linux-x86_64.zsh 1970-01-01 01:00:00.000000000 +0100 +++ new/fswatch-1.22.0/scripts/release/build-static-linux-x86_64.zsh 2026-07-22 11:59:23.000000000 +0200 @@ -0,0 +1,164 @@ +#!/bin/zsh +# -*- vim:fenc=utf-8:et:sw=2:ts=2:sts=2 +# +# Copyright (c) 2026 Enrico M. Crisostomo +# +# This program is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free Software +# Foundation; either version 3, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# this program. If not, see <http://www.gnu.org/licenses/>. + +setopt local_options +setopt local_traps +unsetopt glob_subst + +set -o errexit +set -o nounset + +PROGNAME=${0:t} +PROGDIR=${0:A:h} + +. "${PROGDIR}/lib.zsh" + +usage() +{ + print -- "Usage: ${PROGNAME} VERSION" + print + print -- "Build fswatch-VERSION-linux-x86_64-static.tar.gz." +} + +(( $# == 1 )) || { + usage + exit 1 +} + +release_parse_version "$1" + +repo_root=$(release_repo_root) +cd "${repo_root}" + +[[ "$(uname -s)" == "Linux" ]] || + release_die "static convenience binary must be built on Linux" +[[ "$(uname -m)" == "x86_64" ]] || + release_die "static convenience binary must be built on x86_64" + +for required_command in file git ldd make readelf sha256sum tar +do + command -v "${required_command}" > /dev/null || + release_die "required command not found: ${required_command}" +done + +artifact="fswatch-${RELEASE_VERSION}-linux-x86_64-static.tar.gz" +work_root="${TMPDIR:-/tmp}/fswatch-static-linux-x86_64-${RELEASE_VERSION}-$$" +source_dir="${work_root}/source" +build_dir="${work_root}/build" +stage_dir="${work_root}/stage" + +cleanup() +{ + rm -rf "${work_root}" +} +trap cleanup EXIT + +rm -f "${artifact}" +mkdir -p "${source_dir}" "${build_dir}" "${stage_dir}" + +git ls-files -z | + tar --null -T - -cf - | + tar -C "${source_dir}" -xf - + +( + cd "${source_dir}" + ./autogen.sh +) + +( + cd "${build_dir}" + "${source_dir}/configure" \ + --disable-shared \ + --enable-static \ + --disable-nls \ + CFLAGS="-O2" \ + CXXFLAGS="-O2" \ + LDFLAGS="-static" + jobs="${JOBS:-$(getconf _NPROCESSORS_ONLN 2> /dev/null || print 2)}" + make -j "${jobs}" -C libfswatch/src + make -j "${jobs}" -C fswatch/src \ + AM_LDFLAGS="-all-static" \ + LDFLAGS="-static -no-pie -static-libgcc -static-libstdc++" +) + +built_fswatch="${build_dir}/fswatch/src/fswatch" +if ! file "${built_fswatch}" | grep -Eq 'ELF 64-bit.*x86-64' +then + if [[ -x "${build_dir}/fswatch/src/.libs/fswatch" ]] + then + built_fswatch="${build_dir}/fswatch/src/.libs/fswatch" + fi +fi + +file "${built_fswatch}" | tee "${work_root}/file.txt" +ldd "${built_fswatch}" > "${work_root}/ldd.txt" 2>&1 || true +cat "${work_root}/ldd.txt" +readelf -d "${built_fswatch}" > "${work_root}/readelf-d.txt" 2>&1 || true +cat "${work_root}/readelf-d.txt" + +file "${built_fswatch}" | grep -Eq 'ELF 64-bit.*x86-64' || + release_die "fswatch is not a Linux x86_64 ELF executable" + +if readelf -l "${built_fswatch}" | grep -q 'INTERP' +then + release_die "fswatch has an ELF interpreter and is dynamically linked" +fi + +if grep -q '(NEEDED)' "${work_root}/readelf-d.txt" +then + release_die "fswatch has NEEDED shared library entries" +fi + +if ! grep -Eiq 'not a dynamic executable|not a valid dynamic|statically linked' "${work_root}/ldd.txt" +then + release_die "ldd did not identify fswatch as a static executable" +fi + +cp "${built_fswatch}" "${stage_dir}/fswatch" +cp "${source_dir}/COPYING" "${stage_dir}/COPYING" +cat > "${stage_dir}/README.binary" <<EOF +fswatch ${RELEASE_VERSION} Linux x86_64 static convenience binary + +This is an experimental convenience binary for Linux x86_64 systems only. +It is built as a static executable, using a musl-based build environment in the +GitHub release workflow. + +This binary is not the recommended installation path. Package managers and +distro packages remain the recommended way to install fswatch. If you need +integration with your distribution, use your distribution's fswatch package +instead. + +This package intentionally contains only the fswatch executable and license +metadata. It does not include libfswatch ABI/API artifacts, headers, +pkg-config files, man pages, shared libraries, or static libraries. +EOF + +( + cd "${stage_dir}" + sha256sum fswatch COPYING README.binary > SHA256SUMS + tar -czf "${repo_root}/${artifact}" fswatch COPYING README.binary SHA256SUMS +) + +tar -tzf "${artifact}" | sed '/./!d' > "${work_root}/tar-contents.txt" +if ! cmp -s "${work_root}/tar-contents.txt" =(print -l fswatch COPYING README.binary SHA256SUMS) +then + print -u2 -- "unexpected tarball contents:" + cat "${work_root}/tar-contents.txt" >&2 + release_die "${artifact} does not contain exactly the expected files" +fi + +release_info "created ${artifact}" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fswatch-1.21.0/scripts/release/watch.zsh new/fswatch-1.22.0/scripts/release/watch.zsh --- old/fswatch-1.21.0/scripts/release/watch.zsh 2026-05-09 23:51:20.000000000 +0200 +++ new/fswatch-1.22.0/scripts/release/watch.zsh 2026-07-22 11:59:23.000000000 +0200 @@ -188,27 +188,32 @@ release_die "GitHub release tag is ${release_tag}, expected ${RELEASE_VERSION}" expected_tarball="fswatch-${RELEASE_VERSION}.tar.gz" +expected_static_binary="fswatch-${RELEASE_VERSION}-linux-x86_64-static.tar.gz" expected_pdf="fswatch-${RELEASE_VERSION}.pdf" +expected_doxygen_html="fswatch-${RELEASE_VERSION}-libfswatch-doxygen-html.tar.gz" typeset -i failures=0 -if print -r -- "${asset_names}" | grep -Fxq "${expected_tarball}" -then - print -- "ok: release asset exists: ${expected_tarball}" -else - print -u2 -- "FAIL: release asset is missing: ${expected_tarball}" - failures+=1 -fi - -if print -r -- "${asset_names}" | grep -Fxq "${expected_pdf}" -then - print -- "ok: release asset exists: ${expected_pdf}" -else - print -u2 -- "FAIL: release asset is missing: ${expected_pdf}" - failures+=1 -fi +for expected_asset in \ + "${expected_tarball}" \ + "${expected_static_binary}" \ + "${expected_pdf}" \ + "${expected_doxygen_html}" +do + if print -r -- "${asset_names}" | grep -Fxq "${expected_asset}" + then + print -- "ok: release asset exists: ${expected_asset}" + else + print -u2 -- "FAIL: release asset is missing: ${expected_asset}" + failures+=1 + fi +done extra_assets=$(print -r -- "${asset_names}" | - grep -Fvx -e "${expected_tarball}" -e "${expected_pdf}" || true) + grep -Fvx \ + -e "${expected_tarball}" \ + -e "${expected_static_binary}" \ + -e "${expected_pdf}" \ + -e "${expected_doxygen_html}" || true) if [[ -n "${extra_assets}" ]] then diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fswatch-1.21.0/test/inotify_basic_events.sh new/fswatch-1.22.0/test/inotify_basic_events.sh --- old/fswatch-1.21.0/test/inotify_basic_events.sh 2026-05-09 23:51:20.000000000 +0200 +++ new/fswatch-1.22.0/test/inotify_basic_events.sh 2026-07-22 11:59:23.000000000 +0200 @@ -43,23 +43,50 @@ trap cleanup EXIT INT TERM TESTDIR="${WORKDIR}/watched" -mkdir "${TESTDIR}" +OUTSIDE_IN="${WORKDIR}/outside-in" +OUTSIDE_OUT="${WORKDIR}/outside-out" +SYMLINK_TARGET="${WORKDIR}/symlink-target" +SYMLINK_ROOT="${WORKDIR}/watched-link" +mkdir "${TESTDIR}" "${OUTSIDE_IN}" "${OUTSIDE_OUT}" "${SYMLINK_TARGET}" +ln -s "${SYMLINK_TARGET}" "${SYMLINK_ROOT}" -"${FSWATCH}" -m inotify_monitor -r --format '%p %f' "${TESTDIR}" \ +"${FSWATCH}" -m inotify_monitor -r --format '%p|%f|%c' \ + "${TESTDIR}" "${SYMLINK_ROOT}" \ > "${WORKDIR}/out.log" 2> "${WORKDIR}/err.log" & PID=$! sleep 1 CREATE_FILE="${TESTDIR}/created.txt" -MOVE_SOURCE="${TESTDIR}/move-source.txt" -MOVE_TARGET="${TESTDIR}/move-target.txt" +MOVE_IN_SOURCE="${OUTSIDE_IN}/move-in.txt" +MOVE_IN_TARGET="${TESTDIR}/move-in.txt" +DIR_MOVE_IN_SOURCE="${OUTSIDE_IN}/move-in-dir" +DIR_MOVE_IN_TARGET="${TESTDIR}/move-in-dir" +MOVE_OUT_SOURCE="${TESTDIR}/move-out.txt" +MOVE_OUT_TARGET="${OUTSIDE_OUT}/move-out.txt" +MOVE_SOURCE="${TESTDIR}/paired-from.txt" +MOVE_TARGET="${TESTDIR}/paired-to.txt" +REPLACEMENT_SOURCE="${TESTDIR}/replacement-source.txt" +REPLACEMENT_TARGET="${TESTDIR}/replacement-target.txt" +SYMLINK_SOURCE="${OUTSIDE_IN}/symlink-in.txt" +SYMLINK_DESTINATION="${SYMLINK_TARGET}/symlink-in.txt" DELETE_FILE="${TESTDIR}/delete-me.txt" echo created > "${CREATE_FILE}" echo update >> "${CREATE_FILE}" +echo move-in > "${MOVE_IN_SOURCE}" +mv "${MOVE_IN_SOURCE}" "${MOVE_IN_TARGET}" +mkdir "${DIR_MOVE_IN_SOURCE}" +mv "${DIR_MOVE_IN_SOURCE}" "${DIR_MOVE_IN_TARGET}" +echo move-out > "${MOVE_OUT_SOURCE}" +mv "${MOVE_OUT_SOURCE}" "${MOVE_OUT_TARGET}" echo move > "${MOVE_SOURCE}" mv "${MOVE_SOURCE}" "${MOVE_TARGET}" +echo original > "${REPLACEMENT_TARGET}" +echo replacement > "${REPLACEMENT_SOURCE}" +mv -f "${REPLACEMENT_SOURCE}" "${REPLACEMENT_TARGET}" +echo symlink > "${SYMLINK_SOURCE}" +mv "${SYMLINK_SOURCE}" "${SYMLINK_DESTINATION}" echo delete > "${DELETE_FILE}" rm "${DELETE_FILE}" @@ -89,8 +116,47 @@ fi } -assert_event 'created\.txt .*Created' 'file creation' -assert_event 'created\.txt .*(Updated|CloseWrite)' 'file update' -assert_event '/watched .*MovedFrom' 'rename source' -assert_event '/watched .*MovedTo' 'rename target' -assert_event 'delete-me\.txt .*Removed' 'file deletion' +assert_event 'created\.txt\|.*Created' 'file creation' +assert_event 'created\.txt\|.*(Updated|CloseWrite)' 'file update' +assert_event '/watched/move-in\.txt\|.*MovedTo.*\|[1-9][0-9]*$' 'one-sided move-in' +assert_event '/watched/move-in-dir\|.*MovedTo.*\|[1-9][0-9]*$' 'one-sided directory move-in' +assert_event '/watched/move-out\.txt\|.*MovedFrom.*\|[1-9][0-9]*$' 'one-sided move-out' +assert_event '/watched/paired-from\.txt\|.*MovedFrom.*\|[1-9][0-9]*$' 'paired rename source' +assert_event '/watched/paired-to\.txt\|.*MovedTo.*\|[1-9][0-9]*$' 'paired rename target' +assert_event '/watched/replacement-source\.txt\|.*MovedFrom.*\|[1-9][0-9]*$' 'replacement-by-rename source' +assert_event '/watched/replacement-target\.txt\|.*MovedTo.*\|[1-9][0-9]*$' 'replacement-by-rename target' +assert_event '/watched-link/symlink-in\.txt\|.*MovedTo.*\|[1-9][0-9]*$' 'symlinked watch root' +assert_event 'delete-me\.txt\|.*Removed' 'file deletion' + +if ! awk -F '|' ' + $1 ~ /\/watched\/move-in-dir$/ && + $2 ~ /(^| )MovedTo( |$)/ && + $2 ~ /(^| )IsDir( |$)/ && + $3 ~ /^[1-9][0-9]*$/ { found = 1 } + END { exit !found } +' "${WORKDIR}/out.log"; then + echo "missing complete one-sided directory move-in event" >&2 + sed -n '1,160p' "${WORKDIR}/out.log" >&2 + exit 1 +fi + +PAIRED_FROM_COOKIE=$(awk -F '|' '/\/watched\/paired-from\.txt\|.*MovedFrom/ { print $3; exit }' "${WORKDIR}/out.log") +PAIRED_TO_COOKIE=$(awk -F '|' '/\/watched\/paired-to\.txt\|.*MovedTo/ { print $3; exit }' "${WORKDIR}/out.log") +REPLACEMENT_FROM_COOKIE=$(awk -F '|' '/\/watched\/replacement-source\.txt\|.*MovedFrom/ { print $3; exit }' "${WORKDIR}/out.log") +REPLACEMENT_TO_COOKIE=$(awk -F '|' '/\/watched\/replacement-target\.txt\|.*MovedTo/ { print $3; exit }' "${WORKDIR}/out.log") + +if [ -z "${PAIRED_FROM_COOKIE}" ] || + [ "${PAIRED_FROM_COOKIE}" = 0 ] || + [ "${PAIRED_FROM_COOKIE}" != "${PAIRED_TO_COOKIE}" ]; then + echo "inotify rename cookies do not match: from=${PAIRED_FROM_COOKIE}, to=${PAIRED_TO_COOKIE}" >&2 + sed -n '1,160p' "${WORKDIR}/out.log" >&2 + exit 1 +fi + +if [ -z "${REPLACEMENT_FROM_COOKIE}" ] || + [ "${REPLACEMENT_FROM_COOKIE}" = 0 ] || + [ "${REPLACEMENT_FROM_COOKIE}" != "${REPLACEMENT_TO_COOKIE}" ]; then + echo "inotify replacement cookies do not match: from=${REPLACEMENT_FROM_COOKIE}, to=${REPLACEMENT_TO_COOKIE}" >&2 + sed -n '1,160p' "${WORKDIR}/out.log" >&2 + exit 1 +fi
