openSUSE Commits
Threads by month
- ----- 2024 -----
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
May 2020
- 1 participants
- 4645 discussions
Hello community,
here is the log from the commit of package liblxqt for openSUSE:Factory checked in at 2020-05-29 21:23:59
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/liblxqt (Old)
and /work/SRC/openSUSE:Factory/.liblxqt.new.3606 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "liblxqt"
Fri May 29 21:23:59 2020 rev:14 rq:810159 version:0.15.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/liblxqt/liblxqt.changes 2020-05-04 18:35:45.624468368 +0200
+++ /work/SRC/openSUSE:Factory/.liblxqt.new.3606/liblxqt.changes 2020-05-29 21:39:02.190946249 +0200
@@ -1,0 +2,9 @@
+Fri May 29 09:06:36 UTC 2020 - Michael Vetter <mvetter(a)suse.com>
+
+- Update to 0.15.1:
+ * Fix a crash on closing screen saver error message.
+ * Let Qt handle the positions of dialogs (in that way, dialogs
+ are shown on the correct screen).
+ * Remove dead codes.
+
+-------------------------------------------------------------------
Old:
----
liblxqt-0.15.0.tar.xz
liblxqt-0.15.0.tar.xz.asc
New:
----
liblxqt-0.15.1.tar.xz
liblxqt-0.15.1.tar.xz.asc
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ liblxqt.spec ++++++
--- /var/tmp/diff_new_pack.pKHI2l/_old 2020-05-29 21:39:02.610947500 +0200
+++ /var/tmp/diff_new_pack.pKHI2l/_new 2020-05-29 21:39:02.614947511 +0200
@@ -1,7 +1,7 @@
#
# spec file for package liblxqt
#
-# Copyright (c) 2020 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2020 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -17,12 +17,12 @@
Name: liblxqt
-Version: 0.15.0
+Version: 0.15.1
Release: 0
Summary: Core utility library for LXQt
License: LGPL-2.1-or-later
Group: Development/Libraries/C and C++
-Url: http://www.lxqt.org
+URL: http://www.lxqt.org
Source: https://github.com/lxqt/%{name}/releases/download/%{version}/%{name}-%{vers…
Source1: https://github.com/lxqt/%{name}/releases/download/%{version}/%{name}-%{vers…
Source2: %{name}.keyring
++++++ liblxqt-0.15.0.tar.xz -> liblxqt-0.15.1.tar.xz ++++++
++++ 7552 lines of diff (skipped)
1
0
Hello community,
here is the log from the commit of package foliate for openSUSE:Factory checked in at 2020-05-29 21:23:57
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/foliate (Old)
and /work/SRC/openSUSE:Factory/.foliate.new.3606 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "foliate"
Fri May 29 21:23:57 2020 rev:6 rq:810176 version:2.2.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/foliate/foliate.changes 2020-04-10 23:54:32.208755287 +0200
+++ /work/SRC/openSUSE:Factory/.foliate.new.3606/foliate.changes 2020-05-29 21:39:01.250943451 +0200
@@ -1,0 +2,49 @@
+Fri May 29 08:07:24 UTC 2020 - Dead Mozay <dead_mozay(a)opensuse.org>
+
+- Update to version 2.2.0:
+ * Library:
+ - A library view showing recent books and reading progress
+ - Search books by metadata
+ - E-book discovery with OPDS
+ * New supported formats:
+ - FictionBook (.fb2, .fb2.zip) (#128)
+ - Comic book archive (.cbr, .cbz, .cbt, .cb7)
+ - Plain text (.txt) (#226)
+ - Unpacked EPUB files
+ * Layout:
+ - Option to set maximum page width
+ - The "Automatic" layout will now show four columns
+ when the page width is wide
+ * Image viewer:
+ - Improved image viewer, with new shortcuts and the ability
+ to rotate and invert images
+ - Option to disable image viewer, or to open images on double,
+ middle, or right click
+ * Text-to-speech:
+ - Improved text-to-speech configuration UI
+ - Ability to set text-to-speech voice based on book language
+ * Annotations
+ - Import annotations from JSON
+ - Search in annotations
+ - Annotations are now sorted in the same order as they appear
+ in the book
+ * Security:
+ - "Allow Unsafe Content" now only enables JavaScript; external
+ content will no longer be loaded. This is an important
+ security fix. If you are running an old version of Foliate
+ and cannot upgrade, you should disable
+ "Allow Unsafe Content".
+ - WebKit processes are now sandboxed
+ * Other featues and fixes:
+ - Improved support for vertical and right-to-left books
+ - Support for StarDict dictionaries
+ - Fixed current location not preserved when resizing
+ - Fixed auto-hiding header bar under some themes
+ - Command-line options for showing version and adding books
+ to library
+ - Option to clear or disable cache
+ - When an HTML page contains invalid self-closing anchor tags,
+ it is now parsed as XHTML
+- Add fdupes BuildRequires and macro call, remove duplicate files.
+
+-------------------------------------------------------------------
Old:
----
foliate-2.1.1.obscpio
New:
----
foliate-2.2.0.obscpio
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ foliate.spec ++++++
--- /var/tmp/diff_new_pack.ugxEEs/_old 2020-05-29 21:39:01.826945166 +0200
+++ /var/tmp/diff_new_pack.ugxEEs/_new 2020-05-29 21:39:01.826945166 +0200
@@ -18,13 +18,14 @@
%define oname com.github.johnfactotum.Foliate
Name: foliate
-Version: 2.1.1
+Version: 2.2.0
Release: 0
Summary: A simple and modern GTK eBook reader
License: GPL-3.0-only
Group: Productivity/Office/Other
URL: https://johnfactotum.github.io/foliate/
Source: %{name}-%{version}.tar.gz
+BuildRequires: fdupes
BuildRequires: gcc-c++
BuildRequires: meson
BuildRequires: pkgconfig
@@ -58,6 +59,7 @@
pushd %{buildroot}%{_datadir}/com.github.johnfactotum.Foliate/assets/KindleUnpack/
sed -i -e '/^#!/, 1d' *.py
popd
+%fdupes %{buildroot}/%{_datadir}/%{oname}
%find_lang %{oname} --with-gnome
++++++ _service ++++++
--- /var/tmp/diff_new_pack.ugxEEs/_old 2020-05-29 21:39:01.854945249 +0200
+++ /var/tmp/diff_new_pack.ugxEEs/_new 2020-05-29 21:39:01.854945249 +0200
@@ -4,7 +4,7 @@
<param name="filename">foliate</param>
<param name="url">https://github.com/johnfactotum/foliate.git</param>
<param name="scm">git</param>
- <param name="revision">refs/tags/2.1.1</param>
+ <param name="revision">refs/tags/2.2.0</param>
<param name="versionformat">@PARENT_TAG@+@TAG_OFFSET@</param>
<param name="versionrewrite-pattern">(.*)\+0</param>
<param name="versionrewrite-replacement">\1</param>
++++++ foliate-2.1.1.obscpio -> foliate-2.2.0.obscpio ++++++
/work/SRC/openSUSE:Factory/foliate/foliate-2.1.1.obscpio /work/SRC/openSUSE:Factory/.foliate.new.3606/foliate-2.2.0.obscpio differ: char 49, line 1
++++++ foliate.obsinfo ++++++
--- /var/tmp/diff_new_pack.ugxEEs/_old 2020-05-29 21:39:01.890945357 +0200
+++ /var/tmp/diff_new_pack.ugxEEs/_new 2020-05-29 21:39:01.894945369 +0200
@@ -1,5 +1,5 @@
name: foliate
-version: 2.1.1
-mtime: 1586400793
-commit: 681c7dfe1f6c97c9d218a79d3b333cc4354e5eb6
+version: 2.2.0
+mtime: 1590736248
+commit: eca3aa7b2f963bf85ccf13c6100a67d1dc950682
1
0
Hello community,
here is the log from the commit of package watson for openSUSE:Factory checked in at 2020-05-29 21:23:55
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/watson (Old)
and /work/SRC/openSUSE:Factory/.watson.new.3606 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "watson"
Fri May 29 21:23:55 2020 rev:2 rq:809905 version:1.9.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/watson/watson.changes 2020-05-28 09:21:59.709509125 +0200
+++ /work/SRC/openSUSE:Factory/.watson.new.3606/watson.changes 2020-05-29 21:38:59.750938987 +0200
@@ -1,0 +2,29 @@
+Thu May 28 10:37:56 UTC 2020 - Michael Vetter <mvetter(a)suse.com>
+
+- Use Supplements: packageand(%{name}:bash) instead of Suggests
+
+-------------------------------------------------------------------
+Thu May 28 07:40:31 UTC 2020 - Michael Vetter <mvetter(a)suse.com>
+
+- Install bash, fish and zsh completions
+
+-------------------------------------------------------------------
+Thu May 28 07:21:01 UTC 2020 - Michael Vetter <mvetter(a)suse.com>
+
+- Update to 1.9.0:
+ Added:
+ * Improve Arrow 0.15.0 support after changes in arrow.get() behavior
+ (#296)
+ * Watson now suggests correct command if users make small typo (#318)
+ Changed:
+ * Always show total time at bottom of report (#356)
+ * Use the default system newline character for CSV output (#366).
+ Fixed:
+ * Stylize prompt to create new project or tag (#310).
+ * Aggregate calculates wrong time if used with --current (#293)
+ * The start command now correctly checks if project is empty (#322)
+ * Aggregate ignores frames that crosses aggregate boundary (#248)
+ * The report and aggregate commands with --json option now correctly
+ encode Arrow objects (#329)
+
+-------------------------------------------------------------------
Old:
----
1.8.0.tar.gz
New:
----
1.9.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ watson.spec ++++++
--- /var/tmp/diff_new_pack.uH0tnL/_old 2020-05-29 21:39:00.306940641 +0200
+++ /var/tmp/diff_new_pack.uH0tnL/_new 2020-05-29 21:39:00.310940653 +0200
@@ -18,7 +18,7 @@
%{!?python_sitelib: %global python_sitelib %(python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")}
Name: watson
-Version: 1.8.0
+Version: 1.9.0
Release: 0
Summary: CLI time tracker
License: MIT
@@ -35,6 +35,36 @@
Watson helps managing time. It can tell how much time was spent on projects.
It generates reports for clients.
+%package bash-completion
+Summary: Bash completion for %{name}
+Group: System/Shells
+Requires: %{name} = %{version}
+Supplements: packageand(%{name}:bash)
+BuildArch: noarch
+
+%description bash-completion
+Bash command line completion support for %{name}.
+
+%package fish-completion
+Summary: Fish completion for %{name}
+Group: System/Shells
+Requires: %{name} = %{version}
+Supplements: packageand(%{name}:fish)
+BuildArch: noarch
+
+%description fish-completion
+Fish command line completion support for %{name}.
+
+%package zsh-completion
+Summary: Zsh completion for %{name}
+Group: System/Shells
+Requires: %{name} = %{version}
+Supplements: packageand(%{name}:zsh)
+BuildArch: noarch
+
+%description zsh-completion
+Zsh command line completion support for %{name}.
+
%prep
%autosetup -n Watson-%{version}
@@ -43,6 +73,10 @@
%install
%python3_install
+install -D -m 0644 watson.zsh-completion %{buildroot}%{_datadir}/zsh/site-functions/_watson
+mkdir -p %{buildroot}%{_datadir}%{_datadir}/fish/vendor_completions.d/
+install -D -m 0644 watson.fish %{buildroot}%{_datadir}/fish/vendor_completions.d/watson.fish
+install -D -m 0644 watson.completion %{buildroot}%{_datadir}/bash-completion/completions/watson
%files
%license LICENSE
@@ -50,4 +84,15 @@
%{_bindir}/watson
%{python_sitelib}/*
+%files bash-completion
+%{_datadir}/bash-completion/completions/
+
+%files fish-completion
+%dir %{_datadir}/fish/
+%{_datadir}/fish/vendor_completions.d/
+
+%files zsh-completion
+%dir %{_datadir}/zsh/
+%{_datadir}/zsh/site-functions/
+
%changelog
++++++ 1.8.0.tar.gz -> 1.9.0.tar.gz ++++++
/work/SRC/openSUSE:Factory/watson/1.8.0.tar.gz /work/SRC/openSUSE:Factory/.watson.new.3606/1.9.0.tar.gz differ: char 12, line 1
1
0
Hello community,
here is the log from the commit of package boringssl for openSUSE:Factory checked in at 2020-05-29 21:23:50
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/boringssl (Old)
and /work/SRC/openSUSE:Factory/.boringssl.new.3606 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "boringssl"
Fri May 29 21:23:50 2020 rev:10 rq:809934 version:20200122
Changes:
--------
--- /work/SRC/openSUSE:Factory/boringssl/boringssl.changes 2020-03-11 18:54:42.175657619 +0100
+++ /work/SRC/openSUSE:Factory/.boringssl.new.3606/boringssl.changes 2020-05-29 21:38:56.438929127 +0200
@@ -1,0 +2,230 @@
+Thu May 28 11:48:37 UTC 2020 - Jan Engelhardt <jengelh(a)inai.de>
+
+- Rectify groups.
+
+-------------------------------------------------------------------
+Wed May 27 18:40:47 UTC 2020 - Michał Rostecki <mrostecki(a)suse.com>
+
+- Remove patch for enabling shared linking - it was enabled
+ upstream.
+ * 0001-add-soversion-option.patch
+- Add boringssl-source subpackage.
+
+-------------------------------------------------------------------
+Wed May 27 14:18:19 UTC 2020 - mrostecki(a)suse.com
+
+- Update to version 20200122:
+ * Define EVP compatibility constants for X448 and Ed448.
+ * Allow shared libraries in the external CMake build.
+ * Add a few little-endian functions to CBS/CBB.
+ * Move iOS asm tricks up in external CMake build.
+ * Try again to deal with expensive tests.
+ * Restore ARM CPU variation tests on builders.
+ * Remove SSL_CTX_set_rsa_pss_rsae_certs_enabled.
+ * Work around another NULL/0 C language bug.
+ * Use the MAYBE/DISABLED pattern in RSATest.BlindingCacheConcurrency.
+ * Switch an #if-0-gated test to DISABLED_Foo.
+ * Proxy: send whole SSL records through the handshaker.
+ * Disable Wycheproof primality test cases on non-x86 (too slow)
+ * test_state.cc: serialize the test clock.
+ * Output after every Wycheproof primality test.
+ * Maybe fix generated-CMake build on Android and iOS.
+ * Detect the NDK path from CMAKE_TOOLCHAIN_FILE.
+ * Tell Go to build for GOOS=android when running on Android.
+ * Reland bitsliced aes_nohw implementation.
+ * Add bssl client option to load a hashed directory of cacerts.
+ * No-op change to run the new NO_SSE2 builders.
+ * Clarify that we perform the point-on-curve check.
+ * Reduce size of BlindingCacheConcurrency test under TSAN.
+ * Compare vpaes/bsaes conversions against a reference implementation.
+ * Enable the SSE2 Poly1305 implementation on clang-cl.
+ * Remove alignment requirement on CRYPTO_poly1305_finish.
+ * Fix double-free under load.
+ * Add some XTS tests.
+ * Add EncodeHex and DecodeHex functions to test_util.h.
+ * Revert "Replace aes_nohw with a bitsliced implementation."
+ * Replace aes_nohw with a bitsliced implementation.
+ * Switch HRSS inversion algorithm.
+ * Run EVP_CIPHER tests in-place.
+ * Add an option to disable SSE2 intrinsics for testing.
+ * Dummy change to trigger master-with-bazel builder.
+ * Drop use of alignas(64) in aead_test.cc
+ * Add standalone CMake build to generate_build_files.py
+ * TLS 1.3 split handshake initial support.
+ * Import Wycheproof primality tests.
+ * Split BN_prime_checks into two constants for generation and validation.
+ * Add some Miller-Rabin tests from Wycheproof.
+ * Import Wycheproof PKCS#1 decrypt tests.
+ * Import Wycheproof OAEP tests.
+ * Import Wycheproof PKCS#1 signing tests.
+ * Skip JWK keys when converting Wycheproof tests.
+ * Import Wycheproof's size-specific RSA PKCS#1 verifying tests.
+ * Handle "acceptable" Wycheproof inputs unambiguously.
+ * Import Wycheproof XChaCha20-Poly1305 tests.
+ * Import Wycheproof HMAC tests.
+ * Import Wycheproof HKDF tests.
+ * bytestring: add methods for int64.
+ * Update Wycheproof test vectors.
+ * Add mock QUIC transport to runner
+ * Add test vectors for CVE-2019-1551 (not affected).
+ * Fix check_bn_tests.go.
+ * Fix MSan error in SSLTest.Handoff test.
+ * SSLTest.Handoff: extend to include a session resumption.
+ * inject_hash preserves filemode
+ * Move TLS 1.3 state machine constants to internal.h.
+ * Add a ppc64le ABI tester.
+ * Allocate small TLS read buffers inline.
+ * Remove unused labels from ARM ABI test assembly.
+ * Update AAPCS and AAPCS64 links.
+ * Fix EVP_has_aes_hardware on ppc64le.
+ * Remove remnants of end_of_early_data alert from tests.
+ * Add a test for ERR_error_string_n.
+ * Remove post-quantum experiment signal extension.
+ * Give ERR_error_string_n a return value for convenience.
+ * Defer early keys to QUIC clients to after certificate reverification.
+ * Defer releasing early secrets to QUIC servers.
+ * Halve the size of the kNIDsIn* constants
+ * modulewrapper: manage buffer with |unique_ptr|.
+ * Add missing boringssl_prefix_symbols_asm.h include.
+ * acvptool: add support for ECDSA
+ * Inline gcm_init_4bit into gcm_init_ssse3.
+ * Vectorize gcm_mul32_nohw and replace gcm_gmult_4bit_mmx.
+ * Add a constant-time fallback GHASH implementation.
+ * Conditionally define PTRACE_O_EXITKILL in urandom_test.cc
+ * Fix build warning if _SCL_SECURE_NO_WARNINGS is defined globally
+ * modulewrapper: use a raw string.
+ * acvptool: add license headers.
+ * Enable TLS 1.3 by default.
+ * acvptool: Add support for DRBG
+ * Discard user_canceled alerts in TLS 1.3.
+ * Work around more C language bugs with empty spans.
+ * No-op commit to test the new builder.
+ * acvptool: Add support for HMAC
+ * Add stub functions for RSA-PSS keygen parameters.
+ * HelloRetryRequest getter
+ * Add break-tests-android.sh script.
+ * Add compatibility functions for sigalgs
+ * Run AES-192-GCM in CAVP tests.
+ * Rename a number of BUF_* functions to OPENSSL_*.
+ * List bn_div fuzzer in documentation.
+ * Reenable bn_div fuzzer.
+ * Drop CECPQ2b code.
+ * Add urandom_test to all_tests.json
+ * Fix the standalone Android FIPS build.
+ * Add sanity checks to FIPS module construction.
+ * Correct relative path.
+ * Add test for urandom.c
+ * break-hash.go: Search ELF dynamic symbols if symbols not found.
+ * Fix $OPENSSL_ia32cap handling.
+ * Switch probable_prime to rejection sampling.
+ * Rename the last remnants of the early_data_info extension.
+ * Fix up BN_GENCB_call calls.
+ * Do fewer trial divisions for larger RSA keygens.
+ * Fix GRND_NONBLOCK flag when calling getrandom.
+ * Simplify bn_miller_rabin_iteration slightly.
+ * Add some notes on RSA key generation performance.
+ * Break early on composites in the primality test.
+ * Extract and test the deterministic part of Miller-Rabin.
+ * Fix the FIPS + fuzzing build.
+ * FIPS.md: document some recent Android changes.
+ * Add a function to derive an EC key from some input secret.
+ * Fix run_android_tests.go with shared library builds.
+ * No-op change to test new builders.
+ * Move no-exec-stack sections outside of #ifs.
+ * Add |SSL_get_min_proto_version| and |SSL_get_max_proto_version|
+ * Make FIPS build work for Android cross-compile.
+ * Enable optional GRND_RANDOM flag to be passed to getrandom on Android.
+ * Switch cert_compression_algs to GrowableArray.
+ * Add GrowableArray<T> to ssl/internal.h.
+ * Fixed quic_method lookup in TLS 1.3 server side handshake.
+ * Add .note.GNU-stack at the source level.
+ * -Wno-vla -> -Wvla
+ * Add an option for explicit renegotiations.
+ * tool: add -json flag to |speed|
+ * Set -Wno-vla.
+ * Use a pointer to module_hash in boringssl_fips_self_test() args.
+ * Use a smaller hex digest in FIPS flag files when SHA-256 used.
+ * Switch to using SHA-256 for FIPS integrity check on Android.
+ * Use getentropy on macOS 10.12 and later.
+ * Move #include of "internal.h", which defines |OPENSSL_URANDOM|.
+ * Style nit.
+ * Assert that BN_CTX_end is actually called.
+ * Test some known large primes.
+ * Test some Euler pseudoprimes.
+ * Be consistent about Miller-Rabin vs Rabin-Miller.
+ * fix build with armv6 Error: .size expression for _vpaes_decrypt_consts does not evaluate to a constant
+ * Mark ssl_early_data_reason_t values stable.
+ * Make the dispatch tests opt-in.
+ * Bound the number of API calls in ssl_ctx_api.cc.
+ * Only attempt to mprotect FIPS module for AArch64.
+ * Opportunistically read entropy from the OS in FIPS mode.
+ * Update INSTANTIATE_TEST_SUITE_P calls missing first argument.
+ * Ignore build32 and build64 subdirectories.
+ * Add page protection logic to BCM self test.
+ * Disable unwind tests in FIPS mode.
+ * Disable RDRAND on AMD family 0x17, models 0x70–0x7f.
+ * Don't allow SGC EKUs for server certificates.
+ * Add |SSL_CIPHER_get_value| to get the IANA number of a cipher suite.
+ * Add XOF compilation compatibility flags
+ * Replace BIO_printf with ASN1_STRING_print in GENERAL_NAME_print
+ * Trigger a build on the ARM mode builder.
+ * Fix vpaes-armv7.pl in ARM mode.
+ * Add AES-192-GCM support to EVP_AEAD.
+ * Add AES-256 CFB to libdecrepit.
+ * Parse explicit EC curves more strictly.
+ * Use the Go 1.13 standard library ed25519.
+ * Update build tools.
+ * Use ScopedEVP_AEAD_CTX in ImplDispatchTest.AEAD_AES_GCM.
+ * Use a mix of bsaes and vpaes for CTR on NEON.
+ * Use vpaes + conversion to setup CBC decrypt on NEON.
+ * Add NEON vpaes-to-bsaes key converters.
+ * Add vpaes-armv7.pl and replace non-parallel modes.
+ * Correct comments for x86_64 _vpaes_encrypt_core_2x.
+ * Add benchmarks for AES block operations.
+ * Only write self test flag files if an environment variable is set.
+ * Const-correct EC_KEY_set_public_key_affine_coordinates.
+ * Revert "Fix VS build when assembler is enabled"
+ * Support compilation via emscripten
+ * Fix cross-compile of Android on Windows.
+ * Move the config->async check into RetryAsync.
+ * Clear *out in ReadHandshakeData's empty case.
+ * Add initial support for 0-RTT with QUIC.
+ * Have some more fun with spans.
+ * Add OPENSSL_FALLTHROUGH to a few files.
+ * Limit __attribute__ ((fallthrough)) to Clang >= 5.
+ * Make |EVP_CIPHER_CTX_reset| return one.
+ * Add Fallthru support for clang 10.
+ * Add self-test suppression flag file for Android FIPS builds.
++++ 33 more lines (skipped)
++++ between /work/SRC/openSUSE:Factory/boringssl/boringssl.changes
++++ and /work/SRC/openSUSE:Factory/.boringssl.new.3606/boringssl.changes
Old:
----
0001-add-soversion-option.patch
boringssl-20190916.tar.xz
New:
----
boringssl-20200122.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ boringssl.spec ++++++
--- /var/tmp/diff_new_pack.PrW2w3/_old 2020-05-29 21:38:57.122931164 +0200
+++ /var/tmp/diff_new_pack.PrW2w3/_new 2020-05-29 21:38:57.126931176 +0200
@@ -18,23 +18,26 @@
%define sover 1
%define libname libboringssl%{sover}
+%define src_install_dir /usr/src/%{name}
Name: boringssl
-Version: 20190916
+Version: 20200122
Release: 0
Summary: An SSL/TLS protocol implementation
License: OpenSSL
+Group: Development/Sources
URL: https://boringssl.googlesource.com/boringssl/
Source: %{name}-%{version}.tar.xz
-Patch1: 0001-add-soversion-option.patch
-Patch2: 0002-crypto-Fix-aead_test-build-on-aarch64.patch
-Patch3: 0003-enable-s390x-builds.patch
-Patch4: 0004-fix-alignment-for-ppc64le.patch
-Patch5: 0005-fix-alignment-for-arm.patch
+Patch0: 0002-crypto-Fix-aead_test-build-on-aarch64.patch
+Patch1: 0003-enable-s390x-builds.patch
+Patch2: 0004-fix-alignment-for-ppc64le.patch
+Patch3: 0005-fix-alignment-for-arm.patch
BuildRequires: cmake >= 3.0
+BuildRequires: fdupes
BuildRequires: gcc-c++
BuildRequires: go
BuildRequires: libunwind-devel
BuildRequires: ninja
+BuildRequires: patchelf
ExclusiveArch: %{ix86} x86_64 aarch64 s390x ppc64le %arm
%description
@@ -43,6 +46,7 @@
%package -n %{libname}
Summary: An SSL/TLS protocol implementation
+Group: System/Libraries
Recommends: ca-certificates-mozilla
%description -n %{libname}
@@ -51,6 +55,7 @@
%package devel
Summary: Development files for BoringSSL
+Group: Development/Libraries/C and C++
Requires: %{libname} = %{version}
%description devel
@@ -58,57 +63,70 @@
Sockets Layer (SSL) and Transport Layer Security (TLS) protocols,
derived from OpenSSL.
+%package source
+Summary: Source code of BoringSSL
+Group: Development/Sources
+BuildArch: noarch
+
+%description source
+Source files for BoringSSL implementation
+
%prep
-%setup -q
-%patch1 -p1
-%patch2 -p1
-%patch3 -p1
-%patch4 -p1
-%patch5 -p1
+%autosetup -p1
%build
-%define _lto_cflags %{nil}
-%define __builder ninja
%cmake \
- -DCMAKE_C_FLAGS="%{optflags} -pthread" \
- -DCMAKE_CXX_FLAGS="%{optflags} -pthread" \
- -DSOVERSION=%{sover}
+ -DCMAKE_SHARED_LINKER_FLAGS="%{?build_ldflags} -Wl,--as-needed -Wl,-z,now"
%cmake_build
%install
-install -D -m0755 build/crypto/libcrypto.so.%{sover} %{buildroot}%{_libdir}/libboringssl_crypto.so.%{sover}
-install -D -m0755 build/crypto/libcrypto.so %{buildroot}%{_libdir}/libboringssl_crypto.so
-install -D -m0755 build/ssl/libssl.so.%{sover} %{buildroot}%{_libdir}/libboringssl_ssl.so.%{sover}
-install -D -m0755 build/ssl/libssl.so %{buildroot}%{_libdir}/libboringssl_ssl.so
-install -D -m0755 build/decrepit/libdecrepit.so.%{sover} %{buildroot}%{_libdir}/libboringssl_decrepit.so.%{sover}
-install -D -m0755 build/decrepit/libdecrepit.so %{buildroot}%{_libdir}/libboringssl_decrepit.so
-install -D -m0755 build/libboringssl_gtest.so.%{sover} %{buildroot}%{_libdir}/libboringssl_gtest.so.%{sover}
-install -D -m0755 build/libboringssl_gtest.so %{buildroot}%{_libdir}/libboringssl_gtest.so
+# Install libraries
+install -D -m0755 build/libcrypto.so %{buildroot}%{_libdir}/libboringssl_crypto.so.%{sover}
+install -D -m0755 build/libssl.so %{buildroot}%{_libdir}/libboringssl_ssl.so.%{sover}
+# Add SOVER to SONAME fields in libraries
+patchelf --set-soname libboringssl_crypto.so.%{sover} %{buildroot}%{_libdir}/libboringssl_crypto.so.%{sover}
+patchelf --set-soname libboringssl_ssl.so.%{sover} %{buildroot}%{_libdir}/libboringssl_ssl.so.%{sover}
+# Create links from *.so to *.so.SOVER
+ln -sf libboringssl_crypto.so.%{sover} %{buildroot}%{_libdir}/libboringssl_crypto.so
+ln -sf libboringssl_ssl.so.%{sover} %{buildroot}%{_libdir}/libboringssl_ssl.so
+
+# Install sources
+rm -rf build/
+mkdir -p %{buildroot}%{src_install_dir}
+cp -r * %{buildroot}%{src_install_dir}
+%fdupes %{buildroot}%{src_install_dir}
+# Fix arch-independent-package-contains-binary-or-object
+find %{buildroot}%{src_install_dir} -type f \( -name "*.a" -o -name "*.lib" -o -name "*.o" \) -exec rm -f "{}" +
+# Fix non-executable-script warning.
+find %{buildroot}%{src_install_dir} -type f -name "*.sh" -exec chmod +x "{}" +
+# Fix env-script-interpreter error.
+find %{buildroot}%{src_install_dir} -type f -name "*.pl" -exec sed -i 's|#!.*/usr/bin/env perl|#!/usr/bin/perl|' "{}" +
+find %{buildroot}%{src_install_dir} -type f -name "*.py" -exec sed -i 's|#!.*/usr/bin/env python.*|#!/usr/bin/python3|' "{}" +
+find %{buildroot}%{src_install_dir} -type f -name "*.sh" -exec sed -i 's|#!.*/usr/bin/env bash|#!/bin/bash|' "{}" +
# To avoid conflicts with openssl development files, change all includes from
# openssl to boringssl.
# BoringSSL headers provided by this pachage are installed in
# /usr/include/boringssl for the same reason.
-find include/openssl -type f -exec sed -i 's/openssl/boringssl/' "{}" +
+find src/include/openssl -type f -exec sed -i 's/openssl/boringssl/' "{}" +
-find include/openssl -type f -execdir install -D -m0644 "{}" "%{buildroot}%{_includedir}/boringssl/{}" \;
+find src/include/openssl -type f -execdir install -D -m0644 "{}" "%{buildroot}%{_includedir}/boringssl/{}" \;
%post -n %{libname} -p /sbin/ldconfig
%postun -n %{libname} -p /sbin/ldconfig
%files -n %{libname}
-%doc README.md
+%doc src/README.md
%license LICENSE
%{_libdir}/libboringssl_crypto.so.%{sover}
%{_libdir}/libboringssl_ssl.so.%{sover}
-%{_libdir}/libboringssl_decrepit.so.%{sover}
-%{_libdir}/libboringssl_gtest.so.%{sover}
%files devel
%{_includedir}/boringssl
%{_libdir}/libboringssl_crypto.so
%{_libdir}/libboringssl_ssl.so
-%{_libdir}/libboringssl_decrepit.so
-%{_libdir}/libboringssl_gtest.so
+
+%files source
+%{src_install_dir}
%changelog
++++++ 0002-crypto-Fix-aead_test-build-on-aarch64.patch ++++++
--- /var/tmp/diff_new_pack.PrW2w3/_old 2020-05-29 21:38:57.150931247 +0200
+++ /var/tmp/diff_new_pack.PrW2w3/_new 2020-05-29 21:38:57.150931247 +0200
@@ -27,13 +27,13 @@
Signed-off-by: Michal Rostecki <mrostecki(a)opensuse.org>
Change-Id: Iac2c6810fa260ad214abde8db733793ac914acda
---
- crypto/cipher_extra/aead_test.cc | 20 +++++++++++++-------
+ src/crypto/cipher_extra/aead_test.cc | 20 +++++++++++++-------
1 file changed, 13 insertions(+), 7 deletions(-)
-Index: boringssl-20190523/crypto/cipher_extra/aead_test.cc
+Index: boringssl-20200122/src/crypto/cipher_extra/aead_test.cc
===================================================================
---- boringssl-20190523.orig/crypto/cipher_extra/aead_test.cc
-+++ boringssl-20190523/crypto/cipher_extra/aead_test.cc
+--- boringssl-20200122.orig/src/crypto/cipher_extra/aead_test.cc
++++ boringssl-20200122/src/crypto/cipher_extra/aead_test.cc
@@ -29,6 +29,12 @@
#include "../test/test_util.h"
#include "../test/wycheproof_util.h"
@@ -47,45 +47,3 @@
struct KnownAEAD {
const char name[40];
-@@ -540,10 +546,10 @@ TEST_P(PerAEADTest, AliasedBuffers) {
- }
-
- TEST_P(PerAEADTest, UnalignedInput) {
-- alignas(64) uint8_t key[EVP_AEAD_MAX_KEY_LENGTH + 1];
-- alignas(64) uint8_t nonce[EVP_AEAD_MAX_NONCE_LENGTH + 1];
-- alignas(64) uint8_t plaintext[32 + 1];
-- alignas(64) uint8_t ad[32 + 1];
-+ alignas(ALIGN_BYTES) uint8_t key[EVP_AEAD_MAX_KEY_LENGTH + 1];
-+ alignas(ALIGN_BYTES) uint8_t nonce[EVP_AEAD_MAX_NONCE_LENGTH + 1];
-+ alignas(ALIGN_BYTES) uint8_t plaintext[32 + 1];
-+ alignas(ALIGN_BYTES) uint8_t ad[32 + 1];
- OPENSSL_memset(key, 'K', sizeof(key));
- OPENSSL_memset(nonce, 'N', sizeof(nonce));
- OPENSSL_memset(plaintext, 'P', sizeof(plaintext));
-@@ -561,7 +567,7 @@ TEST_P(PerAEADTest, UnalignedInput) {
- ASSERT_TRUE(EVP_AEAD_CTX_init_with_direction(
- ctx.get(), aead(), key + 1, key_len, EVP_AEAD_DEFAULT_TAG_LENGTH,
- evp_aead_seal));
-- alignas(64) uint8_t ciphertext[sizeof(plaintext) + EVP_AEAD_MAX_OVERHEAD];
-+ alignas(ALIGN_BYTES) uint8_t ciphertext[sizeof(plaintext) + EVP_AEAD_MAX_OVERHEAD];
- size_t ciphertext_len;
- ASSERT_TRUE(EVP_AEAD_CTX_seal(ctx.get(), ciphertext + 1, &ciphertext_len,
- sizeof(ciphertext) - 1, nonce + 1, nonce_len,
-@@ -569,7 +575,7 @@ TEST_P(PerAEADTest, UnalignedInput) {
- ad_len));
-
- // It must successfully decrypt.
-- alignas(64) uint8_t out[sizeof(ciphertext)];
-+ alignas(ALIGN_BYTES) uint8_t out[sizeof(ciphertext)];
- ctx.Reset();
- ASSERT_TRUE(EVP_AEAD_CTX_init_with_direction(
- ctx.get(), aead(), key + 1, key_len, EVP_AEAD_DEFAULT_TAG_LENGTH,
-@@ -583,7 +589,7 @@ TEST_P(PerAEADTest, UnalignedInput) {
- }
-
- TEST_P(PerAEADTest, Overflow) {
-- alignas(64) uint8_t key[EVP_AEAD_MAX_KEY_LENGTH];
-+ alignas(ALIGN_BYTES) uint8_t key[EVP_AEAD_MAX_KEY_LENGTH];
- OPENSSL_memset(key, 'K', sizeof(key));
-
- bssl::ScopedEVP_AEAD_CTX ctx;
++++++ 0003-enable-s390x-builds.patch ++++++
--- /var/tmp/diff_new_pack.PrW2w3/_old 2020-05-29 21:38:57.158931271 +0200
+++ /var/tmp/diff_new_pack.PrW2w3/_new 2020-05-29 21:38:57.158931271 +0200
@@ -7,17 +7,17 @@
- recognition of architecture
- adapting memory alignment
---
- CMakeLists.txt | 2 ++
- crypto/cipher_extra/aead_test.cc | 2 ++
- crypto/poly1305/poly1305_test.cc | 9 +++++++--
- include/openssl/base.h | 3 +++
+ CMakeLists.txt | 2 ++
+ src/crypto/cipher_extra/aead_test.cc | 2 ++
+ src/crypto/poly1305/poly1305_test.cc | 9 +++++++--
+ src/include/openssl/base.h | 3 +++
4 files changed, 14 insertions(+), 2 deletions(-)
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index c06b700e5144..80c9383b9af8 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -469,6 +469,8 @@ elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "mips")
+Index: boringssl-20200122/CMakeLists.txt
+===================================================================
+--- boringssl-20200122.orig/CMakeLists.txt
++++ boringssl-20200122/CMakeLists.txt
+@@ -93,6 +93,8 @@ elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUA
set(ARCH "generic")
elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "ppc64le")
set(ARCH "ppc64le")
@@ -26,10 +26,10 @@
else()
message(FATAL_ERROR "Unknown processor:" ${CMAKE_SYSTEM_PROCESSOR})
endif()
-diff --git a/crypto/cipher_extra/aead_test.cc b/crypto/cipher_extra/aead_test.cc
-index fd20ebc77b67..4c079e843321 100644
---- a/crypto/cipher_extra/aead_test.cc
-+++ b/crypto/cipher_extra/aead_test.cc
+Index: boringssl-20200122/src/crypto/cipher_extra/aead_test.cc
+===================================================================
+--- boringssl-20200122.orig/src/crypto/cipher_extra/aead_test.cc
++++ boringssl-20200122/src/crypto/cipher_extra/aead_test.cc
@@ -31,6 +31,8 @@
#if defined(OPENSSL_AARCH64)
@@ -39,10 +39,10 @@
#else
#define ALIGN_BYTES 64
#endif
-diff --git a/crypto/poly1305/poly1305_test.cc b/crypto/poly1305/poly1305_test.cc
-index 198cca12dae5..43cd95c8eb86 100644
---- a/crypto/poly1305/poly1305_test.cc
-+++ b/crypto/poly1305/poly1305_test.cc
+Index: boringssl-20200122/src/crypto/poly1305/poly1305_test.cc
+===================================================================
+--- boringssl-20200122.orig/src/crypto/poly1305/poly1305_test.cc
++++ boringssl-20200122/src/crypto/poly1305/poly1305_test.cc
@@ -25,6 +25,11 @@
#include "../test/file_test.h"
#include "../test/test_util.h"
@@ -55,28 +55,10 @@
static void TestSIMD(unsigned excess, const std::vector<uint8_t> &key,
const std::vector<uint8_t> &in,
-@@ -63,7 +68,7 @@ static void TestSIMD(unsigned excess, const std::vector<uint8_t> &key,
- CRYPTO_poly1305_update(&state, in.data() + done, in.size() - done);
-
- // |CRYPTO_poly1305_finish| requires a 16-byte-aligned output.
-- alignas(16) uint8_t out[16];
-+ alignas(ALIGN_BYTES) uint8_t out[16];
- CRYPTO_poly1305_finish(&state, out);
- EXPECT_EQ(Bytes(out), Bytes(mac)) << "SIMD pattern " << excess << " failed.";
- }
-@@ -82,7 +87,7 @@ TEST(Poly1305Test, TestVectors) {
- CRYPTO_poly1305_init(&state, key.data());
- CRYPTO_poly1305_update(&state, in.data(), in.size());
- // |CRYPTO_poly1305_finish| requires a 16-byte-aligned output.
-- alignas(16) uint8_t out[16];
-+ alignas(ALIGN_BYTES) uint8_t out[16];
- CRYPTO_poly1305_finish(&state, out);
- EXPECT_EQ(Bytes(out), Bytes(mac)) << "Single-shot Poly1305 failed.";
-
-diff --git a/include/openssl/base.h b/include/openssl/base.h
-index cb1affacacce..2e29644ceadf 100644
---- a/include/openssl/base.h
-+++ b/include/openssl/base.h
+Index: boringssl-20200122/src/include/openssl/base.h
+===================================================================
+--- boringssl-20200122.orig/src/include/openssl/base.h
++++ boringssl-20200122/src/include/openssl/base.h
@@ -99,6 +99,9 @@ extern "C" {
#elif (defined(__PPC64__) || defined(__powerpc64__)) && defined(_LITTLE_ENDIAN)
#define OPENSSL_64_BIT
@@ -87,6 +69,3 @@
#elif defined(__mips__) && !defined(__LP64__)
#define OPENSSL_32_BIT
#define OPENSSL_MIPS
---
-2.24.0
-
++++++ 0004-fix-alignment-for-ppc64le.patch ++++++
--- /var/tmp/diff_new_pack.PrW2w3/_old 2020-05-29 21:38:57.166931295 +0200
+++ /var/tmp/diff_new_pack.PrW2w3/_new 2020-05-29 21:38:57.170931307 +0200
@@ -4,13 +4,13 @@
Subject: [PATCH 4/4] fix alignment for ppc64le
---
- crypto/cipher_extra/aead_test.cc | 2 +-
+ src/crypto/cipher_extra/aead_test.cc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/crypto/cipher_extra/aead_test.cc b/crypto/cipher_extra/aead_test.cc
index 4c079e843321..2c7e116a4aad 100644
---- a/crypto/cipher_extra/aead_test.cc
-+++ b/crypto/cipher_extra/aead_test.cc
+--- a/src/crypto/cipher_extra/aead_test.cc
++++ b/src/crypto/cipher_extra/aead_test.cc
@@ -29,7 +29,7 @@
#include "../test/test_util.h"
#include "../test/wycheproof_util.h"
++++++ 0005-fix-alignment-for-arm.patch ++++++
--- /var/tmp/diff_new_pack.PrW2w3/_old 2020-05-29 21:38:57.178931330 +0200
+++ /var/tmp/diff_new_pack.PrW2w3/_new 2020-05-29 21:38:57.178931330 +0200
@@ -1,6 +1,6 @@
diff -purN boringssl-20190916.orig/crypto/cipher_extra/aead_test.cc boringssl-20190916/crypto/cipher_extra/aead_test.cc
---- boringssl-20190916.orig/crypto/cipher_extra/aead_test.cc 2020-03-10 20:57:53.383996634 +0100
-+++ boringssl-20190916/crypto/cipher_extra/aead_test.cc 2020-03-10 20:59:03.108731229 +0100
+--- boringssl-20190916.orig/src/crypto/cipher_extra/aead_test.cc 2020-03-10 20:57:53.383996634 +0100
++++ boringssl-20190916/src/crypto/cipher_extra/aead_test.cc 2020-03-10 20:59:03.108731229 +0100
@@ -31,7 +31,7 @@
#if defined(OPENSSL_AARCH64) || defined(OPENSSL_PPC64LE)
@@ -11,8 +11,8 @@
#else
#define ALIGN_BYTES 64
diff -purN boringssl-20190916.orig/crypto/poly1305/poly1305_test.cc boringssl-20190916/crypto/poly1305/poly1305_test.cc
---- boringssl-20190916.orig/crypto/poly1305/poly1305_test.cc 2020-03-10 20:57:53.363996424 +0100
-+++ boringssl-20190916/crypto/poly1305/poly1305_test.cc 2020-03-10 21:08:32.606731399 +0100
+--- boringssl-20190916.orig/src/crypto/poly1305/poly1305_test.cc 2020-03-10 20:57:53.363996424 +0100
++++ boringssl-20190916/src/crypto/poly1305/poly1305_test.cc 2020-03-10 21:08:32.606731399 +0100
@@ -25,7 +25,7 @@
#include "../test/file_test.h"
#include "../test/test_util.h"
++++++ _service ++++++
--- /var/tmp/diff_new_pack.PrW2w3/_old 2020-05-29 21:38:57.198931390 +0200
+++ /var/tmp/diff_new_pack.PrW2w3/_new 2020-05-29 21:38:57.198931390 +0200
@@ -5,7 +5,7 @@
<param name="changesgenerate">enable</param>
<param name="filename">boringssl</param>
<param name="versionformat">%cd</param>
- <param name="revision">chromium-stable</param>
+ <param name="revision">1c2769383f027befac5b75b6cedd25daf3bf4dcf</param>
</service>
<service mode="disabled" name="recompress">
<param name="file">*.tar</param>
++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.PrW2w3/_old 2020-05-29 21:38:57.218931449 +0200
+++ /var/tmp/diff_new_pack.PrW2w3/_new 2020-05-29 21:38:57.218931449 +0200
@@ -1,4 +1,4 @@
<servicedata>
<service name="tar_scm">
<param name="url">https://boringssl.googlesource.com/boringssl</param>
- <param name="changesrevision">6f3e034fe58ce3bca3c1c32be6d603a6206c89af</param></service></servicedata>
\ No newline at end of file
+ <param name="changesrevision">1c2769383f027befac5b75b6cedd25daf3bf4dcf</param></service></servicedata>
\ No newline at end of file
++++++ boringssl-20190916.tar.xz -> boringssl-20200122.tar.xz ++++++
/work/SRC/openSUSE:Factory/boringssl/boringssl-20190916.tar.xz /work/SRC/openSUSE:Factory/.boringssl.new.3606/boringssl-20200122.tar.xz differ: char 25, line 1
1
0
Hello community,
here is the log from the commit of package bowtie2 for openSUSE:Factory checked in at 2020-05-29 21:23:47
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/bowtie2 (Old)
and /work/SRC/openSUSE:Factory/.bowtie2.new.3606 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "bowtie2"
Fri May 29 21:23:47 2020 rev:3 rq:809909 version:2.4.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/bowtie2/bowtie2.changes 2020-05-13 22:56:52.451101718 +0200
+++ /work/SRC/openSUSE:Factory/.bowtie2.new.3606/bowtie2.changes 2020-05-29 21:37:40.674703602 +0200
@@ -1,0 +2,42 @@
+Tue May 26 21:58:10 UTC 2020 - Atri Bhattacharya <badshah400(a)gmail.com>
+
+- Update to version 2.4.1:
+ * Fixed an issue that would cause the bowtie2 wrapper script to
+ incorrectly process certain arguments.
+- Changes from version 2.4.0:
+ * Fixed an issue in BAM pattern source where one thread would
+ prematurely close the read file pointer resulting in other
+ threads crashing because of "Bad file descriptor" errors.
+ * Fixed an issue that would cause bowtie2 to crash with
+ `--no-1mm-upfront` specified.
+ * Modified bowtie2-build script to better handle of flags and
+ positional parameters.
+ * Migrated all python scripts to python3.
+ * Added support for wildcards in input files to bowtie2 wrapper
+ script e.g. `bowtie2 -x index -q *.fq` as opposed to `bowtie2
+ -x index -q 1.fq,2.fq,3.fq...`.
+ * Fixed an issue causing bowtie2 to incorrectly process read
+ names see [gh#BenLangmead/bowtie2#265].
+ * Added support for allowing presets to be overridden by more
+ specific options e.g `bowtie2 -x index --local
+ --very-fast-local --L22 -q reads.fq` will cause bowtie2 to use
+ a seed length of 22 instead of a seed length of 25 that's
+ configured for `--very-fast-local` preset.
+ * Modified SAM output for `-k`/`-a` so that supplementary
+ alignments get assigned a MAPQ of 255.
+ * Fixed an issue that would cause bowtie2-build to not generate
+ reverse index files.
+ * Added preliminary support for ppc64le architectures with the
+ help of SIMDE project see [gh#BenLangmead/bowtie2#271] for
+ details.
+ * Fixed an issue causing bowtie2 to incorrectly calculate the
+ MAPQ when `--mp` was specified in combination with
+ `--ignore-quals`.
+- Add bowtie2-cmake-install-targets.patch to fix cmake scripts,
+ specfically adding install targets and fixing tests (still does
+ not work) [gh#BenLangmead/bowtie2#292].
+- Use cmake for building (BuildRequires: cmake); adapt
+ appropriately for aarch64.
+- Use pkgconfig based BuildRequires for zlib.
+
+-------------------------------------------------------------------
Old:
----
bowtie2-2.3.5.1.tar.gz
New:
----
bowtie2-2.4.1.tar.gz
bowtie2-cmake-install-targets.patch
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ bowtie2.spec ++++++
--- /var/tmp/diff_new_pack.Y353yQ/_old 2020-05-29 21:37:41.258705341 +0200
+++ /var/tmp/diff_new_pack.Y353yQ/_new 2020-05-29 21:37:41.262705352 +0200
@@ -20,7 +20,7 @@
%define _lto_cflags %{nil}
%endif
Name: bowtie2
-Version: 2.3.5.1
+Version: 2.4.1
Release: 0
Summary: Fast and memory-efficient short read aligner
License: GPL-3.0-only
@@ -28,9 +28,13 @@
URL: http://bowtie-bio.sourceforge.net/bowtie2/index.shtml
Source0: https://github.com/BenLangmead/bowtie2/archive/v%{version}.tar.gz#/%{name}-…
Source1: simde-0.0~git20190101.422ed9c.tar.xz
+# PATCH-FIX-UPSTREAM bowtie2-cmake-install-targets.patch gh#BenLangmead/bowtie2#292 badshah400(a)gmail.com -- Add install targets to cmake scripts and fix tests; patch taken from upstream git
+Patch0: bowtie2-cmake-install-targets.patch
+BuildRequires: cmake
BuildRequires: gcc-c++
+BuildRequires: pkgconfig
BuildRequires: tbb-devel
-BuildRequires: zlib-devel
+BuildRequires: pkgconfig(zlib)
ExclusiveArch: x86_64 s390x ppc64le ppc64 aarch64
%description
@@ -45,19 +49,28 @@
%prep
%setup -q
%setup -q -b 1
+%patch0 -p1
pushd third_party
rmdir simde
ln -s ../../simde-*/ simde
popd
+# Workaround to find simde/x86/*.h on aarch64
+ln -s ../simde-*/simde simde
%build
%ifarch aarch64
-export POPCNT_CAPABILITY=0
+sed -i -e 's/-msse2//' CMakeLists.txt
+sed -i -e 's/-m64//' CMakeLists.txt
%endif
-make %{?_smp_mflags} RELEASE_FLAGS="%{optflags}"
+%cmake \
+%ifarch aarch64
+ -DNO_POPCNT_CAPABILITY=1 \
+%endif
+
+%cmake_build
%install
-%make_install prefix=%{_prefix}
+%cmake_install
# CONVERT env HASHBANGS TO USE DIRECT EXECUTABLE
perlbin=`which perl`
++++++ bowtie2-2.3.5.1.tar.gz -> bowtie2-2.4.1.tar.gz ++++++
/work/SRC/openSUSE:Factory/bowtie2/bowtie2-2.3.5.1.tar.gz /work/SRC/openSUSE:Factory/.bowtie2.new.3606/bowtie2-2.4.1.tar.gz differ: char 12, line 1
++++++ bowtie2-cmake-install-targets.patch ++++++
ff --git a/CMakeLists.txt b/CMakeLists.txt
index 09870962..d2703545 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -23,6 +23,8 @@ set(NO_SPINLOCK ${NO_SPINLOCK})
set(USE_SRA ${USE_SRA})
set(WITH_THREAD_PROFILING ${WITH_THREAD_PROFILING})
set(NO_POPCNT_CAPABILITY ${NO_POPCNT_CAPABILITY})
+set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
+set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m64 -g3 -Wall -msse2")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -funroll-loops")
@@ -30,7 +32,6 @@ set(INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/bin" CACHE PATH "Installation directory
set(CMAKE_EXPORT_COMPILE_COMMANDS on)
-
if (MINGW)
option(BOWTIE_MM "Memory mapped files not supported on Windows" OFF)
option(BOWTIE_SHARED_MEM "Shared memory not supported on Windows" OFF)
@@ -50,6 +51,12 @@ set(BOWTIE2_BIN_LIST
bowtie2-inspect-l
)
+set(BOWTIE2_WRAPPER_SCRIPTS
+ bowtie2
+ bowtie2-build
+ bowtie2-inspect
+ )
+
set(SHARED_CPPS
ccnt_lut.cpp
ref_read.cpp
@@ -204,9 +211,8 @@ if (NO_TBB)
set(SHARED_CPPS ${SHARED_CPPS} tinythread.cpp)
else()
find_library(TBB_LIB_PATH tbb)
-
if (TBB_LIB_PATH)
- find_path(TBB_INCLUDE_PATH tbb)
+ find_path(TBB_INCLUDE_PATH tbb/tbb.h)
link_libraries(${TBB_LIB_PATH})
find_library(TBBMALLOC_PROXY_LIB_PATH tbbmalloc_proxy)
if (NOT TBBMALLOC_PROXY_LIB_PATH)
@@ -244,6 +250,7 @@ else()
set(TBB_SOURCE_DIR ${SOURCE_DIR})
set(TBB_RELEASE_DIR ${TBB_SOURCE_DIR}/build/${TBB_VER}_release)
include_directories(${TBB_SOURCE_DIR}/include)
+ find_path(TBB_INCLUDE_PATH PATHS ${TBB_SOURCE_DIR}/include NAMES tbb/tbb.h)
link_directories(${TBB_RELEASE_DIR})
add_library(tbb SHARED IMPORTED)
@@ -286,6 +293,29 @@ add_executable(bowtie2-inspect-l ${INSPECT_CPPS} ${SHARED_CPPS})
set_target_properties(bowtie2-align-l bowtie2-build-l bowtie2-inspect-l PROPERTIES COMPILE_FLAGS "-DBOWTIE2_64BIT_INDEX")
set_target_properties(bowtie2-inspect-s bowtie2-inspect-l PROPERTIES COMPILE_FLAGS "-DBOWTIE_INSPECT_MAIN")
-set_target_properties(${BOWTIE2_BIN_LIST} PROPERTIES DEBUG_POSTFIX -debug)
+# set_target_properties(${BOWTIE2_BIN_LIST} PROPERTIES DEBUG_POSTFIX -debug)
+
+install(TARGETS ${BOWTIE2_BIN_LIST} DESTINATION bin)
+install(FILES ${BOWTIE2_WRAPPER_SCRIPTS}
+ PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
+ DESTINATION bin)
+if (LIBTBB)
+ install(FILES ${LIBTBB} DESTINATION lib)
+ install(DIRECTORY ${TBB_INCLUDE_PATH} DESTINATION include)
+endif()
+if (LIBTBBMALLOC)
+ install(FILES ${LIBTBBMALLOC} DESTINATION lib)
+endif()
+if (LIBTBBMALLOC_PROXY)
+ install(FILES ${LIBTBBMALLOC_PROXY} DESTINATION lib)
+endif()
-add_test(NAME simple-align COMMAND ${PROJECT_SOURCE_DIR}/bowtie2 -x example/index/lambda_virus example/reads/longreads.fq)
+add_test(NAME simple-align
+ WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
+ COMMAND bowtie2 -x example/index/lambda_virus example/reads/longreads.fq -u 10)
+add_test(NAME simple-build
+ WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
+ COMMAND bowtie2-build-s -c GGGCGGCGACCTCGCGGGTTTTCGCTA out)
+add_test(NAME simple-inspect
+ WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
+ COMMAND bowtie2-inspect-s out && rm out*)
++++++ simde-0.0~git20190101.422ed9c.obscpio ++++++
1
0
Hello community,
here is the log from the commit of package urlwatch for openSUSE:Factory checked in at 2020-05-29 21:23:45
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/urlwatch (Old)
and /work/SRC/openSUSE:Factory/.urlwatch.new.3606 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "urlwatch"
Fri May 29 21:23:45 2020 rev:18 rq:809787 version:2.18
Changes:
--------
--- /work/SRC/openSUSE:Factory/urlwatch/urlwatch.changes 2020-03-16 10:18:25.291589269 +0100
+++ /work/SRC/openSUSE:Factory/.urlwatch.new.3606/urlwatch.changes 2020-05-29 21:37:39.822701066 +0200
@@ -1,0 +2,31 @@
+Mon May 4 06:46:45 UTC 2020 - Michael Vetter <mvetter(a)suse.com>
+
+- Update to 2.18:
+ Added:
+ * New filter: re.sub that can replace/remove strings using regular
+ expressions
+ * Support ignore_timeout_errors and ignore_too_many_redirects for
+ URL jobs (#423, by Josh aka Zevlag)
+ * HTML reporter: Add viewport meta tag for improved viewing on
+ mobile devices (#432, by Mike Borsetti)
+ * Optional support for insecure SMTP password storage in the
+ config; use with caution (#431)
+ Fixed:
+ * Fix --test-filter when the specified job is not found
+ * Fix another YAMLLoadWarning in unit tests (#382, by Louis Sautier)
+ * Documentation updates and typo fixes (by Nate Eagleson)
+ * Pushover: Fix default device config (Fixes #409 and #372,
+ documented by Richard Goodwin)
+ Changed:
+ * Nicer formatting of --features for jobs with no docstring
+ or many keys
+ * The XPath and CSS filters now support XML namespaces
+ (#404, by Chenfeng Bao)
+ * Drop support for Python 3.3 and Python 3.4 (new minimum
+ requirement is Python 3.5)
+ * Use html.escape instead of cgi.escape (which was removed
+ in Python 3.8; #424, by Chenfeng Bao)
+ * Allow non-ASCII characters in format-json output filter
+ (#433, by Mike Borsetti)
+
+-------------------------------------------------------------------
Old:
----
urlwatch-2.17.tar.gz
New:
----
urlwatch-2.18.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ urlwatch.spec ++++++
--- /var/tmp/diff_new_pack.4sbdYd/_old 2020-05-29 21:37:40.182702138 +0200
+++ /var/tmp/diff_new_pack.4sbdYd/_new 2020-05-29 21:37:40.186702150 +0200
@@ -17,14 +17,14 @@
Name: urlwatch
-Version: 2.17
+Version: 2.18
Release: 0
Summary: A tool for monitoring webpages for updates
License: BSD-3-Clause
Group: Productivity/Networking/Web/Utilities
URL: https://thp.io/2008/urlwatch/
Source0: https://github.com/thp/%{name}/archive/%{version}.tar.gz#/%{name}-%{version…
-BuildRequires: python3-devel
+BuildRequires: python3-devel >= 3.5
BuildRequires: python3-setuptools
Requires: python3-PyYAML
Requires: python3-appdirs
++++++ urlwatch-2.17.tar.gz -> urlwatch-2.18.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/urlwatch-2.17/.travis.yml new/urlwatch-2.18/.travis.yml
--- old/urlwatch-2.17/.travis.yml 2019-04-12 17:29:43.000000000 +0200
+++ new/urlwatch-2.18/.travis.yml 2020-05-03 11:31:08.000000000 +0200
@@ -1,8 +1,9 @@
language: python
python:
- - "3.4"
- "3.5"
- "3.6"
+ - "3.7"
+ - "3.8"
install:
- python setup.py install_dependencies
script: nosetests -v
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/urlwatch-2.17/CHANGELOG.md new/urlwatch-2.18/CHANGELOG.md
--- old/urlwatch-2.17/CHANGELOG.md 2019-04-12 17:29:43.000000000 +0200
+++ new/urlwatch-2.18/CHANGELOG.md 2020-05-03 11:31:08.000000000 +0200
@@ -4,6 +4,28 @@
The format mostly follows [Keep a Changelog](http://keepachangelog.com/en/1.0.0/).
+## [2.18] -- 2020-05-03
+
+### Added
+- New filter: `re.sub` that can replace/remove strings using regular expressions
+- Support `ignore_timeout_errors` and `ignore_too_many_redirects` for URL jobs (#423, by Josh aka Zevlag)
+- HTML reporter: Add `viewport` meta tag for improved viewing on mobile devices (#432, by Mike Borsetti)
+- Optional support for insecure SMTP password storage in the config; use with caution (#431)
+
+### Fixed
+- Fix `--test-filter` when the specified job is not found
+- Fix another `YAMLLoadWarning` in unit tests (#382, by Louis Sautier)
+- Documentation updates and typo fixes (by Nate Eagleson)
+- Pushover: Fix default device config (Fixes #409 and #372, documented by Richard Goodwin)
+
+### Changed
+- Nicer formatting of `--features` for jobs with no docstring or many keys
+- The XPath and CSS filters now support XML namespaces (#404, by Chenfeng Bao)
+- Drop support for Python 3.3 and Python 3.4 (new minimum requirement is Python 3.5)
+- Use `html.escape` instead of `cgi.escape` (which was removed in Python 3.8; #424, by Chenfeng Bao)
+- Allow non-ASCII characters in `format-json` output filter (#433, by Mike Borsetti)
+
+
## [2.17] -- 2019-04-12
### Added
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/urlwatch-2.17/COPYING new/urlwatch-2.18/COPYING
--- old/urlwatch-2.17/COPYING 2019-04-12 17:29:43.000000000 +0200
+++ new/urlwatch-2.18/COPYING 2020-05-03 11:31:08.000000000 +0200
@@ -1,4 +1,4 @@
-Copyright (c) 2008-2019 Thomas Perl <m(a)thp.io>
+Copyright (c) 2008-2020 Thomas Perl <m(a)thp.io>
All rights reserved.
Redistribution and use in source and binary forms, with or without
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/urlwatch-2.17/Dockerfile new/urlwatch-2.18/Dockerfile
--- old/urlwatch-2.17/Dockerfile 1970-01-01 01:00:00.000000000 +0100
+++ new/urlwatch-2.18/Dockerfile 2020-05-03 11:31:08.000000000 +0200
@@ -0,0 +1,16 @@
+FROM python:3.8.2
+
+RUN python3 -m pip install pyyaml minidb requests keyring appdirs lxml cssselect beautifulsoup4 jsbeautifier cssbeautifier
+
+WORKDIR /opt/urlwatch
+
+COPY lib ./lib
+COPY share ./share
+COPY setup.py .
+COPY setup.cfg .
+
+RUN python setup.py install
+
+WORKDIR /root/.urlwatch
+
+ENTRYPOINT ["urlwatch"]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/urlwatch-2.17/README.md new/urlwatch-2.18/README.md
--- old/urlwatch-2.17/README.md 2019-04-12 17:29:43.000000000 +0200
+++ new/urlwatch-2.18/README.md 2020-05-03 11:31:08.000000000 +0200
@@ -23,7 +23,7 @@
urlwatch 2 requires:
- * Python 3.3 or newer
+ * Python 3.5 or newer
* [PyYAML](http://pyyaml.org/)
* [minidb](https://thp.io/2010/minidb/)
* [requests](http://python-requests.org/)
@@ -42,9 +42,11 @@
* Pushover reporter: [chump](https://github.com/karanlyons/chump/)
* Pushbullet reporter: [pushbullet.py](https://github.com/randomchars/pushbullet.py)
+ * Matrix reporter: [matrix_client](https://github.com/matrix-org/matrix-python-sdk), [markdown2](https://github.com/trentm/python-markdown2)
* Stdout reporter with color on Windows: [colorama](https://github.com/tartley/colorama)
* "browser" job kind: [requests-html](https://html.python-requests.org)
* Unit testing: [pycodestyle](http://pycodestyle.pycqa.org/en/latest/)
+ * Beautify filter : [beautifulsoup4](https://pypi.org/project/beautifulsoup4/) [jsbeautifier](https://pypi.org/project/jsbeautifier/) [cssbeautifier](https://pypi.org/project/cssbeautifier/)
QUICK START
@@ -111,7 +113,7 @@
filter: html2text,grep:a\054b:,strip
```
-If you want to extract only the body tag you can use this filer:
+If you want to extract only the body tag you can use this filter:
```yaml
url: https://thp.io/2008/urlwatch/
filter: element-by-tag:body
@@ -214,6 +216,13 @@
The above config file sets all jobs to use wdiff as diff tool, and all "url" jobs
to ignore connection errors.
+Sometimes a web page can have the same data between comparisons but it appears in random order.
+If that happens, you can choose to sort before the comparison.
+```yaml
+url: https://example.net/
+filter: sort
+```
+
PUSHOVER
--------
@@ -222,14 +231,20 @@
chump python package installed (see DEPENDENCIES). Then edit your config
(`urlwatch --edit-config`) and enable pushover. You will also need to add
to the config your Pushover user key and a unique app key (generated by
-registering urlwatch as an application on your Pushover account(https://pushover.net/apps/build)
+registering urlwatch as an application on your Pushover account(https://pushover.net/apps/build).
+
+You can send to a specific device by using the device name, as indicated when
+you add or view your list of devices in the Pushover console. For example
+`device: 'MyPhone'`, or `device: 'MyLaptop'`. To send to *all* of your
+devices, set `device: null` in your config (`urlwatch --edit-config`) or leave
+out the device configuration completely.
PUSHBULLET
--------
-Pushbullet notification are configured similarly to Pushover (see above).
-You'll need to add to the config your Pushbullet Access Token, which you
+Pushbullet notifications are configured similarly to Pushover (see above).
+You'll need to add to the config your Pushbullet Access Token, which you
can generate at https://www.pushbullet.com/#settings
TELEGRAM
@@ -270,7 +285,7 @@
SLACK
-----
-Slack nofifications are configured using "Slack Incoming Webhooks". Here is a
+Slack notifications are configured using "Slack Incoming Webhooks". Here is a
sample configuration:
```yaml
@@ -285,6 +300,45 @@
You can use the command `urlwatch --test-slack` to test if the Slack integration works.
+MATRIX
+------
+
+You can have notifications sent to you through the Matrix protocol.
+
+To achieve this, you first need to register a Matrix account for the bot on any homeserver.
+
+You then need to acquire an access token and room ID, using the following instructions adapted from [this guide](https://t2bot.io/docs/access_tokens/):
+
+1. Open [Riot.im](https://riot.im/app/) in a private browsing window
+2. Register/Log in as your bot, using its user ID and password.
+3. Set the display name and avatar, if desired.
+4. In the settings page, scroll down to the bottom and click Access Token: \<click to reveal\>.
+5. Copy the highlighted text to your configuration.
+6. Join the room that you wish to send notifications to.
+7. Go to the Room Settings (gear icon) and copy the *Internal Room ID* from the bottom.
+8. Close the private browsing window **but do not log out, as this invalidates the Access Token**.
+
+Here is a sample configuration:
+
+```yaml
+matrix:
+ homeserver: https://matrix.org
+ access_token: "YOUR_TOKEN_HERE"
+ room_id: "!roomroomroom:matrix.org"
+ enabled: true
+```
+
+You will probably want to use the following configuration for the `markdown` reporter, if you intend to post change
+notifications to a public Matrix room, as the messages quickly become noisy:
+
+```yaml
+markdown:
+ details: false
+ footer: false
+ minimal: true
+ enabled: true
+```
+
BROWSER
-------
@@ -322,7 +376,7 @@
- `report/email/from`: `your.username(a)gmail.com` (edit accordingly)
- `report/email/method`: `smtp`
- `report/email/smtp/host`: `smtp.gmail.com`
-- `report/email/smtp/keyring`: `true`
+- `report/email/smtp/auth`: `true`
- `report/email/smtp/port`: `587`
- `report/email/smtp/starttls`: `true`
- `report/email/to`: The e-mail address you want to send reports to
@@ -344,7 +398,7 @@
- `report/email/method`: `smtp`
- `report/email/smtp/host`: `email-smtp.us-west-2.amazonaws.com` (edit accordingly)
- `report/email/smtp/user`: `ABCDEFGHIJ1234567890` (edit accordingly)
-- `report/email/smtp/keyring`: `true`
+- `report/email/smtp/auth`: `true`
- `report/email/smtp/port`: `587` (25 or 465 also work)
- `report/email/smtp/starttls`: `true`
- `report/email/to`: The e-mail address you want to send reports to
@@ -353,6 +407,30 @@
the password, run: `urlwatch --smtp-login` and enter your password.
+SMTP LOGIN WITHOUT KEYRING
+--------------------------
+
+If for whatever reason you cannot use a keyring to store your password
+(for example, when using it from a `cron` job)
+you can also set the `insecure_password` option in the SMTP config:
+
+- `report/email/smtp/auth`: `true`
+- `report/email/smtp/insecure_password`: `secret123`
+
+The `insecure_password` key will be preferred over the data stored in
+the keyring. Please note that as the name says, storing the password
+as plaintext in the configuration is insecure and bad practice, but
+for an e-mail account that's only dedicated for sending mails this
+might be a way. **Never ever use this with your your primary
+e-mail account!** Seriously! Create a throw-away GMail (or other)
+account just for sending out those e-mails or use local `sendmail` with
+a mail server configured instead of relying on SMTP and password auth.
+
+Note that this makes it really easy for your password to be picked up
+by software running on your machine, by other users logged into the system
+and/or for the password to appear in log files accidentally.
+
+
TESTING FILTERS
---------------
@@ -421,6 +499,30 @@
- html2text: re
```
+To match an element in an [XML namespace](https://www.w3.org/TR/xml-names/),
+use a namespace prefix before the tag name. Use a `:` to seperate the namespace
+prefix and the tag name in an XPath expression, and use a `|` in a CSS selector.
+```yaml
+url: 'https://www.wired.com/feed/rss'
+filter:
+ - xpath:
+ path: '//item/media:keywords'
+ method: xml
+ namespaces:
+ media: http://search.yahoo.com/mrss/
+```
+```yaml
+url: 'https://www.wired.com/feed/rss'
+filter:
+ - css:
+ selector: 'item > media|keywords'
+ method: xml
+ namespaces:
+ media: http://search.yahoo.com/mrss/
+```
+Alternatively, use the XPath expression `//*[name()='<tag_name>']` to bypass
+the namespace entirely.
+
Another useful option with XPath and CSS filters is `exclude`. Elements selected
by this `exclude` expression are removed from the final result. For example, the
following job will not have any `<a>` tag in its results:
@@ -450,6 +552,36 @@
closest match.
+REMOVE OR REPLACE TEXT USING REGULAR EXPRESSIONS
+------------------------------------------------
+
+Just like Python's `re.sub` function, there's the possibility to apply a regular
+expression and either remove of replace the matched text. The following example
+applies the filter 3 times:
+
+ 1. Just specifying a string as the value will replace the matches with the empty string.
+ 2. Simple patterns can be replaced with another string using "pattern" as the expression and "repl" as the replacement.
+ 3. You can use groups (`()`) and back-reference them with `\1` (etc..) to put groups into the replacement string.
+
+All features are described in Python's [re.sub](https://docs.python.org/3/library/re.html#re.sub)
+documentation (the `pattern` and `repl` values are passed to this function as-is, with the value
+of `repl` defaulting to the empty string).
+
+
+```yaml
+kind: url
+url: https://example.com/
+filter:
+ - re.sub: '\s*href="[^"]*"'
+ - re.sub:
+ pattern: '<h1>'
+ repl: 'HEADING 1: '
+ - re.sub:
+ pattern: '</([^>]*)>'
+ repl: '<END OF TAG \1>'
+```
+
+
MIGRATION FROM URLWATCH 1.x
---------------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/urlwatch-2.17/lib/urlwatch/__init__.py new/urlwatch-2.18/lib/urlwatch/__init__.py
--- old/urlwatch-2.17/lib/urlwatch/__init__.py 2019-04-12 17:29:43.000000000 +0200
+++ new/urlwatch-2.18/lib/urlwatch/__init__.py 2020-05-03 11:31:08.000000000 +0200
@@ -8,9 +8,9 @@
pkgname = 'urlwatch'
-__copyright__ = 'Copyright 2008-2019 Thomas Perl'
+__copyright__ = 'Copyright 2008-2020 Thomas Perl'
__author__ = 'Thomas Perl <m(a)thp.io>'
__license__ = 'BSD'
__url__ = 'https://thp.io/2008/urlwatch/'
-__version__ = '2.17'
+__version__ = '2.18'
__user_agent__ = '%s/%s (+https://thp.io/2008/urlwatch/info.html)' % (pkgname, __version__)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/urlwatch-2.17/lib/urlwatch/cli.py new/urlwatch-2.18/lib/urlwatch/cli.py
--- old/urlwatch-2.17/lib/urlwatch/cli.py 1970-01-01 01:00:00.000000000 +0100
+++ new/urlwatch-2.18/lib/urlwatch/cli.py 2020-05-03 11:31:08.000000000 +0200
@@ -0,0 +1,115 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+#
+# This file is part of urlwatch (https://thp.io/2008/urlwatch/).
+# Copyright (c) 2008-2020 Thomas Perl <m(a)thp.io>
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+# derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+# File and folder paths
+import logging
+import os.path
+import signal
+import socket
+import sys
+
+from appdirs import AppDirs
+
+pkgname = 'urlwatch'
+urlwatch_dir = os.path.expanduser(os.path.join('~', '.' + pkgname))
+urlwatch_cache_dir = AppDirs(pkgname).user_cache_dir
+
+if not os.path.exists(urlwatch_dir):
+ urlwatch_dir = AppDirs(pkgname).user_config_dir
+
+# Check if we are installed in the system already
+(prefix, bindir) = os.path.split(os.path.dirname(os.path.abspath(sys.argv[0])))
+
+if bindir != 'bin':
+ sys.path.insert(0, os.path.join(prefix, bindir, 'lib'))
+
+from urlwatch.command import UrlwatchCommand
+from urlwatch.config import CommandConfig
+from urlwatch.main import Urlwatch
+from urlwatch.storage import YamlConfigStorage, CacheMiniDBStorage, UrlsYaml
+
+# One minute (=60 seconds) timeout for each request to avoid hanging
+socket.setdefaulttimeout(60)
+
+# Ignore SIGPIPE for stdout (see https://github.com/thp/urlwatch/issues/77)
+try:
+ signal.signal(signal.SIGPIPE, signal.SIG_DFL)
+except AttributeError:
+ # Windows does not have signal.SIGPIPE
+ ...
+
+logger = logging.getLogger(pkgname)
+
+CONFIG_FILE = 'urlwatch.yaml'
+URLS_FILE = 'urls.yaml'
+CACHE_FILE = 'cache.db'
+HOOKS_FILE = 'hooks.py'
+
+
+def setup_logger(verbose):
+ if verbose:
+ root_logger = logging.getLogger('')
+ console = logging.StreamHandler()
+ console.setFormatter(logging.Formatter('%(asctime)s %(module)s %(levelname)s: %(message)s'))
+ root_logger.addHandler(console)
+ root_logger.setLevel(logging.DEBUG)
+ root_logger.info('turning on verbose logging mode')
+
+
+def main():
+ config_file = os.path.join(urlwatch_dir, CONFIG_FILE)
+ urls_file = os.path.join(urlwatch_dir, URLS_FILE)
+ hooks_file = os.path.join(urlwatch_dir, HOOKS_FILE)
+ new_cache_file = os.path.join(urlwatch_cache_dir, CACHE_FILE)
+ old_cache_file = os.path.join(urlwatch_dir, CACHE_FILE)
+ cache_file = new_cache_file
+ if os.path.exists(old_cache_file) and not os.path.exists(new_cache_file):
+ cache_file = old_cache_file
+
+ command_config = CommandConfig(pkgname, urlwatch_dir, bindir, prefix,
+ config_file, urls_file, hooks_file, cache_file, False)
+ setup_logger(command_config.verbose)
+
+ # setup storage API
+ config_storage = YamlConfigStorage(command_config.config)
+ cache_storage = CacheMiniDBStorage(command_config.cache)
+ urls_storage = UrlsYaml(command_config.urls)
+
+ # setup urlwatcher
+ urlwatch = Urlwatch(command_config, config_storage, cache_storage, urls_storage)
+ urlwatch_command = UrlwatchCommand(urlwatch)
+
+ # run urlwatcher
+ urlwatch_command.run()
+
+
+if __name__ == '__main__':
+ main()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/urlwatch-2.17/lib/urlwatch/command.py new/urlwatch-2.18/lib/urlwatch/command.py
--- old/urlwatch-2.17/lib/urlwatch/command.py 2019-04-12 17:29:43.000000000 +0200
+++ new/urlwatch-2.18/lib/urlwatch/command.py 2020-05-03 11:31:08.000000000 +0200
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
#
# This file is part of urlwatch (https://thp.io/2008/urlwatch/).
-# Copyright (c) 2008-2019 Thomas Perl <m(a)thp.io>
+# Copyright (c) 2008-2020 Thomas Perl <m(a)thp.io>
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -99,7 +99,7 @@
pretty_name = job.pretty_name()
location = job.get_location()
if pretty_name != location:
- print('%d: %s (%s)' % (idx + 1, pretty_name, location))
+ print('%d: %s ( %s )' % (idx + 1, pretty_name, location))
else:
print('%d: %s' % (idx + 1, pretty_name))
return 0
@@ -118,10 +118,10 @@
def test_filter(self):
job = self._find_job(self.urlwatch_config.test_filter)
- job = job.with_defaults(self.urlwatcher.config_storage.config)
if job is None:
print('Not found: %r' % (self.urlwatch_config.test_filter,))
return 1
+ job = job.with_defaults(self.urlwatcher.config_storage.config)
if isinstance(job, UrlJob):
# Force re-retrieval of job, as we're testing filters
@@ -256,8 +256,8 @@
print('Please set the method to SMTP for the e-mail reporter.')
success = False
- if not smtp_config['keyring']:
- print('Keyring authentication must be enabled for SMTP.')
+ if not smtp_config.get('auth', smtp_config.get('keyring', False)):
+ print('Authentication must be enabled for SMTP.')
success = False
smtp_hostname = smtp_config['host']
@@ -273,6 +273,10 @@
if not success:
sys.exit(1)
+ if 'insecure_password' in smtp_config:
+ print('The password is already set in the config (key "insecure_password").')
+ sys.exit(0)
+
if have_password(smtp_hostname, smtp_username):
message = 'Password for %s / %s already set, update? [y/N] ' % (smtp_username, smtp_hostname)
if input(message).lower() != 'y':
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/urlwatch-2.17/lib/urlwatch/config.py new/urlwatch-2.18/lib/urlwatch/config.py
--- old/urlwatch-2.17/lib/urlwatch/config.py 2019-04-12 17:29:43.000000000 +0200
+++ new/urlwatch-2.18/lib/urlwatch/config.py 2020-05-03 11:31:08.000000000 +0200
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
#
# This file is part of urlwatch (https://thp.io/2008/urlwatch/).
-# Copyright (c) 2008-2019 Thomas Perl <m(a)thp.io>
+# Copyright (c) 2008-2020 Thomas Perl <m(a)thp.io>
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/urlwatch-2.17/lib/urlwatch/filters.py new/urlwatch-2.18/lib/urlwatch/filters.py
--- old/urlwatch-2.17/lib/urlwatch/filters.py 2019-04-12 17:29:43.000000000 +0200
+++ new/urlwatch-2.18/lib/urlwatch/filters.py 2020-05-03 11:31:08.000000000 +0200
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
#
# This file is part of urlwatch (https://thp.io/2008/urlwatch/).
-# Copyright (c) 2008-2019 Thomas Perl <m(a)thp.io>
+# Copyright (c) 2008-2020 Thomas Perl <m(a)thp.io>
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -39,6 +39,7 @@
from enum import Enum
from lxml import etree
+from lxml.cssselect import CSSSelector
from .util import TrackSubClasses
@@ -154,6 +155,29 @@
return data
+class BeautifyFilter(FilterBase):
+ """Beautify HTML"""
+
+ __kind__ = 'beautify'
+
+ def filter(self, data, subfilter=None):
+ import jsbeautifier
+ import cssbeautifier
+ from bs4 import BeautifulSoup as bs
+ soup = bs(data, features="lxml")
+ scripts = soup.find_all('script')
+ for script in scripts:
+ if script.string is not None:
+ beautified_js = jsbeautifier.beautify(script.string)
+ script.string = beautified_js
+ styles = soup.find_all('style')
+ for style in styles:
+ if style.string is not None:
+ beautified_css = cssbeautifier.beautify(style.string)
+ style.string = beautified_css
+ return soup.prettify()
+
+
class Html2TextFilter(FilterBase):
"""Convert HTML to plaintext"""
@@ -195,7 +219,7 @@
if subfilter is not None:
indentation = int(subfilter)
parsed_json = json.loads(data)
- return json.dumps(parsed_json, sort_keys=True, indent=indentation, separators=(',', ': '))
+ return json.dumps(parsed_json, ensure_ascii=False, sort_keys=True, indent=indentation, separators=(',', ': '))
class GrepFilter(FilterBase):
@@ -372,31 +396,28 @@
def __init__(self, filter_kind, subfilter, expr_key):
self.filter_kind = filter_kind
- self.expression, self.method, self.exclude = self.parse_subfilter(
- filter_kind, subfilter, expr_key, self.EXPR_NAMES[filter_kind])
- self.parser = (etree.HTMLParser if self.method == 'html' else etree.XMLParser)()
- self.data = ''
-
- @staticmethod
- def parse_subfilter(filter_kind, subfilter, expr_key, expr_name):
if subfilter is None:
- raise ValueError('Need %s for filtering' % (expr_name,))
+ raise ValueError('Need %s for filtering' % (self.EXPR_NAMES[filter_kind],))
if isinstance(subfilter, str):
- expression = subfilter
- method = 'html'
- exclude = None
+ self.expression = subfilter
+ self.method = 'html'
+ self.exclude = None
+ self.namespaces = None
elif isinstance(subfilter, dict):
if expr_key not in subfilter:
- raise ValueError('Need %s for filtering' % (expr_name,))
- expression = subfilter[expr_key]
- method = subfilter.get('method', 'html')
- exclude = subfilter.get('exclude')
- if method not in ('html', 'xml'):
- raise ValueError('%s method must be "html" or "xml", got %r' % (filter_kind, method))
+ raise ValueError('Need %s for filtering' % (self.EXPR_NAMES[filter_kind],))
+ self.expression = subfilter[expr_key]
+ self.method = subfilter.get('method', 'html')
+ self.exclude = subfilter.get('exclude')
+ self.namespaces = subfilter.get('namespaces')
+ if self.method not in ('html', 'xml'):
+ raise ValueError('%s method must be "html" or "xml", got %r' % (filter_kind, self.method))
+ if self.method == 'html' and self.namespaces is not None:
+ raise ValueError('Namespace prefixes only supported with "xml" method.')
else:
raise ValueError('%s subfilter must be a string or dict' % (filter_kind,))
-
- return expression, method, exclude
+ self.parser = (etree.HTMLParser if self.method == 'html' else etree.XMLParser)()
+ self.data = ''
def feed(self, data):
self.data += data
@@ -430,9 +451,8 @@
parent.text = parent.text + element.tail if parent.text else element.tail
parent.remove(element)
- @classmethod
- def _reevaluate(cls, element):
- if cls._orphaned(element):
+ def _reevaluate(self, element):
+ if self._orphaned(element):
return None
if isinstance(element, etree._ElementUnicodeResult):
parent = element.getparent()
@@ -447,8 +467,7 @@
else:
return element
- @staticmethod
- def _orphaned(element):
+ def _orphaned(self, element):
if isinstance(element, etree._ElementUnicodeResult):
parent = element.getparent()
if ((element.is_tail and parent.tail is None)
@@ -460,7 +479,7 @@
try:
tree = element.getroottree()
path = tree.getpath(element)
- return element is not tree.xpath(path)[0]
+ return element is not tree.xpath(path, namespaces=self.namespaces)[0]
except (ValueError, IndexError):
return True
@@ -478,11 +497,13 @@
return []
excluded_elems = None
if self.filter_kind == 'css':
- selected_elems = root.cssselect(self.expression)
- excluded_elems = root.cssselect(self.exclude) if self.exclude else None
+ selected_elems = CSSSelector(self.expression,
+ namespaces=self.namespaces).evaluate(root)
+ excluded_elems = CSSSelector(self.exclude,
+ namespaces=self.namespaces).evaluate(root) if self.exclude else None
elif self.filter_kind == 'xpath':
- selected_elems = root.xpath(self.expression)
- excluded_elems = root.xpath(self.exclude) if self.exclude else None
+ selected_elems = root.xpath(self.expression, namespaces=self.namespaces)
+ excluded_elems = root.xpath(self.exclude, namespaces=self.namespaces) if self.exclude else None
if excluded_elems is not None:
for el in excluded_elems:
self._remove_element(el)
@@ -512,3 +533,32 @@
lxml_parser = LxmlParser('xpath', subfilter, 'path')
lxml_parser.feed(data)
return lxml_parser.get_filtered_data()
+
+
+class RegexSub(FilterBase):
+ """Replace text with regular expressions using Python's re.sub"""
+
+ __kind__ = 're.sub'
+
+ def filter(self, data, subfilter=None):
+ if subfilter is None:
+ raise ValueError('{} needs a subfilter'.format(self.__kind__))
+
+ # Allow for just specifying a regular expression (that will be removed)
+ if isinstance(subfilter, str):
+ subfilter = {'pattern': subfilter}
+
+ # Default: Replace with empty string if no "repl" value is set
+ return re.sub(subfilter.get('pattern'), subfilter.get('repl', ''), data)
+
+
+class SortFilter(FilterBase):
+ """Sort the results before comparison"""
+
+ __kind__ = 'sort'
+
+ def filter(self, data, subfilter=None):
+ data_list = data.splitlines()
+ data_list = sorted(data_list, key=str.casefold)
+
+ return '\n'.join(data_list)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/urlwatch-2.17/lib/urlwatch/handler.py new/urlwatch-2.18/lib/urlwatch/handler.py
--- old/urlwatch-2.17/lib/urlwatch/handler.py 2019-04-12 17:29:43.000000000 +0200
+++ new/urlwatch-2.18/lib/urlwatch/handler.py 2020-05-03 11:31:08.000000000 +0200
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
#
# This file is part of urlwatch (https://thp.io/2008/urlwatch/).
-# Copyright (c) 2008-2019 Thomas Perl <m(a)thp.io>
+# Copyright (c) 2008-2020 Thomas Perl <m(a)thp.io>
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/urlwatch-2.17/lib/urlwatch/html2txt.py new/urlwatch-2.18/lib/urlwatch/html2txt.py
--- old/urlwatch-2.17/lib/urlwatch/html2txt.py 2019-04-12 17:29:43.000000000 +0200
+++ new/urlwatch-2.18/lib/urlwatch/html2txt.py 2020-05-03 11:31:08.000000000 +0200
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
#
# This file is part of urlwatch (https://thp.io/2008/urlwatch/).
-# Copyright (c) 2008-2019 Thomas Perl <m(a)thp.io>
+# Copyright (c) 2008-2020 Thomas Perl <m(a)thp.io>
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/urlwatch-2.17/lib/urlwatch/ical2txt.py new/urlwatch-2.18/lib/urlwatch/ical2txt.py
--- old/urlwatch-2.17/lib/urlwatch/ical2txt.py 2019-04-12 17:29:43.000000000 +0200
+++ new/urlwatch-2.18/lib/urlwatch/ical2txt.py 2020-05-03 11:31:08.000000000 +0200
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
#
# This file is part of urlwatch (https://thp.io/2008/urlwatch/).
-# Copyright (c) 2008-2019 Thomas Perl <m(a)thp.io>
+# Copyright (c) 2008-2020 Thomas Perl <m(a)thp.io>
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/urlwatch-2.17/lib/urlwatch/jobs.py new/urlwatch-2.18/lib/urlwatch/jobs.py
--- old/urlwatch-2.17/lib/urlwatch/jobs.py 2019-04-12 17:29:43.000000000 +0200
+++ new/urlwatch-2.18/lib/urlwatch/jobs.py 2020-05-03 11:31:08.000000000 +0200
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
#
# This file is part of urlwatch (https://thp.io/2008/urlwatch/).
-# Copyright (c) 2008-2019 Thomas Perl <m(a)thp.io>
+# Copyright (c) 2008-2020 Thomas Perl <m(a)thp.io>
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -35,6 +35,7 @@
import re
import subprocess
import requests
+import textwrap
import urlwatch
from requests.packages.urllib3.exceptions import InsecureRequestWarning
@@ -85,12 +86,16 @@
def job_documentation(cls):
result = []
for sc in TrackSubClasses.sorted_by_kind(cls):
- result.extend((
- ' * %s - %s' % (sc.__kind__, sc.__doc__),
- ' Required keys: %s' % (', '.join(sc.__required__),),
- ' Optional keys: %s' % (', '.join(sc.__optional__),),
- '',
- ))
+ if sc.__doc__:
+ result.append(' * %s - %s' % (sc.__kind__, sc.__doc__))
+ else:
+ result.append(' * %s' % (sc.__kind__,))
+
+ for msg, value in ((' Required keys: ', sc.__required__), (' Optional keys: ', sc.__optional__)):
+ if value:
+ values = ('\n' + (len(msg) * ' ')).join(textwrap.wrap(', '.join(value), 79 - len(msg)))
+ result.append('%s%s' % (msg, values))
+ result.append('')
return '\n'.join(result)
def get_location(self):
@@ -203,7 +208,8 @@
__required__ = ('url',)
__optional__ = ('cookies', 'data', 'method', 'ssl_no_verify', 'ignore_cached', 'http_proxy', 'https_proxy',
- 'headers', 'ignore_connection_errors', 'ignore_http_error_codes', 'encoding', 'timeout')
+ 'headers', 'ignore_connection_errors', 'ignore_http_error_codes', 'encoding', 'timeout',
+ 'ignore_timeout_errors', 'ignore_too_many_redirects')
LOCATION_IS_URL = True
CHARSET_RE = re.compile('text/(html|plain); charset=([^;]*)')
@@ -319,6 +325,10 @@
def ignore_error(self, exception):
if isinstance(exception, requests.exceptions.ConnectionError) and self.ignore_connection_errors:
return True
+ if isinstance(exception, requests.exceptions.Timeout) and self.ignore_timeout_errors:
+ return True
+ if isinstance(exception, requests.exceptions.TooManyRedirects) and self.ignore_too_many_redirects:
+ return True
elif isinstance(exception, requests.exceptions.HTTPError):
status_code = exception.response.status_code
ignored_codes = []
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/urlwatch-2.17/lib/urlwatch/mailer.py new/urlwatch-2.18/lib/urlwatch/mailer.py
--- old/urlwatch-2.17/lib/urlwatch/mailer.py 2019-04-12 17:29:43.000000000 +0200
+++ new/urlwatch-2.18/lib/urlwatch/mailer.py 2020-05-03 11:31:08.000000000 +0200
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
#
# This file is part of urlwatch (https://thp.io/2008/urlwatch/).
-# Copyright (c) 2008-2019 Thomas Perl <m(a)thp.io>
+# Copyright (c) 2008-2020 Thomas Perl <m(a)thp.io>
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -72,12 +72,13 @@
class SMTPMailer(Mailer):
- def __init__(self, smtp_user, smtp_server, smtp_port, tls, auth):
+ def __init__(self, smtp_user, smtp_server, smtp_port, tls, auth, insecure_password=None):
self.smtp_server = smtp_server
self.smtp_user = smtp_user
self.smtp_port = smtp_port
self.tls = tls
self.auth = auth
+ self.insecure_password = insecure_password
def send(self, msg):
s = smtplib.SMTP(self.smtp_server, self.smtp_port)
@@ -86,13 +87,16 @@
if self.tls:
s.starttls()
- if self.auth and keyring is not None:
- passwd = keyring.get_password(self.smtp_server, self.smtp_user)
- if passwd is None:
- raise ValueError('No password available in keyring for {}, {}'.format(self.smtp_server, self.smtp_user))
+ if self.auth:
+ if self.insecure_password:
+ passwd = self.insecure_password
+ elif keyring is not None:
+ passwd = keyring.get_password(self.smtp_server, self.smtp_user)
+ if passwd is None:
+ raise ValueError('No password available in keyring for {}, {}'.format(self.smtp_server, self.smtp_user))
s.login(self.smtp_user, passwd)
- s.sendmail(msg['From'], [msg['To']], msg.as_string())
+ s.sendmail(msg['From'], msg['To'].split(','), msg.as_string())
s.quit()
@@ -101,7 +105,7 @@
self.sendmail_path = sendmail_path
def send(self, msg):
- p = subprocess.Popen([self.sendmail_path, '-t', '-oi'],
+ p = subprocess.Popen([self.sendmail_path, '-oi', msg['To']],
stdin=subprocess.PIPE,
stderr=subprocess.PIPE,
universal_newlines=True)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/urlwatch-2.17/lib/urlwatch/main.py new/urlwatch-2.18/lib/urlwatch/main.py
--- old/urlwatch-2.17/lib/urlwatch/main.py 2019-04-12 17:29:43.000000000 +0200
+++ new/urlwatch-2.18/lib/urlwatch/main.py 2020-05-03 11:31:08.000000000 +0200
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
#
# This file is part of urlwatch (https://thp.io/2008/urlwatch/).
-# Copyright (c) 2008-2019 Thomas Perl <m(a)thp.io>
+# Copyright (c) 2008-2020 Thomas Perl <m(a)thp.io>
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/urlwatch-2.17/lib/urlwatch/migration.py new/urlwatch-2.18/lib/urlwatch/migration.py
--- old/urlwatch-2.17/lib/urlwatch/migration.py 2019-04-12 17:29:43.000000000 +0200
+++ new/urlwatch-2.18/lib/urlwatch/migration.py 2020-05-03 11:31:08.000000000 +0200
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
#
# This file is part of urlwatch (https://thp.io/2008/urlwatch/).
-# Copyright (c) 2008-2019 Thomas Perl <m(a)thp.io>
+# Copyright (c) 2008-2020 Thomas Perl <m(a)thp.io>
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/urlwatch-2.17/lib/urlwatch/reporters.py new/urlwatch-2.18/lib/urlwatch/reporters.py
--- old/urlwatch-2.17/lib/urlwatch/reporters.py 2019-04-12 17:29:43.000000000 +0200
+++ new/urlwatch-2.18/lib/urlwatch/reporters.py 2020-05-03 11:31:08.000000000 +0200
@@ -1,6 +1,6 @@
#
# This file is part of urlwatch (https://thp.io/2008/urlwatch/).
-# Copyright (c) 2008-2019 Thomas Perl <m(a)thp.io>
+# Copyright (c) 2008-2020 Thomas Perl <m(a)thp.io>
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -38,7 +38,7 @@
import os
import sys
import time
-import cgi
+import html
import functools
import requests
@@ -58,8 +58,18 @@
except ImportError:
Pushbullet = None
-logger = logging.getLogger(__name__)
+try:
+ import matrix_client.api
+except ImportError:
+ matrix_client = None
+try:
+ # markdown2 is an optional dependency which provides better formatting for Matrix.
+ from markdown2 import Markdown
+except ImportError:
+ Markdown = None
+
+logger = logging.getLogger(__name__)
# Regular expressions that match the added/removed markers of GNU wdiff output
WDIFF_ADDED_RE = r'[{][+].*?[+][}]'
@@ -140,8 +150,8 @@
return self.s
def format(self, *args, **kwargs):
- return str(self).format(*(cgi.escape(str(arg)) for arg in args),
- **{k: cgi.escape(str(v)) for k, v in kwargs.items()})
+ return str(self).format(*(html.escape(str(arg)) for arg in args),
+ **{k: html.escape(str(v)) for k, v in kwargs.items()})
class HtmlReporter(ReporterBase):
@@ -155,6 +165,7 @@
<html><head>
<title>urlwatch</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
<style type="text/css">
body { font-family: sans-serif; }
.diff_add { color: green; background-color: lightgreen; }
@@ -248,7 +259,7 @@
pretty_name = job_state.job.pretty_name()
location = job_state.job.get_location()
if pretty_name != location:
- location = '%s (%s)' % (pretty_name, location)
+ location = '%s ( %s )' % (pretty_name, location)
yield ': '.join((job_state.verb.upper(), location))
return
@@ -295,7 +306,7 @@
pretty_name = job_state.job.pretty_name()
location = job_state.job.get_location()
if pretty_name != location:
- location = '%s (%s)' % (pretty_name, location)
+ location = '%s ( %s )' % (pretty_name, location)
pretty_summary = ': '.join((job_state.verb.upper(), pretty_name))
summary = ': '.join((job_state.verb.upper(), location))
@@ -397,8 +408,13 @@
return
if self.config['method'] == "smtp":
smtp_user = self.config['smtp'].get('user', None) or self.config['from']
+ # Legacy support: The current smtp "auth" setting was previously called "keyring"
+ if 'keyring' in self.config['smtp']:
+ logger.info('The SMTP config key "keyring" is now called "auth".')
+ use_auth = self.config['smtp'].get('auth', self.config['smtp'].get('keyring', False))
mailer = SMTPMailer(smtp_user, self.config['smtp']['host'], self.config['smtp']['port'],
- self.config['smtp']['starttls'], self.config['smtp']['keyring'])
+ self.config['smtp']['starttls'], use_auth,
+ self.config['smtp'].get('insecure_password'))
elif self.config['method'] == "sendmail":
mailer = SendmailMailer(self.config['sendmail']['path'])
else:
@@ -454,7 +470,9 @@
def web_service_submit(self, service, title, body):
sound = self.config['sound']
- device = self.config['device']
+ # If device is the empty string or not specified at all, use None to send to all devices
+ # (see https://github.com/thp/urlwatch/issues/372)
+ device = self.config.get('device', None) or None
msg = service.create_message(title=title, message=body, html=True, sound=sound, device=device)
msg.send()
@@ -580,7 +598,7 @@
class SlackReporter(TextReporter):
"""Custom Slack reporter"""
- MAX_LENGTH = 4096
+ MAX_LENGTH = 40000
__kind__ = 'slack'
@@ -617,3 +635,113 @@
def chunkstring(self, string, length):
return (string[0 + i:length + i] for i in range(0, len(string), length))
+
+
+class MarkdownReporter(ReporterBase):
+ def submit(self):
+ cfg = self.report.config['report']['markdown']
+ show_details = cfg['details']
+ show_footer = cfg['footer']
+
+ if cfg['minimal']:
+ for job_state in self.report.get_filtered_job_states(self.job_states):
+ pretty_name = job_state.job.pretty_name()
+ location = job_state.job.get_location()
+ if pretty_name != location:
+ location = '%s (%s)' % (pretty_name, location)
+ yield '* ' + ': '.join((job_state.verb.upper(), location))
+ return
+
+ summary = []
+ details = []
+ for job_state in self.report.get_filtered_job_states(self.job_states):
+ summary_part, details_part = self._format_output(job_state)
+ summary.extend(summary_part)
+ details.extend(details_part)
+
+ if summary:
+ yield from ('%d. %s' % (idx + 1, line) for idx, line in enumerate(summary))
+ yield ''
+
+ if show_details:
+ yield from details
+
+ if summary and show_footer:
+ yield from ('--- ',
+ '%s %s, %s ' % (urlwatch.pkgname, urlwatch.__version__, urlwatch.__copyright__),
+ 'Website: %s ' % (urlwatch.__url__,),
+ 'watched %d URLs in %d seconds' % (len(self.job_states), self.duration.seconds))
+
+ def _format_content(self, job_state):
+ if job_state.verb == 'error':
+ return job_state.traceback.strip()
+
+ if job_state.verb == 'unchanged':
+ return job_state.old_data
+
+ if job_state.old_data in (None, job_state.new_data):
+ return None
+
+ return self.unified_diff(job_state)
+
+ def _format_output(self, job_state):
+ summary_part = []
+ details_part = []
+
+ pretty_name = job_state.job.pretty_name()
+ location = job_state.job.get_location()
+ if pretty_name != location:
+ location = '%s (%s)' % (pretty_name, location)
+
+ pretty_summary = ': '.join((job_state.verb.upper(), pretty_name))
+ summary = ': '.join((job_state.verb.upper(), location))
+ content = self._format_content(job_state)
+
+ summary_part.append(pretty_summary)
+
+ details_part.append('### ' + summary)
+ if content is not None:
+ details_part.extend(('', '```', content, '```', ''))
+ details_part.extend(('', ''))
+
+ return summary_part, details_part
+
+
+class MatrixReporter(MarkdownReporter):
+ """Custom Matrix reporter"""
+ MAX_LENGTH = 4096
+
+ __kind__ = 'matrix'
+
+ def submit(self):
+ homeserver_url = self.config['homeserver']
+ access_token = self.config['access_token']
+ room_id = self.config['room_id']
+
+ body_markdown = '\n'.join(super().submit())
+
+ if not body_markdown:
+ logger.debug('Not calling Matrix API (no changes)')
+ return
+
+ if len(body_markdown) > self.MAX_LENGTH:
+ body_markdown = body_markdown[:self.MAX_LENGTH]
+
+ client_api = matrix_client.api.MatrixHttpApi(homeserver_url, access_token)
+
+ if Markdown is not None:
+ body_html = Markdown().convert(body_markdown)
+
+ client_api.send_message_event(
+ room_id,
+ "m.room.message",
+ content={
+ "msgtype": "m.text",
+ "format": "org.matrix.custom.html",
+ "body": body_markdown,
+ "formatted_body": body_html
+ }
+ )
+ else:
+ logger.debug('Not formatting as Markdown; dependency on markdown2 not met?')
+ client_api.send_message(room_id, body_markdown)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/urlwatch-2.17/lib/urlwatch/storage.py new/urlwatch-2.18/lib/urlwatch/storage.py
--- old/urlwatch-2.17/lib/urlwatch/storage.py 2019-04-12 17:29:43.000000000 +0200
+++ new/urlwatch-2.18/lib/urlwatch/storage.py 2020-05-03 11:31:08.000000000 +0200
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
#
# This file is part of urlwatch (https://thp.io/2008/urlwatch/).
-# Copyright (c) 2008-2019 Thomas Perl <m(a)thp.io>
+# Copyright (c) 2008-2020 Thomas Perl <m(a)thp.io>
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -59,6 +59,12 @@
'minimal': False,
},
+ 'markdown': {
+ 'details': True,
+ 'footer': True,
+ 'minimal': False,
+ },
+
'html': {
'diff': 'unified', # "unified" or "table"
},
@@ -81,7 +87,7 @@
'user': '',
'port': 25,
'starttls': True,
- 'keyring': True,
+ 'auth': True,
},
'sendmail': {
'path': 'sendmail',
@@ -90,7 +96,7 @@
'pushover': {
'enabled': False,
'app': '',
- 'device': '',
+ 'device': None,
'sound': 'spacealarm',
'user': '',
},
@@ -107,6 +113,12 @@
'enabled': False,
'webhook_url': '',
},
+ 'matrix': {
+ 'enabled': False,
+ 'homeserver': '',
+ 'access_token': '',
+ 'room_id': '',
+ },
'mailgun': {
'enabled': False,
'region': 'us',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/urlwatch-2.17/lib/urlwatch/util.py new/urlwatch-2.18/lib/urlwatch/util.py
--- old/urlwatch-2.17/lib/urlwatch/util.py 2019-04-12 17:29:43.000000000 +0200
+++ new/urlwatch-2.18/lib/urlwatch/util.py 2020-05-03 11:31:08.000000000 +0200
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
#
# This file is part of urlwatch (https://thp.io/2008/urlwatch/).
-# Copyright (c) 2008-2019 Thomas Perl <m(a)thp.io>
+# Copyright (c) 2008-2020 Thomas Perl <m(a)thp.io>
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/urlwatch-2.17/lib/urlwatch/worker.py new/urlwatch-2.18/lib/urlwatch/worker.py
--- old/urlwatch-2.17/lib/urlwatch/worker.py 2019-04-12 17:29:43.000000000 +0200
+++ new/urlwatch-2.18/lib/urlwatch/worker.py 2020-05-03 11:31:08.000000000 +0200
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
#
# This file is part of urlwatch (https://thp.io/2008/urlwatch/).
-# Copyright (c) 2008-2019 Thomas Perl <m(a)thp.io>
+# Copyright (c) 2008-2020 Thomas Perl <m(a)thp.io>
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/urlwatch-2.17/requirements.txt new/urlwatch-2.18/requirements.txt
--- old/urlwatch-2.17/requirements.txt 1970-01-01 01:00:00.000000000 +0100
+++ new/urlwatch-2.18/requirements.txt 2020-05-03 11:31:08.000000000 +0200
@@ -0,0 +1,7 @@
+pyyaml
+minidb
+requests
+keyring
+appdirs
+lxml
+cssselect
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/urlwatch-2.17/setup.py new/urlwatch-2.18/setup.py
--- old/urlwatch-2.17/setup.py 2019-04-12 17:29:43.000000000 +0200
+++ new/urlwatch-2.18/setup.py 2020-05-03 11:31:08.000000000 +0200
@@ -22,7 +22,7 @@
m['install_requires'].extend(['enum34'])
if sys.platform == 'win32':
m['install_requires'].extend(['colorama'])
-m['scripts'] = ['urlwatch']
+m['entry_points'] = {"console_scripts": ["urlwatch=urlwatch.cli:main"]}
m['package_dir'] = {'': 'lib'}
m['packages'] = ['urlwatch']
m['python_requires'] = '>3.3.0'
@@ -53,7 +53,10 @@
from pip._internal import main
except ImportError:
from pip import main
- main(['install', '--upgrade'] + m['install_requires'])
+ try:
+ main(['install', '--upgrade'] + m['install_requires'])
+ except TypeError: # recent pip
+ main.main(['install', '--upgrade'] + m['install_requires'])
m['cmdclass'] = {'install_dependencies': InstallDependencies}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/urlwatch-2.17/share/urlwatch/examples/hooks.py.example new/urlwatch-2.18/share/urlwatch/examples/hooks.py.example
--- old/urlwatch-2.17/share/urlwatch/examples/hooks.py.example 2019-04-12 17:29:43.000000000 +0200
+++ new/urlwatch-2.18/share/urlwatch/examples/hooks.py.example 2020-05-03 11:31:08.000000000 +0200
@@ -1,7 +1,7 @@
#
# Example hooks file for urlwatch
#
-# Copyright (c) 2008-2019 Thomas Perl <m(a)thp.io>
+# Copyright (c) 2008-2020 Thomas Perl <m(a)thp.io>
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/urlwatch-2.17/test/data/filter_tests.yaml new/urlwatch-2.18/test/data/filter_tests.yaml
--- old/urlwatch-2.17/test/data/filter_tests.yaml 2019-04-12 17:29:43.000000000 +0200
+++ new/urlwatch-2.18/test/data/filter_tests.yaml 2020-05-03 11:31:08.000000000 +0200
@@ -78,6 +78,39 @@
<div>foo</div>
<div id="bar">bar</div>
+xpath_xml_namespaces:
+ filter:
+ xpath:
+ path: //item | //f:item
+ method: xml
+ exclude: //f:year | //author
+ namespaces:
+ f: foo
+ data: |
+ <feed xmlns:f="foo">
+ <item>
+ <f:year>2017</f:year>
+ <author>Tom</author>
+ <data>abc</data>
+ </item>
+ <f:item>
+ <year>2018</year>
+ <f:author>Jerry</f:author>
+ <data>xyz</data>
+ </f:item>
+ </feed>
+ expected_result: |
+ <item xmlns:f="foo">
+
+
+ <data>abc</data>
+ </item>
+
+ <f:item xmlns:f="foo">
+ <year>2018</year>
+ <f:author>Jerry</f:author>
+ <data>xyz</data>
+ </f:item>
css:
filter: css:div
data: |
@@ -102,6 +135,39 @@
</body></html>
expected_result: |
<div class="foo">foo</div>
+css_xml_namespaces:
+ filter:
+ css:
+ selector: item, f|item
+ method: xml
+ exclude: f|year, author
+ namespaces:
+ f: foo
+ data: |
+ <feed xmlns:f="foo">
+ <item>
+ <f:year>2017</f:year>
+ <author>Tom</author>
+ <data>abc</data>
+ </item>
+ <f:item>
+ <year>2018</year>
+ <f:author>Jerry</f:author>
+ <data>xyz</data>
+ </f:item>
+ </feed>
+ expected_result: |
+ <item xmlns:f="foo">
+
+
+ <data>abc</data>
+ </item>
+
+ <f:item xmlns:f="foo">
+ <year>2018</year>
+ <f:author>Jerry</f:author>
+ <data>xyz</data>
+ </f:item>
grep:
filter: grep:blue
data: |
@@ -154,3 +220,15 @@
expected_result: |-
48 65 6c 6c 6f 20 77 6f 72 6c 64 21 0a e4 bd a0 Hello world!....
e5 a5 bd ef bc 8c e4 b8 96 e7 95 8c ef bc 81 0a ................
+sort:
+ filter: sort
+ data: |
+ The rose is red;
+ the violet's blue.
+ Sugar is sweet,
+ and so are you.
+ expected_result: |-
+ and so are you.
+ Sugar is sweet,
+ The rose is red;
+ the violet's blue.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/urlwatch-2.17/test/data/urlwatch.yaml new/urlwatch-2.18/test/data/urlwatch.yaml
--- old/urlwatch-2.17/test/data/urlwatch.yaml 2019-04-12 17:29:43.000000000 +0200
+++ new/urlwatch-2.18/test/data/urlwatch.yaml 2020-05-03 11:31:08.000000000 +0200
@@ -12,7 +12,7 @@
path: sendmail
smtp:
host: localhost
- keyring: true
+ auth: true
port: 25
starttls: true
subject: '{count} changes: {jobs}'
@@ -21,7 +21,7 @@
diff: unified
pushover:
app: ''
- device: ''
+ device: null
enabled: false
sound: 'spacealarm'
user: ''
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/urlwatch-2.17/test/test_filters.py new/urlwatch-2.18/test/test_filters.py
--- old/urlwatch-2.17/test/test_filters.py 2019-04-12 17:29:43.000000000 +0200
+++ new/urlwatch-2.18/test/test_filters.py 2020-05-03 11:31:08.000000000 +0200
@@ -33,6 +33,6 @@
eq_(result, expected_result)
with open(os.path.join(os.path.dirname(__file__), 'data/filter_tests.yaml'), 'r', encoding='utf8') as fp:
- filter_tests = yaml.load(fp)
+ filter_tests = yaml.load(fp, Loader=yaml.SafeLoader)
for test_name in filter_tests:
yield check_filter, test_name
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/urlwatch-2.17/test/test_handler.py new/urlwatch-2.18/test/test_handler.py
--- old/urlwatch-2.17/test/test_handler.py 2019-04-12 17:29:43.000000000 +0200
+++ new/urlwatch-2.18/test/test_handler.py 2020-05-03 11:31:08.000000000 +0200
@@ -79,7 +79,6 @@
style = pycodestyle.StyleGuide(ignore=['E501', 'E402', 'W503'])
py_files = [y for x in os.walk(os.path.abspath('.')) for y in glob(os.path.join(x[0], '*.py'))]
- py_files.append(os.path.abspath('urlwatch'))
result = style.check_files(py_files)
assert result.total_errors == 0, "Found #{0} code style errors".format(result.total_errors)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/urlwatch-2.17/urlwatch new/urlwatch-2.18/urlwatch
--- old/urlwatch-2.17/urlwatch 2019-04-12 17:29:43.000000000 +0200
+++ new/urlwatch-2.18/urlwatch 2020-05-03 11:31:08.000000000 +0200
@@ -1,111 +1,8 @@
#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-#
-# This file is part of urlwatch (https://thp.io/2008/urlwatch/).
-# Copyright (c) 2008-2019 Thomas Perl <m(a)thp.io>
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# 1. Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# 2. Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution.
-# 3. The name of the author may not be used to endorse or promote products
-# derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# Convenience script to run urlwatch from a Git checkout
+# This is NOT the script that gets installed as part of "setup.py install"
-
-# File and folder paths
-import logging
-import os.path
-import signal
-import socket
import sys
-
-from appdirs import AppDirs
-
-pkgname = 'urlwatch'
-urlwatch_dir = os.path.expanduser(os.path.join('~', '.' + pkgname))
-urlwatch_cache_dir = AppDirs(pkgname).user_cache_dir
-
-if not os.path.exists(urlwatch_dir):
- urlwatch_dir = AppDirs(pkgname).user_config_dir
-
-# Check if we are installed in the system already
-(prefix, bindir) = os.path.split(os.path.dirname(os.path.abspath(sys.argv[0])))
-
-if bindir != 'bin':
- sys.path.insert(0, os.path.join(prefix, bindir, 'lib'))
-
-from urlwatch.command import UrlwatchCommand
-from urlwatch.config import CommandConfig
-from urlwatch.main import Urlwatch
-from urlwatch.storage import YamlConfigStorage, CacheMiniDBStorage, UrlsYaml
-
-# One minute (=60 seconds) timeout for each request to avoid hanging
-socket.setdefaulttimeout(60)
-
-# Ignore SIGPIPE for stdout (see https://github.com/thp/urlwatch/issues/77)
-try:
- signal.signal(signal.SIGPIPE, signal.SIG_DFL)
-except AttributeError:
- # Windows does not have signal.SIGPIPE
- ...
-
-logger = logging.getLogger(pkgname)
-
-CONFIG_FILE = 'urlwatch.yaml'
-URLS_FILE = 'urls.yaml'
-CACHE_FILE = 'cache.db'
-HOOKS_FILE = 'hooks.py'
-
-
-def setup_logger(verbose):
- if verbose:
- root_logger = logging.getLogger('')
- console = logging.StreamHandler()
- console.setFormatter(logging.Formatter('%(asctime)s %(module)s %(levelname)s: %(message)s'))
- root_logger.addHandler(console)
- root_logger.setLevel(logging.DEBUG)
- root_logger.info('turning on verbose logging mode')
-
-
-if __name__ == '__main__':
- config_file = os.path.join(urlwatch_dir, CONFIG_FILE)
- urls_file = os.path.join(urlwatch_dir, URLS_FILE)
- hooks_file = os.path.join(urlwatch_dir, HOOKS_FILE)
- new_cache_file = os.path.join(urlwatch_cache_dir, CACHE_FILE)
- old_cache_file = os.path.join(urlwatch_dir, CACHE_FILE)
- cache_file = new_cache_file
- if os.path.exists(old_cache_file) and not os.path.exists(new_cache_file):
- cache_file = old_cache_file
-
- command_config = CommandConfig(pkgname, urlwatch_dir, bindir, prefix,
- config_file, urls_file, hooks_file, cache_file, False)
- setup_logger(command_config.verbose)
-
- # setup storage API
- config_storage = YamlConfigStorage(command_config.config)
- cache_storage = CacheMiniDBStorage(command_config.cache)
- urls_storage = UrlsYaml(command_config.urls)
-
- # setup urlwatcher
- urlwatch = Urlwatch(command_config, config_storage, cache_storage, urls_storage)
- urlwatch_command = UrlwatchCommand(urlwatch)
-
- # run urlwatcher
- urlwatch_command.run()
+sys.path.insert(0, 'lib')
+from urlwatch.cli import main
+main()
1
0
Hello community,
here is the log from the commit of package snd for openSUSE:Factory checked in at 2020-05-29 21:23:42
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/snd (Old)
and /work/SRC/openSUSE:Factory/.snd.new.3606 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "snd"
Fri May 29 21:23:42 2020 rev:40 rq:809911 version:20.4
Changes:
--------
--- /work/SRC/openSUSE:Factory/snd/snd.changes 2020-04-21 13:06:05.276264291 +0200
+++ /work/SRC/openSUSE:Factory/.snd.new.3606/snd.changes 2020-05-29 21:37:38.598697422 +0200
@@ -1,0 +2,6 @@
+Wed May 27 13:05:50 UTC 2020 - Paolo Stivanin <info(a)paolostivanin.com>
+
+- Update to 20.4
+ * no changelog
+
+-------------------------------------------------------------------
Old:
----
snd-20.3.tar.gz
New:
----
snd-20.4.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ snd.spec ++++++
--- /var/tmp/diff_new_pack.ZAQLu0/_old 2020-05-29 21:37:39.122698982 +0200
+++ /var/tmp/diff_new_pack.ZAQLu0/_new 2020-05-29 21:37:39.126698994 +0200
@@ -23,7 +23,7 @@
%bcond_with jack
%endif
Name: snd
-Version: 20.3
+Version: 20.4
Release: 0
Summary: Sound File Editor
License: LGPL-2.1-or-later
++++++ snd-20.3.tar.gz -> snd-20.4.tar.gz ++++++
/work/SRC/openSUSE:Factory/snd/snd-20.3.tar.gz /work/SRC/openSUSE:Factory/.snd.new.3606/snd-20.4.tar.gz differ: char 5, line 1
1
0
Hello community,
here is the log from the commit of package uftpd for openSUSE:Factory checked in at 2020-05-29 21:23:44
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/uftpd (Old)
and /work/SRC/openSUSE:Factory/.uftpd.new.3606 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "uftpd"
Fri May 29 21:23:44 2020 rev:9 rq:809770 version:2.12
Changes:
--------
--- /work/SRC/openSUSE:Factory/uftpd/uftpd.changes 2020-01-05 15:22:49.657611262 +0100
+++ /work/SRC/openSUSE:Factory/.uftpd.new.3606/uftpd.changes 2020-05-29 21:37:39.294699494 +0200
@@ -1,0 +2,16 @@
+Mon May 25 17:27:46 UTC 2020 - Martin Hauke <mardnh(a)gmx.de>
+
+- Update to version 2.12
+ Changes
+ * Use common log message format and log level when user enters
+ an invalid path. This unfortunately affects changes introduced
+ in v2.11 to increase logging at default log level.
+ * Fixes
+ Issue #30: When entering an invalid directory with the FTP
+ command CWD, a NULL ptr was deref. in a DBG() message even
+ though the log level is set to a value lower than LOG_DEBUG.
+ This caused uftpd to crash and cause denial of service.
+ Depending on the init/inetd system used this could be
+ permanent.
+
+-------------------------------------------------------------------
Old:
----
uftpd-2.11.tar.gz
New:
----
uftpd-2.12.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ uftpd.spec ++++++
--- /var/tmp/diff_new_pack.eXcYMf/_old 2020-05-29 21:37:39.638700518 +0200
+++ /var/tmp/diff_new_pack.eXcYMf/_new 2020-05-29 21:37:39.642700530 +0200
@@ -1,7 +1,7 @@
#
# spec file for package uftpd
#
-# Copyright (c) 2020 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2020 SUSE LLC
# Copyright (c) 2018, Martin Hauke <mardnh(a)gmx.de>
#
# All modifications and additions to the file contributed by third parties
@@ -18,7 +18,7 @@
Name: uftpd
-Version: 2.11
+Version: 2.12
Release: 0
Summary: A combined TFTP/FTP server
License: ISC
++++++ uftpd-2.11.tar.gz -> uftpd-2.12.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/uftpd-2.11/.travis.yml new/uftpd-2.12/.travis.yml
--- old/uftpd-2.11/.travis.yml 2020-01-05 08:51:54.000000000 +0100
+++ new/uftpd-2.12/.travis.yml 2020-05-25 18:09:12.000000000 +0200
@@ -29,7 +29,7 @@
name: "troglobit/uftpd"
description: "uftpd -- the no nonsense (T)FTP server"
notification_email: troglobit(a)gmail.com
- build_command_prepend: "./autogen.sh && PKG_CONFIG_PATH=/tmp/lib/pkgconfig ./configure --disable-silent-rules --prefix=/tmp"
+ build_command_prepend: "./autogen.sh && PKG_CONFIG_PATH=/tmp/lib/pkgconfig ./configure --disable-silent-rules --prefix="
build_command: "make -j5 clean all"
branch_pattern: dev
@@ -43,10 +43,10 @@
script:
- ./autogen.sh
- - PKG_CONFIG_PATH=/tmp/lib/pkgconfig ./configure --disable-silent-rules --prefix=/tmp
+ - PKG_CONFIG_PATH=/tmp/lib/pkgconfig ./configure --disable-silent-rules --prefix=
- make clean
- make -j5
- - make install-strip
- - tree /tmp
- - ldd /tmp/sbin/uftpd
- - LD_LIBRARY_PATH=/tmp/lib /tmp/sbin/uftpd -h
+ - DESTDIR=~/tmp make install-strip
+ - tree ~/tmp
+ - ldd ~/tmp/sbin/uftpd
+ - LD_LIBRARY_PATH=/tmp/lib ~/tmp/sbin/uftpd -h
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/uftpd-2.11/ChangeLog.md new/uftpd-2.12/ChangeLog.md
--- old/uftpd-2.11/ChangeLog.md 2020-01-05 08:51:54.000000000 +0100
+++ new/uftpd-2.12/ChangeLog.md 2020-05-25 18:09:12.000000000 +0200
@@ -4,6 +4,22 @@
All notable changes to the project are documented in this file.
+[v2.12][] - 2020-05-25
+----------------------
+
+### Changes
+- Use common log message format and log level when user enters an
+ invalid path. This unfortunately affects changes introduced in
+ [v2.11][] to increase logging at default log level.
+
+### Fixes
+- Issue #30: When entering an invalid directory with the FTP command CWD,
+ a NULL ptr was deref. in a DBG() message even though the log level is
+ set to a value lower than `LOG_DEBUG`. This caused uftpd to crash
+ and cause denial of service. Depending on the init/inetd system used
+ this could be permanent.
+
+
[v2.11][] - 2020-01-05
----------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/uftpd-2.11/README.md new/uftpd-2.12/README.md
--- old/uftpd-2.11/README.md 2020-01-05 08:51:54.000000000 +0100
+++ new/uftpd-2.12/README.md 2020-05-25 18:09:12.000000000 +0200
@@ -104,6 +104,14 @@
Build & Install
---------------
+### Debian/Ubuntu
+
+ curl -sS https://deb.troglobit.com/pubkey.gpg | sudo apt-key add -
+ echo "deb [arch=amd64] https://deb.troglobit.com/debian stable main" | sudo tee /etc/apt/sources.list.d/troglobit.list
+ sudo apt-get update && sudo apt-get install uftpd
+
+### Building from Source
+
`uftpd` depends on two other projects to build from source, [libuEv][]
and [lite][]. See their respective README for details, there should be
no real surprises, both use the familiar configure, make, make install.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/uftpd-2.11/configure.ac new/uftpd-2.12/configure.ac
--- old/uftpd-2.11/configure.ac 2020-01-05 08:51:54.000000000 +0100
+++ new/uftpd-2.12/configure.ac 2020-05-25 18:09:12.000000000 +0200
@@ -1,4 +1,4 @@
-AC_INIT([uftpd], [2.11], [https://github.com/troglobit/uftpd/issues],,
+AC_INIT([uftpd], [2.12], [https://github.com/troglobit/uftpd/issues],,
[https://troglobit.com/projects/uftpd/])
AM_INIT_AUTOMAKE([1.11 foreign no-dist-gzip dist-xz])
AM_SILENT_RULES([yes])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/uftpd-2.11/debian/changelog new/uftpd-2.12/debian/changelog
--- old/uftpd-2.11/debian/changelog 2020-01-05 08:51:54.000000000 +0100
+++ new/uftpd-2.12/debian/changelog 2020-05-25 18:09:12.000000000 +0200
@@ -1,3 +1,10 @@
+uftpd (2.12) stable; urgency=medium
+
+ * Fix issue #30: uftpd crashes when an invalid CWD is entered
+ * Use common log message format and log level for all path refs.
+
+ -- Joachim Nilsson <troglobit(a)gmail.com> Mon, 25 May 2020 18:08:32 +0200
+
uftpd (2.11) unstable; urgency=medium
* Increased logging at default log level. Now all relevant interaction
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/uftpd-2.11/docs/SECURITY.md new/uftpd-2.12/docs/SECURITY.md
--- old/uftpd-2.11/docs/SECURITY.md 1970-01-01 01:00:00.000000000 +0100
+++ new/uftpd-2.12/docs/SECURITY.md 2020-05-25 18:09:12.000000000 +0200
@@ -0,0 +1,12 @@
+# Security Policy
+
+## Supported Versions
+
+uftpd is a small project, as such we have no possibility to support older versions.
+The only supported version is the latest released on GitHub:
+
+<https://github.com/troglobit/uftpd/releases>
+
+## Reporting a Vulnerability
+
+Contact the project's main author and owner to report and discuss vulnerabilities.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/uftpd-2.11/src/ftpcmd.c new/uftpd-2.12/src/ftpcmd.c
--- old/uftpd-2.11/src/ftpcmd.c 2020-01-05 08:51:54.000000000 +0100
+++ new/uftpd-2.12/src/ftpcmd.c 2020-05-25 18:09:12.000000000 +0200
@@ -404,19 +404,13 @@
*/
dir = compose_abspath(ctrl, path);
if (!dir || stat(dir, &st) || !S_ISDIR(st.st_mode)) {
- DBG("chrooted:%d, ctrl->cwd: %s, home:%s, dir:%s, len:%zd, dirlen:%zd",
- chrooted, ctrl->cwd, home, dir, strlen(home), strlen(dir));
+ INFO("%s: CWD: invalid path to %s: %m", ctrl->clientaddr, path);
send_msg(ctrl->sd, "550 No such directory.\r\n");
return;
}
- if (!chrooted) {
- size_t len = strlen(home);
-
- DBG("non-chrooted CWD, home:%s, dir:%s, len:%zd, dirlen:%zd",
- home, dir, len, strlen(dir));
- dir += len;
- }
+ if (!chrooted)
+ dir += strlen(home);
snprintf(ctrl->cwd, sizeof(ctrl->cwd), "%s", dir);
if (ctrl->cwd[0] == 0)
@@ -711,7 +705,7 @@
path = compose_path(ctrl, cwd);
if (!path) {
fail:
- LOGIT(LOG_INFO, errno, "Failed reading status for %s", path ? path : name);
+ INFO("%s: LIST: Failed reading status for %s: %m", ctrl->clientaddr, path ? path : name);
continue;
}
@@ -735,7 +729,7 @@
ERR(errno, "Failed sending file %s to client", ctrl->file);
while (ctrl->i < ctrl->d_num) {
- struct dirent *entry = ctrl->d[ctrl->i++];
+ entry = ctrl->d[ctrl->i++];
free(entry);
}
do_abort(ctrl);
@@ -757,6 +751,18 @@
send_msg(ctrl->sd, "226 Transfer complete.\r\n");
}
+static const char *mode2op(int mode)
+{
+ switch (mode) {
+ case 0: return "LIST";
+ case 1: return "NLST";
+ case 2: return "MLST";
+ case 3: return "MLSD";
+ }
+
+ return "LST?";
+}
+
static void list(ctrl_t *ctrl, char *arg, int mode)
{
char *path;
@@ -797,6 +803,7 @@
else
path = compose_path(ctrl, arg);
if (!path) {
+ INFO("%s: %s: invalid path to %s: %m", ctrl->clientaddr, mode2op(mode), arg);
send_msg(ctrl->sd, "550 No such file or directory.\r\n");
return;
}
@@ -1102,7 +1109,7 @@
path = compose_abspath(ctrl, file);
if (!path || stat(path, &st)) {
- LOG("%s: Failed opening '%s'. No such file or directory", ctrl->clientaddr, path);
+ INFO("%s: RETR: invalid path to %s: %m", ctrl->clientaddr, file);
send_msg(ctrl->sd, "550 No such file or directory.\r\n");
return;
}
@@ -1163,6 +1170,7 @@
path = compose_abspath(ctrl, file);
if (!path || stat(path, &st) || !S_ISREG(st.st_mode)) {
missing:
+ INFO("MDTM: invalid path to %s: %m", file);
send_msg(ctrl->sd, "550 Not a regular file.\r\n");
return;
}
@@ -1256,7 +1264,7 @@
path = compose_abspath(ctrl, file);
if (!path) {
- INFO("Invalid path for %s: %m", file);
+ INFO("STOR: invalid path to %s: %m", file);
goto fail;
}
@@ -1297,7 +1305,7 @@
path = compose_abspath(ctrl, file);
if (!path) {
- ERR(errno, "Cannot find %s", file);
+ INFO("DELE: invalid path to %s: %m", file);
goto fail;
}
@@ -1323,7 +1331,7 @@
path = compose_abspath(ctrl, arg);
if (!path) {
- INFO("Invalid path for %s: %m", arg);
+ INFO("MKD: invalid path to %s: %m", arg);
goto fail;
}
1
0
Hello community,
here is the log from the commit of package mypaint for openSUSE:Factory checked in at 2020-05-29 21:23:36
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/mypaint (Old)
and /work/SRC/openSUSE:Factory/.mypaint.new.3606 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "mypaint"
Fri May 29 21:23:36 2020 rev:2 rq:809936 version:2.0.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/mypaint/mypaint.changes 2020-02-29 21:24:10.954477088 +0100
+++ /work/SRC/openSUSE:Factory/.mypaint.new.3606/mypaint.changes 2020-05-29 21:37:34.578685456 +0200
@@ -1,0 +2,8 @@
+Wed May 27 11:19:30 UTC 2020 - Atri Bhattacharya <badshah400(a)gmail.com>
+
+- Fix run time dependencies:
+ * Requires -- rather than Recommends -- mypaint-brushes, doesn't
+ launch when the app is unable to find brushes.
+ * Requires python3-pycairo.
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ mypaint.spec ++++++
--- /var/tmp/diff_new_pack.rI4nEA/_old 2020-05-29 21:37:35.170687218 +0200
+++ /var/tmp/diff_new_pack.rI4nEA/_new 2020-05-29 21:37:35.174687230 +0200
@@ -1,7 +1,7 @@
#
# spec file for package mypaint
#
-# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2020 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -15,6 +15,7 @@
# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
+
%define skip_python2 1
Name: mypaint
Version: 2.0.0
@@ -30,15 +31,15 @@
BuildRequires: fdupes
BuildRequires: gcc-c++
BuildRequires: hicolor-icon-theme
+BuildRequires: librsvg
BuildRequires: pkgconfig
+BuildRequires: python-rpm-macros
BuildRequires: python3-cairo-devel
BuildRequires: python3-devel
BuildRequires: python3-gobject-devel
BuildRequires: python3-numpy >= 1.5
BuildRequires: python3-numpy-devel
BuildRequires: python3-setuptools
-BuildRequires: python-rpm-macros
-BuildRequires: librsvg
BuildRequires: swig
BuildRequires: update-desktop-files
BuildRequires: pkgconfig(glib-2.0)
@@ -49,10 +50,11 @@
BuildRequires: pkgconfig(libpng)
BuildRequires: pkgconfig(mypaint-brushes-2.0) >= 2.0.2
BuildRequires: pkgconfig(pygobject-3.0)
-Requires: python3-numpy >= 1.7
+Requires: mypaint-brushes >= 2.0.2
Requires: python3-gobject-Gdk
+Requires: python3-numpy >= 1.7
+Requires: python3-pycairo
Recommends: %{name}-lang = %{version}
-Recommends: mypaint-brushes >= 2.0.2
%lang_package
%description
1
0
Hello community,
here is the log from the commit of package ansilove for openSUSE:Factory checked in at 2020-05-29 21:23:25
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ansilove (Old)
and /work/SRC/openSUSE:Factory/.ansilove.new.3606 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ansilove"
Fri May 29 21:23:25 2020 rev:5 rq:809769 version:4.1.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/ansilove/ansilove.changes 2020-01-21 21:04:03.932952443 +0100
+++ /work/SRC/openSUSE:Factory/.ansilove.new.3606/ansilove.changes 2020-05-29 21:37:32.762680051 +0200
@@ -1,0 +2,19 @@
+Mon May 25 17:31:37 UTC 2020 - Martin Hauke <mardnh(a)gmx.de>
+
+- Update to version 4.1.1
+ * Various documentation tweaks and improvements
+ * Define timespecsub macro in compat.h if it doesn't exists
+ * Use CLOCK_REALTIME if CLOCK_MONOTONIC is not available
+ * Display processing time on exit.
+ * Fix includes and add forward declarations in various source
+ files
+
+-------------------------------------------------------------------
+Mon Feb 17 19:33:12 UTC 2020 - Martin Hauke <mardnh(a)gmx.de>
+
+- Update to version 4.1.0
+ * Add a new '-t' flag (type), allowing to specify input file type
+ and override file type detection
+ * Various documentation tweaks and improvements
+
+-------------------------------------------------------------------
Old:
----
ansilove-4.0.7.tar.gz
New:
----
ansilove-4.1.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ansilove.spec ++++++
--- /var/tmp/diff_new_pack.MLiMTR/_old 2020-05-29 21:37:33.158681229 +0200
+++ /var/tmp/diff_new_pack.MLiMTR/_new 2020-05-29 21:37:33.162681241 +0200
@@ -1,7 +1,7 @@
#
# spec file for package ansilove
#
-# Copyright (c) 2020 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2020 SUSE LLC
# Copyright (c) 2019, Martin Hauke <mardnh(a)gmx.de>
#
# All modifications and additions to the file contributed by third parties
@@ -18,7 +18,7 @@
Name: ansilove
-Version: 4.0.7
+Version: 4.1.1
Release: 0
Summary: ANSI and ASCII art to PNG converter
License: BSD-2-Clause
++++++ ansilove-4.0.7.tar.gz -> ansilove-4.1.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansilove-4.0.7/.travis.yml new/ansilove-4.1.1/.travis.yml
--- old/ansilove-4.0.7/.travis.yml 2020-01-18 23:57:19.000000000 +0100
+++ new/ansilove-4.1.1/.travis.yml 2020-05-25 18:51:05.000000000 +0200
@@ -35,7 +35,7 @@
coverity_scan:
project:
name: "ansilove/ansilove"
- version: 4.0.7
+ version: 4.1.1
description: "ANSi / ASCII art to PNG converter in C"
notification_email: fred(a)statdns.com
build_command_prepend: cmake .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansilove-4.0.7/CMakeLists.txt new/ansilove-4.1.1/CMakeLists.txt
--- old/ansilove-4.0.7/CMakeLists.txt 2020-01-18 23:57:19.000000000 +0100
+++ new/ansilove-4.1.1/CMakeLists.txt 2020-05-25 18:51:05.000000000 +0200
@@ -34,7 +34,7 @@
find_library(ANSILOVE_LIBRARIES NAMES ansilove REQUIRED)
include_directories(${ANSILOVE_INCLUDE_DIRS})
-set(SRC src/ansilove.c src/strtolower.c src/sauce.c)
+set(SRC src/ansilove.c src/types.c src/strtolower.c src/sauce.c)
if(NOT HAVE_PLEDGE)
set (SRC ${SRC} compat/pledge.c)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansilove-4.0.7/ChangeLog new/ansilove-4.1.1/ChangeLog
--- old/ansilove-4.0.7/ChangeLog 2020-01-18 23:57:19.000000000 +0100
+++ new/ansilove-4.1.1/ChangeLog 2020-05-25 18:51:05.000000000 +0200
@@ -1,3 +1,21 @@
+AnsiLove/C 4.1.1 (2020-05-25)
+
+- Various documentation tweaks and improvements
+- Define timespecsub macro in compat.h if it doesn't exists
+- Use CLOCK_REALTIME if CLOCK_MONOTONIC is not available
+- Display processing time on exit.
+- Fix includes and add forward declarations in various source files
+
+
+
+AnsiLove/C 4.1.0 (2020-02-17)
+
+- Add a new '-t' flag (type), allowing to specify input file type and
+ override file type detection
+- Various documentation tweaks and improvements
+
+
+
AnsiLove/C 4.0.7 (2020-01-18)
- Use OpenBSD style(9) for function prototypes and declarations
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansilove-4.0.7/FILE_ID.DIZ new/ansilove-4.1.1/FILE_ID.DIZ
--- old/ansilove-4.0.7/FILE_ID.DIZ 2020-01-18 23:57:19.000000000 +0100
+++ new/ansilove-4.1.1/FILE_ID.DIZ 2020-05-25 18:51:05.000000000 +0200
@@ -17,7 +17,7 @@
- -----------//______|----------------- -
: :
| |
- | Ansilove/C 4.0.7 |
+ | Ansilove/C 4.1.1 |
| |
| ANSi=>PNG converter & library |
| |
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansilove-4.0.7/README.md new/ansilove-4.1.1/README.md
--- old/ansilove-4.0.7/README.md 2020-01-18 23:57:19.000000000 +0100
+++ new/ansilove-4.1.1/README.md 2020-05-25 18:51:05.000000000 +0200
@@ -20,10 +20,17 @@
[![Build Status][1]][2]
+AnsiLove is an ANSI and ASCII art to PNG converter, allowing to convert
+ANSI and artscene-related file formats into PNG images, supporting ANSI
+(.ANS), PCBoard (.PCB), Binary (.BIN), Artworx (.ADF), iCE Draw (.IDF),
+Tundra (.TND) and XBin (.XB) formats.
+
+It creates size optimized 4-bit PNG files and supports SAUCE (Standard
+Architecture for Universal Comment Extentions), 80x25 and 80x50 PC fonts
+(including all the 14 MS-DOS charsets), Amiga fonts, and iCE colors.
+
This is a complete rewrite of [AnsiLove/PHP][3] in the C programming
-language. It converts ANSi and artscene related file formats into
-PNG images. The project is considered as stable, current version
-is `4.0.7`.
+language.
# Specs
@@ -56,10 +63,14 @@
- FreeBSD: `pkg install cmake`
- Mac OS X: `brew install cmake`
- Alpine Linux: `apk add cmake gcc make musl-dev`
-- Debian / Ubuntu / Mint: `apt-get install cmake`
+- Debian / Ubuntu / Mint: `apt-get install build-essential cmake`
+- Fedora: `yum install cmake gcc make`
- Solus: `eopkg install -c system.devel`
-For now, `libansilove` has to be installed manually.
+Binary packages for `libansilove` are available on OpenBSD, NetBSD,
+FreeBSD, Debian, Ubuntu, and Solus.
+
+On other systems, `libansilove` has to be installed manually.
# Compiling
@@ -68,29 +79,17 @@
cmake ..
make
-# Installation
-
-AnsiLove/C packages are available for:
-
-### OpenBSD
-
- pkg_add ansilove
-
-### Pkgsrc (NetBSD, SmartOS, Mac OS X, etc.)
-
- pkgin install ansilove
-
-### FreeBSD
-
- pkg install ansilove
+# Packages
-### Debian / Ubuntu
+Packages are available for the following operating systems:
- apt install ansilove
-
-### Solus
-
- eopkg install ansilove
+- [OpenBSD][5]
+- [NetBSD][6]
+- [FreeBSD][7]
+- [Debian][8]
+- [Ubuntu][9]
+- [openSUSE][10]
+- [Solus][11]
# Features
@@ -101,21 +100,21 @@
- .BIN - Binary format (raw memory copy of text mode video memory)
- .ADF - Artworx format, supporting custom character sets and palettes
- .IDF - iCE Draw format, supporting custom character sets and palettes
-- .TND - TundraDraw format, supporting 24-bit color mode
-- .XB - The eXtended Binary XBin format, supporting custom character sets
+- .TND - [TundraDraw][12] format, supporting 24-bit color mode
+- .XB - The eXtended Binary [XBin][13] format, supporting custom character sets
and palettes
Files with custom suffix default to the ANSi renderer (e.g. ICE or CIA).
AnsiLove/C is capabable of processing:
-- [SAUCE][5] records
+- [SAUCE][14] records
- DOS and Amiga fonts (embedded binary dump)
- iCE colors
Even more:
-- Output files are highly optimized 4-bit PNGs.
+- Small output file size (4-bit PNG).
- Optionally generates proper Retina @2x (and up to @8x) PNG.
- You can use custom options for adjusting output results.
- Built-in support for rendering Amiga ASCII.
@@ -126,7 +125,7 @@
```
ansilove [-dhiqrsv] [-b bits] [-c columns] [-f font] [-m mode] [-o file]
- [-R factor] file
+ [-R factor] [-t type] file
```
## Options
@@ -163,6 +162,8 @@
-R factor Create Retina output file with custom scale factor.
+ -t type Specify input file type.
+
-s Show SAUCE record without generating output.
-v Show version information.
@@ -184,8 +185,8 @@
- `80x50` 80x50 mode (Code page 437)
- `cp737` Greek (Code page 737)
- `cp775` Baltic (Code page 775)
-- `cp850` Latin1 (Code page 850)
-- `cp852` Latin2 (Code page 852)
+- `cp850` Latin-1 (Code page 850)
+- `cp852` Latin-2 (Code page 852)
- `cp855` Cyrillic (Code page 855)
- `cp857` Turkish (Code page 857)
- `cp860` Portuguese (Code page 860)
@@ -251,8 +252,8 @@
## Columns
-`columns` is only relevant for .ANS, .BIN, and .TND files, and is
-optional. In most cases conversion will work fine if you don't set
+`columns` is only relevant for .ANS, .BIN, .PCB, and .TND files, and
+is optional. In most cases conversion will work fine if you don't set
this flag, the default value is `160` for .BIN files and `80`
otherwise.
@@ -261,25 +262,36 @@
It's fine to use AnsiLove/C as SAUCE reader without generating any
output, just set option `-s` for this purpose.
-# Who pulls the strings
-
-AnsiLove/C is developed by Stefan Vogt ([@ByteProject][6]), Brian Cassidy
-([@bricas][7]) and Frederic Cambus ([@fcambus][8]).
-
# License
AnsiLove/C is released under the BSD 2-Clause License. See the
`LICENSE` file for details.
+# Authors
+
+AnsiLove/C is developed by Stefan Vogt ([@ByteProject][15]), Brian Cassidy
+([@bricas][16]) and Frederic Cambus ([@fcambus][17]).
+
# Resources
+Project homepage: https://www.ansilove.org
+
GitHub: https://github.com/ansilove/ansilove
[1]: https://api.travis-ci.org/ansilove/ansilove.png?branch=master
[2]: https://travis-ci.org/ansilove/ansilove
[3]: https://www.ansilove.org
[4]: https://github.com/ansilove/libansilove
-[5]: http://www.acid.org/info/sauce/sauce.htm
-[6]: https://github.com/ByteProject
-[7]: https://github.com/bricas
-[8]: https://github.com/fcambus
+[5]: https://cvsweb.openbsd.org/cgi-bin/cvsweb/ports/graphics/ansilove
+[6]: http://pkgsrc.se/graphics/ansilove
+[7]: https://www.freshports.org/graphics/ansilove/
+[8]: https://packages.debian.org/search?keywords=ansilove
+[9]: https://packages.ubuntu.com/search?keywords=ansilove
+[10]: https://software.opensuse.org/package/ansilove
+[11]: https://dev.getsol.us/source/ansilove/
+[12]: https://sourceforge.net/projects/tundradraw/
+[13]: https://github.com/radman1/xbin
+[14]: https://github.com/radman1/sauce
+[15]: https://github.com/ByteProject
+[16]: https://github.com/bricas
+[17]: https://github.com/fcambus
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansilove-4.0.7/TODO new/ansilove-4.1.1/TODO
--- old/ansilove-4.0.7/TODO 2020-01-18 23:57:19.000000000 +0100
+++ new/ansilove-4.1.1/TODO 1970-01-01 01:00:00.000000000 +0100
@@ -1,3 +0,0 @@
-- Import documentation from Ansilove/PHP
-- Display mode information in summary, and DOS aspect if enabled
-- Wrap lines longer than 80 columns
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansilove-4.0.7/ansilove.1 new/ansilove-4.1.1/ansilove.1
--- old/ansilove-4.0.7/ansilove.1 2020-01-18 23:57:19.000000000 +0100
+++ new/ansilove-4.1.1/ansilove.1 2020-05-25 18:51:05.000000000 +0200
@@ -24,7 +24,7 @@
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
.\" POSSIBILITY OF SUCH DAMAGE.
.\"
-.Dd $Mdocdate: January 17 2020 $
+.Dd $Mdocdate: February 17 2020 $
.Dt ANSILOVE 1
.Os
.Sh NAME
@@ -39,6 +39,7 @@
.Op Fl m Ar mode
.Op Fl o Ar file
.Op Fl R Ar factor
+.Op Fl t Ar type
.Ar file
.Sh DESCRIPTION
.Nm
@@ -124,7 +125,9 @@
.It Fl i
Enable iCE colors.
.It Fl m Ar mode
-Set rendering mode for ANS files. Valid options are:
+Set rendering mode for ANS files.
+.Pp
+Valid options are:
.Bl -tag -width Ds
.It Ic ced
Black on gray, with 78 columns.
@@ -141,6 +144,26 @@
Create Retina @2x output file.
.It Fl R Ar factor
Create Retina output file with custom scale factor.
+.It Fl t Ar type
+Specify input file type.
+.Pp
+Valid types are:
+.Bl -tag -width Ds
+.It Ic ans
+ANSi (ANSI escape sequences: ANSI X3.64 standard)
+.It Ic adf
+Artworx format, supporting custom character sets and palettes
+.It Ic bin
+Binary format (raw memory copy of text mode video memory)
+.It Ic idf
+iCE Draw format, supporting custom character sets and palettes
+.It Ic pcb
+PCBoard Bulletin Board System (BBS) own file format
+.It Ic tnd
+TundraDraw format, supporting 24-bit color mode
+.It Ic xb
+XBin format, supporting custom character sets and palettes
+.El
.It Fl s
Show SAUCE record without generating output.
.It Fl v
@@ -174,7 +197,6 @@
iCE colors, and using DOS aspect ratio:
.Pp
.Dl $ ansilove -f 80x50 -b 9 -d -i file.ans
-.Pp
.Sh AUTHORS
.An -nosplit
.Nm
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansilove-4.0.7/compat/compat.h new/ansilove-4.1.1/compat/compat.h
--- old/ansilove-4.0.7/compat/compat.h 2020-01-18 23:57:19.000000000 +0100
+++ new/ansilove-4.1.1/compat/compat.h 2020-05-25 18:51:05.000000000 +0200
@@ -9,4 +9,21 @@
#include "strtonum.h"
#endif
+/* Use CLOCK_REALTIME if CLOCK_MONOTONIC is not available */
+#ifndef CLOCK_MONOTONIC
+#define CLOCK_MONOTONIC CLOCK_REALTIME
+#endif
+
+#ifndef timespecsub
+#define timespecsub(tsp, usp, vsp) \
+ do { \
+ (vsp)->tv_sec = (tsp)->tv_sec - (usp)->tv_sec; \
+ (vsp)->tv_nsec = (tsp)->tv_nsec - (usp)->tv_nsec; \
+ if ((vsp)->tv_nsec < 0) { \
+ (vsp)->tv_sec--; \
+ (vsp)->tv_nsec += 1000000000L; \
+ } \
+ } while (0)
+#endif
+
#endif /* COMPAT_H */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansilove-4.0.7/src/ansilove.c new/ansilove-4.1.1/src/ansilove.c
--- old/ansilove-4.0.7/src/ansilove.c 2020-01-18 23:57:19.000000000 +0100
+++ new/ansilove-4.1.1/src/ansilove.c 2020-05-25 18:51:05.000000000 +0200
@@ -1,6 +1,6 @@
/*
* ansilove.c
- * Ansilove 4.0.7
+ * Ansilove 4.1.1
* https://www.ansilove.org
*
* Copyright (c) 2011-2020 Stefan Vogt, Brian Cassidy, and Frederic Cambus
@@ -11,6 +11,7 @@
*/
#define _GNU_SOURCE
+#include <sys/time.h>
#include <ansilove.h>
#include <err.h>
#include <getopt.h>
@@ -19,6 +20,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <time.h>
#ifdef HAVE_SECCOMP
#include <sys/prctl.h>
@@ -34,6 +36,7 @@
#include "fonts.h"
#include "sauce.h"
#include "strtolower.h"
+#include "types.h"
/* prototypes */
static void synopsis(void);
@@ -45,7 +48,7 @@
fprintf(stdout, "SYNOPSIS\n"
" ansilove [-dhiqrsv] [-b bits] [-c columns] [-f font]"
" [-m mode] [-o file]\n"
- " [-R factor] file\n");
+ " [-R factor] [-t type] file\n");
}
static void
@@ -65,17 +68,15 @@
bool justDisplaySAUCE = false;
bool fileHasSAUCE = false;
- /* analyze options and do what has to be done */
- bool fileIsBinary = false;
- bool fileIsANSi = false;
- bool fileIsPCBoard = false;
- bool fileIsTundra = false;
-
int getoptFlag;
char *input = NULL, *output = NULL;
char *fileName = NULL;
char *font = NULL;
+ char *type = NULL;
+ int filetype = 0;
+
+ struct timespec begin, end, elapsed;
static struct ansilove_ctx ctx;
static struct ansilove_options options;
@@ -100,10 +101,9 @@
if (ansilove_init(&ctx, &options) == -1)
errx(EXIT_FAILURE, "%s", ansilove_error(&ctx));
- while ((getoptFlag = getopt(argc, argv, "b:c:df:him:o:qrR:sv")) != -1) {
+ while ((getoptFlag = getopt(argc, argv, "b:c:df:him:o:qrR:st:v")) != -1) {
switch (getoptFlag) {
case 'b':
- /* convert numeric command line flags to integer values */
options.bits = strtonum(optarg, 8, 9, &errstr);
if (errstr)
@@ -111,7 +111,6 @@
break;
case 'c':
- /* convert numeric command line flags to integer values */
options.columns = strtonum(optarg, 1, 4096, &errstr);
if (errstr)
@@ -155,7 +154,6 @@
options.scale_factor = 2;
break;
case 'R':
- /* convert numeric command line flags to integer values */
options.scale_factor = strtonum(optarg, 2, 8, &errstr);
if (errstr)
@@ -165,6 +163,9 @@
case 's':
justDisplaySAUCE = true;
break;
+ case 't':
+ type = strtolower(optarg);
+ break;
case 'v':
version();
return EXIT_SUCCESS;
@@ -185,6 +186,9 @@
if (!messages)
messages = stdout;
+ /* Starting timer */
+ clock_gettime(CLOCK_MONOTONIC, &begin);
+
/* let's check the file for a valid SAUCE record */
struct sauce *record = sauceReadFileName(input);
@@ -231,27 +235,37 @@
if (fileHasSAUCE && (record->flags & 1))
options.icecolors = true;
- int (*loader)(struct ansilove_ctx *, struct ansilove_options *);
+ int (*loader)(struct ansilove_ctx *, struct ansilove_options *) = NULL;
- /* create the output PNG data by invoking the appropriate function */
- if (!strcmp(fext, "pcb")) {
- loader = ansilove_pcboard;
- fileIsPCBoard = true;
- } else if (!strcmp(fext, "bin")) {
- loader = ansilove_binary;
- fileIsBinary = true;
- } else if (!strcmp(fext, "adf")) {
- loader = ansilove_artworx;
- } else if (!strcmp(fext, "idf")) {
- loader = ansilove_icedraw;
- } else if (!strcmp(fext, "tnd")) {
- loader = ansilove_tundra;
- fileIsTundra = true;
- } else if (!strcmp(fext, "xb")) {
- loader = ansilove_xbin;
- } else {
+ /* if type was specified, attempt to find a loader */
+ if (type) {
+ for (size_t loop = 0; loop < TYPES; loop++) {
+ if (!strcmp(types[loop], type)) {
+ loader = loaders[loop];
+ filetype = filetypes[loop];
+ break;
+ }
+ }
+
+ if (!loader)
+ errx(EXIT_FAILURE, "Unknown file type.");
+ }
+
+ /* use file extension to find a suitable loader */
+ if (!loader) {
+ for (size_t loop = 0; loop < TYPES; loop++) {
+ if (!strcmp(types[loop], fext)) {
+ loader = loaders[loop];
+ filetype = filetypes[loop];
+ break;
+ }
+ }
+ }
+
+ /* default to ANSI if file extension is unknown */
+ if (!loader) {
loader = ansilove_ansi;
- fileIsANSi = true;
+ filetype = ANSILOVE_FILETYPE_ANS;
}
if (loader(&ctx, &options) == -1)
@@ -262,18 +276,19 @@
errx(EXIT_FAILURE, "%s", ansilove_error(&ctx));
/* gather information and report to the command line */
- if (fileIsANSi || fileIsBinary ||
- fileIsPCBoard || fileIsTundra) {
+ switch(filetype) {
+ case ANSILOVE_FILETYPE_ANS:
+ case ANSILOVE_FILETYPE_BIN:
+ if (options.icecolors)
+ fprintf(messages, "iCE Colors: enabled\n");
+
+ /* FALLTHROUGH */
+ case ANSILOVE_FILETYPE_PCB:
+ case ANSILOVE_FILETYPE_TND:
fprintf(messages, "Font: %s\n", font ? font : "80x25");
-
fprintf(messages, "Bits: %d\n", options.bits);
- }
-
- if (options.icecolors && (fileIsANSi || fileIsBinary))
- fprintf(messages, "iCE Colors: enabled\n");
-
- if (fileIsANSi || fileIsBinary || fileIsTundra)
fprintf(messages, "Columns: %d\n", options.columns);
+ }
if (options.scale_factor)
fprintf(messages, "Scale factor: %d\n", options.scale_factor);
@@ -293,30 +308,38 @@
fprintf(messages, "Date: %s\n", record->date);
fprintf(messages, "Datatype: %d\n", record->dataType);
fprintf(messages, "Filetype: %d\n", record->fileType);
- if (record->flags) {
+
+ if (record->flags)
fprintf(messages, "Flags: %d\n", record->flags);
- }
- if (record->tinfo1) {
+
+ if (record->tinfo1)
fprintf(messages, "Tinfo1: %d\n", record->tinfo1);
- }
- if (record->tinfo2) {
+
+ if (record->tinfo2)
fprintf(messages, "Tinfo2: %d\n", record->tinfo2);
- }
- if (record->tinfo3) {
+
+ if (record->tinfo3)
fprintf(messages, "Tinfo3: %d\n", record->tinfo3);
- }
- if (record->tinfo4) {
+
+ if (record->tinfo4)
fprintf(messages, "Tinfo4: %d\n", record->tinfo4);
- }
+
fprintf(messages, "Tinfos: %s\n", record->tinfos);
if (record->comments > 0) {
fprintf(messages, "Comments: ");
- for (int32_t i = 0; i < record->comments; i++) {
+ for (int32_t i = 0; i < record->comments; i++)
fprintf(messages, "%s\n", record->comment_lines[i]);
- }
}
}
+ /* Stopping timer */
+ clock_gettime(CLOCK_MONOTONIC, &end);
+
+ timespecsub(&end, &begin, &elapsed);
+
+ fprintf(messages, "\nProcessed in %f seconds.\n",
+ elapsed.tv_sec + elapsed.tv_nsec / 1E9);
+
ansilove_clean(&ctx);
free(record->comment_lines);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansilove-4.0.7/src/config.h new/ansilove-4.1.1/src/config.h
--- old/ansilove-4.0.7/src/config.h 2020-01-18 23:57:19.000000000 +0100
+++ new/ansilove-4.1.1/src/config.h 2020-05-25 18:51:05.000000000 +0200
@@ -1,6 +1,6 @@
/*
* config.h
- * Ansilove 4.0.7
+ * Ansilove 4.1.1
* https://www.ansilove.org
*
* Copyright (c) 2011-2020 Stefan Vogt, Brian Cassidy, and Frederic Cambus
@@ -16,6 +16,11 @@
#include <stdint.h>
/* configuration defines */
-#define VERSION "4.0.7"
+#define VERSION "4.1.1"
+
+enum {
+ FONTS = 38,
+ TYPES = 7
+};
#endif /* CONFIG_H */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansilove-4.0.7/src/fonts.h new/ansilove-4.1.1/src/fonts.h
--- old/ansilove-4.0.7/src/fonts.h 2020-01-18 23:57:19.000000000 +0100
+++ new/ansilove-4.1.1/src/fonts.h 2020-05-25 18:51:05.000000000 +0200
@@ -1,6 +1,6 @@
/*
* fonts.h
- * Ansilove 4.0.7
+ * Ansilove 4.1.1
* https://www.ansilove.org
*
* Copyright (c) 2011-2020 Stefan Vogt, Brian Cassidy, and Frederic Cambus
@@ -13,8 +13,6 @@
#ifndef FONTS_H
#define FONTS_H
-#define FONTS 38
-
char *fonts[] = {
"cp737", /* Greek */
"cp775", /* Baltic */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansilove-4.0.7/src/sauce.c new/ansilove-4.1.1/src/sauce.c
--- old/ansilove-4.0.7/src/sauce.c 2020-01-18 23:57:19.000000000 +0100
+++ new/ansilove-4.1.1/src/sauce.c 2020-05-25 18:51:05.000000000 +0200
@@ -1,6 +1,6 @@
/*
* sauce.c
- * Ansilove 4.0.7
+ * Ansilove 4.1.1
* https://www.ansilove.org
*
* Copyright (c) 2011-2020 Stefan Vogt, Brian Cassidy, and Frederic Cambus
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansilove-4.0.7/src/sauce.h new/ansilove-4.1.1/src/sauce.h
--- old/ansilove-4.0.7/src/sauce.h 2020-01-18 23:57:19.000000000 +0100
+++ new/ansilove-4.1.1/src/sauce.h 2020-05-25 18:51:05.000000000 +0200
@@ -1,6 +1,6 @@
/*
* sauce.h
- * Ansilove 4.0.7
+ * Ansilove 4.1.1
* https://www.ansilove.org
*
* Copyright (c) 2011-2020 Stefan Vogt, Brian Cassidy, and Frederic Cambus
@@ -13,7 +13,7 @@
#ifndef SAUCE_H
#define SAUCE_H
-#include <sys/types.h>
+#include <stdint.h>
#include <stdio.h>
/* sauce records */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansilove-4.0.7/src/seccomp.h new/ansilove-4.1.1/src/seccomp.h
--- old/ansilove-4.0.7/src/seccomp.h 2020-01-18 23:57:19.000000000 +0100
+++ new/ansilove-4.1.1/src/seccomp.h 2020-05-25 18:51:05.000000000 +0200
@@ -1,6 +1,6 @@
/*
* seccomp.h
- * Ansilove 4.0.7
+ * Ansilove 4.1.1
* https://www.ansilove.org
*
* Copyright (c) 2019-2020, Frederic Cambus
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansilove-4.0.7/src/strtolower.c new/ansilove-4.1.1/src/strtolower.c
--- old/ansilove-4.0.7/src/strtolower.c 2020-01-18 23:57:19.000000000 +0100
+++ new/ansilove-4.1.1/src/strtolower.c 2020-05-25 18:51:05.000000000 +0200
@@ -1,6 +1,6 @@
/*
* strtolower.c
- * Ansilove 4.0.7
+ * Ansilove 4.1.1
* https://www.ansilove.org
*
* Copyright (c) 2011-2020 Stefan Vogt, Brian Cassidy, and Frederic Cambus
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansilove-4.0.7/src/strtolower.h new/ansilove-4.1.1/src/strtolower.h
--- old/ansilove-4.0.7/src/strtolower.h 2020-01-18 23:57:19.000000000 +0100
+++ new/ansilove-4.1.1/src/strtolower.h 2020-05-25 18:51:05.000000000 +0200
@@ -1,6 +1,6 @@
/*
* strtolower.h
- * Ansilove 4.0.7
+ * Ansilove 4.1.1
* https://www.ansilove.org
*
* Copyright (c) 2011-2020 Stefan Vogt, Brian Cassidy, and Frederic Cambus
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansilove-4.0.7/src/types.c new/ansilove-4.1.1/src/types.c
--- old/ansilove-4.0.7/src/types.c 1970-01-01 01:00:00.000000000 +0100
+++ new/ansilove-4.1.1/src/types.c 2020-05-25 18:51:05.000000000 +0200
@@ -0,0 +1,44 @@
+/*
+ * types.c
+ * Ansilove 4.1.1
+ * https://www.ansilove.org
+ *
+ * Copyright (c) 2011-2020 Stefan Vogt, Brian Cassidy, and Frederic Cambus
+ * All rights reserved.
+ *
+ * Ansilove is licensed under the BSD 2-Clause License.
+ * See LICENSE file for details.
+ */
+
+#include "ansilove.h"
+#include "types.h"
+
+char *types[] = {
+ "ans",
+ "adf",
+ "bin",
+ "idf",
+ "pcb",
+ "tnd",
+ "xb",
+};
+
+int filetypes[] = {
+ ANSILOVE_FILETYPE_ANS,
+ ANSILOVE_FILETYPE_ADF,
+ ANSILOVE_FILETYPE_BIN,
+ ANSILOVE_FILETYPE_IDF,
+ ANSILOVE_FILETYPE_PCB,
+ ANSILOVE_FILETYPE_TND,
+ ANSILOVE_FILETYPE_XB
+};
+
+int (*loaders[])(struct ansilove_ctx *, struct ansilove_options *) = {
+ ansilove_ansi,
+ ansilove_artworx,
+ ansilove_binary,
+ ansilove_icedraw,
+ ansilove_pcboard,
+ ansilove_tundra,
+ ansilove_xbin
+};
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansilove-4.0.7/src/types.h new/ansilove-4.1.1/src/types.h
--- old/ansilove-4.0.7/src/types.h 1970-01-01 01:00:00.000000000 +0100
+++ new/ansilove-4.1.1/src/types.h 2020-05-25 18:51:05.000000000 +0200
@@ -0,0 +1,31 @@
+/*
+ * types.h
+ * Ansilove 4.1.1
+ * https://www.ansilove.org
+ *
+ * Copyright (c) 2011-2020 Stefan Vogt, Brian Cassidy, and Frederic Cambus
+ * All rights reserved.
+ *
+ * Ansilove is licensed under the BSD 2-Clause License.
+ * See LICENSE file for details.
+ */
+
+#ifndef TYPES_H
+#define TYPES_H
+
+#define ANSILOVE_FILETYPE_ANS 1
+#define ANSILOVE_FILETYPE_ADF 2
+#define ANSILOVE_FILETYPE_BIN 3
+#define ANSILOVE_FILETYPE_IDF 4
+#define ANSILOVE_FILETYPE_PCB 5
+#define ANSILOVE_FILETYPE_TND 6
+#define ANSILOVE_FILETYPE_XB 7
+
+struct ansilove_ctx;
+struct ansilove_options;
+
+extern char *types[];
+extern int filetypes[];
+extern int (*loaders[])(struct ansilove_ctx *, struct ansilove_options *);
+
+#endif /* TYPES_H */
1
0