diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0b165f5 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/watchman-2021.05.10.00.tar.gz diff --git a/README.md b/README.md new file mode 100644 index 0000000..9ac2e8a --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# watchman + +The watchman package diff --git a/changelog b/changelog new file mode 100644 index 0000000..cda3887 --- /dev/null +++ b/changelog @@ -0,0 +1,78 @@ +* Tue Dec 28 2021 Michel Alexandre Salim - 2021.05.10.00-7 +- Rebuilt with Folly 2021.12.20.00 +- Opt in to rpmautospec + +* Tue Sep 14 2021 Sahana Prasad - 2021.05.10.00-6 +- Rebuilt with OpenSSL 3.0.0 + +* Mon Sep 13 2021 Mamoru TASAKA - 2021.05.10.00-5 +- Patch for folly API deprecation change +- Patch for build issue on 32bit arch +- Disable tests with gtest 1.11 for now + +* Fri Jul 23 2021 Fedora Release Engineering - 2021.05.10.00-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Mon Jul 05 2021 Richard Shaw - 2021.05.10.00-3 +- Rebuild for new fmt version. + +* Fri Jun 04 2021 Python Maint - 2021.05.10.00-2 +- Rebuilt for Python 3.10 + +* Mon May 10 2021 Michel Alexandre Salim - 2021.05.10.00-1 +- Update to 2021.05.10.00 + +* Mon Apr 26 2021 Michel Alexandre Salim - 2021.04.26.00-1 +- Update to 2021.04.26.00 + +* Fri Apr 16 2021 Michel Alexandre Salim - 2021.04.12.00-1 +- Update to 2021.04.12.00 + +* Tue Mar 30 2021 Jonathan Wakely - 2021.03.29.00-2 +- Rebuilt for removed libstdc++ symbol (#1937698) + +* Mon Mar 29 2021 Michel Alexandre Salim - 2021.03.29.00-1 +- Update to 2021.03.29.00 + +* Wed Mar 24 2021 Michel Alexandre Salim - 2021.03.22.00-1 +- Update to 2021.03.22.00 + +* Mon Mar 15 2021 Michel Alexandre Salim - 2021.03.15.00-1 +- Update to 2021.03.15.00 + +* Wed Feb 03 2021 Michel Alexandre Salim - 2021.02.01.00-1 +- Update to 2021.02.01.00 + +* Tue Jan 26 17:51:20 PST 2021 Michel Alexandre Salim - 2021.01.25.00-1 +- Update to 2021.01.25.00 + +* Tue Dec 29 12:16:46 PST 2020 Michel Alexandre Salim - 2020.12.28.00-1 +- Update to 2020.12.28.00 + +* Tue Dec 22 20:48:10 PST 2020 Michel Alexandre Salim - 2020.12.21.00-1 +- Update to 2020.12.21.00 + +* Tue Dec 1 12:26:55 PST 2020 Michel Alexandre Salim - 2020.09.21.00-7 +- Recreate state directory with tmpfiles (bz #1903141) + +* Mon Nov 30 16:23:46 PST 2020 Michel Alexandre Salim - 2020.09.21.00-6 +- Rebuild for folly-2020.11.30.00 + +* Mon Nov 23 2020 Michel Alexandre Salim - 2020.09.21.00-5 +- Rebuild for folly-2020.11.23.00 + +* Mon Nov 16 2020 Michel Alexandre Salim - 2020.09.21.00-4 +- Rebuild for folly-2020.11.16.00 + +* Thu Nov 12 2020 Michel Alexandre Salim - 2020.09.21.00-3 +- Also install Watchman's state directory + +* Wed Nov 11 2020 Michel Alexandre Salim - 2020.09.21.00-2 +- Support enabling tests +- Add ExcludeArch on s390x for Folly dependency +- Rename Python subpackage +- Fix version number and licensing for Python subpackage +- Move Python scripts to the Python subpackage + +* Tue Nov 10 2020 Michel Alexandre Salim - 2020.09.21.00-1 +- Initial package diff --git a/dead.package b/dead.package deleted file mode 100644 index 9ac758d..0000000 --- a/dead.package +++ /dev/null @@ -1 +0,0 @@ -FTBFS; need to be repackaged after the Rust rewrite anyway diff --git a/sources b/sources new file mode 100644 index 0000000..35370c7 --- /dev/null +++ b/sources @@ -0,0 +1 @@ +SHA512 (watchman-2021.05.10.00.tar.gz) = 4ed14bf520afefc04a1bb742eb0a6cdee921aa2a8ab9f2a0fee18d5a7e1f48224fc9372a313dc5bf57883759a12710d2459232ed35e6c5e89e4ef0c5cfd02c23 diff --git a/tmpfiles-watchman.conf b/tmpfiles-watchman.conf new file mode 100644 index 0000000..74c11ed --- /dev/null +++ b/tmpfiles-watchman.conf @@ -0,0 +1 @@ +d /run/watchman 02777 root root diff --git a/watchman-2021.05.10.00-folly-new.patch b/watchman-2021.05.10.00-folly-new.patch new file mode 100644 index 0000000..4aa7e18 --- /dev/null +++ b/watchman-2021.05.10.00-folly-new.patch @@ -0,0 +1,36 @@ +--- watchman-2021.05.10.00/PendingCollection.cpp.folly 2021-05-09 08:48:24.000000000 +0900 ++++ watchman-2021.05.10.00/PendingCollection.cpp 2021-09-09 15:58:07.886372886 +0900 +@@ -301,9 +301,9 @@ PendingCollection::LockedPtr PendingColl + } + + if (timeoutms.count() == -1) { +- cond_.wait(lock.getUniqueLock()); ++ cond_.wait(lock.as_lock()); + } else { +- cond_.wait_for(lock.getUniqueLock(), timeoutms); ++ cond_.wait_for(lock.as_lock(), timeoutms); + } + + pinged = lock->checkAndResetPinged(); +--- watchman-2021.05.10.00/perf.cpp.folly 2021-05-09 08:48:24.000000000 +0900 ++++ watchman-2021.05.10.00/perf.cpp 2021-09-09 15:59:22.202231238 +0900 +@@ -221,7 +221,7 @@ void PerfLogThread::loop() noexcept { + // No samples remaining, and we have been asked to quit. + return; + } +- cond_.wait(state.getUniqueLock()); ++ cond_.wait(state.as_lock()); + } + + samples = nullptr; +--- watchman-2021.05.10.00/state.cpp.folly 2021-05-09 08:48:24.000000000 +0900 ++++ watchman-2021.05.10.00/state.cpp 2021-09-09 15:59:59.626159910 +0900 +@@ -42,7 +42,7 @@ static void state_saver() noexcept { + { + auto state = saveState.lock(); + if (!state->needsSave) { +- stateCond.wait(state.getUniqueLock()); ++ stateCond.wait(state.as_lock()); + } + do_save = state->needsSave; + state->needsSave = false; diff --git a/watchman-2021.05.10.00-wordsize.patch b/watchman-2021.05.10.00-wordsize.patch new file mode 100644 index 0000000..407d18c --- /dev/null +++ b/watchman-2021.05.10.00-wordsize.patch @@ -0,0 +1,14 @@ +--- watchman-2021.05.10.00/InMemoryView.h.wordsize 2021-05-09 08:48:24.000000000 +0900 ++++ watchman-2021.05.10.00/InMemoryView.h 2021-09-09 19:55:39.910101746 +0900 +@@ -362,7 +362,11 @@ class InMemoryView : public QueryableVie + time_t mtime; + }; + ++#if __WORDSIZE == 32 ++ static_assert(80 == sizeof(PendingChangeLogEntry)); ++#else + static_assert(88 == sizeof(PendingChangeLogEntry)); ++#endif + + // If set, paths processed by processPending are logged here. + std::unique_ptr> diff --git a/watchman-destdir.patch b/watchman-destdir.patch new file mode 100644 index 0000000..0675d53 --- /dev/null +++ b/watchman-destdir.patch @@ -0,0 +1,45 @@ +From 433938a3a6f03b144151895e23c98906af1d4d7a Mon Sep 17 00:00:00 2001 +From: Michel Alexandre Salim +Date: Tue, 26 Jan 2021 22:32:56 -0800 +Subject: [PATCH] watchman: use DESTDIR consistently + +Delay `DESTDIR` evaluation in invocation of `python setup.py` so it uses +the value passed when installing, not when configuring. + +Also use don't prepend `CMAKE_INSTALL_PREFIX` for `WATCHMAN_STATE_DIR`. +It will pick up `DESTDIR` automatically + +Note: when building on Fedora, `DESTDIR` is set to the build root and +`PREFIX` set to `/usr`, so adding the `PREFIX` would result in Python files +being seen in `%{buildroot}/usr/usr` + +Signed-off-by: Michel Alexandre Salim +--- + CMakeLists.txt | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 3dbcd68a..2c197bcd 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -136,7 +136,7 @@ endfunction() + file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/config.h.new" "#pragma once\n") + + if(NOT WIN32) +- set(WATCHMAN_STATE_DIR "${CMAKE_INSTALL_PREFIX}/var/run/watchman" CACHE STRING ++ set(WATCHMAN_STATE_DIR "/var/run/watchman" CACHE STRING + "Run-time path of the persistent state directory") + set(INSTALL_WATCHMAN_STATE_DIR OFF CACHE BOOL + "Whether WATCHMAN_STATE_DIR should be created by the cmake install +@@ -418,7 +418,7 @@ else() + ${CMAKE_COMMAND} -E env + CMAKE_CURRENT_SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR} + ${PYTHON3} ${SETUP_PY} install +- --root $ENV{DESTDIR}${CMAKE_INSTALL_PREFIX} ++ --root \$ENV{DESTDIR} + RESULT_VARIABLE STATUS) + if (NOT STATUS STREQUAL 0) + message(FATAL_ERROR \"pywatchman install failed\") +-- +2.29.2 + diff --git a/watchman-fix-for-fmt10.diff b/watchman-fix-for-fmt10.diff new file mode 100644 index 0000000..f764b71 --- /dev/null +++ b/watchman-fix-for-fmt10.diff @@ -0,0 +1,22 @@ +--- a/json.cpp ++++ b/json.cpp +@@ -443,7 +443,7 @@ bool watchman_json_buffer::streamPdu(w_s + return streamN(stm, len, jerr); + } + default: +- logf(FATAL, "not streaming for pdu type {}\n", pdu_type); ++ logf(FATAL, "not streaming for pdu type {}\n", static_cast(pdu_type)); + return false; + } + } +--- a/bser.cpp ++++ b/bser.cpp +@@ -388,7 +388,7 @@ int w_bser_dump(const bser_ctx_t* ctx, c + case W_STRING_MIXED: + return bser_mixedstring(ctx, wstr, data); + default: +- w_assert(false, "unknown string type 0x%02x", wstr.type()); ++ w_assert(false, "unknown string type 0x%02x", static_cast(wstr.type())); + return -1; + } + } diff --git a/watchman-fix-for-py3_12.diff b/watchman-fix-for-py3_12.diff new file mode 100644 index 0000000..c29e7bb --- /dev/null +++ b/watchman-fix-for-py3_12.diff @@ -0,0 +1,23 @@ +--- a/build/fbcode_builder/CMake/fb_py_test_main.py ++++ b/build/fbcode_builder/CMake/fb_py_test_main.py +@@ -24,11 +24,6 @@ import traceback + import unittest + import warnings + +-# Hide warning about importing "imp"; remove once python2 is gone. +-with warnings.catch_warnings(): +- warnings.filterwarnings("ignore", category=DeprecationWarning) +- import imp +- + try: + from StringIO import StringIO + except ImportError: +@@ -195,7 +190,7 @@ class CallbackStream(object): + return self._fileno + + +-class BuckTestResult(unittest._TextTestResult): ++class BuckTestResult(unittest.TextTestResult): + """ + Our own TestResult class that outputs data in a format that can be easily + parsed by buck's test runner. diff --git a/watchman.spec b/watchman.spec new file mode 100644 index 0000000..e54d0a6 --- /dev/null +++ b/watchman.spec @@ -0,0 +1,108 @@ +# some Python tests are failing +# The following tests FAILED: +# 40 - CacheTest.future (Child aborted) +# 290 - test_py::tests.integration.test_site_spawn.TestSiteSpawn.test_failingSpawner (Failed) +# 292 - test_py::tests.integration.test_site_spawn.TestSiteSpawn.test_spawner (Failed) +# Errors while running CTest +%bcond_with tests + +Name: watchman +Version: 2021.05.10.00 +Release: %autorelease +Summary: File alteration monitoring service + +%global stripped_version %(echo %{version} | sed -r 's/\\.0([[:digit:]])/.\\1/g') + +License: Apache-2.0 +URL: https://facebook.github.io/%{name}/ +Source0: https://github.com/facebook/%{name}/archive/v%{version}/%{name}-%{version}.tar.gz +Source1: tmpfiles-%{name}.conf +Patch0: %{name}-destdir.patch +# https://github.com/facebook/folly/commit/b65ef9f8b5f9b495370b1e651732214cde8abc7d +Patch1: watchman-2021.05.10.00-folly-new.patch +# Fix build failure on 32bit arch +Patch2: watchman-2021.05.10.00-wordsize.patch +# Fix build failure with Python 3.12 +Patch3: watchman-fix-for-py3_12.diff +# Fix build failure with fmt 10 +Patch4: watchman-fix-for-fmt10.diff + +ExclusiveArch: x86_64 aarch64 ppc64le + +BuildRequires: cmake +BuildRequires: gcc-c++ +BuildRequires: folly-devel +BuildRequires: pcre-devel +# for %%{_tmpfilesdir} +BuildRequires: systemd-rpm-macros +# Optional dependencies +BuildRequires: valgrind-devel +# Test dependencies +# TODO this shouldn't be needed if tests are not enabled +BuildRequires: gmock-devel +BuildRequires: gtest-devel + +%description +Watchman exists to watch files and record when they actually change. It can also +trigger actions (such as rebuilding assets) when matching files change. + + +%package -n python3-py%{name} +Summary: Python bindings for %{name} +License: BSD-3-Clause and MIT +BuildRequires: procps-ng +BuildRequires: python3-devel +BuildRequires: python3-setuptools +Requires: %{name}%{?_isa} = %{version}-%{release} +# watchman-diag shells out to ps +Requires: procps-ng + +%description -n python3-py%{name} +The python3-py%{name} package contains Python bindings for %{name}. + + +%prep +%autosetup -p1 +# Fix pywatchman version. +sed -i "s|version=\"1.4.1\"|version=\"%{version}\"|" python/setup.py + +# testsuite does not seem to compile with gtest 1.11.... +# disabling for now on rawhide +%if 0%{?fedora} >= 36 +sed -i CMakeLists.txt -e 's|^t_test|#t_test|' +%endif + +%build +%cmake \ + -DINSTALL_WATCHMAN_STATE_DIR=ON +%cmake_build + + +%install +%cmake_install +mkdir -p %{buildroot}%{_tmpfilesdir} +cp -p %{SOURCE1} %{buildroot}%{_tmpfilesdir}/%{name}.conf + + +%if %{with tests} +%check +%ctest +%endif + + +%files +%license LICENSE +%doc CODE_OF_CONDUCT.md README.markdown +%attr(02777,root,root) %dir %{_var}/run/%{name} +%{_bindir}/%{name} +%{_tmpfilesdir}/%{name}.conf + +%files -n python3-py%{name} +%license python/LICENSE +%{_bindir}/%{name}-* +%{python3_sitearch}/py%{name} +%{python3_sitearch}/py%{name}-%{stripped_version}-py%{python3_version}.egg-info + + +%changelog +%autochangelog