openSUSE Commits
Threads by month
- ----- 2024 -----
- November
- October
- September
- August
- July
- June
- 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
August 2024
- 2 participants
- 1399 discussions
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package kernel-source-longterm for openSUSE:Factory checked in at 2024-08-20 16:13:31
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/kernel-source-longterm (Old)
and /work/SRC/openSUSE:Factory/.kernel-source-longterm.new.2698 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "kernel-source-longterm"
Tue Aug 20 16:13:31 2024 rev:29 rq:1194845 version:6.6.47
Changes:
--------
--- /work/SRC/openSUSE:Factory/kernel-source-longterm/kernel-longterm.changes 2024-08-17 12:41:00.598927332 +0200
+++ /work/SRC/openSUSE:Factory/.kernel-source-longterm.new.2698/kernel-longterm.changes 2024-08-20 16:14:00.667700197 +0200
@@ -1,0 +2,117 @@
+Mon Aug 19 10:17:12 CEST 2024 - rfrohl(a)suse.com
+
+- Linux 6.6.47 (bsc#1012628).
+- Revert "ata: libata-scsi: Honor the D_SENSE bit for CK_COND=1
+ and no error" (bsc#1012628).
+- media: Revert "media: dvb-usb: Fix unexpected infinite loop
+ in dvb_usb_read_remote_control()" (bsc#1012628).
+- KVM: arm64: Don't pass a TLBI level hint when zapping table
+ entries (bsc#1012628).
+- KVM: arm64: Don't defer TLB invalidation when zapping table
+ entries (bsc#1012628).
+- cgroup: Move rcu_head up near the top of cgroup_root
+ (bsc#1012628).
+- mm/debug_vm_pgtable: drop RANDOM_ORVALUE trick (bsc#1012628).
+- Revert "Input: bcm5974 - check endpoint type before starting
+ traffic" (bsc#1012628).
+- Revert "jfs: fix shift-out-of-bounds in dbJoin" (bsc#1012628).
+- binfmt_flat: Fix corruption when not offsetting data start
+ (bsc#1012628).
+- ALSA: usb: Fix UBSAN warning in parse_audio_unit()
+ (bsc#1012628).
+- fs/ntfs3: Do copy_to_user out of run_lock (bsc#1012628).
+- jfs: Fix shift-out-of-bounds in dbDiscardAG (bsc#1012628).
+- jfs: fix null ptr deref in dtInsertEntry (bsc#1012628).
+- fou: remove warn in gue_gro_receive on unsupported protocol
+ (bsc#1012628).
+- f2fs: fix to cover read extent cache access with lock
+ (bsc#1012628).
+- f2fs: fix to do sanity check on F2FS_INLINE_DATA flag in inode
+ during GC (bsc#1012628).
+- bpf, net: Use DEV_STAT_INC() (bsc#1012628).
+- ext4: sanity check for NULL pointer after ext4_force_shutdown
+ (bsc#1012628).
+- ext4: convert ext4_da_do_write_end() to take a folio
+ (bsc#1012628).
+- wifi: cfg80211: restrict NL80211_ATTR_TXQ_QUANTUM values
+ (bsc#1012628).
+- mm/page_table_check: support userfault wr-protect entries
+ (bsc#1012628).
+- ext4: do not create EA inode under buffer lock (bsc#1012628).
+- ext4: fold quota accounting into
+ ext4_xattr_inode_lookup_create() (bsc#1012628).
+- Bluetooth: RFCOMM: Fix not validating setsockopt user input
+ (bsc#1012628).
+- nfc: llcp: fix nfc_llcp_setsockopt() unsafe copies
+ (bsc#1012628).
+- net: add copy_safe_from_sockptr() helper (bsc#1012628).
+- mISDN: fix MISDN_TIME_STAMP handling (bsc#1012628).
+- fs: Annotate struct file_handle with __counted_by() and use
+ struct_size() (bsc#1012628).
+- bpf: Avoid kfree_rcu() under lock in bpf_lpm_trie (bsc#1012628).
+- bpf: Replace bpf_lpm_trie_key 0-length array with flexible array
+ (bsc#1012628).
+- pppoe: Fix memory leak in pppoe_sendmsg() (bsc#1012628).
+- net: sctp: fix skb leak in sctp_inq_free() (bsc#1012628).
+- net:rds: Fix possible deadlock in rds_message_put (bsc#1012628).
+- quota: Detect loops in quota tree (bsc#1012628).
+- Input: bcm5974 - check endpoint type before starting traffic
+ (bsc#1012628).
+- net: tls, add test to capture error on large splice
+ (bsc#1012628).
+- erofs: avoid debugging output for (de)compressed data
+ (bsc#1012628).
+- reiserfs: fix uninit-value in comp_keys (bsc#1012628).
+- Squashfs: fix variable overflow triggered by sysbot
+ (bsc#1012628).
+- squashfs: squashfs_read_data need to check if the length is 0
+ (bsc#1012628).
+- jfs: fix shift-out-of-bounds in dbJoin (bsc#1012628).
+- net: don't dump stack on queue timeout (bsc#1012628).
+- jfs: fix log->bdev_handle null ptr deref in lbmStartIO
+ (bsc#1012628).
+- jfs: Convert to bdev_open_by_dev() (bsc#1012628).
+- fs: Convert to bdev_open_by_dev() (bsc#1012628).
+- wifi: mac80211: fix change_address deadlock during unregister
+ (bsc#1012628).
+- wifi: mac80211: take wiphy lock for MAC addr change
+ (bsc#1012628).
+- tcp_metrics: optimize tcp_metrics_flush_all() (bsc#1012628).
+- cgroup: Make operations on the cgroup root_list RCU safe
+ (bsc#1012628).
+- genirq/cpuhotplug: Retry with cpu_online_mask when migration
+ fails (bsc#1012628).
+- genirq/cpuhotplug: Skip suspended interrupts when restoring
+ affinity (bsc#1012628).
+- nvme/pci: Add APST quirk for Lenovo N60z laptop (bsc#1012628).
+- mm: gup: stop abusing try_grab_folio (bsc#1012628).
+- nfsd: make svc_stat per-network namespace instead of global
+ (bsc#1012628).
+- nfsd: remove nfsd_stats, make th_cnt a global counter
+ (bsc#1012628).
+- nfsd: make all of the nfsd stats per-network namespace
+ (bsc#1012628).
+- nfsd: expose /proc/net/sunrpc/nfsd in net namespaces
+ (bsc#1012628).
+- nfsd: rename NFSD_NET_* to NFSD_STATS_* (bsc#1012628).
+- sunrpc: use the struct net as the svc proc private
+ (bsc#1012628).
+- sunrpc: remove ->pg_stats from svc_program (bsc#1012628).
+- sunrpc: pass in the sv_stats struct through svc_create_pooled
+ (bsc#1012628).
+- nfsd: stop setting ->pg_stats for unused stats (bsc#1012628).
+- sunrpc: don't change ->sv_stats if it doesn't exist
+ (bsc#1012628).
+- NFSD: Fix frame size warning in svc_export_parse()
+ (bsc#1012628).
+- NFSD: Rewrite synopsis of nfsd_percpu_counters_init()
+ (bsc#1012628).
+- LoongArch: Define __ARCH_WANT_NEW_STAT in unistd.h
+ (bsc#1012628).
+- ASoC: topology: Fix route memory corruption (bsc#1012628).
+- ASoC: topology: Clean up route loading (bsc#1012628).
+- exec: Fix ToCToU between perm check and set-uid/gid usage
+ (bsc#1012628).
+- commit 2028bdf
+
+-------------------------------------------------------------------
kernel-source-longterm.changes: same change
kernel-syms-longterm.changes: same change
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ kernel-longterm.spec ++++++
--- /var/tmp/diff_new_pack.oyavHH/_old 2024-08-20 16:14:03.015796574 +0200
+++ /var/tmp/diff_new_pack.oyavHH/_new 2024-08-20 16:14:03.019796738 +0200
@@ -18,8 +18,8 @@
%define srcversion 6.6
-%define patchversion 6.6.46
-%define git_commit 5df2b4b174fd87546b1651beafd3f66a8cfc1fd3
+%define patchversion 6.6.47
+%define git_commit 2028bdfc1d8edf3eeccd484dbc6bbc1f5a0f627a
%define variant -longterm%{nil}
%define compress_modules zstd
%define compress_vmlinux xz
@@ -113,9 +113,9 @@
Summary: The Linux Kernel
License: GPL-2.0-only
Group: System/Kernel
-Version: 6.6.46
+Version: 6.6.47
%if 0%{?is_kotd}
-Release: <RELEASE>.g5df2b4b
+Release: <RELEASE>.g2028bdf
%else
Release: 0
%endif
++++++ kernel-source-longterm.spec ++++++
--- /var/tmp/diff_new_pack.oyavHH/_old 2024-08-20 16:14:03.047797888 +0200
+++ /var/tmp/diff_new_pack.oyavHH/_new 2024-08-20 16:14:03.051798052 +0200
@@ -17,8 +17,8 @@
%define srcversion 6.6
-%define patchversion 6.6.46
-%define git_commit 5df2b4b174fd87546b1651beafd3f66a8cfc1fd3
+%define patchversion 6.6.47
+%define git_commit 2028bdfc1d8edf3eeccd484dbc6bbc1f5a0f627a
%define variant -longterm%{nil}
%include %_sourcedir/kernel-spec-macros
@@ -31,9 +31,9 @@
%endif
Name: kernel-source-longterm
-Version: 6.6.46
+Version: 6.6.47
%if 0%{?is_kotd}
-Release: <RELEASE>.g5df2b4b
+Release: <RELEASE>.g2028bdf
%else
Release: 0
%endif
++++++ kernel-syms-longterm.spec ++++++
--- /var/tmp/diff_new_pack.oyavHH/_old 2024-08-20 16:14:03.083799365 +0200
+++ /var/tmp/diff_new_pack.oyavHH/_new 2024-08-20 16:14:03.087799530 +0200
@@ -16,7 +16,7 @@
#
-%define git_commit 5df2b4b174fd87546b1651beafd3f66a8cfc1fd3
+%define git_commit 2028bdfc1d8edf3eeccd484dbc6bbc1f5a0f627a
%define variant -longterm%{nil}
%include %_sourcedir/kernel-spec-macros
@@ -25,10 +25,10 @@
Summary: Kernel Symbol Versions (modversions)
License: GPL-2.0-only
Group: Development/Sources
-Version: 6.6.46
+Version: 6.6.47
%if %using_buildservice
%if 0%{?is_kotd}
-Release: <RELEASE>.g5df2b4b
+Release: <RELEASE>.g2028bdf
%else
Release: 0
%endif
++++++ patches.kernel.org.tar.bz2 ++++++
/work/SRC/openSUSE:Factory/kernel-source-longterm/patches.kernel.org.tar.bz2 /work/SRC/openSUSE:Factory/.kernel-source-longterm.new.2698/patches.kernel.org.tar.bz2 differ: char 11, line 1
++++++ series.conf ++++++
--- /var/tmp/diff_new_pack.oyavHH/_old 2024-08-20 16:14:03.719825470 +0200
+++ /var/tmp/diff_new_pack.oyavHH/_new 2024-08-20 16:14:03.723825634 +0200
@@ -9627,6 +9627,76 @@
patches.kernel.org/6.6.46-187-Revert-selftests-mptcp-simult-flows-mark-unba…
patches.kernel.org/6.6.46-188-btrfs-fix-double-inode-unlock-for-direct-IO-s…
patches.kernel.org/6.6.46-189-Linux-6.6.46.patch
+ patches.kernel.org/6.6.47-001-exec-Fix-ToCToU-between-perm-check-and-set-ui…
+ patches.kernel.org/6.6.47-002-ASoC-topology-Clean-up-route-loading.patch
+ patches.kernel.org/6.6.47-003-ASoC-topology-Fix-route-memory-corruption.pat…
+ patches.kernel.org/6.6.47-004-LoongArch-Define-__ARCH_WANT_NEW_STAT-in-unis…
+ patches.kernel.org/6.6.47-005-NFSD-Rewrite-synopsis-of-nfsd_percpu_counters…
+ patches.kernel.org/6.6.47-006-NFSD-Fix-frame-size-warning-in-svc_export_par…
+ patches.kernel.org/6.6.47-007-sunrpc-don-t-change-sv_stats-if-it-doesn-t-ex…
+ patches.kernel.org/6.6.47-008-nfsd-stop-setting-pg_stats-for-unused-stats.p…
+ patches.kernel.org/6.6.47-009-sunrpc-pass-in-the-sv_stats-struct-through-sv…
+ patches.kernel.org/6.6.47-010-sunrpc-remove-pg_stats-from-svc_program.patch
+ patches.kernel.org/6.6.47-011-sunrpc-use-the-struct-net-as-the-svc-proc-pri…
+ patches.kernel.org/6.6.47-012-nfsd-rename-NFSD_NET_-to-NFSD_STATS_.patch
+ patches.kernel.org/6.6.47-013-nfsd-expose-proc-net-sunrpc-nfsd-in-net-names…
+ patches.kernel.org/6.6.47-014-nfsd-make-all-of-the-nfsd-stats-per-network-n…
+ patches.kernel.org/6.6.47-015-nfsd-remove-nfsd_stats-make-th_cnt-a-global-c…
+ patches.kernel.org/6.6.47-016-nfsd-make-svc_stat-per-network-namespace-inst…
+ patches.kernel.org/6.6.47-017-mm-gup-stop-abusing-try_grab_folio.patch
+ patches.kernel.org/6.6.47-018-nvme-pci-Add-APST-quirk-for-Lenovo-N60z-lapto…
+ patches.kernel.org/6.6.47-019-genirq-cpuhotplug-Skip-suspended-interrupts-w…
+ patches.kernel.org/6.6.47-020-genirq-cpuhotplug-Retry-with-cpu_online_mask-…
+ patches.kernel.org/6.6.47-021-cgroup-Make-operations-on-the-cgroup-root_lis…
+ patches.kernel.org/6.6.47-022-tcp_metrics-optimize-tcp_metrics_flush_all.pa…
+ patches.kernel.org/6.6.47-023-wifi-mac80211-take-wiphy-lock-for-MAC-addr-ch…
+ patches.kernel.org/6.6.47-024-wifi-mac80211-fix-change_address-deadlock-dur…
+ patches.kernel.org/6.6.47-025-fs-Convert-to-bdev_open_by_dev.patch
+ patches.kernel.org/6.6.47-026-jfs-Convert-to-bdev_open_by_dev.patch
+ patches.kernel.org/6.6.47-027-jfs-fix-log-bdev_handle-null-ptr-deref-in-lbm…
+ patches.kernel.org/6.6.47-028-net-don-t-dump-stack-on-queue-timeout.patch
+ patches.kernel.org/6.6.47-029-jfs-fix-shift-out-of-bounds-in-dbJoin.patch
+ patches.kernel.org/6.6.47-030-squashfs-squashfs_read_data-need-to-check-if-…
+ patches.kernel.org/6.6.47-031-Squashfs-fix-variable-overflow-triggered-by-s…
+ patches.kernel.org/6.6.47-032-reiserfs-fix-uninit-value-in-comp_keys.patch
+ patches.kernel.org/6.6.47-033-erofs-avoid-debugging-output-for-de-compresse…
+ patches.kernel.org/6.6.47-034-net-tls-add-test-to-capture-error-on-large-sp…
+ patches.kernel.org/6.6.47-035-Input-bcm5974-check-endpoint-type-before-star…
+ patches.kernel.org/6.6.47-036-quota-Detect-loops-in-quota-tree.patch
+ patches.kernel.org/6.6.47-037-net-rds-Fix-possible-deadlock-in-rds_message_…
+ patches.kernel.org/6.6.47-038-net-sctp-fix-skb-leak-in-sctp_inq_free.patch
+ patches.kernel.org/6.6.47-039-pppoe-Fix-memory-leak-in-pppoe_sendmsg.patch
+ patches.kernel.org/6.6.47-040-bpf-Replace-bpf_lpm_trie_key-0-length-array-w…
+ patches.kernel.org/6.6.47-041-bpf-Avoid-kfree_rcu-under-lock-in-bpf_lpm_tri…
+ patches.kernel.org/6.6.47-042-fs-Annotate-struct-file_handle-with-__counted…
+ patches.kernel.org/6.6.47-043-mISDN-fix-MISDN_TIME_STAMP-handling.patch
+ patches.kernel.org/6.6.47-044-net-add-copy_safe_from_sockptr-helper.patch
+ patches.kernel.org/6.6.47-045-nfc-llcp-fix-nfc_llcp_setsockopt-unsafe-copie…
+ patches.kernel.org/6.6.47-046-Bluetooth-RFCOMM-Fix-not-validating-setsockop…
+ patches.kernel.org/6.6.47-047-ext4-fold-quota-accounting-into-ext4_xattr_in…
+ patches.kernel.org/6.6.47-048-ext4-do-not-create-EA-inode-under-buffer-lock…
+ patches.kernel.org/6.6.47-049-mm-page_table_check-support-userfault-wr-prot…
+ patches.kernel.org/6.6.47-050-wifi-cfg80211-restrict-NL80211_ATTR_TXQ_QUANT…
+ patches.kernel.org/6.6.47-051-ext4-convert-ext4_da_do_write_end-to-take-a-f…
+ patches.kernel.org/6.6.47-052-ext4-sanity-check-for-NULL-pointer-after-ext4…
+ patches.kernel.org/6.6.47-053-bpf-net-Use-DEV_STAT_INC.patch
+ patches.kernel.org/6.6.47-054-f2fs-fix-to-do-sanity-check-on-F2FS_INLINE_DA…
+ patches.kernel.org/6.6.47-055-f2fs-fix-to-cover-read-extent-cache-access-wi…
+ patches.kernel.org/6.6.47-056-fou-remove-warn-in-gue_gro_receive-on-unsuppo…
+ patches.kernel.org/6.6.47-057-jfs-fix-null-ptr-deref-in-dtInsertEntry.patch
+ patches.kernel.org/6.6.47-058-jfs-Fix-shift-out-of-bounds-in-dbDiscardAG.pa…
+ patches.kernel.org/6.6.47-059-fs-ntfs3-Do-copy_to_user-out-of-run_lock.patch
+ patches.kernel.org/6.6.47-060-ALSA-usb-Fix-UBSAN-warning-in-parse_audio_uni…
+ patches.kernel.org/6.6.47-061-binfmt_flat-Fix-corruption-when-not-offsettin…
+ patches.kernel.org/6.6.47-062-Revert-jfs-fix-shift-out-of-bounds-in-dbJoin.…
+ patches.kernel.org/6.6.47-063-Revert-Input-bcm5974-check-endpoint-type-befo…
+ patches.kernel.org/6.6.47-064-mm-debug_vm_pgtable-drop-RANDOM_ORVALUE-trick…
+ patches.kernel.org/6.6.47-065-cgroup-Move-rcu_head-up-near-the-top-of-cgrou…
+ patches.kernel.org/6.6.47-066-KVM-arm64-Don-t-defer-TLB-invalidation-when-z…
+ patches.kernel.org/6.6.47-067-KVM-arm64-Don-t-pass-a-TLBI-level-hint-when-z…
+ patches.kernel.org/6.6.47-068-media-Revert-media-dvb-usb-Fix-unexpected-inf…
+ patches.kernel.org/6.6.47-069-Revert-ata-libata-scsi-Honor-the-D_SENSE-bit-…
+ patches.kernel.org/6.6.47-070-Linux-6.6.47.patch
########################################################
# Build fixes that apply to the vanilla kernel too.
++++++ source-timestamp ++++++
--- /var/tmp/diff_new_pack.oyavHH/_old 2024-08-20 16:14:03.747826619 +0200
+++ /var/tmp/diff_new_pack.oyavHH/_new 2024-08-20 16:14:03.747826619 +0200
@@ -1,4 +1,4 @@
-2024-08-15 08:15:20 +0000
-GIT Revision: 5df2b4b174fd87546b1651beafd3f66a8cfc1fd3
+2024-08-19 08:18:15 +0000
+GIT Revision: 2028bdfc1d8edf3eeccd484dbc6bbc1f5a0f627a
GIT Branch: slowroll
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package SVT-AV1 for openSUSE:Factory checked in at 2024-08-20 16:13:18
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/SVT-AV1 (Old)
and /work/SRC/openSUSE:Factory/.SVT-AV1.new.2698 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "SVT-AV1"
Tue Aug 20 16:13:18 2024 rev:17 rq:1194775 version:2.2.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/SVT-AV1/SVT-AV1.changes 2024-07-14 08:49:55.227167907 +0200
+++ /work/SRC/openSUSE:Factory/.SVT-AV1.new.2698/SVT-AV1.changes 2024-08-20 16:13:53.419400019 +0200
@@ -1,0 +2,13 @@
+Mon Aug 19 20:39:27 UTC 2024 - Jan Engelhardt <jengelh(a)inai.de>
+
+- Update to release 2.2.0
+ * Improve the tradeoffs for the random access mode across presets:
+ * Speedup of ~15% across presets M0 - M8 while maintaining
+ similar quality levels
+ * Improve the tradeoffs for the low-delay mode across presets
+ * Increased temporal resolution setting to 6L for 4k
+ resolutions by default
+ * Added ARM optimizations for functions with c_only equivalent
+ yielding an average speedup of ~13% for 4k10bit
+
+-------------------------------------------------------------------
Old:
----
SVT-AV1-v2.1.2.tar.gz
New:
----
SVT-AV1-v2.2.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ SVT-AV1.spec ++++++
--- /var/tmp/diff_new_pack.gE8Mba/_old 2024-08-20 16:13:53.987423614 +0200
+++ /var/tmp/diff_new_pack.gE8Mba/_new 2024-08-20 16:13:53.987423614 +0200
@@ -17,7 +17,7 @@
Name: SVT-AV1
-Version: 2.1.2
+Version: 2.2.0
Release: 0
Summary: An AV1 decoder/encoder for video streams
License: BSD-3-Clause-Clear
++++++ SVT-AV1-v2.1.2.tar.gz -> SVT-AV1-v2.2.0.tar.gz ++++++
/work/SRC/openSUSE:Factory/SVT-AV1/SVT-AV1-v2.1.2.tar.gz /work/SRC/openSUSE:Factory/.SVT-AV1.new.2698/SVT-AV1-v2.2.0.tar.gz differ: char 13, line 1
++++++ _scmsync.obsinfo ++++++
--- /var/tmp/diff_new_pack.gE8Mba/_old 2024-08-20 16:13:54.043425940 +0200
+++ /var/tmp/diff_new_pack.gE8Mba/_new 2024-08-20 16:13:54.047426106 +0200
@@ -1,5 +1,5 @@
-mtime: 1720712580
-commit: 9a076443a1834f5745ad8b4f1cb74a3e2e32ddfaf0911031083836fb2d31c382
+mtime: 1724100680
+commit: 2f501847c1082fce21e7d7a80af1bf0d45c3141beb068ada1e570b4229592404
url: https://src.opensuse.org/jengelh/SVT-AV1
revision: master
++++++ build.specials.obscpio ++++++
diff: old/*: No such file or directory
diff: new/*: No such file or directory
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package libwacom for openSUSE:Factory checked in at 2024-08-20 16:13:16
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libwacom (Old)
and /work/SRC/openSUSE:Factory/.libwacom.new.2698 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libwacom"
Tue Aug 20 16:13:16 2024 rev:43 rq:1194757 version:2.12.2
Changes:
--------
--- /work/SRC/openSUSE:Factory/libwacom/libwacom.changes 2024-04-24 15:13:38.375583616 +0200
+++ /work/SRC/openSUSE:Factory/.libwacom.new.2698/libwacom.changes 2024-08-20 16:13:50.443276398 +0200
@@ -1,0 +2,93 @@
+Fri Aug 16 06:17:39 UTC 2024 - Aesara Binder <aesara(a)mailbox.org>
+
+- update to 2.12.2
+ * Device Fixes:
+ - HUION Kamvas 16 2019
+ - Prefix the kamvas pro 13 with Huion like all other Huion
+ tablets
+ - Fix the Huion Kamvas 12 file
+ * Device Other:
+ - Don't create a default match for fallback devices
+ * Other Fixes:
+ - Fix a memory leak
+ - Set the device name in new_from_path() to override the
+ fallback name
+ * Tests:
+ test: run ruff format over test_svg.py
+ test: add support for testing new_from_path() through uinput
+
+- update to 2.12.1
+ * Device Fixes:
+ - Drop the firmware match from the Huion Inspiroy 2 S
+ * Features:
+ - Fix off-by-one check for stripping the quote from NAME/UNIQ
+ - Use g_clear_pointer() during libwacom_*_unref()
+
+- update to 2.12.0
+ * New Devices:
+ - Huion Kamvas Pro 24 (GT-240, QHD)
+ - Huion WH1409
+ - Wacom Movink
+ - Wacom HID 49A0 (Dell latitude 5320 2-in-1)
+ - Wacom HID 5334 Pen
+ - XP-PEN Deco Mini 4
+ * Device Fixes:
+ - Fix tablet file for the Huion Inspiroy 2S
+ - Improve Huion Inspiroy 2 m support
+ - Update the Inspiroy 2L
+ - Add a dial to the Huion Inspiroy 2 L and M
+ - Fix the Inspiroy 2S layout
+ - Set the right PID for the Inpspiroy 2 L and M
+ - Rename second ButtonB id in the DTI-520 svg layout
+ - Fix Huion RTM-500 Support
+ - Added more device names for Kamvas 13 variants
+ - Fix buttons for Huion and Gaomon tablets
+ - Mark huion/gaomon tablets with Dials as such
+ - XP pen tablets have no Rings
+ - Drop accidental comma from the Gaomon/Huion layout files
+ * Device Other:
+ - Auto generated HUION tablet description files
+ - Auto generated GAOMON tablet description files
+ - Remove layout files without buttons/strips/dials
+ - Remove a superfluous rect from the huion mini keydial kd100
+ - Use NumRings instead of separate Ring/Ring2
+ - Switch DeviceMatch to use a pipe as separator
+ - Add a firmware string entry to the matches
+ - Skip over empty Layout= assignments
+ * Features:
+ - Rework match_from_string
+ - Rework the match approach to prefer uniq over name
+ - Allow to match by uniq without name
+ - Add Gaomon S620 firmware match
+ - Add support for relative dials
+ - Add libwacom_new_from_builder to construct a new device
+ * Other Fixes:
+ - Fetch the name and uniq from udev properties, not sysfs
+ - Keyboard devices are not ID_INPUT_TABLET_PAD
+ - Don't mark a Mouse device as tablet or pad
+ - Set the bustype in libwacom_new_for_path
+ - Document touch strips
+ * Tests:
+ - Remove the requirement for a Layout file
+ - Replace the SVG validity test with a pytest-based one
+ - Add a test for unnecessary SVGs
+ - Add some tracing to the svg validity test
+ - Svgs for dials need to have CW and CCW labels, not Up/Down
+ - Set proper test names for the hwdb tests
+ - Skip errors in SVGs for autogenerated devices
+ - Check the svg for Dial2 if we have two dials
+ - Skip hwdb tests if the systemd commands fail
+ - Install our hwdb file during the test
+ - Add ids to the parametrized tablet file tests
+ - Add a pytest wrapper for libwacom
+ - Skip/fail with an error if the systemd commands failed
+ - Replace the uinput-based hwdb test with a direct query
+ - Don't reload the udev rules
+ - Move the asan check into meson.build
+ * Build:
+ - Make pytest more verbose
+ - Bump to meson 0.56.0
+ - More logging of the pytests
+ - Split the pytest invocations into separate ones
+
+-------------------------------------------------------------------
Old:
----
libwacom-2.11.0.tar.xz
libwacom-2.11.0.tar.xz.sig
New:
----
libwacom-2.12.2.tar.xz
libwacom-2.12.2.tar.xz.sig
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ libwacom.spec ++++++
--- /var/tmp/diff_new_pack.mCo4DW/_old 2024-08-20 16:13:52.003341199 +0200
+++ /var/tmp/diff_new_pack.mCo4DW/_new 2024-08-20 16:13:52.035342529 +0200
@@ -16,7 +16,7 @@
#
Name: libwacom
-Version: 2.11.0
+Version: 2.12.2
Release: 0
Summary: Library to identify wacom tablets
License: MIT
@@ -27,7 +27,7 @@
# Fetched from https://github.com/whot.gpg
Source2: %{name}.keyring
Source99: baselibs.conf
-BuildRequires: meson >= 0.51.0
+BuildRequires: meson >= 0.56.0
BuildRequires: ninja
BuildRequires: pkgconfig
BuildRequires: pkgconfig(glib-2.0)
++++++ libwacom-2.11.0.tar.xz -> libwacom-2.12.2.tar.xz ++++++
++++ 22337 lines of diff (skipped)
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-ruff for openSUSE:Factory checked in at 2024-08-20 16:13:10
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-ruff (Old)
and /work/SRC/openSUSE:Factory/.python-ruff.new.2698 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-ruff"
Tue Aug 20 16:13:10 2024 rev:35 rq:1194751 version:0.6.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-ruff/python-ruff.changes 2024-08-13 13:23:02.741750602 +0200
+++ /work/SRC/openSUSE:Factory/.python-ruff.new.2698/python-ruff.changes 2024-08-20 16:13:46.031093127 +0200
@@ -1,0 +2,9 @@
+Mon Aug 19 17:40:41 UTC 2024 - Ondřej Súkup <mimi.vx(a)gmail.com>
+
+- update to 0.6.1:
+ * Detect imports in src layouts by default for isort rules
+ * The pytest rules PT001 and PT023 now default to omitting the decorator parentheses when there are no arguments .
+ * Lint and format Jupyter Notebook by default .
+ * big list of changes: https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md
+
+-------------------------------------------------------------------
Old:
----
ruff-0.5.6.tar.gz
New:
----
ruff-0.6.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-ruff.spec ++++++
--- /var/tmp/diff_new_pack.w0u49Y/_old 2024-08-20 16:13:47.287145300 +0200
+++ /var/tmp/diff_new_pack.w0u49Y/_new 2024-08-20 16:13:47.287145300 +0200
@@ -19,7 +19,7 @@
%bcond_without libalternatives
%{?sle15_python_module_pythons}
Name: python-ruff
-Version: 0.5.6
+Version: 0.6.1
Release: 0
Summary: An extremely fast Python linter, written in Rust
License: MIT
++++++ ruff-0.5.6.tar.gz -> ruff-0.6.1.tar.gz ++++++
++++ 13168 lines of diff (skipped)
++++++ vendor.tar.zst ++++++
/work/SRC/openSUSE:Factory/python-ruff/vendor.tar.zst /work/SRC/openSUSE:Factory/.python-ruff.new.2698/vendor.tar.zst differ: char 30841, line 139
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package emacs for openSUSE:Factory checked in at 2024-08-20 16:13:01
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/emacs (Old)
and /work/SRC/openSUSE:Factory/.emacs.new.2698 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "emacs"
Tue Aug 20 16:13:01 2024 rev:191 rq:1194712 version:29.4
Changes:
--------
--- /work/SRC/openSUSE:Factory/emacs/emacs.changes 2024-08-14 14:14:47.096373539 +0200
+++ /work/SRC/openSUSE:Factory/.emacs.new.2698/emacs.changes 2024-08-20 16:13:20.654039024 +0200
@@ -1,0 +2,6 @@
+Mon Aug 19 11:46:55 UTC 2024 - Dr. Werner Fink <werner(a)suse.de>
+
+- Only suggest emacs-games to avoid warning about
+ game dir '/var/games/emacs': Permission denied (boo#1228058)
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ emacs.spec ++++++
--- /var/tmp/diff_new_pack.XIu9hv/_old 2024-08-20 16:13:21.714083055 +0200
+++ /var/tmp/diff_new_pack.XIu9hv/_new 2024-08-20 16:13:21.718083222 +0200
@@ -180,11 +180,7 @@
%endif
Requires(pre): fileutils
%if %{with games}
-%if !0%{?is_opensuse}
Suggests: %{name}-games
-%else
-Recommends: %{name}-games
-%endif
%endif
Source: https://ftp.gnu.org/gnu/emacs/emacs-%{version}.tar.xz
Source1: app-defaults.Emacs
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package AppStream for openSUSE:Factory checked in at 2024-08-20 16:12:59
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/AppStream (Old)
and /work/SRC/openSUSE:Factory/.AppStream.new.2698 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "AppStream"
Tue Aug 20 16:12:59 2024 rev:48 rq:1194706 version:1.0.3
Changes:
--------
--- /work/SRC/openSUSE:Factory/AppStream/AppStream.changes 2024-05-15 21:24:11.312362219 +0200
+++ /work/SRC/openSUSE:Factory/.AppStream.new.2698/AppStream.changes 2024-08-20 16:13:18.369944148 +0200
@@ -1,0 +2,6 @@
+Mon Aug 19 11:26:49 UTC 2024 - Dominique Leuenberger <dimstar(a)opensuse.org>
+
+- BuildRequire gettext-devel instead of gettext: allow OBS to
+ shortcut through gettext-runtime-mini.
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ AppStream.spec ++++++
--- /var/tmp/diff_new_pack.9v20wn/_old 2024-08-20 16:13:19.493990839 +0200
+++ /var/tmp/diff_new_pack.9v20wn/_new 2024-08-20 16:13:19.493990839 +0200
@@ -53,7 +53,7 @@
BuildRequires: gcc13-c++
%endif
BuildRequires: gdk-pixbuf-loader-rsvg
-BuildRequires: gettext
+BuildRequires: gettext-devel
BuildRequires: gperf
BuildRequires: itstool
BuildRequires: meson >= 0.59
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package librsvg for openSUSE:Factory checked in at 2024-08-20 16:12:53
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/librsvg (Old)
and /work/SRC/openSUSE:Factory/.librsvg.new.2698 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "librsvg"
Tue Aug 20 16:12:53 2024 rev:144 rq:1194672 version:2.58.3
Changes:
--------
--- /work/SRC/openSUSE:Factory/librsvg/librsvg.changes 2024-07-15 19:45:58.952417506 +0200
+++ /work/SRC/openSUSE:Factory/.librsvg.new.2698/librsvg.changes 2024-08-20 16:13:11.081641409 +0200
@@ -1,0 +2,11 @@
+Fri Aug 16 23:28:29 UTC 2024 - Bjørn Lie <bjorn.lie(a)gmail.com>
+
+- Update to version 2.58.3:
+ + A couple of fixes from fuzz testing:
+ - Fix assertion failures with large Hue value in hsl() or hwb()
+ colors.
+ - Limit the baseFrequency for feTurbulence to avoid integer
+ overflow.
+ - Remove an obsolete test.
+
+-------------------------------------------------------------------
Old:
----
librsvg-2.58.2.obscpio
New:
----
librsvg-2.58.3.obscpio
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ librsvg.spec ++++++
--- /var/tmp/diff_new_pack.gs75NG/_old 2024-08-20 16:13:14.097766692 +0200
+++ /var/tmp/diff_new_pack.gs75NG/_new 2024-08-20 16:13:14.097766692 +0200
@@ -20,7 +20,7 @@
%define librsvg_sover 2
Name: librsvg
-Version: 2.58.2
+Version: 2.58.3
Release: 0
Summary: A Library for Rendering SVG Data
License: GPL-2.0-or-later AND LGPL-2.0-or-later AND MIT
++++++ _service ++++++
--- /var/tmp/diff_new_pack.gs75NG/_old 2024-08-20 16:13:14.137768353 +0200
+++ /var/tmp/diff_new_pack.gs75NG/_new 2024-08-20 16:13:14.141768520 +0200
@@ -3,7 +3,7 @@
<service name="obs_scm" mode="manual">
<param name="url">https://gitlab.gnome.org/GNOME/librsvg.git</param>
<param name="scm">git</param>
- <param name="revision">2.58.2</param>
+ <param name="revision">2.58.3</param>
<param name="versionformat">@PARENT_TAG@+@TAG_OFFSET@</param>
<param name="versionrewrite-pattern">(.*)\+0</param>
<param name="versionrewrite-replacement">\1</param>
++++++ librsvg-2.58.2.obscpio -> librsvg-2.58.3.obscpio ++++++
/work/SRC/openSUSE:Factory/librsvg/librsvg-2.58.2.obscpio /work/SRC/openSUSE:Factory/.librsvg.new.2698/librsvg-2.58.3.obscpio differ: char 49, line 1
++++++ librsvg.obsinfo ++++++
--- /var/tmp/diff_new_pack.gs75NG/_old 2024-08-20 16:13:14.189770513 +0200
+++ /var/tmp/diff_new_pack.gs75NG/_new 2024-08-20 16:13:14.193770680 +0200
@@ -1,5 +1,5 @@
name: librsvg
-version: 2.58.2
-mtime: 1720816460
-commit: ef5c94d8362c35573d7eb651cf9a07c6df9df6da
+version: 2.58.3
+mtime: 1723835212
+commit: 3ed19a5f67976d82ef38b69478452a42fbf24bcf
++++++ vendor.tar.zst ++++++
/work/SRC/openSUSE:Factory/librsvg/vendor.tar.zst /work/SRC/openSUSE:Factory/.librsvg.new.2698/vendor.tar.zst differ: char 171047, line 640
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package libxml++ for openSUSE:Factory checked in at 2024-08-20 16:12:50
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libxml++ (Old)
and /work/SRC/openSUSE:Factory/.libxml++.new.2698 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libxml++"
Tue Aug 20 16:12:50 2024 rev:54 rq:1194670 version:5.2.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/libxml++/libxml++.changes 2024-08-14 14:14:14.323003507 +0200
+++ /work/SRC/openSUSE:Factory/.libxml++.new.2698/libxml++.changes 2024-08-20 16:13:05.249399152 +0200
@@ -1,0 +2,5 @@
+Sun Aug 18 11:28:41 UTC 2024 - Bjørn Lie <bjorn.lie(a)gmail.com>
+
+- Drop unused pkgconfig(glibmm-2.68) BuildRequires.
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ libxml++.spec ++++++
--- /var/tmp/diff_new_pack.4pP2uw/_old 2024-08-20 16:13:05.929427399 +0200
+++ /var/tmp/diff_new_pack.4pP2uw/_new 2024-08-20 16:13:05.933427564 +0200
@@ -32,7 +32,6 @@
BuildRequires: fdupes
BuildRequires: meson >= 0.60.0
BuildRequires: pkgconfig
-BuildRequires: pkgconfig(glibmm-2.68)
BuildRequires: pkgconfig(libxml-2.0) >= 2.7.7
%description
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package libinput for openSUSE:Factory checked in at 2024-08-20 16:12:50
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libinput (Old)
and /work/SRC/openSUSE:Factory/.libinput.new.2698 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libinput"
Tue Aug 20 16:12:50 2024 rev:120 rq:1194659 version:1.26.2
Changes:
--------
--- /work/SRC/openSUSE:Factory/libinput/libinput.changes 2024-06-07 15:02:18.269450845 +0200
+++ /work/SRC/openSUSE:Factory/.libinput.new.2698/libinput.changes 2024-08-20 16:13:03.277317236 +0200
@@ -1,0 +2,6 @@
+Mon Aug 19 07:40:24 UTC 2024 - Jan Engelhardt <jengelh(a)inai.de>
+
+- Update to release 1.26.2
+ * Added quirks for the LG Gram 14 and the Minisvorum V3
+
+-------------------------------------------------------------------
Old:
----
libinput-1.26.0.tar.gz
New:
----
_scmsync.obsinfo
build.specials.obscpio
libinput-1.26.2.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ libinput.spec ++++++
--- /var/tmp/diff_new_pack.DEvXG1/_old 2024-08-20 16:13:04.109351797 +0200
+++ /var/tmp/diff_new_pack.DEvXG1/_new 2024-08-20 16:13:04.113351963 +0200
@@ -37,7 +37,7 @@
%define lname libinput10
%define pname libinput
Name: libinput%{?xsuffix}
-Version: 1.26.0
+Version: 1.26.2
Release: 0
Summary: Input device and event processing library
License: MIT
++++++ _scmsync.obsinfo ++++++
mtime: 1724053860
commit: f353a5bf6d120393ffc3474fd4f6e74cc03902301bd8332a5beea121f2caa611
url: https://src.opensuse.org/jengelh/libinput
revision: master
++++++ libinput-1.26.0.tar.gz -> libinput-1.26.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.26.0/.gitlab-ci/libinput.spec.in new/libinput-1.26.2/.gitlab-ci/libinput.spec.in
--- old/libinput-1.26.0/.gitlab-ci/libinput.spec.in 2024-06-06 06:09:40.000000000 +0200
+++ new/libinput-1.26.2/.gitlab-ci/libinput.spec.in 2024-08-19 01:26:22.000000000 +0200
@@ -111,6 +111,7 @@
%{_libexecdir}/libinput/libinput-record
%{_libexecdir}/libinput/libinput-replay
%{_libexecdir}/libinput/libinput-analyze
+%{_libexecdir}/libinput/libinput-analyze-buttons
%{_libexecdir}/libinput/libinput-analyze-per-slot-delta
%{_libexecdir}/libinput/libinput-analyze-recording
%{_libexecdir}/libinput/libinput-analyze-touch-down-state
@@ -129,6 +130,7 @@
%{_mandir}/man1/libinput-record.1*
%{_mandir}/man1/libinput-replay.1*
%{_mandir}/man1/libinput-analyze.1*
+%{_mandir}/man1/libinput-analyze-buttons.1*
%{_mandir}/man1/libinput-analyze-per-slot-delta.1*
%{_mandir}/man1/libinput-analyze-recording.1*
%{_mandir}/man1/libinput-analyze-touch-down-state.1*
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.26.0/.triage-policies.yml new/libinput-1.26.2/.triage-policies.yml
--- old/libinput-1.26.0/.triage-policies.yml 2024-06-06 06:09:40.000000000 +0200
+++ new/libinput-1.26.2/.triage-policies.yml 2024-08-19 01:26:22.000000000 +0200
@@ -3,6 +3,37 @@
# one we have on the main branch at the time)
#
# Note that for adding labels, the label must first created in the project.
+
+# Re-used in issues and mrs
+.close_needinfo: &close_needinfo
+ name: "Close stale needinfo bugs"
+ conditions:
+ labels:
+ - "bugbot::needinfo-timeout"
+ actions:
+ remove_labels:
+ - "bugbot::needinfo-timeout"
+ comment: |
+ I'm closing this bug because some information we requested a while ago was never supplied and
+ we're not able to continue without this information.
+ Please feel free to re-open.
+ status: "close"
+
+.remind_needinfo: &remind_needinfo
+ name: "Remind users of needinfo bugs"
+ conditions:
+ labels:
+ - "bugbot::needinfo-reminder"
+ actions:
+ labels:
+ - "waiting on reporter"
+ remove_labels:
+ - "bugbot::needinfo-reminder"
+ comment: |
+ Hi. This is a friendly reminder that the maintainers are waiting on some information by
+ you (or maybe someone cc'd on this bug). If the information is not provided we may not
+ be able to proceed with this issue or merge request. Please check the recent comments, thanks.
+
resource_rules:
issues:
rules:
@@ -63,6 +94,8 @@
The [libinput documentation](https://wayland.freedesktop.org/libinput/doc/latest/contribu…
also has more details on how to get started.
status: "close"
+ - *close_needinfo
+ - *remind_needinfo
merge_requests:
rules:
- name: "Remind contributor of commit rules"
@@ -79,3 +112,5 @@
Please see [our docs for commit messages](https://wayland.freedesktop.org/libinput/doc/latest/contributing.…
and [our docs for submitting code](https://wayland.freedesktop.org/libinput/doc/latest/contributing.html…
that explain how to amend and force-push to this repo.
+ - *close_needinfo
+ - *remind_needinfo
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.26.0/doc/user/device-quirks.rst new/libinput-1.26.2/doc/user/device-quirks.rst
--- old/libinput-1.26.0/doc/user/device-quirks.rst 2024-06-06 06:09:40.000000000 +0200
+++ new/libinput-1.26.2/doc/user/device-quirks.rst 2024-08-19 01:26:22.000000000 +0200
@@ -10,10 +10,10 @@
so-called model quirks to provide that information. Model quirks are usually
installed under ``/usr/share/libinput/<filename>.quirks`` and are standard
``.ini`` files. A file may contain multiple section headers (``[some
-identifier]``) followed by one or more ``MatchFoo=Bar`` directives, followed by
-at least one of ``ModelFoo=1`` or ``AttrFoo=bar`` directive. See the
-``quirks/README.md`` file in the libinput source repository for more details on
-their contents.
+identifier]``) followed by one or more :ref:`MatchFoo=Bar <device-quirks-matches>`
+directives, followed by at least one of ``ModelFoo=1`` or ``AttrFoo=bar`` directive.
+See the ``quirks/README.md`` file in the libinput source repository for more
+details on their contents.
.. warning:: Model quirks are internal API and may change at any time. No
backwards-compatibility is guaranteed.
@@ -151,6 +151,10 @@
Unlike in traditional touchpads, whose pressure value equals contact size,
on pressure pads pressure is a real physical axis.
Indicates that the device is a pressure pad.
+ModelTouchpadPhantomClicks
+ Some laptops are prone to registering touchpad clicks when the case is
+ bent. Indicates that clicks should be ignored if no fingers are on the
+ touchpad.
AttrSizeHint=NxM, AttrResolutionHint=N
Hints at the width x height of the device in mm, or the resolution
of the x/y axis in units/mm. These may only be used where they apply to
@@ -197,3 +201,34 @@
AttrTabletSmoothing=1|0
Enables (1) or disables (0) input smoothing for tablet devices. Smoothing is enabled
by default, except on AES devices.
+
+.. _device-quirks-matches:
+
+------------------------------------------------------------------------------
+List of currently available matches
+------------------------------------------------------------------------------
+
+``Match*`` statements are how quirks are assigned to a device. Quirks with multiple
+match statements must match all of those to apply.
+
+.. warning:: Quirks are internal API and may change at any time for any reason.
+ No guarantee is given that any ``Match`` statement below works on
+ your version of libinput.
+
+MatchName, MatchUniq
+ Match on the ``NAME`` or ``UNIQ`` udev property on this device. These properties
+ are typically derived from the device's kernel name or uniq but may be overridden
+ by a udev rule. These matches use ``fnmatch()`` globs.
+MatchBus
+ A lower-case bus name. Currently supported are ``usb``, ``bluetooth``, ``ps2``,
+ ``rmi``, ``i2c``, and ``spi``.
+MatchVendor, MatchProduct, MatchVersion
+ The hexadecmial 4-digit vendor ID, product ID or driver version as exported, without
+ a ``0x`` prefix.
+MatchDMIModalias, MatchDeviceTree
+ An ``fnmatch()`` glob for the DMI modalias or the DeviceTree ``compatible`` string.
+ See ``/sys/class/dmi/id/modalias`` and ``/sys/firmware/devicetree/base/compatible``.
+MatchUdevType
+ One of ``touchpad``, ``mouse``, ``pointingstick``, ``keyboard``, ``joystick``,
+ ``tablet``, ``tablet-pad``. Matches the corresponding ``ID_INPUT_*`` udev
+ property.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.26.0/doc/user/pointer-acceleration.rst new/libinput-1.26.2/doc/user/pointer-acceleration.rst
--- old/libinput-1.26.0/doc/user/pointer-acceleration.rst 2024-06-06 06:09:40.000000000 +0200
+++ new/libinput-1.26.2/doc/user/pointer-acceleration.rst 2024-08-19 01:26:22.000000000 +0200
@@ -172,7 +172,7 @@
libinput attempts to normalize unit data to the best of its abilities, see
:ref:`trackpoint_multiplier`. Beyond this, it is not possible to have
-consistent behavior across different touchpad devices.
+consistent behavior across different trackpoint devices.
.. figure:: ptraccel-trackpoint.svg
:align: center
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.26.0/meson.build new/libinput-1.26.2/meson.build
--- old/libinput-1.26.0/meson.build 2024-06-06 06:09:40.000000000 +0200
+++ new/libinput-1.26.2/meson.build 2024-08-19 01:26:22.000000000 +0200
@@ -1,5 +1,5 @@
project('libinput', 'c',
- version : '1.26.0',
+ version : '1.26.2',
license : 'MIT/Expat',
default_options : [ 'c_std=gnu99', 'warning_level=2' ],
meson_version : '>= 0.56.0')
@@ -517,6 +517,7 @@
)
src_python_tools = files(
+ 'tools/libinput-analyze-buttons.py',
'tools/libinput-analyze-per-slot-delta.py',
'tools/libinput-analyze-recording.py',
'tools/libinput-analyze-touch-down-state.py',
@@ -990,6 +991,7 @@
src_man += files(
'tools/libinput.man',
'tools/libinput-analyze.man',
+ 'tools/libinput-analyze-buttons.man',
'tools/libinput-analyze-per-slot-delta.man',
'tools/libinput-analyze-recording.man',
'tools/libinput-analyze-touch-down-state.man',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.26.0/quirks/30-vendor-razer.quirks new/libinput-1.26.2/quirks/30-vendor-razer.quirks
--- old/libinput-1.26.0/quirks/30-vendor-razer.quirks 2024-06-06 06:09:40.000000000 +0200
+++ new/libinput-1.26.2/quirks/30-vendor-razer.quirks 2024-08-19 01:26:22.000000000 +0200
@@ -261,6 +261,13 @@
MatchProduct=0x028C
AttrKeyboardIntegration=internal
+[RazerBlade142023 Keyboard]
+MatchUdevType=keyboard
+MatchBus=usb
+MatchVendor=0x1532
+MatchProduct=0x029D
+AttrKeyboardIntegration=internal
+
[RazerBlade152023 Keyboard]
MatchUdevType=keyboard
MatchBus=usb
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.26.0/quirks/50-system-lg.quirks new/libinput-1.26.2/quirks/50-system-lg.quirks
--- old/libinput-1.26.0/quirks/50-system-lg.quirks 1970-01-01 01:00:00.000000000 +0100
+++ new/libinput-1.26.2/quirks/50-system-lg.quirks 2024-08-19 01:26:22.000000000 +0200
@@ -0,0 +1,6 @@
+# Do not edit this file, it will be overwritten on update
+
+[LG gram 14 2023 Touchpad]
+MatchName=* Touchpad
+MatchDMIModalias=dmi:*svnLGElectronics:pn14Z90R-G.AA79G:*
+ModelTouchpadPhantomClicks=1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.26.0/quirks/50-system-minisforum.quirks new/libinput-1.26.2/quirks/50-system-minisforum.quirks
--- old/libinput-1.26.0/quirks/50-system-minisforum.quirks 1970-01-01 01:00:00.000000000 +0100
+++ new/libinput-1.26.2/quirks/50-system-minisforum.quirks 2024-08-19 01:26:22.000000000 +0200
@@ -0,0 +1,11 @@
+# Do not edit this file, it will be overwritten on update
+
+[Minisforum V3 volume keys]
+MatchName=AT Translated Set 2 keyboard
+MatchDMIModalias=dmi:*svnMicroComputer(HK)TechLimited:pnV3:*
+ModelTabletModeNoSuspend=1
+
+[Minisforum V3 touchpad dwt]
+MatchName=USB Keyboard
+MatchDMIModalias=dmi:*svnMicroComputer(HK)TechLimited:pnV3:*
+AttrKeyboardIntegration=internal
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.26.0/src/evdev-mt-touchpad.c new/libinput-1.26.2/src/evdev-mt-touchpad.c
--- old/libinput-1.26.0/src/evdev-mt-touchpad.c 2024-06-06 06:09:40.000000000 +0200
+++ new/libinput-1.26.2/src/evdev-mt-touchpad.c 2024-08-19 01:26:22.000000000 +0200
@@ -2249,6 +2249,12 @@
}
static inline bool
+tp_key_is_shift(unsigned int keycode)
+{
+ return keycode == KEY_LEFTSHIFT || keycode == KEY_RIGHTSHIFT;
+}
+
+static inline bool
tp_key_is_modifier(unsigned int keycode)
{
switch (keycode) {
@@ -2320,10 +2326,14 @@
return;
/* modifier keys don't trigger disable-while-typing so things like
- * ctrl+zoom or ctrl+click are possible */
+ * ctrl+zoom or ctrl+click are possible.
+ * The exception is shift which we don't trigger DWT for on its own
+ * but we do trigger DWT for once we type some other key.
+ */
is_modifier = tp_key_is_modifier(key);
if (is_modifier) {
- long_set_bit(tp->dwt.mod_mask, key);
+ if (!tp_key_is_shift(key))
+ long_set_bit(tp->dwt.mod_mask, key);
return;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.26.0/src/evdev-tablet-pad.c new/libinput-1.26.2/src/evdev-tablet-pad.c
--- old/libinput-1.26.0/src/evdev-tablet-pad.c 2024-06-06 06:09:40.000000000 +0200
+++ new/libinput-1.26.2/src/evdev-tablet-pad.c 2024-08-19 01:26:22.000000000 +0200
@@ -111,7 +111,7 @@
break;
case REL_WHEEL:
if (!pad->dials.has_hires_dial) {
- pad->dials.dial1 = e->value * 120;
+ pad->dials.dial1 = -1 * e->value * 120;
pad->changed_axes |= PAD_AXIS_DIAL1;
pad_set_status(pad, PAD_AXES_UPDATED);
}
@@ -124,12 +124,12 @@
}
break;
case REL_WHEEL_HI_RES:
- pad->dials.dial1 = e->value;
+ pad->dials.dial1 = -1 * e->value;
pad->changed_axes |= PAD_AXIS_DIAL1;
pad_set_status(pad, PAD_AXES_UPDATED);
break;
case REL_HWHEEL_HI_RES:
- pad->dials.dial2 = e->value * 120;
+ pad->dials.dial2 = e->value;
pad->changed_axes |= PAD_AXIS_DIAL2;
pad_set_status(pad, PAD_AXES_UPDATED);
break;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.26.0/src/evdev-tablet.c new/libinput-1.26.2/src/evdev-tablet.c
--- old/libinput-1.26.0/src/evdev-tablet.c 2024-06-06 06:09:40.000000000 +0200
+++ new/libinput-1.26.2/src/evdev-tablet.c 2024-08-19 01:26:22.000000000 +0200
@@ -2496,9 +2496,10 @@
static void
tablet_init_calibration(struct tablet_dispatch *tablet,
- struct evdev_device *device)
+ struct evdev_device *device,
+ bool is_display_tablet)
{
- if (libevdev_has_property(device->evdev, INPUT_PROP_DIRECT))
+ if (is_display_tablet || libevdev_has_property(device->evdev, INPUT_PROP_DIRECT))
evdev_init_calibration(device, &tablet->calibration);
}
@@ -2585,11 +2586,12 @@
tablet_change_to_left_handed);
}
-static bool
-tablet_is_aes(struct evdev_device *device,
- struct tablet_dispatch *tablet)
+static void
+tablet_lookup_libwacom(struct evdev_device *device,
+ struct tablet_dispatch *tablet,
+ bool *is_aes,
+ bool *is_display_tablet)
{
- bool is_aes = false;
#if HAVE_LIBWACOM
const char *devnode;
WacomDeviceDatabase *db;
@@ -2598,6 +2600,18 @@
int nstyli;
int vid = evdev_device_get_id_vendor(device);
+ db = tablet_libinput_context(tablet)->libwacom.db;
+ if (!db)
+ return;
+
+ devnode = udev_device_get_devnode(device->udev_device);
+ libwacom_device = libwacom_new_from_path(db, devnode, WFALLBACK_NONE, NULL);
+ if (!libwacom_device)
+ return;
+
+ *is_display_tablet = !!(libwacom_get_integration_flags(libwacom_device)
+ & (WACOM_DEVICE_INTEGRATED_SYSTEM|WACOM_DEVICE_INTEGRATED_DISPLAY));
+
/* Wacom-specific check for whether smoothing is required:
* libwacom keeps all the AES pens in a single group, so any device
* that supports AES pens will list all AES pens. 0x11 is one of the
@@ -2605,35 +2619,24 @@
* is an AES tablet
*/
if (vid != VENDOR_ID_WACOM)
- goto out;
-
- db = tablet_libinput_context(tablet)->libwacom.db;
- if (!db)
- goto out;
-
- devnode = udev_device_get_devnode(device->udev_device);
- libwacom_device = libwacom_new_from_path(db, devnode, WFALLBACK_NONE, NULL);
- if (!libwacom_device)
- goto out;
+ return;
stylus_ids = libwacom_get_supported_styli(libwacom_device, &nstyli);
for (int i = 0; i < nstyli; i++) {
if (stylus_ids[i] == 0x11) {
- is_aes = true;
+ *is_aes = true;
break;
}
}
libwacom_destroy(libwacom_device);
-
-out:
#endif
- return is_aes;
}
static void
tablet_init_smoothing(struct evdev_device *device,
- struct tablet_dispatch *tablet)
+ struct tablet_dispatch *tablet,
+ bool is_aes)
{
size_t history_size = ARRAY_LENGTH(tablet->history.samples);
struct quirks_context *quirks = NULL;
@@ -2647,7 +2650,7 @@
* AttrTabletSmoothing can override this, if necessary.
*/
if (!q || !quirks_get_bool(q, QUIRK_ATTR_TABLET_SMOOTHING, &use_smoothing))
- use_smoothing = !tablet_is_aes(device, tablet);
+ use_smoothing = !is_aes;
/* Setting the history size to 1 means we never do any actual smoothing. */
if (!use_smoothing)
@@ -2752,6 +2755,10 @@
if (tablet_reject_device(device))
return -1;
+ bool is_aes = false;
+ bool is_display_tablet = false;
+ tablet_lookup_libwacom(device, tablet, &is_aes, &is_display_tablet);
+
if (!libevdev_has_event_code(evdev, EV_KEY, BTN_TOOL_PEN)) {
libevdev_enable_event_code(evdev, EV_KEY, BTN_TOOL_PEN, NULL);
tablet->quirks.proximity_out_forced = true;
@@ -2765,7 +2772,7 @@
}
tablet_fix_tilt(tablet, device);
- tablet_init_calibration(tablet, device);
+ tablet_init_calibration(tablet, device, is_display_tablet);
tablet_init_proximity_threshold(tablet, device);
rc = tablet_init_accel(tablet, device);
if (rc != 0)
@@ -2773,7 +2780,7 @@
evdev_init_sendevents(device, &tablet->base);
tablet_init_left_handed(device);
- tablet_init_smoothing(device, tablet);
+ tablet_init_smoothing(device, tablet, is_aes);
for (axis = LIBINPUT_TABLET_TOOL_AXIS_X;
axis <= LIBINPUT_TABLET_TOOL_AXIS_MAX;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.26.0/src/libinput.c new/libinput-1.26.2/src/libinput.c
--- old/libinput-1.26.0/src/libinput.c 2024-06-06 06:09:40.000000000 +0200
+++ new/libinput-1.26.2/src/libinput.c 2024-08-19 01:26:22.000000000 +0200
@@ -1505,7 +1505,7 @@
LIBINPUT_EXPORT double
libinput_event_tablet_tool_get_x_transformed(struct libinput_event_tablet_tool *event,
- uint32_t width)
+ uint32_t width)
{
struct evdev_device *device = evdev_device(event->base.device);
@@ -1524,7 +1524,7 @@
LIBINPUT_EXPORT double
libinput_event_tablet_tool_get_y_transformed(struct libinput_event_tablet_tool *event,
- uint32_t height)
+ uint32_t height)
{
struct evdev_device *device = evdev_device(event->base.device);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.26.0/src/libinput.h new/libinput-1.26.2/src/libinput.h
--- old/libinput-1.26.0/src/libinput.h 2024-06-06 06:09:40.000000000 +0200
+++ new/libinput-1.26.2/src/libinput.h 2024-08-19 01:26:22.000000000 +0200
@@ -4615,6 +4615,10 @@
* - libinput_device_config_dwt_set_enabled()
* - Touchscreens:
* - libinput_device_config_calibration_set_matrix()
+ * - Tablets:
+ * - libinput_device_config_calibration_set_matrix()
+ * - libinput_tablet_tool_config_pressure_range_set()
+ * - libinput_device_config_left_handed_set()
* - Pointer devices (mice, trackballs, touchpads):
* - libinput_device_config_accel_set_speed()
* - libinput_device_config_accel_set_profile()
@@ -6581,7 +6585,7 @@
* @see libinput_tablet_tool_config_pressure_range_get_default_minimum
* @see libinput_tablet_tool_config_pressure_range_get_default_maximum
*
- * @since 1.25
+ * @since 1.26
*/
int
libinput_tablet_tool_config_pressure_range_is_available(struct libinput_tablet_tool *tool);
@@ -6594,11 +6598,11 @@
* pressure of the given minimum value maps into a logical pressure of 0.0 (as
* returned by libinput_event_tablet_tool_get_pressure()) and the hardware
* pressure of the given maximum value is mapped into the logical pressure
- * of 1.0 (as returned by . libinput_event_tablet_tool_get_pressure())
+ * of 1.0 (as returned by libinput_event_tablet_tool_get_pressure())
*
* The minimum value must be less than the maximum value, libinput may
- * libinput may require the values to have a specific distance to each other,
- * i.e. that (maximium - minimum > N) for an implementation-defined value of N.
+ * require the values to have a specific distance to each other,
+ * i.e. that (maximum - minimum > N) for an implementation-defined value of N.
*
* @param tool The libinput tool
* @param minimum The minimum pressure value in the range [0.0, 1.0)
@@ -6611,6 +6615,8 @@
* @see libinput_tablet_tool_config_pressure_range_get_maximum
* @see libinput_tablet_tool_config_pressure_range_get_default_minimum
* @see libinput_tablet_tool_config_pressure_range_get_default_maximum
+ *
+ * @since 1.26
*/
enum libinput_config_status
libinput_tablet_tool_config_pressure_range_set(struct libinput_tablet_tool *tool,
@@ -6633,6 +6639,8 @@
* @see libinput_tablet_tool_config_pressure_range_get_maximum
* @see libinput_tablet_tool_config_pressure_range_get_default_minimum
* @see libinput_tablet_tool_config_pressure_range_get_default_maximum
+ *
+ * @since 1.26
*/
double
libinput_tablet_tool_config_pressure_range_get_minimum(struct libinput_tablet_tool *tool);
@@ -6653,6 +6661,8 @@
* @see libinput_tablet_tool_config_pressure_range_get_minimum
* @see libinput_tablet_tool_config_pressure_range_get_default_maximum
* @see libinput_tablet_tool_config_pressure_range_get_default_maximum
+ *
+ * @since 1.26
*/
double
libinput_tablet_tool_config_pressure_range_get_maximum(struct libinput_tablet_tool *tool);
@@ -6673,6 +6683,8 @@
* @see libinput_tablet_tool_config_pressure_range_get_minimum
* @see libinput_tablet_tool_config_pressure_range_get_maximum
* @see libinput_tablet_tool_config_pressure_range_get_default_maximum
+ *
+ * @since 1.26
*/
double
libinput_tablet_tool_config_pressure_range_get_default_minimum(struct libinput_tablet_tool *tool);
@@ -6693,6 +6705,8 @@
* @see libinput_tablet_tool_config_pressure_range_get_maximum
* @see libinput_tablet_tool_config_pressure_range_get_maximum
* @see libinput_tablet_tool_config_pressure_range_get_default_maximum
+ *
+ * @since 1.26
*/
double
libinput_tablet_tool_config_pressure_range_get_default_maximum(struct libinput_tablet_tool *tool);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.26.0/test/test-pad.c new/libinput-1.26.2/test/test-pad.c
--- old/libinput-1.26.0/test/test-pad.c 2024-06-06 06:09:40.000000000 +0200
+++ new/libinput-1.26.2/test/test-pad.c 2024-08-19 01:26:22.000000000 +0200
@@ -497,7 +497,7 @@
expected_ndials = 2;
ndials = libinput_device_tablet_pad_get_num_dials(device);
- ck_assert_int_ge(ndials, expected_ndials);
+ ck_assert_int_eq(ndials, expected_ndials);
}
END_TEST
@@ -526,7 +526,16 @@
struct libinput_event_tablet_pad *pev = litest_is_pad_dial_event(ev, 0);
double v120 = libinput_event_tablet_pad_get_dial_delta_v120(pev);
- ck_assert_double_ge(v120, 120.0 * direction);
+ switch (code) {
+ case REL_WHEEL: /* inverted */
+ ck_assert_double_eq(v120, -120.0 * direction);
+ break;
+ case REL_DIAL:
+ ck_assert_double_eq(v120, 120.0 * direction);
+ break;
+ default:
+ ck_abort();
+ }
libinput_event_destroy(ev);
}
}
@@ -556,7 +565,7 @@
struct libinput_event_tablet_pad *pev = litest_is_pad_dial_event(ev, 0);
double v120 = libinput_event_tablet_pad_get_dial_delta_v120(pev);
- ck_assert_double_ge(v120, increment);
+ ck_assert_double_eq(v120, -increment); /* REL_WHEEL is inverted */
libinput_event_destroy(ev);
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.26.0/test/test-tablet.c new/libinput-1.26.2/test/test-tablet.c
--- old/libinput-1.26.0/test/test-tablet.c 2024-06-06 06:09:40.000000000 +0200
+++ new/libinput-1.26.2/test/test-tablet.c 2024-08-19 01:26:22.000000000 +0200
@@ -32,6 +32,10 @@
#include <stdbool.h>
#include <stdarg.h>
+#if HAVE_LIBWACOM
+#include <libwacom/libwacom.h>
+#endif
+
#include "libinput-util.h"
#include "evdev-tablet.h"
#include "litest.h"
@@ -3677,6 +3681,28 @@
}
END_TEST
+static bool
+device_has_calibration(struct litest_device *dev)
+{
+ bool has_calibration = libevdev_has_property(dev->evdev, INPUT_PROP_DIRECT);
+
+ if (has_calibration)
+ return true;
+#if HAVE_LIBWACOM
+ WacomDeviceDatabase *db = libwacom_database_new();
+ if (db) {
+ WacomDevice *d = libwacom_new_from_path(db, libevdev_uinput_get_devnode(dev->uinput), WFALLBACK_NONE, NULL);
+ if (d) {
+ has_calibration = !!(libwacom_get_integration_flags(d) & (WACOM_DEVICE_INTEGRATED_SYSTEM|WACOM_DEVICE_INTEGRATED_DISPLAY));
+ libwacom_destroy(d);
+ }
+ libwacom_database_destroy(db);
+ }
+#endif
+
+ return has_calibration;
+}
+
START_TEST(tablet_calibration_has_matrix)
{
struct litest_device *dev = litest_current_device();
@@ -3686,7 +3712,7 @@
float calibration[6] = {1, 0, 0, 0, 1, 0};
int has_calibration;
- has_calibration = libevdev_has_property(dev->evdev, INPUT_PROP_DIRECT);
+ has_calibration = device_has_calibration(dev);
rc = libinput_device_config_calibration_has_matrix(d);
ck_assert_int_eq(rc, has_calibration);
@@ -3719,11 +3745,9 @@
{ ABS_PRESSURE, 10 },
{ -1, -1 }
};
- int has_calibration;
double x, y, dx, dy, mdx, mdy;
- has_calibration = libevdev_has_property(dev->evdev, INPUT_PROP_DIRECT);
- if (!has_calibration)
+ if (!device_has_calibration(dev))
return;
litest_drain_events(li);
@@ -3804,11 +3828,9 @@
{ ABS_PRESSURE, 0 },
{ -1, -1 }
};
- int has_calibration;
double x, y;
- has_calibration = libevdev_has_property(dev->evdev, INPUT_PROP_DIRECT);
- if (!has_calibration)
+ if (!device_has_calibration(dev))
return;
litest_drain_events(li);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.26.0/test/test-touchpad.c new/libinput-1.26.2/test/test-touchpad.c
--- old/libinput-1.26.0/test/test-touchpad.c 2024-06-06 06:09:40.000000000 +0200
+++ new/libinput-1.26.2/test/test-touchpad.c 2024-08-19 01:26:22.000000000 +0200
@@ -4259,6 +4259,50 @@
}
END_TEST
+START_TEST(touchpad_dwt_shift_combo_triggers_dwt)
+{
+ struct litest_device *touchpad = litest_current_device();
+ struct litest_device *keyboard;
+ struct libinput *li = touchpad->libinput;
+ unsigned int modifiers[] = {
+ KEY_LEFTSHIFT,
+ KEY_RIGHTSHIFT,
+ };
+
+ if (!has_disable_while_typing(touchpad))
+ return;
+
+ keyboard = dwt_init_paired_keyboard(li, touchpad);
+ litest_disable_tap(touchpad->libinput_device);
+ litest_disable_hold_gestures(touchpad->libinput_device);
+ litest_drain_events(li);
+
+ ARRAY_FOR_EACH(modifiers, key) {
+ litest_keyboard_key(keyboard, *key, true);
+ litest_keyboard_key(keyboard, KEY_A, true);
+ litest_keyboard_key(keyboard, KEY_A, false);
+ litest_keyboard_key(keyboard, *key, false);
+ libinput_dispatch(li);
+
+ litest_assert_only_typed_events(li, LIBINPUT_EVENT_KEYBOARD_KEY);
+
+ litest_touch_down(touchpad, 0, 50, 50);
+ litest_touch_move_to(touchpad, 0, 50, 50, 70, 50, 5);
+ litest_touch_up(touchpad, 0);
+ litest_assert_empty_queue(li);
+ }
+
+ litest_timeout_dwt_long();
+ libinput_dispatch(li);
+ litest_touch_down(touchpad, 0, 50, 50);
+ litest_touch_move_to(touchpad, 0, 50, 50, 70, 50, 5);
+ litest_touch_up(touchpad, 0);
+ litest_assert_only_typed_events(li, LIBINPUT_EVENT_POINTER_MOTION);
+
+ litest_delete_device(keyboard);
+}
+END_TEST
+
START_TEST(touchpad_dwt_modifier_combo_no_dwt)
{
struct litest_device *touchpad = litest_current_device();
@@ -4269,8 +4313,6 @@
KEY_RIGHTCTRL,
KEY_LEFTALT,
KEY_RIGHTALT,
- KEY_LEFTSHIFT,
- KEY_RIGHTSHIFT,
KEY_FN,
KEY_CAPSLOCK,
KEY_TAB,
@@ -4318,8 +4360,6 @@
KEY_RIGHTCTRL,
KEY_LEFTALT,
KEY_RIGHTALT,
- KEY_LEFTSHIFT,
- KEY_RIGHTSHIFT,
KEY_FN,
KEY_CAPSLOCK,
KEY_TAB,
@@ -4371,8 +4411,6 @@
KEY_RIGHTCTRL,
KEY_LEFTALT,
KEY_RIGHTALT,
- KEY_LEFTSHIFT,
- KEY_RIGHTSHIFT,
KEY_FN,
KEY_CAPSLOCK,
KEY_TAB,
@@ -7372,6 +7410,7 @@
litest_add(touchpad_dwt_key_hold_timeout_existing_touch_cornercase, LITEST_TOUCHPAD, LITEST_ANY);
litest_add(touchpad_dwt_type, LITEST_TOUCHPAD, LITEST_ANY);
litest_add(touchpad_dwt_type_short_timeout, LITEST_TOUCHPAD, LITEST_ANY);
+ litest_add(touchpad_dwt_shift_combo_triggers_dwt, LITEST_TOUCHPAD, LITEST_ANY);
litest_add(touchpad_dwt_modifier_no_dwt, LITEST_TOUCHPAD, LITEST_ANY);
litest_add(touchpad_dwt_modifier_combo_no_dwt, LITEST_TOUCHPAD, LITEST_ANY);
litest_add(touchpad_dwt_modifier_combo_dwt_after, LITEST_TOUCHPAD, LITEST_ANY);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.26.0/tools/libinput-analyze-buttons.man new/libinput-1.26.2/tools/libinput-analyze-buttons.man
--- old/libinput-1.26.0/tools/libinput-analyze-buttons.man 1970-01-01 01:00:00.000000000 +0100
+++ new/libinput-1.26.2/tools/libinput-analyze-buttons.man 2024-08-19 01:26:22.000000000 +0200
@@ -0,0 +1,26 @@
+.TH libinput-analyze-buttons "1"
+.SH NAME
+libinput\-analyze\-buttons \- analyze the button states of a recording
+.SH SYNOPSIS
+.B libinput analyze buttons [\-\-help] [options] \fIrecording.yml\fI
+.SH DESCRIPTION
+.PP
+The
+.B "libinput analyze buttons"
+tool analyzes a recording made with
+.B "libinput record"
+and prints information about the button states.
+.PP
+This is a debugging tool only, its output may change at any time. Do not
+rely on the output.
+.SH OPTIONS
+.TP 8
+.B \-\-help
+Print help
+.TP 8
+.B \-\-threshold=<ms>
+Color any delta time less than the threshold in red.
+.SH LIBINPUT
+Part of the
+.B libinput(1)
+suite
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.26.0/tools/libinput-analyze-buttons.py new/libinput-1.26.2/tools/libinput-analyze-buttons.py
--- old/libinput-1.26.0/tools/libinput-analyze-buttons.py 1970-01-01 01:00:00.000000000 +0100
+++ new/libinput-1.26.2/tools/libinput-analyze-buttons.py 2024-08-19 01:26:22.000000000 +0200
@@ -0,0 +1,222 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8
+# vim: set expandtab shiftwidth=4:
+# -*- Mode: python; coding: utf-8; indent-tabs-mode: nil -*- */
+#
+# Copyright © 2024 Red Hat, Inc.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the 'Software'),
+# to deal in the Software without restriction, including without limitation
+# the rights to use, copy, modify, merge, publish, distribute, sublicense,
+# and/or sell copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice (including the next
+# paragraph) shall be included in all copies or substantial portions of the
+# Software.
+#
+# THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+# DEALINGS IN THE SOFTWARE.
+#
+# Prints the data from a libinput recording in a table format to ease
+# debugging.
+#
+# Input is a libinput record yaml file
+
+from dataclasses import dataclass
+import argparse
+import os
+import sys
+import yaml
+import libevdev
+
+COLOR_RESET = "\x1b[0m"
+COLOR_RED = "\x1b[6;31m"
+
+
+def micros(e: libevdev.InputEvent):
+ return e.usec + e.sec * 1_000_000
+
+
+@dataclass
+class Timestamp:
+ sec: int
+ usec: int
+
+ @property
+ def micros(self) -> int:
+ return self.usec + self.sec * 1_000_000
+
+
+@dataclass
+class ButtonFrame:
+ delta_ms: int # delta time to last button (not evdev!) frame
+ evdev_delta_ms: int # delta time to last evdev frame
+ events: list[libevdev.InputEvent] # BTN_ events only
+
+ @property
+ def timestamp(self) -> Timestamp:
+ e = self.events[0]
+ return Timestamp(e.sec, e.usec)
+
+ def value(self, code: libevdev.EventCode) -> bool | None:
+ for e in self.events:
+ if e.matches(code):
+ return e.value
+ return None
+
+ def values(self, codes: list[libevdev.EventCode]) -> list[bool | None]:
+ return [self.value(code) for code in codes]
+
+
+def frames(events):
+ last_timestamp = None
+ current_frame = None
+ last_frame = None
+ for e in events:
+ if last_timestamp is None:
+ last_timestamp = micros(e)
+ if e.type == libevdev.EV_SYN:
+ last_timestamp = micros(e)
+ if current_frame is not None:
+ yield current_frame
+ last_frame = current_frame
+ current_frame = None
+ elif e.type == libevdev.EV_KEY:
+ if e.code.name.startswith("BTN_") and not e.code.name.startswith(
+ "BTN_TOOL_"
+ ):
+ timestamp = micros(e)
+ evdev_delta = (timestamp - last_timestamp) // 1000
+
+ if last_frame is not None:
+ delta = (timestamp - last_frame.timestamp.micros) // 1000
+ else:
+ delta = 0
+
+ if current_frame is None:
+ current_frame = ButtonFrame(
+ delta_ms=delta, evdev_delta_ms=evdev_delta, events=[e]
+ )
+ else:
+ current_frame.events.append(e)
+
+
+def main(argv):
+ parser = argparse.ArgumentParser(description="Display button events in a recording")
+ parser.add_argument(
+ "--threshold",
+ type=int,
+ default=25,
+ help="Mark any time delta above this threshold (in ms)",
+ )
+ parser.add_argument(
+ "path", metavar="recording", nargs=1, help="Path to libinput-record YAML file"
+ )
+ args = parser.parse_args()
+ isatty = os.isatty(sys.stdout.fileno())
+ if not isatty:
+ global COLOR_RESET
+ global COLOR_RED
+ COLOR_RESET = ""
+ COLOR_RED = ""
+
+ yml = yaml.safe_load(open(args.path[0]))
+ if yml["ndevices"] > 1:
+ print(f"WARNING: Using only first {yml['ndevices']} devices in recording")
+ device = yml["devices"][0]
+ if not device["events"]:
+ print("No events found in recording")
+ sys.exit(1)
+
+ def events():
+ """
+ Yields the next event in the recording
+ """
+ for event in device["events"]:
+ for evdev in event.get("evdev", []):
+ yield libevdev.InputEvent(
+ code=libevdev.evbit(evdev[2], evdev[3]),
+ value=evdev[4],
+ sec=evdev[0],
+ usec=evdev[1],
+ )
+
+ # These are the buttons we possibly care about, but we filter to the ones
+ # found on this device anyway
+ buttons = [
+ libevdev.EV_KEY.BTN_LEFT,
+ libevdev.EV_KEY.BTN_MIDDLE,
+ libevdev.EV_KEY.BTN_RIGHT,
+ libevdev.EV_KEY.BTN_SIDE,
+ libevdev.EV_KEY.BTN_EXTRA,
+ libevdev.EV_KEY.BTN_FORWARD,
+ libevdev.EV_KEY.BTN_BACK,
+ libevdev.EV_KEY.BTN_TASK,
+ libevdev.EV_KEY.BTN_TOUCH,
+ libevdev.EV_KEY.BTN_STYLUS,
+ libevdev.EV_KEY.BTN_STYLUS2,
+ libevdev.EV_KEY.BTN_STYLUS3,
+ libevdev.EV_KEY.BTN_0,
+ libevdev.EV_KEY.BTN_1,
+ libevdev.EV_KEY.BTN_2,
+ libevdev.EV_KEY.BTN_3,
+ libevdev.EV_KEY.BTN_4,
+ libevdev.EV_KEY.BTN_5,
+ libevdev.EV_KEY.BTN_6,
+ libevdev.EV_KEY.BTN_7,
+ libevdev.EV_KEY.BTN_8,
+ libevdev.EV_KEY.BTN_9,
+ ]
+
+ def filter_buttons(buttons):
+ return filter(
+ lambda c: c in buttons,
+ map(lambda c: libevdev.evbit("EV_KEY", c), device["evdev"]["codes"][1]),
+ )
+
+ buttons = list(filter_buttons(buttons))
+
+ # all BTN_STYLUS will have a header of S - meh
+ btn_headers = " │ ".join(b.name[4] for b in buttons)
+ print(f"{'Timestamp':^13s} │ {'Delta':^8s} │ {btn_headers}")
+ last_btn_vals = [None] * len(buttons)
+
+ def btnchar(b, last):
+ if b == 1:
+ return "┬"
+ if b == 0:
+ return "┴"
+ return "│" if last else " "
+
+ for frame in frames(events()):
+ ts = frame.timestamp
+ if frame.timestamp.micros > 0 and frame.delta_ms < args.threshold:
+ color = COLOR_RED
+ else:
+ color = ""
+ btn_vals = frame.values(buttons)
+ btn_strs = " │ ".join(
+ [btnchar(b, last) for b, last in zip(btn_vals, last_btn_vals)]
+ )
+
+ last_btn_vals = [
+ b if b is not None else last for b, last in zip(btn_vals, last_btn_vals)
+ ]
+
+ print(
+ f"{color}{ts.sec:6d}.{ts.usec:06d} │ {frame.delta_ms:6d}ms │ {btn_strs}{COLOR_RESET}"
+ )
+
+
+if __name__ == "__main__":
+ try:
+ main(sys.argv)
+ except BrokenPipeError:
+ pass
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.26.0/tools/libinput-analyze.man new/libinput-1.26.2/tools/libinput-analyze.man
--- old/libinput-1.26.0/tools/libinput-analyze.man 2024-06-06 06:09:40.000000000 +0200
+++ new/libinput-1.26.2/tools/libinput-analyze.man 2024-08-19 01:26:22.000000000 +0200
@@ -22,6 +22,9 @@
.SH FEATURES
Features that can be analyzed include
.TP 8
+.B libinput\-analyze\-buttons(1)
+analyze the button states of a recording
+.TP 8
.B libinput\-analyze\-per-slot-delta(1)
analyze the delta per event per slot
.TP 8
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.26.0/tools/libinput-debug-events.c new/libinput-1.26.2/tools/libinput-debug-events.c
--- old/libinput-1.26.0/tools/libinput-debug-events.c 2024-06-06 06:09:40.000000000 +0200
+++ new/libinput-1.26.2/tools/libinput-debug-events.c 2024-08-19 01:26:22.000000000 +0200
@@ -940,9 +940,15 @@
case LIBINPUT_EVENT_TABLET_TOOL_AXIS:
print_tablet_axis_event(ev);
break;
- case LIBINPUT_EVENT_TABLET_TOOL_PROXIMITY:
+ case LIBINPUT_EVENT_TABLET_TOOL_PROXIMITY: {
+ struct libinput_event_tablet_tool *tev =
+ libinput_event_get_tablet_tool_event(ev);
+ struct libinput_tablet_tool *tool =
+ libinput_event_tablet_tool_get_tool(tev);
+ tools_tablet_tool_apply_config(tool, &options);
print_proximity_event(ev);
break;
+ }
case LIBINPUT_EVENT_TABLET_TOOL_TIP:
print_tablet_tip_event(ev);
break;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.26.0/tools/libinput-debug-events.man new/libinput-1.26.2/tools/libinput-debug-events.man
--- old/libinput-1.26.0/tools/libinput-debug-events.man 2024-06-06 06:09:40.000000000 +0200
+++ new/libinput-1.26.2/tools/libinput-debug-events.man 2024-08-19 01:26:22.000000000 +0200
@@ -125,6 +125,9 @@
.TP 8
.B \-\-set\-rotation\-angle=<degrees>
Set the rotation angle in degrees (0 to 360).
+.TP 8
+.B \-\-set\-pressure\-range=<min>:<max>
+Set the tablet tool pressure range to min:max. min and max must be in range [0.0, 1.0].
.SH NOTES
.PP
Events shown by this tool may not correspond to the events seen by a
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.26.0/tools/libinput-debug-gui.c new/libinput-1.26.2/tools/libinput-debug-gui.c
--- old/libinput-1.26.0/tools/libinput-debug-gui.c 2024-06-06 06:09:40.000000000 +0200
+++ new/libinput-1.26.2/tools/libinput-debug-gui.c 2024-08-19 01:26:22.000000000 +0200
@@ -487,6 +487,7 @@
outline_height = 1.0 * height/width * normalized_width;
outline_width = normalized_width;
+ cairo_set_source_rgb(cr, .2, .2, .8);
x = 1.0 * (w->evdev.x - ax->minimum)/width * outline_width;
y = 1.0 * (w->evdev.y - ay->minimum)/height * outline_height;
x += center_x - outline_width/2;
@@ -1655,6 +1656,7 @@
handle_event_tablet(struct libinput_event *ev, struct window *w)
{
struct libinput_event_tablet_tool *t = libinput_event_get_tablet_tool_event(ev);
+ struct libinput_tablet_tool *tool = libinput_event_tablet_tool_get_tool(t);
double x, y;
struct point point;
int idx;
@@ -1667,6 +1669,7 @@
switch (libinput_event_get_type(ev)) {
case LIBINPUT_EVENT_TABLET_TOOL_PROXIMITY:
+ tools_tablet_tool_apply_config(tool, &w->options);
if (libinput_event_tablet_tool_get_proximity_state(t) ==
LIBINPUT_TABLET_TOOL_PROXIMITY_STATE_OUT) {
w->tool.x_in = 0;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.26.0/tools/libinput-debug-tablet.c new/libinput-1.26.2/tools/libinput-debug-tablet.c
--- old/libinput-1.26.0/tools/libinput-debug-tablet.c 2024-06-06 06:09:40.000000000 +0200
+++ new/libinput-1.26.2/tools/libinput-debug-tablet.c 2024-08-19 01:26:22.000000000 +0200
@@ -381,9 +381,15 @@
case LIBINPUT_EVENT_TABLET_TOOL_AXIS:
handle_tablet_axis_event(ctx, ev);
break;
- case LIBINPUT_EVENT_TABLET_TOOL_PROXIMITY:
+ case LIBINPUT_EVENT_TABLET_TOOL_PROXIMITY: {
+ struct libinput_event_tablet_tool *tev =
+ libinput_event_get_tablet_tool_event(ev);
+ struct libinput_tablet_tool *tool =
+ libinput_event_tablet_tool_get_tool(tev);
+ tools_tablet_tool_apply_config(tool, &options);
handle_tablet_proximity_event(ctx, ev);
break;
+ }
case LIBINPUT_EVENT_TABLET_TOOL_TIP:
handle_tablet_tip_event(ctx, ev);
break;
@@ -555,6 +561,12 @@
backend = BACKEND_UDEV;
seat_or_device[0] = optarg;
break;
+ default:
+ if (tools_parse_option(c, optarg, &options) != 0) {
+ usage();
+ return EXIT_INVALID_USAGE;
+ }
+ break;
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.26.0/tools/shared.c new/libinput-1.26.2/tools/shared.c
--- old/libinput-1.26.0/tools/shared.c 2024-06-06 06:09:40.000000000 +0200
+++ new/libinput-1.26.2/tools/shared.c 2024-08-19 01:26:22.000000000 +0200
@@ -39,6 +39,7 @@
#include <libevdev/libevdev.h>
#include "builddir.h"
+#include "libinput.h"
#include "shared.h"
#include "util-macros.h"
#include "util-strings.h"
@@ -120,6 +121,10 @@
options->custom_npoints = ARRAY_LENGTH(points);
options->custom_type = LIBINPUT_ACCEL_TYPE_FALLBACK;
options->custom_step = 1.0;
+ options->pressure_range[0] = 0.0;
+ options->pressure_range[1] = 1.0;
+ options->calibration[0] = 1.0;
+ options->calibration[4] = 1.0;
}
int
@@ -335,6 +340,39 @@
fprintf(stderr, "Invalid --set-rotation-angle value\n");
return 1;
}
+ break;
+ case OPT_PRESSURE_RANGE: {
+ if (!optarg)
+ return 1;
+
+ size_t npoints = 0;
+ double *range = double_array_from_string(optarg, ":", &npoints);
+ if (npoints != 2 || range[0] < 0.0 || range[1] > 1.0 || range[0] >= range[1]) {
+ free(range);
+ fprintf(stderr, "Invalid pressure range, must be in format \"min:max\"\n");
+ return 1;
+ }
+ options->pressure_range[0] = range[0];
+ options->pressure_range[1] = range[1];
+ free(range);
+ break;
+ }
+ case OPT_CALIBRATION: {
+ if (!optarg)
+ return 1;
+
+ size_t npoints = 0;
+ double *matrix = double_array_from_string(optarg, " ", &npoints);
+ if (npoints != 6) {
+ free(matrix);
+ fprintf(stderr, "Invalid calibration matrix, must be 6 space-separated values\n");
+ return 1;
+ }
+ for (size_t i = 0; i < 6; i++)
+ options->calibration[i] = matrix[i];
+ free(matrix);
+ break;
+ }
}
return 0;
}
@@ -547,6 +585,18 @@
if (options->angle != 0)
libinput_device_config_rotation_set_angle(device, options->angle % 360);
+
+ if (libinput_device_config_calibration_has_matrix(device))
+ libinput_device_config_calibration_set_matrix(device, options->calibration);
+}
+
+void
+tools_tablet_tool_apply_config(struct libinput_tablet_tool *tool,
+ struct tools_options *options)
+{
+ libinput_tablet_tool_config_pressure_range_set(tool,
+ options->pressure_range[0],
+ options->pressure_range[1]);
}
static char*
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.26.0/tools/shared.h new/libinput-1.26.2/tools/shared.h
--- old/libinput-1.26.0/tools/shared.h 2024-06-06 06:09:40.000000000 +0200
+++ new/libinput-1.26.2/tools/shared.h 2024-08-19 01:26:22.000000000 +0200
@@ -64,6 +64,8 @@
OPT_CUSTOM_STEP,
OPT_CUSTOM_TYPE,
OPT_ROTATION_ANGLE,
+ OPT_PRESSURE_RANGE,
+ OPT_CALIBRATION,
};
#define CONFIGURATION_OPTIONS \
@@ -97,7 +99,9 @@
{ "set-custom-points", required_argument, 0, OPT_CUSTOM_POINTS },\
{ "set-custom-step", required_argument, 0, OPT_CUSTOM_STEP },\
{ "set-custom-type", required_argument, 0, OPT_CUSTOM_TYPE },\
- { "set-rotation-angle", required_argument, 0, OPT_ROTATION_ANGLE }
+ { "set-rotation-angle", required_argument, 0, OPT_ROTATION_ANGLE }, \
+ { "set-pressure-range", required_argument, 0, OPT_PRESSURE_RANGE }, \
+ { "set-calibration", required_argument, 0, OPT_CALIBRATION }
enum tools_backend {
BACKEND_NONE,
@@ -130,6 +134,8 @@
size_t custom_npoints;
double *custom_points;
unsigned int angle;
+ double pressure_range[2];
+ float calibration[6];
};
void tools_init_options(struct tools_options *options);
@@ -142,6 +148,8 @@
bool *grab);
void tools_device_apply_config(struct libinput_device *device,
struct tools_options *options);
+void tools_tablet_tool_apply_config(struct libinput_tablet_tool *tool,
+ struct tools_options *options);
int tools_exec_command(const char *prefix, int argc, char **argv);
bool find_touchpad_device(char *path, size_t path_len);
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-sqlparse for openSUSE:Factory checked in at 2024-08-20 16:12:48
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-sqlparse (Old)
and /work/SRC/openSUSE:Factory/.python-sqlparse.new.2698 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-sqlparse"
Tue Aug 20 16:12:48 2024 rev:19 rq:1194657 version:0.5.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-sqlparse/python-sqlparse.changes 2024-05-08 11:38:52.102885476 +0200
+++ /work/SRC/openSUSE:Factory/.python-sqlparse.new.2698/python-sqlparse.changes 2024-08-20 16:12:58.733128481 +0200
@@ -1,0 +2,18 @@
+Mon Aug 19 07:42:50 UTC 2024 - Dirk Müller <dmueller(a)suse.com>
+
+- update to 0.5.1:
+ * New "compact" option for formatter. If set, the formatter
+ tries to produce a more compact output by avoiding some line
+ breaks
+ * The strip comments filter was a bit greedy and removed too
+ much whitespace (issue772). Note: In some cases you might want
+ to add `strip_whitespace=True` where you previously used just
+ `strip_comments=True`. `strip_comments` did some of the
+ work that `strip_whitespace` should do.
+ * Fix error when splitting statements that contain multiple
+ CASE clauses within a BEGIN block (issue784).
+ * Fix whitespace removal with nested expressions (issue782).
+ * Fix parsing and formatting of ORDER clauses containing NULLS
+ FIRST or NULLS LAST (issue532).
+
+-------------------------------------------------------------------
Old:
----
sqlparse-0.5.0.tar.gz
New:
----
sqlparse-0.5.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-sqlparse.spec ++++++
--- /var/tmp/diff_new_pack.8Ufeh2/_old 2024-08-20 16:12:59.973179990 +0200
+++ /var/tmp/diff_new_pack.8Ufeh2/_new 2024-08-20 16:12:59.977180156 +0200
@@ -18,7 +18,7 @@
%{?sle15_python_module_pythons}
Name: python-sqlparse
-Version: 0.5.0
+Version: 0.5.1
Release: 0
Summary: Non-validating SQL parser
License: BSD-3-Clause
++++++ sqlparse-0.5.0.tar.gz -> sqlparse-0.5.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sqlparse-0.5.0/.idea/workspace.xml new/sqlparse-0.5.1/.idea/workspace.xml
--- old/sqlparse-0.5.0/.idea/workspace.xml 2020-02-02 01:00:00.000000000 +0100
+++ new/sqlparse-0.5.1/.idea/workspace.xml 2020-02-02 01:00:00.000000000 +0100
@@ -7,10 +7,7 @@
<option name="autoReloadType" value="SELECTIVE" />
</component>
<component name="ChangeListManager">
- <list default="true" id="c1a6b0e3-80de-4ea3-bc7d-6f3970b9f7ef" name="Changes" comment="Raise recursion limit for tests.">
- <change beforePath="$PROJECT_DIR$/CHANGELOG" beforeDir="false" afterPath="$PROJECT_DIR$/CHANGELOG" afterDir="false" />
- <change beforePath="$PROJECT_DIR$/sqlparse/__init__.py" beforeDir="false" afterPath="$PROJECT_DIR$/sqlparse/__init__.py" afterDir="false" />
- </list>
+ <list default="true" id="c1a6b0e3-80de-4ea3-bc7d-6f3970b9f7ef" name="Changes" comment="Fix grouping of comments (fixes #772). The grouping of comments was a bit too greedy by also consuming whitespaces at the end." />
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
@@ -45,6 +42,7 @@
</component>
<component name="PropertiesComponent">{
"keyToString": {
+ "Python tests.pytest for test_format.TestFormat.test_strip_comments_preserves_whitespace.executor": "Run",
"Python tests.pytest for test_format.test_format_json_ops.executor": "Run",
"Python tests.pytest for test_parse.test_json_operators.executor": "Run",
"Python tests.pytest for test_parse.test_psql_quotation_marks.executor": "Run",
@@ -74,8 +72,8 @@
<command value="pytest in /" />
</option>
</component>
- <component name="RunManager" selected="Python tests.pytest in /">
- <configuration name="pytest for test_format.test_format_json_ops" type="tests" factoryName="py.test" temporary="true" nameIsGenerated="true">
+ <component name="RunManager" selected="Python tests.pytest for test_format.TestFormat.test_strip_comments_preserves_whitespace">
+ <configuration name="pytest for test_format.TestFormat.test_strip_comments_preserves_whitespace" type="tests" factoryName="py.test" temporary="true" nameIsGenerated="true">
<module name="sqlparse" />
<option name="ENV_FILES" value="" />
<option name="INTERPRETER_OPTIONS" value="" />
@@ -89,7 +87,7 @@
<option name="_new_keywords" value="""" />
<option name="_new_parameters" value="""" />
<option name="_new_additionalArguments" value="""" />
- <option name="_new_target" value=""test_format.test_format_json_ops"" />
+ <option name="_new_target" value=""test_format.TestFormat.test_strip_comments_preserves_whitespace"" />
<option name="_new_targetType" value=""PYTHON"" />
<method v="2" />
</configuration>
@@ -185,20 +183,20 @@
<method v="2" />
</configuration>
<list>
- <item itemvalue="Python tests.pytest in /" />
- <item itemvalue="Python tests.pytest for test_format.test_format_json_ops" />
+ <item itemvalue="Python tests.pytest for test_format.TestFormat.test_strip_comments_preserves_whitespace" />
<item itemvalue="Python tests.pytest for test_parse.test_json_operators" />
<item itemvalue="Python tests.pytest for test_parse.test_psql_quotation_marks" />
<item itemvalue="Python tests.pytest for test_regressions.test_primary_key_issue740" />
<item itemvalue="Python tests.pytest for test_regressions.test_split_procedure_issue692" />
+ <item itemvalue="Python tests.pytest in /" />
</list>
<recent_temporary>
<list>
+ <item itemvalue="Python tests.pytest for test_format.TestFormat.test_strip_comments_preserves_whitespace" />
+ <item itemvalue="Python tests.pytest for test_regressions.test_split_procedure_issue692" />
<item itemvalue="Python tests.pytest for test_regressions.test_primary_key_issue740" />
- <item itemvalue="Python tests.pytest for test_format.test_format_json_ops" />
- <item itemvalue="Python tests.pytest for test_parse.test_json_operators" />
<item itemvalue="Python tests.pytest for test_parse.test_psql_quotation_marks" />
- <item itemvalue="Python tests.pytest for test_regressions.test_split_procedure_issue692" />
+ <item itemvalue="Python tests.pytest for test_parse.test_json_operators" />
</list>
</recent_temporary>
</component>
@@ -262,7 +260,11 @@
<workItem from="1710699431122" duration="161000" />
<workItem from="1710930875690" duration="38000" />
<workItem from="1713008432744" duration="249000" />
- <workItem from="1713009876522" duration="1160000" />
+ <workItem from="1713009876522" duration="1768000" />
+ <workItem from="1713164890216" duration="347000" />
+ <workItem from="1713165709231" duration="157000" />
+ <workItem from="1715582195687" duration="2836000" />
+ <workItem from="1715588869387" duration="34000" />
</task>
<task id="LOCAL-00001" summary="CI: Use codecov action. codecov module is deprecated and was removed from PyPI in favor of the github action.">
<created>1681476722347</created>
@@ -271,22 +273,6 @@
<option name="project" value="LOCAL" />
<updated>1681476722347</updated>
</task>
- <task id="LOCAL-00002" summary="Add classifier for Python 3.11 (fixes #726).">
- <option name="closed" value="true" />
- <created>1688586268576</created>
- <option name="number" value="00002" />
- <option name="presentableId" value="LOCAL-00002" />
- <option name="project" value="LOCAL" />
- <updated>1688586268576</updated>
- </task>
- <task id="LOCAL-00003" summary="Drop support for Python 3.5.">
- <option name="closed" value="true" />
- <created>1690182121355</created>
- <option name="number" value="00003" />
- <option name="presentableId" value="LOCAL-00003" />
- <option name="project" value="LOCAL" />
- <updated>1690182121355</updated>
- </task>
<task id="LOCAL-00004" summary="Get tox running again. We have to pin versions for tox and virtualenv because newer versions don't support Python 3.6 anymore.">
<option name="closed" value="true" />
<created>1690187016877</created>
@@ -647,7 +633,31 @@
<option name="project" value="LOCAL" />
<updated>1713009920360</updated>
</task>
- <option name="localTasksCounter" value="49" />
+ <task id="LOCAL-00049" summary="Bump version.">
+ <option name="closed" value="true" />
+ <created>1713011589338</created>
+ <option name="number" value="00049" />
+ <option name="presentableId" value="LOCAL-00049" />
+ <option name="project" value="LOCAL" />
+ <updated>1713011589338</updated>
+ </task>
+ <task id="LOCAL-00050" summary="Switch back to development mode.">
+ <option name="closed" value="true" />
+ <created>1713011922338</created>
+ <option name="number" value="00050" />
+ <option name="presentableId" value="LOCAL-00050" />
+ <option name="project" value="LOCAL" />
+ <updated>1713011922339</updated>
+ </task>
+ <task id="LOCAL-00051" summary="Fix grouping of comments (fixes #772). The grouping of comments was a bit too greedy by also consuming whitespaces at the end.">
+ <option name="closed" value="true" />
+ <created>1715585190469</created>
+ <option name="number" value="00051" />
+ <option name="presentableId" value="LOCAL-00051" />
+ <option name="project" value="LOCAL" />
+ <updated>1715585190470</updated>
+ </task>
+ <option name="localTasksCounter" value="52" />
<servers />
</component>
<component name="TypeScriptGeneratedFilesManager">
@@ -665,9 +675,6 @@
</option>
</component>
<component name="VcsManagerConfiguration">
- <MESSAGE value="Add comment." />
- <MESSAGE value="Update authors." />
- <MESSAGE value="Update changelog and code cleanup." />
<MESSAGE value="Update changelog." />
<MESSAGE value="Prevent parser from running into max. recursions." />
<MESSAGE value="Improve splitting of Transact SQL when using GO keyword (fixes #762)." />
@@ -690,22 +697,26 @@
<MESSAGE value="Fix parsing of PRIMARY KEY (fixes #740)." />
<MESSAGE value="Update AUHTORS and Changelog." />
<MESSAGE value="Raise recursion limit for tests." />
- <option name="LAST_COMMIT_MESSAGE" value="Raise recursion limit for tests." />
+ <MESSAGE value="Bump version." />
+ <MESSAGE value="Switch back to development mode." />
+ <MESSAGE value="Fix grouping of comments (fixes #772). The grouping of comments was a bit too greedy by also consuming whitespaces at the end." />
+ <option name="LAST_COMMIT_MESSAGE" value="Fix grouping of comments (fixes #772). The grouping of comments was a bit too greedy by also consuming whitespaces at the end." />
</component>
<component name="com.intellij.coverage.CoverageDataManagerImpl">
- <SUITE FILE_PATH="coverage/sqlparse$pytest_for_test_split_test_split_strip_semicolon.coverage" NAME="pytest for test_split.test_split_strip_semicolon Coverage Results" MODIFIED="1697137345685" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/tests" />
- <SUITE FILE_PATH="coverage/sqlparse$pytest_for_test_regressions_test_primary_key_issue740.coverage" NAME="pytest for test_regressions.test_primary_key_issue740 Coverage Results" MODIFIED="1710604966341" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/tests" />
+ <SUITE FILE_PATH="coverage/sqlparse$pytest_for_test_split_test_split_go.coverage" NAME="pytest for test_split.test_split_go Coverage Results" MODIFIED="1710486007296" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/tests" />
<SUITE FILE_PATH="coverage/sqlparse$pytest_for_test_regressions_test_copy_issue672.coverage" NAME="pytest for test_regressions.test_copy_issue672 Coverage Results" MODIFIED="1695152213955" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/tests" />
- <SUITE FILE_PATH="coverage/sqlparse$pytest_for_test_parse_test_psql_quotation_marks.coverage" NAME="pytest for test_parse.test_psql_quotation_marks Coverage Results" MODIFIED="1710573863392" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/tests" />
- <SUITE FILE_PATH="coverage/sqlparse$keywords.coverage" NAME="keywords Coverage Results" MODIFIED="1691652299182" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/sqlparse" />
- <SUITE FILE_PATH="coverage/sqlparse$pytest_for_test_split_test_split_oracle_procedure.coverage" NAME="pytest for test_split.test_split_oracle_procedure Coverage Results" MODIFIED="1710240151390" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/tests" />
+ <SUITE FILE_PATH="coverage/sqlparse$pytest_for_test_regressions_test_primary_key_issue740.coverage" NAME="pytest for test_regressions.test_primary_key_issue740 Coverage Results" MODIFIED="1710604966341" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/tests" />
<SUITE FILE_PATH="coverage/sqlparse$pytest_in__.coverage" NAME="pytest in / Coverage Results" MODIFIED="1710604971244" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="" />
+ <SUITE FILE_PATH="coverage/sqlparse$pytest_for_test_parse_test_json_operators.coverage" NAME="pytest for test_parse.test_json_operators Coverage Results" MODIFIED="1710577177438" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/tests" />
<SUITE FILE_PATH="coverage/sqlparse$others.coverage" NAME="others Coverage Results" MODIFIED="1697137056222" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/sqlparse/filters" />
- <SUITE FILE_PATH="coverage/sqlparse$pytest_for_test_format_test_format_json_ops.coverage" NAME="pytest for test_format.test_format_json_ops Coverage Results" MODIFIED="1710580710955" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/tests" />
- <SUITE FILE_PATH="coverage/sqlparse$pytest_for_test_split_test_split_strip_semicolon_procedure.coverage" NAME="pytest for test_split.test_split_strip_semicolon_procedure Coverage Results" MODIFIED="1697137350646" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/tests" />
+ <SUITE FILE_PATH="coverage/sqlparse$pytest_for_test_split_test_split_strip_semicolon.coverage" NAME="pytest for test_split.test_split_strip_semicolon Coverage Results" MODIFIED="1697137345685" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/tests" />
<SUITE FILE_PATH="coverage/sqlparse$__init__.coverage" NAME="__init__ Coverage Results" MODIFIED="1697136188898" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/sqlparse" />
+ <SUITE FILE_PATH="coverage/sqlparse$pytest_for_test_split_test_split_strip_semicolon_procedure.coverage" NAME="pytest for test_split.test_split_strip_semicolon_procedure Coverage Results" MODIFIED="1697137350646" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/tests" />
+ <SUITE FILE_PATH="coverage/sqlparse$pytest_for_test_parse_test_psql_quotation_marks.coverage" NAME="pytest for test_parse.test_psql_quotation_marks Coverage Results" MODIFIED="1710573863392" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/tests" />
<SUITE FILE_PATH="coverage/sqlparse$pytest_for_test_regressions_test_split_procedure_issue692.coverage" NAME="pytest for test_regressions.test_split_procedure_issue692 Coverage Results" MODIFIED="1710572849200" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/tests" />
- <SUITE FILE_PATH="coverage/sqlparse$pytest_for_test_parse_test_json_operators.coverage" NAME="pytest for test_parse.test_json_operators Coverage Results" MODIFIED="1710577177438" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/tests" />
- <SUITE FILE_PATH="coverage/sqlparse$pytest_for_test_split_test_split_go.coverage" NAME="pytest for test_split.test_split_go Coverage Results" MODIFIED="1710486007296" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/tests" />
+ <SUITE FILE_PATH="coverage/sqlparse$pytest_for_test_format_TestFormat_test_strip_comments_preserves_whitespace.coverage" NAME="pytest for test_format.TestFormat.test_strip_comments_preserves_whitespace Coverage Results" MODIFIED="1715582314052" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/tests" />
+ <SUITE FILE_PATH="coverage/sqlparse$pytest_for_test_split_test_split_oracle_procedure.coverage" NAME="pytest for test_split.test_split_oracle_procedure Coverage Results" MODIFIED="1710240151390" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/tests" />
+ <SUITE FILE_PATH="coverage/sqlparse$pytest_for_test_format_test_format_json_ops.coverage" NAME="pytest for test_format.test_format_json_ops Coverage Results" MODIFIED="1710580710955" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/tests" />
+ <SUITE FILE_PATH="coverage/sqlparse$keywords.coverage" NAME="keywords Coverage Results" MODIFIED="1691652299182" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/sqlparse" />
</component>
</project>
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sqlparse-0.5.0/CHANGELOG new/sqlparse-0.5.1/CHANGELOG
--- old/sqlparse-0.5.0/CHANGELOG 2020-02-02 01:00:00.000000000 +0100
+++ new/sqlparse-0.5.1/CHANGELOG 2020-02-02 01:00:00.000000000 +0100
@@ -1,3 +1,25 @@
+Release 0.5.1 (Jul 15, 2024)
+----------------------------
+
+Enhancements
+
+* New "compact" option for formatter. If set, the formatter tries to produce
+ a more compact output by avoiding some line breaks (issue783).
+
+Bug Fixes
+
+* The strip comments filter was a bit greedy and removed too much
+ whitespace (issue772).
+ Note: In some cases you might want to add `strip_whitespace=True` where you
+ previously used just `strip_comments=True`. `strip_comments` did some of the
+ work that `strip_whitespace` should do.
+* Fix error when splitting statements that contain multiple CASE clauses
+ within a BEGIN block (issue784).
+* Fix whitespace removal with nested expressions (issue782).
+* Fix parsing and formatting of ORDER clauses containing NULLS FIRST or
+ NULLS LAST (issue532).
+
+
Release 0.5.0 (Apr 13, 2024)
----------------------------
@@ -11,11 +33,11 @@
https://github.com/andialbrecht/sqlparse/security/advisories/GHSA-2m57-hf25…
The vulnerability was discovered by @uriyay-jfrog. Thanks for reporting!
-Enhancements:
+Enhancements
* Splitting statements now allows to remove the semicolon at the end.
Some database backends love statements without semicolon (issue742).
-* Support TypedLiterals in get_parameters (pr649, by Khrol).
+* Support TypedLiterals in get_parameters (pr749, by Khrol).
* Improve splitting of Transact SQL when using GO keyword (issue762).
* Support for some JSON operators (issue682).
* Improve formatting of statements containing JSON operators (issue542).
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sqlparse-0.5.0/PKG-INFO new/sqlparse-0.5.1/PKG-INFO
--- old/sqlparse-0.5.0/PKG-INFO 2020-02-02 01:00:00.000000000 +0100
+++ new/sqlparse-0.5.1/PKG-INFO 2020-02-02 01:00:00.000000000 +0100
@@ -1,10 +1,10 @@
Metadata-Version: 2.3
Name: sqlparse
-Version: 0.5.0
+Version: 0.5.1
Summary: A non-validating SQL parser.
Project-URL: Home, https://github.com/andialbrecht/sqlparse
Project-URL: Documentation, https://sqlparse.readthedocs.io/
-Project-URL: Release Notes, https://sqlparse.readthedocs.io/en/latest/changes/
+Project-URL: Release Notes, https://sqlparse.readthedocs.io/en/latest/changes.html
Project-URL: Source, https://github.com/andialbrecht/sqlparse
Project-URL: Tracker, https://github.com/andialbrecht/sqlparse/issues
Author-email: Andi Albrecht <albrecht.andi(a)gmail.com>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sqlparse-0.5.0/docs/source/api.rst new/sqlparse-0.5.1/docs/source/api.rst
--- old/sqlparse-0.5.0/docs/source/api.rst 2020-02-02 01:00:00.000000000 +0100
+++ new/sqlparse-0.5.1/docs/source/api.rst 2020-02-02 01:00:00.000000000 +0100
@@ -62,6 +62,9 @@
The column limit (in characters) for wrapping comma-separated lists. If unspecified, it
puts every item in the list on its own line.
+``compact``
+ If ``True`` the formatter tries to produce more compact output.
+
``output_format``
If given the output is additionally formatted to be used as a variable
in a programming language. Allowed values are "python" and "php".
@@ -69,4 +72,4 @@
``comma_first``
If ``True`` comma-first notation for column names is used.
-
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sqlparse-0.5.0/pyproject.toml new/sqlparse-0.5.1/pyproject.toml
--- old/sqlparse-0.5.0/pyproject.toml 2020-02-02 01:00:00.000000000 +0100
+++ new/sqlparse-0.5.1/pyproject.toml 2020-02-02 01:00:00.000000000 +0100
@@ -31,7 +31,7 @@
[project.urls]
Home = "https://github.com/andialbrecht/sqlparse"
Documentation = "https://sqlparse.readthedocs.io/"
-"Release Notes" = "https://sqlparse.readthedocs.io/en/latest/changes/"
+"Release Notes" = "https://sqlparse.readthedocs.io/en/latest/changes.html"
Source = "https://github.com/andialbrecht/sqlparse"
Tracker = "https://github.com/andialbrecht/sqlparse/issues"
@@ -60,7 +60,7 @@
"flake8",
]
[tool.hatch.envs.default.scripts]
-test = "pytest {args:tests}"
+unittest = "pytest {args:tests}"
test-cov = "coverage run -m pytest {args:tests}"
cov-report = [
"- coverage combine",
@@ -71,6 +71,7 @@
"cov-report",
]
check = "flake8 sqlparse/"
+test = ["check", "unittest"]
[[tool.hatch.envs.all.matrix]]
python = ["3.8", "3.9", "3.10", "3.11", "3.12"]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sqlparse-0.5.0/sqlparse/__init__.py new/sqlparse-0.5.1/sqlparse/__init__.py
--- old/sqlparse-0.5.0/sqlparse/__init__.py 2020-02-02 01:00:00.000000000 +0100
+++ new/sqlparse-0.5.1/sqlparse/__init__.py 2020-02-02 01:00:00.000000000 +0100
@@ -16,7 +16,7 @@
from sqlparse import formatter
-__version__ = '0.5.0'
+__version__ = '0.5.1'
__all__ = ['engine', 'filters', 'formatter', 'sql', 'tokens', 'cli']
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sqlparse-0.5.0/sqlparse/cli.py new/sqlparse-0.5.1/sqlparse/cli.py
--- old/sqlparse-0.5.0/sqlparse/cli.py 2020-02-02 01:00:00.000000000 +0100
+++ new/sqlparse-0.5.1/sqlparse/cli.py 2020-02-02 01:00:00.000000000 +0100
@@ -140,6 +140,13 @@
help='Insert linebreak before comma (default False)')
group.add_argument(
+ '--compact',
+ dest='compact',
+ default=False,
+ type=bool,
+ help='Try to produce more compact output (default False)')
+
+ group.add_argument(
'--encoding',
dest='encoding',
default='utf-8',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sqlparse-0.5.0/sqlparse/engine/grouping.py new/sqlparse-0.5.1/sqlparse/engine/grouping.py
--- old/sqlparse-0.5.0/sqlparse/engine/grouping.py 2020-02-02 01:00:00.000000000 +0100
+++ new/sqlparse-0.5.1/sqlparse/engine/grouping.py 2020-02-02 01:00:00.000000000 +0100
@@ -314,7 +314,7 @@
tidx, token = tlist.token_next_by(t=T.Comment)
while token:
eidx, end = tlist.token_not_matching(
- lambda tk: imt(tk, t=T.Comment) or tk.is_whitespace, idx=tidx)
+ lambda tk: imt(tk, t=T.Comment) or tk.is_newline, idx=tidx)
if end is not None:
eidx, end = tlist.token_prev(eidx, skip_ws=False)
tlist.group_tokens(sql.Comment, tidx, eidx)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sqlparse-0.5.0/sqlparse/engine/statement_splitter.py new/sqlparse-0.5.1/sqlparse/engine/statement_splitter.py
--- old/sqlparse-0.5.0/sqlparse/engine/statement_splitter.py 2020-02-02 01:00:00.000000000 +0100
+++ new/sqlparse-0.5.1/sqlparse/engine/statement_splitter.py 2020-02-02 01:00:00.000000000 +0100
@@ -17,6 +17,7 @@
def _reset(self):
"""Set the filter attributes to its default values"""
self._in_declare = False
+ self._in_case = False
self._is_create = False
self._begin_depth = 0
@@ -58,16 +59,18 @@
return 1
return 0
- # Should this respect a preceding BEGIN?
- # In CASE ... WHEN ... END this results in a split level -1.
- # Would having multiple CASE WHEN END and a Assignment Operator
- # cause the statement to cut off prematurely?
+ # BEGIN and CASE/WHEN both end with END
if unified == 'END':
- self._begin_depth = max(0, self._begin_depth - 1)
+ if not self._in_case:
+ self._begin_depth = max(0, self._begin_depth - 1)
+ else:
+ self._in_case = False
return -1
if (unified in ('IF', 'FOR', 'WHILE', 'CASE')
and self._is_create and self._begin_depth > 0):
+ if unified == 'CASE':
+ self._in_case = True
return 1
if unified in ('END IF', 'END FOR', 'END WHILE'):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sqlparse-0.5.0/sqlparse/filters/others.py new/sqlparse-0.5.1/sqlparse/filters/others.py
--- old/sqlparse-0.5.0/sqlparse/filters/others.py 2020-02-02 01:00:00.000000000 +0100
+++ new/sqlparse-0.5.1/sqlparse/filters/others.py 2020-02-02 01:00:00.000000000 +0100
@@ -91,6 +91,10 @@
tlist.tokens.pop(1)
while tlist.tokens[-2].is_whitespace:
tlist.tokens.pop(-2)
+ if tlist.tokens[-2].is_group:
+ # save to remove the last whitespace
+ while tlist.tokens[-2].tokens[-1].is_whitespace:
+ tlist.tokens[-2].tokens.pop(-1)
self._stripws_default(tlist)
def process(self, stmt, depth=0):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sqlparse-0.5.0/sqlparse/filters/reindent.py new/sqlparse-0.5.1/sqlparse/filters/reindent.py
--- old/sqlparse-0.5.0/sqlparse/filters/reindent.py 2020-02-02 01:00:00.000000000 +0100
+++ new/sqlparse-0.5.1/sqlparse/filters/reindent.py 2020-02-02 01:00:00.000000000 +0100
@@ -12,7 +12,7 @@
class ReindentFilter:
def __init__(self, width=2, char=' ', wrap_after=0, n='\n',
comma_first=False, indent_after_first=False,
- indent_columns=False):
+ indent_columns=False, compact=False):
self.n = n
self.width = width
self.char = char
@@ -21,6 +21,7 @@
self.wrap_after = wrap_after
self.comma_first = comma_first
self.indent_columns = indent_columns
+ self.compact = compact
self._curr_stmt = None
self._last_stmt = None
self._last_func = None
@@ -196,15 +197,19 @@
with offset(self, self._get_offset(tlist[0])):
with offset(self, self._get_offset(first)):
for cond, value in iterable:
- token = value[0] if cond is None else cond[0]
- tlist.insert_before(token, self.nl())
+ str_cond = ''.join(str(x) for x in cond or [])
+ str_value = ''.join(str(x) for x in value)
+ end_pos = self.offset + 1 + len(str_cond) + len(str_value)
+ if (not self.compact and end_pos > self.wrap_after):
+ token = value[0] if cond is None else cond[0]
+ tlist.insert_before(token, self.nl())
# Line breaks on group level are done. let's add an offset of
# len "when ", "then ", "else "
with offset(self, len("WHEN ")):
self._process_default(tlist)
end_idx, end = tlist.token_next_by(m=sql.Case.M_CLOSE)
- if end_idx is not None:
+ if end_idx is not None and not self.compact:
tlist.insert_before(end_idx, self.nl())
def _process_values(self, tlist):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sqlparse-0.5.0/sqlparse/formatter.py new/sqlparse-0.5.1/sqlparse/formatter.py
--- old/sqlparse-0.5.0/sqlparse/formatter.py 2020-02-02 01:00:00.000000000 +0100
+++ new/sqlparse-0.5.1/sqlparse/formatter.py 2020-02-02 01:00:00.000000000 +0100
@@ -11,7 +11,7 @@
from sqlparse.exceptions import SQLParseError
-def validate_options(options):
+def validate_options(options): # noqa: C901
"""Validates options."""
kwcase = options.get('keyword_case')
if kwcase not in [None, 'upper', 'lower', 'capitalize']:
@@ -116,6 +116,11 @@
raise SQLParseError('comma_first requires a boolean value')
options['comma_first'] = comma_first
+ compact = options.get('compact', False)
+ if compact not in [True, False]:
+ raise SQLParseError('compact requires a boolean value')
+ options['compact'] = compact
+
right_margin = options.get('right_margin')
if right_margin is not None:
try:
@@ -171,7 +176,8 @@
indent_after_first=options['indent_after_first'],
indent_columns=options['indent_columns'],
wrap_after=options['wrap_after'],
- comma_first=options['comma_first']))
+ comma_first=options['comma_first'],
+ compact=options['compact'],))
if options.get('reindent_aligned', False):
stack.enable_grouping()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sqlparse-0.5.0/sqlparse/keywords.py new/sqlparse-0.5.1/sqlparse/keywords.py
--- old/sqlparse-0.5.0/sqlparse/keywords.py 2020-02-02 01:00:00.000000000 +0100
+++ new/sqlparse-0.5.1/sqlparse/keywords.py 2020-02-02 01:00:00.000000000 +0100
@@ -71,7 +71,9 @@
r'|(CROSS\s+|NATURAL\s+)?)?JOIN\b', tokens.Keyword),
(r'END(\s+IF|\s+LOOP|\s+WHILE)?\b', tokens.Keyword),
(r'NOT\s+NULL\b', tokens.Keyword),
- (r'NULLS\s+(FIRST|LAST)\b', tokens.Keyword),
+ (r'(ASC|DESC)(\s+NULLS\s+(FIRST|LAST))?\b', tokens.Keyword.Order),
+ (r'(ASC|DESC)\b', tokens.Keyword.Order),
+ (r'NULLS\s+(FIRST|LAST)\b', tokens.Keyword.Order),
(r'UNION\s+ALL\b', tokens.Keyword),
(r'CREATE(\s+OR\s+REPLACE)?\b', tokens.Keyword.DDL),
(r'DOUBLE\s+PRECISION\b', tokens.Name.Builtin),
@@ -114,7 +116,6 @@
'ANY': tokens.Keyword,
'ARRAYLEN': tokens.Keyword,
'ARE': tokens.Keyword,
- 'ASC': tokens.Keyword.Order,
'ASENSITIVE': tokens.Keyword,
'ASSERTION': tokens.Keyword,
'ASSIGNMENT': tokens.Keyword,
@@ -227,7 +228,6 @@
'DELIMITER': tokens.Keyword,
'DELIMITERS': tokens.Keyword,
'DEREF': tokens.Keyword,
- 'DESC': tokens.Keyword.Order,
'DESCRIBE': tokens.Keyword,
'DESCRIPTOR': tokens.Keyword,
'DESTROY': tokens.Keyword,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sqlparse-0.5.0/sqlparse/sql.py new/sqlparse-0.5.1/sqlparse/sql.py
--- old/sqlparse-0.5.0/sqlparse/sql.py 2020-02-02 01:00:00.000000000 +0100
+++ new/sqlparse-0.5.1/sqlparse/sql.py 2020-02-02 01:00:00.000000000 +0100
@@ -46,7 +46,7 @@
"""
__slots__ = ('value', 'ttype', 'parent', 'normalized', 'is_keyword',
- 'is_group', 'is_whitespace')
+ 'is_group', 'is_whitespace', 'is_newline')
def __init__(self, ttype, value):
value = str(value)
@@ -56,6 +56,7 @@
self.is_group = False
self.is_keyword = ttype in T.Keyword
self.is_whitespace = self.ttype in T.Whitespace
+ self.is_newline = self.ttype in T.Newline
self.normalized = value.upper() if self.is_keyword else value
def __str__(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sqlparse-0.5.0/tests/files/multiple_case_in_begin.sql new/sqlparse-0.5.1/tests/files/multiple_case_in_begin.sql
--- old/sqlparse-0.5.0/tests/files/multiple_case_in_begin.sql 1970-01-01 01:00:00.000000000 +0100
+++ new/sqlparse-0.5.1/tests/files/multiple_case_in_begin.sql 2020-02-02 01:00:00.000000000 +0100
@@ -0,0 +1,8 @@
+CREATE TRIGGER mytrig
+AFTER UPDATE OF vvv ON mytable
+BEGIN
+ UPDATE aa
+ SET mycola = (CASE WHEN (A=1) THEN 2 END);
+ UPDATE bb
+ SET mycolb = (CASE WHEN (B=1) THEN 5 END);
+END;
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sqlparse-0.5.0/tests/test_format.py new/sqlparse-0.5.1/tests/test_format.py
--- old/sqlparse-0.5.0/tests/test_format.py 2020-02-02 01:00:00.000000000 +0100
+++ new/sqlparse-0.5.1/tests/test_format.py 2020-02-02 01:00:00.000000000 +0100
@@ -73,15 +73,15 @@
assert res == 'select'
sql = '/* sql starts here */ select'
res = sqlparse.format(sql, strip_comments=True)
- assert res == 'select'
+ assert res == ' select' # note whitespace is preserved, see issue 772
sql = '/*\n * sql starts here\n */\nselect'
res = sqlparse.format(sql, strip_comments=True)
assert res == 'select'
sql = 'select (/* sql starts here */ select 2)'
- res = sqlparse.format(sql, strip_comments=True)
+ res = sqlparse.format(sql, strip_comments=True, strip_whitespace=True)
assert res == 'select (select 2)'
sql = 'select (/* sql /* starts here */ select 2)'
- res = sqlparse.format(sql, strip_comments=True)
+ res = sqlparse.format(sql, strip_comments=True, strip_whitespace=True)
assert res == 'select (select 2)'
def test_strip_comments_preserves_linebreak(self):
@@ -101,6 +101,11 @@
res = sqlparse.format(sql, strip_comments=True)
assert res == 'select *\n\nfrom foo'
+ def test_strip_comments_preserves_whitespace(self):
+ sql = 'SELECT 1/*bar*/ AS foo' # see issue772
+ res = sqlparse.format(sql, strip_comments=True)
+ assert res == 'SELECT 1 AS foo'
+
def test_strip_ws(self):
f = lambda sql: sqlparse.format(sql, strip_whitespace=True)
s = 'select\n* from foo\n\twhere ( 1 = 2 )\n'
@@ -729,3 +734,21 @@
"select foo->'bar', foo->'bar';", reindent=True)
expected = "select foo->'bar',\n foo->'bar';"
assert formatted == expected
+
+
+(a)pytest.mark.parametrize('sql, expected_normal, expected_compact', [
+ ('case when foo then 1 else bar end',
+ 'case\n when foo then 1\n else bar\nend',
+ 'case when foo then 1 else bar end')])
+def test_compact(sql, expected_normal, expected_compact): # issue783
+ formatted_normal = sqlparse.format(sql, reindent=True)
+ formatted_compact = sqlparse.format(sql, reindent=True, compact=True)
+ assert formatted_normal == expected_normal
+ assert formatted_compact == expected_compact
+
+
+def test_strip_ws_removes_trailing_ws_in_groups(): # issue782
+ formatted = sqlparse.format('( where foo = bar ) from',
+ strip_whitespace=True)
+ expected = '(where foo = bar) from'
+ assert formatted == expected
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sqlparse-0.5.0/tests/test_grouping.py new/sqlparse-0.5.1/tests/test_grouping.py
--- old/sqlparse-0.5.0/tests/test_grouping.py 2020-02-02 01:00:00.000000000 +0100
+++ new/sqlparse-0.5.1/tests/test_grouping.py 2020-02-02 01:00:00.000000000 +0100
@@ -17,13 +17,6 @@
assert len(parsed.tokens[2].tokens[3].tokens) == 3
-def test_grouping_comments():
- s = '/*\n * foo\n */ \n bar'
- parsed = sqlparse.parse(s)[0]
- assert str(parsed) == s
- assert len(parsed.tokens) == 2
-
-
@pytest.mark.parametrize('s', ['foo := 1;', 'foo := 1'])
def test_grouping_assignment(s):
parsed = sqlparse.parse(s)[0]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sqlparse-0.5.0/tests/test_split.py new/sqlparse-0.5.1/tests/test_split.py
--- old/sqlparse-0.5.0/tests/test_split.py 2020-02-02 01:00:00.000000000 +0100
+++ new/sqlparse-0.5.1/tests/test_split.py 2020-02-02 01:00:00.000000000 +0100
@@ -203,3 +203,8 @@
def test_split_go(sql, num): # issue762
stmts = sqlparse.split(sql)
assert len(stmts) == num
+
+
+def test_split_multiple_case_in_begin(load_file): # issue784
+ stmts = sqlparse.split(load_file('multiple_case_in_begin.sql'))
+ assert len(stmts) == 1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sqlparse-0.5.0/tests/test_tokenize.py new/sqlparse-0.5.1/tests/test_tokenize.py
--- old/sqlparse-0.5.0/tests/test_tokenize.py 2020-02-02 01:00:00.000000000 +0100
+++ new/sqlparse-0.5.1/tests/test_tokenize.py 2020-02-02 01:00:00.000000000 +0100
@@ -169,11 +169,16 @@
assert p.tokens[0].ttype is T.Keyword
-(a)pytest.mark.parametrize('s', ['NULLS FIRST', 'NULLS LAST'])
-def test_parse_nulls(s): # issue487
+(a)pytest.mark.parametrize('s', [
+ 'ASC', 'DESC',
+ 'NULLS FIRST', 'NULLS LAST',
+ 'ASC NULLS FIRST', 'ASC NULLS LAST',
+ 'DESC NULLS FIRST', 'DESC NULLS LAST',
+])
+def test_parse_order(s): # issue487
p = sqlparse.parse(s)[0]
assert len(p.tokens) == 1
- assert p.tokens[0].ttype is T.Keyword
+ assert p.tokens[0].ttype is T.Keyword.Order
@pytest.mark.parametrize('s', [
1
0