openSUSE Commits
Threads by month
- ----- 2024 -----
- 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
July 2018
- 1 participants
- 2052 discussions
Hello community,
here is the log from the commit of package ssdp-responder for openSUSE:Factory checked in at 2018-07-31 15:59:40
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ssdp-responder (Old)
and /work/SRC/openSUSE:Factory/.ssdp-responder.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ssdp-responder"
Tue Jul 31 15:59:40 2018 rev:2 rq:626057 version:1.5
Changes:
--------
--- /work/SRC/openSUSE:Factory/ssdp-responder/ssdp-responder.changes 2018-06-27 10:20:34.137901677 +0200
+++ /work/SRC/openSUSE:Factory/.ssdp-responder.new/ssdp-responder.changes 2018-07-31 15:59:40.647574730 +0200
@@ -1,0 +2,5 @@
+Sun Jul 29 10:46:07 UTC 2018 - jengelh(a)inai.de
+
+- Fix write style of description.
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ssdp-responder.spec ++++++
--- /var/tmp/diff_new_pack.rpvPAJ/_old 2018-07-31 15:59:41.055575422 +0200
+++ /var/tmp/diff_new_pack.rpvPAJ/_new 2018-07-31 15:59:41.055575422 +0200
@@ -1,6 +1,7 @@
#
# spec file for package ssdp-responder
#
+# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
# Copyright (c) 2018, Martin Hauke <mardnh(a)gmx.de>
#
# All modifications and additions to the file contributed by third parties
@@ -29,14 +30,12 @@
BuildRequires: automake
%description
-Simple Service Discovery Protocol daemon (SSDP) for networked Linux
-devices. Useful for small and embedded systems that want to announce
-themselves to systems running Windows.
-
-ssdpd is a stand-alone UNIX daemon with no external dependencies but
-the standard C library. It has a built-in web server for serving the
-UPnP XML description which Windows use to present the icon, by default
-an InternetGatewayDevice is announced.
+ssdpd is a stand-alone daemon that implements the Simple Service
+Discovery Protocol (SSDP) for use by networked Linux devices that
+want to announce themselves to systems running Windows. ssdpd has a
+built-in web server for serving the UPnP XML description which
+Windows uses to present the icon when an InternetGatewayDevice is
+announced.
%prep
%setup -q
1
0
Hello community,
here is the log from the commit of package libite for openSUSE:Factory checked in at 2018-07-31 15:59:34
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libite (Old)
and /work/SRC/openSUSE:Factory/.libite.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libite"
Tue Jul 31 15:59:34 2018 rev:2 rq:626056 version:2.0.2
Changes:
--------
--- /work/SRC/openSUSE:Factory/libite/libite.changes 2018-06-29 22:31:48.870236657 +0200
+++ /work/SRC/openSUSE:Factory/.libite.new/libite.changes 2018-07-31 15:59:39.143572178 +0200
@@ -1,0 +2,5 @@
+Sun Jul 29 10:36:46 UTC 2018 - jengelh(a)inai.de
+
+- Use noun phrase in summary. Ensure neutrality of descriptions.
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ libite.spec ++++++
--- /var/tmp/diff_new_pack.TlvA18/_old 2018-07-31 15:59:40.327574187 +0200
+++ /var/tmp/diff_new_pack.TlvA18/_new 2018-07-31 15:59:40.327574187 +0200
@@ -1,6 +1,7 @@
#
# spec file for package libite
#
+# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
# Copyright (c) 2018, Martin Hauke <mardnh(a)gmx.de>
#
# All modifications and additions to the file contributed by third parties
@@ -20,7 +21,7 @@
Name: libite
Version: 2.0.2
Release: 0
-Summary: Extends the GNU libc with some missing stuff from BSD
+Summary: BSD function library
License: MIT AND X11
Group: Development/Languages/C and C++
URL: https://github.com/troglobit/libite/
@@ -31,30 +32,24 @@
BuildRequires: pkgconfig
%description
-A library that extends the GNU libc with some missing stuff from BSD
-It holds useful functions and macros
-developed by both Finit and the OpenBSD project. Most notably the
-string functions: strlcpy(3), strlcat(3) and the highly useful *BSD
-sys/queue.h and sys/tree.h API's.
-
-One noticeable gap in GLIBC is the missing _SAFE macros in the
-BSD sys/queue.h API — highly recommended when traversing lists to
-delete/free nodes.
+A library that extends the GNU libc with some functions and macros from BSD,
+most notably the string functions strlcpy(3), strlcat(3) and the *BSD
+sys/queue.h and sys/tree.h APIs.
+
+glibc is not offering the _SAFE macros from the BSD sys/queue.h API —
+recommended when traversing lists to delete/free nodes.
%package -n libite%{sover}
-Summary: Extends the GNU libc with some missing stuff from BSD
+Summary: BSD function library
Group: System/Libraries
%description -n libite%{sover}
-A library that extends the GNU libc with some missing stuff from BSD
-It holds useful functions and macros
-developed by both Finit and the OpenBSD project. Most notably the
-string functions: strlcpy(3), strlcat(3) and the highly useful *BSD
-sys/queue.h and sys/tree.h API's.
-
-One noticeable gap in GLIBC is the missing _SAFE macros in the
-BSD sys/queue.h API — highly recommended when traversing lists to
-delete/free nodes.
+A library that extends the GNU libc with some functions and macros from BSD,
+most notably the string functions strlcpy(3), strlcat(3) and the *BSD
+sys/queue.h and sys/tree.h APIs.
+
+glibc is not offering the _SAFE macros from the BSD sys/queue.h API —
+recommended when traversing lists to delete/free nodes.
%package devel
Summary: Header files for libite
1
0
Hello community,
here is the log from the commit of package ddcutil for openSUSE:Factory checked in at 2018-07-31 15:59:23
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ddcutil (Old)
and /work/SRC/openSUSE:Factory/.ddcutil.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ddcutil"
Tue Jul 31 15:59:23 2018 rev:4 rq:626039 version:0.9.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/ddcutil/ddcutil.changes 2018-06-29 22:30:03.186317353 +0200
+++ /work/SRC/openSUSE:Factory/.ddcutil.new/ddcutil.changes 2018-07-31 15:59:28.891554782 +0200
@@ -1,0 +2,5 @@
+Sun Jul 29 09:26:24 UTC 2018 - jengelh(a)inai.de
+
+- Use noun phrase in summary. Use preexisting macro for SUSE docdir.
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ddcutil.spec ++++++
--- /var/tmp/diff_new_pack.bkpsOf/_old 2018-07-31 15:59:30.155556926 +0200
+++ /var/tmp/diff_new_pack.bkpsOf/_new 2018-07-31 15:59:30.159556934 +0200
@@ -19,7 +19,7 @@
Name: ddcutil
Version: 0.9.1
Release: 0
-Summary: Query and update monitor settings
+Summary: Utility to query and update monitor settings
License: GPL-2.0-or-later
Group: System/GUI/Other
Url: http://github.com/rockowitz/ddctool
@@ -73,7 +73,7 @@
%build
./autogen.sh
%configure --enable-lib=yes --enable-drm=yes --enable-usb=yes \
- --docdir="%{_datadir}/doc/packages/%{name}"
+ --docdir="%{_defaultdocdir}/%{name}"
make %{?_smp_mflags} V=1
%check
1
0
Hello community,
here is the log from the commit of package qtox for openSUSE:Factory checked in at 2018-07-31 15:59:19
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/qtox (Old)
and /work/SRC/openSUSE:Factory/.qtox.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "qtox"
Tue Jul 31 15:59:19 2018 rev:4 rq:626038 version:1.16.3
Changes:
--------
--- /work/SRC/openSUSE:Factory/qtox/qtox.changes 2018-07-02 23:31:47.957372056 +0200
+++ /work/SRC/openSUSE:Factory/.qtox.new/qtox.changes 2018-07-31 15:59:22.907544630 +0200
@@ -1,0 +2,96 @@
+Sun Jul 29 09:38:58 UTC 2018 - ecsos(a)opensuse.org
+
+- update to 1.16.3
+ This point release fixes flatpak build. No feature changes.
+
+- changes from 1.16.2
+ This point release fixes dialog spam from receiving invalid
+ filenames and logs spam. No feature changes.
+ * Bug Fixes
+ **logging:**
+ - only log toxcore messages above TRACE level
+ **ui:**
+ - don't emit filename change windows for every chat
+
+- changes from 1.16.1
+ This point release fixes our deployment of Flapak and AppImage on
+ Github. No feature changes.
+ * Features
+ **deploy:**
+ - upload Flatpak bundle to Github releases
+ * Bug Fixes
+ **deploy:**
+ - fix file path in AppImage deployment
+
+- changes from 1.16.0
+ The most notable additions in this release are a new fullscreen
+ mode for video calls, a new call end sound and support for more
+ camera resolutions. To distribute qTox in a more user friendly
+ manner we now publish Flatpak and AppImage packages.
+ * Bug Fixes
+ - remove full screen btn from audio group chat
+ - local toxcore install with bootstrap.sh
+ - simple_make.sh script
+ - Fix PR #5182. Eliminating the 'new' operator at
+ ToxOptionsWrapper
+ - Fix usage of unitialized functions
+ - two crashes, uncovered by the persistent groupchat patch
+ - delete double initialization callDuration
+ **Core:**
+ - fix use after free of proxyAddrData
+ **appimage:**
+ - build sqlcipher form source
+ **audio:**
+ - fix error introduced in 67f2605971cf43093c72f811e4df90ab70544dd6
+ - connect the correct audio callbacks
+ - close the audio device after playing a sound
+ **build:**
+ - Elimination the build warnings (Wunused-variable, Wreorder)
+ - correct install script nsis for win64
+ - make qTox compile with ffmpeg 4.0 and newer
+ **chatform:**
+ - name in window title and close detached chats
+ - check for empty path when exporting profile
+ **core:**
+ - Clean illegal chars from filenames
+ **docs:**
+ - update toxcore build instructions
+ **file:**
+ - don't clean the filenames of avatar transfer
+ **history:**
+ - don't save both action prefix and displayed name
+ **leak:**
+ - Fix few memory leaks
+ **login:**
+ - start login screen on profile select by -p option
+ **settings:**
+ - automatically disable UDP when a proxy is set
+ - prevent segfault on wrong proxy settings
+ **simple_make:**
+ - correct variable initialization
+ **theme:**
+ - clear stylesheet cache on theme colour change
+ **ui:**
+ - increase number of low res camera options
+ **video:**
+ - unsubscribe the video device correctly
+ **wayland:**
+ - Fix desktop file name in Qt properties
+ * Features
+ - Add ability to remove dialog from content dialog with middle
+ click
+ - Add ability to quit group with middle click
+ - Add middle mouse clicked signal for GenericChatroom
+ **appimage:**
+ - build appimage on TravisCI
+ **call:**
+ - add call end sound
+ **chat:**
+ - add UI option to mute group peers
+ - full screen video chat
+ **core:**
+ - put c-toxcore log messages in the qTox log
+ **history:**
+ - load set number of messages from history
+
+-------------------------------------------------------------------
Old:
----
qtox-1.15.0.tar.xz
New:
----
v1.16.3.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ qtox.spec ++++++
--- /var/tmp/diff_new_pack.sLo0iY/_old 2018-07-31 15:59:23.731546028 +0200
+++ /var/tmp/diff_new_pack.sLo0iY/_new 2018-07-31 15:59:23.735546034 +0200
@@ -17,13 +17,13 @@
Name: qtox
-Version: 1.15.0
+Version: 1.16.3
Release: 0
Summary: Qt based Tox client
License: GPL-3.0-only
Group: Productivity/Networking/Instant Messenger
-Url: https://github.com/tux3/qTox
-Source: %{name}-%{version}.tar.xz
+Url: https://qtox.github.io/
+Source: https://github.com/qTox/qTox/archive/v1.16.3.tar.gz
# PATCH-FEATURE-UPSTREAM
Patch: 5041.patch
BuildRequires: c-toxcore-devel
@@ -55,7 +55,7 @@
encrypted peer-to-peer Tox protocol.
%prep
-%setup -q
+%setup -q -n qTox-%{version}
%patch -p1
@@ -81,6 +81,8 @@
cd %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/
gzip -d < %{name}.svgz > %{name}.svg
rm %{name}.svgz
+# fix desktop-file-name
+mv %{buildroot}%{_datadir}/applications/io.github.qtox.qTox.desktop %{buildroot}%{_datadir}/applications/%{name}.desktop
%files
%license LICENSE
1
0
Hello community,
here is the log from the commit of package ktorrent for openSUSE:Factory checked in at 2018-07-31 15:59:14
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ktorrent (Old)
and /work/SRC/openSUSE:Factory/.ktorrent.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ktorrent"
Tue Jul 31 15:59:14 2018 rev:111 rq:626027 version:5.1.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/ktorrent/ktorrent.changes 2018-06-04 13:23:42.242041208 +0200
+++ /work/SRC/openSUSE:Factory/.ktorrent.new/ktorrent.changes 2018-07-31 15:59:18.087536454 +0200
@@ -1,0 +2,6 @@
+Sun Jul 29 08:19:21 UTC 2018 - wbauer(a)tmo.at
+
+- Add Fix-build-against-new-Syndication-library.patch to make it
+ compile with KDE Applications 18.08
+
+-------------------------------------------------------------------
New:
----
Fix-build-against-new-Syndication-library.patch
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ktorrent.spec ++++++
--- /var/tmp/diff_new_pack.wcEzQ3/_old 2018-07-31 15:59:18.835537722 +0200
+++ /var/tmp/diff_new_pack.wcEzQ3/_new 2018-07-31 15:59:18.835537722 +0200
@@ -34,6 +34,8 @@
Patch2: fix-build.patch
# PATCH-FIX-UPSTREAM fix-build-with-Qt-5_11.patch
Patch3: fix-build-with-Qt-5_11.patch
+# PATCH-FIX-UPSTREAM
+Patch4: Fix-build-against-new-Syndication-library.patch
BuildRequires: extra-cmake-modules
BuildRequires: fdupes
BuildRequires: libktorrent-devel >= 2.1
@@ -107,6 +109,7 @@
%endif
%patch2 -p1
%patch3 -p1
+%patch4 -p1
%build
%if 0%{?suse_version} < 1330
++++++ Fix-build-against-new-Syndication-library.patch ++++++
>From 46a4d7a378372a028522cfba94e77a11c478b36c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Daniel=20Vr=C3=A1til?= <dvratil(a)kde.org>
Date: Fri, 4 May 2018 00:31:44 +0200
Subject: Fix build against new Syndication library
Syndication::Loader::loadUrl() now always requires a DataRetriever
to be passed as a second argument. The behavior of the old method
was basically identical to using FeedRetriever anyway, so we can
use the FeedRetriever here to make it compile against new Syndication
and keep the behavior.
---
plugins/syndication/ktfeed.cpp | 2 +-
plugins/syndication/syndicationactivity.cpp | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/plugins/syndication/ktfeed.cpp b/plugins/syndication/ktfeed.cpp
index 099cd4f..f20eb2c 100644
--- a/plugins/syndication/ktfeed.cpp
+++ b/plugins/syndication/ktfeed.cpp
@@ -277,7 +277,7 @@ namespace kt
status = DOWNLOADING;
update_timer.stop();
Syndication::Loader* loader = Syndication::Loader::create(this, SLOT(loadingFromDiskComplete(Syndication::Loader*, Syndication::FeedPtr, Syndication::ErrorCode)));
- loader->loadFrom(QUrl(dir + QStringLiteral("feed.xml")));
+ loader->loadFrom(QUrl(dir + QStringLiteral("feed.xml")), new FeedRetriever());
updated();
}
diff --git a/plugins/syndication/syndicationactivity.cpp b/plugins/syndication/syndicationactivity.cpp
index 293540d..61e8039 100644
--- a/plugins/syndication/syndicationactivity.cpp
+++ b/plugins/syndication/syndicationactivity.cpp
@@ -135,7 +135,7 @@ namespace kt
}
else
{
- loader->loadFrom(QUrl(url));
+ loader->loadFrom(QUrl(url), new FeedRetriever());
downloads.insert(loader, url);
}
}
--
cgit v0.11.2
1
0
Hello community,
here is the log from the commit of package uftpd for openSUSE:Factory checked in at 2018-07-31 15:59:10
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/uftpd (Old)
and /work/SRC/openSUSE:Factory/.uftpd.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "uftpd"
Tue Jul 31 15:59:10 2018 rev:3 rq:626023 version:2.6
Changes:
--------
--- /work/SRC/openSUSE:Factory/uftpd/uftpd.changes 2018-07-06 10:42:20.099230511 +0200
+++ /work/SRC/openSUSE:Factory/.uftpd.new/uftpd.changes 2018-07-31 15:59:14.079529655 +0200
@@ -1,0 +2,5 @@
+Fri Jul 27 14:47:13 UTC 2018 - jengelh(a)inai.de
+
+- Remove rhetoric filler wording from descriptions.
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ uftpd.spec ++++++
--- /var/tmp/diff_new_pack.5yJuFu/_old 2018-07-31 15:59:14.607530551 +0200
+++ /var/tmp/diff_new_pack.5yJuFu/_new 2018-07-31 15:59:14.611530557 +0200
@@ -20,7 +20,7 @@
Name: uftpd
Version: 2.6
Release: 0
-Summary: The no nonsense TFTP/FTP server
+Summary: A combined TFTP/FTP server
License: ISC
Group: Productivity/Networking/Ftp/Servers
URL: http://troglobit.com/uftpd.html
@@ -36,14 +36,9 @@
Provides: tftp(server)
%description
-An excellent choice for those of us who never wanted to learn every
-config file format on this planet. uftpd has no configuration, and
-starts automatically from the traditional UNIX inetd super server,
-neatly tcpwrapped for your safety.
-
-Hardcore Internet users and anyone concerned about security should
-probably consider a separate TFTP server and for FTP look at one of:
-vsftpd, proftpd or pure-ftpd.
+uftpd serves both TFTP and FTP without any configuration file, starts
+automatically from the traditional UNIX inetd super server, and is
+tcpwrapped.
%prep
%setup -q
1
0
Hello community,
here is the log from the commit of package icinga2 for openSUSE:Factory checked in at 2018-07-31 15:59:05
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/icinga2 (Old)
and /work/SRC/openSUSE:Factory/.icinga2.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "icinga2"
Tue Jul 31 15:59:05 2018 rev:10 rq:625982 version:2.9.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/icinga2/icinga2.changes 2018-07-28 12:40:05.548390030 +0200
+++ /work/SRC/openSUSE:Factory/.icinga2.new/icinga2.changes 2018-07-31 15:59:11.135524661 +0200
@@ -1,0 +2,23 @@
+Sat Jul 28 22:12:45 UTC 2018 - ecsos(a)opensuse.org
+
+- update to 2.9.1
+ * Bug
+ - #6457 (PR): Ensure that timer thread is initialized after Daemonize()
+ - #6449: icinga r2.9.0-1 init.d script overrides PATH variable
+ - #6445: Problem with daemonize (init scripts, -d) on Debian 8 / CentOS 6 / Ubuntu 14 / SLES 11 in 2.9
+ - #6444 (PR): SELinux: allow systemd notify
+ - #6443: selinux and 2.9
+ * Support
+ - #6470 (code-quality, PR): Fix spelling errors.
+ - #6467 (Tests, PR): Start and stop the timer thread lazily
+ - #6461 (Tests): Broken tests with fix from #6457
+ - #6451 (Packages, PR): Fix initscripts
+ - #6450 (Packages): init script helpers - source: not found
+
+-------------------------------------------------------------------
+Sat Jul 28 14:09:14 UTC 2018 - uhaider.msee15seecs(a)seecs.edu.pk
+
+- Fixed the "No valid ELF RPATH or RUNPATH entry exists in the file"
+ error. (boo#1102980)
+
+-------------------------------------------------------------------
Old:
----
v2.9.0.tar.gz
New:
----
v2.9.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ icinga2.spec ++++++
--- /var/tmp/diff_new_pack.pXIGRr/_old 2018-07-31 15:59:13.203528169 +0200
+++ /var/tmp/diff_new_pack.pXIGRr/_new 2018-07-31 15:59:13.203528169 +0200
@@ -83,7 +83,7 @@
License: GPL-2.0-or-later
Group: System/Monitoring
Name: icinga2
-Version: 2.9.0
+Version: 2.9.1
Release: %{revision}%{?dist}
Url: https://www.icinga.com/
Source: https://github.com/Icinga/%{name}/archive/v%{version}.tar.gz
@@ -302,6 +302,7 @@
-DCMAKE_INSTALL_LOCALSTATEDIR=/var \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DICINGA2_LTO_BUILD=ON \
+ -DCMAKE_NO_BUILTIN_CHRPATH=ON \
-DCMAKE_VERBOSE_MAKEFILE=ON \
-DBoost_NO_BOOST_CMAKE=ON \
-DICINGA2_PLUGINDIR=%{plugindir} \
++++++ v2.9.0.tar.gz -> v2.9.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icinga2-2.9.0/AUTHORS new/icinga2-2.9.1/AUTHORS
--- old/icinga2-2.9.0/AUTHORS 2018-07-17 14:27:32.000000000 +0200
+++ new/icinga2-2.9.1/AUTHORS 2018-07-24 12:48:12.000000000 +0200
@@ -11,6 +11,7 @@
Andy Grunwald <andygrunwald(a)gmail.com>
Arnd Hannemann <arnd(a)arndnet.de>
Assaf Flatto <assaf(a)aikilinux.com>
+Bas Couwenberg <sebastic(a)xs4all.nl>
Bastian Guse <bguse(a)nocopy.de>
Benedikt Heine <bebe(a)bebehei.de>
Bernd Erk <bernd.erk(a)icinga.com>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icinga2-2.9.0/CHANGELOG.md new/icinga2-2.9.1/CHANGELOG.md
--- old/icinga2-2.9.0/CHANGELOG.md 2018-07-17 14:27:32.000000000 +0200
+++ new/icinga2-2.9.1/CHANGELOG.md 2018-07-24 12:48:12.000000000 +0200
@@ -1,5 +1,23 @@
# Icinga 2.x CHANGELOG
+## 2.9.1 (2018-07-24)
+
+### Bug
+
+* [#6457](https://github.com/icinga/icinga2/issues/6457) (PR): Ensure that timer thread is initialized after Daemonize\(\)
+* [#6449](https://github.com/icinga/icinga2/issues/6449): icinga r2.9.0-1 init.d script overrides PATH variable
+* [#6445](https://github.com/icinga/icinga2/issues/6445): Problem with daemonize \(init scripts, -d\) on Debian 8 / CentOS 6 / Ubuntu 14 / SLES 11 in 2.9
+* [#6444](https://github.com/icinga/icinga2/issues/6444) (PR): SELinux: allow systemd notify
+* [#6443](https://github.com/icinga/icinga2/issues/6443): selinux and 2.9
+
+### Support
+
+* [#6470](https://github.com/icinga/icinga2/issues/6470) (code-quality, PR): Fix spelling errors.
+* [#6467](https://github.com/icinga/icinga2/issues/6467) (Tests, PR): Start and stop the timer thread lazily
+* [#6461](https://github.com/icinga/icinga2/issues/6461) (Tests): Broken tests with fix from \#6457
+* [#6451](https://github.com/icinga/icinga2/issues/6451) (Packages, PR): Fix initscripts
+* [#6450](https://github.com/icinga/icinga2/issues/6450) (Packages): init script helpers - source: not found
+
## 2.9.0 (2018-07-17)
### Notes
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icinga2-2.9.0/VERSION new/icinga2-2.9.1/VERSION
--- old/icinga2-2.9.0/VERSION 2018-07-17 14:27:32.000000000 +0200
+++ new/icinga2-2.9.1/VERSION 2018-07-24 12:48:12.000000000 +0200
@@ -1,2 +1,2 @@
-Version: 2.9.0
+Version: 2.9.1
Revision: 1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icinga2-2.9.0/etc/initsystem/icinga2.init.d.cmake new/icinga2-2.9.1/etc/initsystem/icinga2.init.d.cmake
--- old/icinga2-2.9.0/etc/initsystem/icinga2.init.d.cmake 2018-07-17 14:27:32.000000000 +0200
+++ new/icinga2-2.9.1/etc/initsystem/icinga2.init.d.cmake 2018-07-24 12:48:12.000000000 +0200
@@ -15,6 +15,13 @@
# Description: Icinga 2 is a monitoring and management system for hosts, services and networks.
### END INIT INFO
+# Get function from functions library
+if [ -f /etc/rc.d/init.d/functions ]; then
+ . /etc/rc.d/init.d/functions
+elif [ -f /etc/init.d/functions ]; then
+ . /etc/init.d/functions
+fi
+
# load system specific defines
SYSCONFIGFILE=@ICINGA2_SYSCONFIGFILE@
if [ -f $SYSCONFIGFILE ]; then
@@ -50,13 +57,6 @@
getent group $ICINGA2_GROUP >/dev/null 2>&1 || (echo "Icinga group '$ICINGA2_GROUP' does not exist. Exiting." && exit 6)
getent group $ICINGA2_COMMAND_GROUP >/dev/null 2>&1 || (echo "Icinga command group '$ICINGA2_COMMAND_GROUP' does not exist. Exiting." && exit 6)
-# Get function from functions library
-if [ -f /etc/rc.d/init.d/functions ]; then
- . /etc/rc.d/init.d/functions
-elif [ -f /etc/init.d/functions ]; then
- . /etc/init.d/functions
-fi
-
# Start Icinga 2
start() {
printf "Starting Icinga 2: "
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icinga2-2.9.0/etc/initsystem/prepare-dirs.cmake new/icinga2-2.9.1/etc/initsystem/prepare-dirs.cmake
--- old/icinga2-2.9.0/etc/initsystem/prepare-dirs.cmake 2018-07-17 14:27:32.000000000 +0200
+++ new/icinga2-2.9.1/etc/initsystem/prepare-dirs.cmake 2018-07-24 12:48:12.000000000 +0200
@@ -6,7 +6,7 @@
# Load sysconf on systems where the initsystem does not pass the environment
if [ "$1" != "" ]; then
if [ -r "$1" ]; then
- source "$1"
+ . "$1"
else
echo "Unable to read sysconf from '$1'. Exiting." && exit 6
fi
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icinga2-2.9.0/etc/initsystem/safe-reload.cmake new/icinga2-2.9.1/etc/initsystem/safe-reload.cmake
--- old/icinga2-2.9.0/etc/initsystem/safe-reload.cmake 2018-07-17 14:27:32.000000000 +0200
+++ new/icinga2-2.9.1/etc/initsystem/safe-reload.cmake 2018-07-24 12:48:12.000000000 +0200
@@ -3,7 +3,7 @@
# Load sysconf on systems where the initsystem does not pass the environment
if [ "$1" != "" ]; then
if [ -r "$1" ]; then
- source "$1"
+ . "$1"
else
echo "Unable to read sysconf from '$1'. Exiting." && exit 6
fi
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icinga2-2.9.0/lib/base/application.cpp new/icinga2-2.9.1/lib/base/application.cpp
--- old/icinga2-2.9.0/lib/base/application.cpp 2018-07-17 14:27:32.000000000 +0200
+++ new/icinga2-2.9.1/lib/base/application.cpp 2018-07-24 12:48:12.000000000 +0200
@@ -138,8 +138,11 @@
Loader::ExecuteDeferredInitializers();
- /* make sure the thread pool gets initialized */
+ /* Make sure the thread pool gets initialized. */
GetTP().Start();
+
+ /* Make sure the timer thread gets initialized. */
+ Timer::Initialize();
}
void Application::UninitializeBase()
@@ -300,7 +303,6 @@
*/
void Application::RunEventLoop()
{
-
#ifdef HAVE_SYSTEMD
sd_notify(0, "READY=1");
#endif /* HAVE_SYSTEMD */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icinga2-2.9.0/lib/base/socket.cpp new/icinga2-2.9.1/lib/base/socket.cpp
--- old/icinga2-2.9.0/lib/base/socket.cpp 2018-07-17 14:27:32.000000000 +0200
+++ new/icinga2-2.9.1/lib/base/socket.cpp 2018-07-24 12:48:12.000000000 +0200
@@ -94,7 +94,7 @@
}
/**
- * Retrieves the last error that occured for the socket.
+ * Retrieves the last error that occurred for the socket.
*
* @returns An error code.
*/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icinga2-2.9.0/lib/base/timer.cpp new/icinga2-2.9.1/lib/base/timer.cpp
--- old/icinga2-2.9.0/lib/base/timer.cpp 2018-07-17 14:27:32.000000000 +0200
+++ new/icinga2-2.9.1/lib/base/timer.cpp 2018-07-24 12:48:12.000000000 +0200
@@ -19,6 +19,7 @@
#include "base/timer.hpp"
#include "base/debug.hpp"
+#include "base/logger.hpp"
#include "base/utility.hpp"
#include <boost/thread/mutex.hpp>
#include <boost/thread/condition_variable.hpp>
@@ -71,7 +72,7 @@
static std::thread l_TimerThread;
static bool l_StopTimerThread;
static TimerSet l_Timers;
-static int l_AliveTimers;
+static int l_AliveTimers = 0;
/**
* Destructor for the Timer class.
@@ -81,16 +82,43 @@
Stop(true);
}
+void Timer::Initialize()
+{
+ boost::mutex::scoped_lock lock(l_TimerMutex);
+
+ if (l_AliveTimers > 0) {
+ InitializeThread();
+ }
+}
+
void Timer::Uninitialize()
{
+ boost::mutex::scoped_lock lock(l_TimerMutex);
+
+ if (l_AliveTimers > 0) {
+ UninitializeThread();
+ }
+}
+
+void Timer::InitializeThread()
+{
+ l_StopTimerThread = false;
+ l_TimerThread = std::thread(&Timer::TimerThreadProc);
+}
+
+void Timer::UninitializeThread()
+{
{
- boost::mutex::scoped_lock lock(l_TimerMutex);
l_StopTimerThread = true;
l_TimerCV.notify_all();
}
+ l_TimerMutex.unlock();
+
if (l_TimerThread.joinable())
l_TimerThread.join();
+
+ l_TimerMutex.lock();
}
/**
@@ -140,9 +168,8 @@
boost::mutex::scoped_lock lock(l_TimerMutex);
m_Started = true;
- if (l_AliveTimers++ == 0) {
- l_StopTimerThread = false;
- l_TimerThread = std::thread(&Timer::TimerThreadProc);
+ if (++l_AliveTimers == 1) {
+ InitializeThread();
}
}
@@ -160,15 +187,7 @@
boost::mutex::scoped_lock lock(l_TimerMutex);
if (m_Started && --l_AliveTimers == 0) {
- l_StopTimerThread = true;
- l_TimerCV.notify_all();
-
- lock.unlock();
-
- if (l_TimerThread.joinable() && l_TimerThread.get_id() != std::this_thread::get_id())
- l_TimerThread.join();
-
- lock.lock();
+ UninitializeThread();
}
m_Started = false;
@@ -270,6 +289,8 @@
*/
void Timer::TimerThreadProc()
{
+ Log(LogDebug, "Timer", "TimerThreadProc started.");
+
Utility::SetThreadName("Timer Thread");
for (;;) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icinga2-2.9.0/lib/base/timer.hpp new/icinga2-2.9.1/lib/base/timer.hpp
--- old/icinga2-2.9.0/lib/base/timer.hpp 2018-07-17 14:27:32.000000000 +0200
+++ new/icinga2-2.9.1/lib/base/timer.hpp 2018-07-24 12:48:12.000000000 +0200
@@ -40,7 +40,10 @@
~Timer() override;
+ static void Initialize();
static void Uninitialize();
+ static void InitializeThread();
+ static void UninitializeThread();
void SetInterval(double interval);
double GetInterval() const;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icinga2-2.9.0/lib/checker/checkercomponent.cpp new/icinga2-2.9.1/lib/checker/checkercomponent.cpp
--- old/icinga2-2.9.0/lib/checker/checkercomponent.cpp 2018-07-17 14:27:32.000000000 +0200
+++ new/icinga2-2.9.1/lib/checker/checkercomponent.cpp 2018-07-24 12:48:12.000000000 +0200
@@ -221,7 +221,7 @@
CheckResult::Ptr cr = new CheckResult();
cr->SetState(ServiceUnknown);
- String output = "Exception occured while checking '" + checkable->GetName() + "': " + DiagnosticInformation(ex);
+ String output = "Exception occurred while checking '" + checkable->GetName() + "': " + DiagnosticInformation(ex);
cr->SetOutput(output);
double now = Utility::GetTime();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icinga2-2.9.0/lib/cli/daemoncommand.cpp new/icinga2-2.9.1/lib/cli/daemoncommand.cpp
--- old/icinga2-2.9.0/lib/cli/daemoncommand.cpp 2018-07-17 14:27:32.000000000 +0200
+++ new/icinga2-2.9.1/lib/cli/daemoncommand.cpp 2018-07-24 12:48:12.000000000 +0200
@@ -88,6 +88,9 @@
_exit(EXIT_SUCCESS);
}
+ Log(LogDebug, "Daemonize()")
+ << "Child process with PID " << Utility::GetPid() << " continues; re-initializing base.";
+
Application::InitializeBase();
#endif /* _WIN32 */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icinga2-2.9.0/lib/cli/nodesetupcommand.cpp new/icinga2-2.9.1/lib/cli/nodesetupcommand.cpp
--- old/icinga2-2.9.0/lib/cli/nodesetupcommand.cpp 2018-07-17 14:27:32.000000000 +0200
+++ new/icinga2-2.9.1/lib/cli/nodesetupcommand.cpp 2018-07-24 12:48:12.000000000 +0200
@@ -262,7 +262,7 @@
NodeUtility::UpdateConfiguration("\"conf.d/api-users.conf\"", true, false);
} else {
Log(LogWarning, "cli")
- << "Included file dosen't exist " << apiUsersFilePath;
+ << "Included file doesn't exist " << apiUsersFilePath;
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icinga2-2.9.0/lib/icinga/checkable-check.cpp new/icinga2-2.9.1/lib/icinga/checkable-check.cpp
--- old/icinga2-2.9.0/lib/icinga/checkable-check.cpp 2018-07-17 14:27:32.000000000 +0200
+++ new/icinga2-2.9.1/lib/icinga/checkable-check.cpp 2018-07-24 12:48:12.000000000 +0200
@@ -293,7 +293,7 @@
bool send_notification = false;
if (notification_reachable && !in_downtime && !IsAcknowledged()) {
- /* Send notifications whether when a hard state change occured. */
+ /* Send notifications whether when a hard state change occurred. */
if (hardChange && !(old_stateType == StateTypeSoft && IsStateOK(new_state)))
send_notification = true;
/* Or if the checkable is volatile and in a HARD state. */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icinga2-2.9.0/lib/icinga/checkable-notification.cpp new/icinga2-2.9.1/lib/icinga/checkable-notification.cpp
--- old/icinga2-2.9.0/lib/icinga/checkable-notification.cpp 2018-07-17 14:27:32.000000000 +0200
+++ new/icinga2-2.9.1/lib/icinga/checkable-notification.cpp 2018-07-24 12:48:12.000000000 +0200
@@ -76,7 +76,7 @@
notification->BeginExecuteNotification(type, cr, force, false, author, text);
} catch (const std::exception& ex) {
Log(LogWarning, "Checkable")
- << "Exception occured during notification for service '"
+ << "Exception occurred during notification for service '"
<< GetName() << "': " << DiagnosticInformation(ex);
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icinga2-2.9.0/lib/icinga/clusterevents-check.cpp new/icinga2-2.9.1/lib/icinga/clusterevents-check.cpp
--- old/icinga2-2.9.0/lib/icinga/clusterevents-check.cpp 2018-07-17 14:27:32.000000000 +0200
+++ new/icinga2-2.9.1/lib/icinga/clusterevents-check.cpp 2018-07-24 12:48:12.000000000 +0200
@@ -179,7 +179,7 @@
CheckResult::Ptr cr = new CheckResult();
cr->SetState(ServiceUnknown);
- String output = "Exception occured while checking '" + host->GetName() + "': " + DiagnosticInformation(ex);
+ String output = "Exception occurred while checking '" + host->GetName() + "': " + DiagnosticInformation(ex);
cr->SetOutput(output);
double now = Utility::GetTime();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icinga2-2.9.0/lib/icinga/notification.cpp new/icinga2-2.9.1/lib/icinga/notification.cpp
--- old/icinga2-2.9.0/lib/icinga/notification.cpp 2018-07-17 14:27:32.000000000 +0200
+++ new/icinga2-2.9.1/lib/icinga/notification.cpp 2018-07-24 12:48:12.000000000 +0200
@@ -524,7 +524,7 @@
<< "' and user '" << user->GetName() << "'.";
} catch (const std::exception& ex) {
Log(LogWarning, "Notification")
- << "Exception occured during notification for checkable '"
+ << "Exception occurred during notification for checkable '"
<< GetCheckable()->GetName() << "': " << DiagnosticInformation(ex);
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icinga2-2.9.0/lib/notification/notificationcomponent.cpp new/icinga2-2.9.1/lib/notification/notificationcomponent.cpp
--- old/icinga2-2.9.0/lib/notification/notificationcomponent.cpp 2018-07-17 14:27:32.000000000 +0200
+++ new/icinga2-2.9.1/lib/notification/notificationcomponent.cpp 2018-07-24 12:48:12.000000000 +0200
@@ -130,7 +130,7 @@
notification->BeginExecuteNotification(NotificationProblem, checkable->GetLastCheckResult(), false, true);
} catch (const std::exception& ex) {
Log(LogWarning, "NotificationComponent")
- << "Exception occured during notification for object '"
+ << "Exception occurred during notification for object '"
<< GetName() << "': " << DiagnosticInformation(ex);
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icinga2-2.9.0/third-party/yajl/src/api/yajl_parse.h new/icinga2-2.9.1/third-party/yajl/src/api/yajl_parse.h
--- old/icinga2-2.9.0/third-party/yajl/src/api/yajl_parse.h 2018-07-17 14:27:32.000000000 +0200
+++ new/icinga2-2.9.1/third-party/yajl/src/api/yajl_parse.h 2018-07-24 12:48:12.000000000 +0200
@@ -35,7 +35,7 @@
yajl_status_ok,
/** a client callback returned zero, stopping the parse */
yajl_status_client_canceled,
- /** An error occured during the parse. Call yajl_get_error for
+ /** An error occurred during the parse. Call yajl_get_error for
* more information about the encountered error */
yajl_status_error
} yajl_status;
@@ -192,7 +192,7 @@
* parse.
*
* If verbose is non-zero, the message will include the JSON
- * text where the error occured, along with an arrow pointing to
+ * text where the error occurred, along with an arrow pointing to
* the specific char.
*
* \returns A dynamically allocated string will be returned which should
@@ -211,7 +211,7 @@
*
* In the event an error is encountered during parsing, this function
* affords the client a way to get the offset into the most recent
- * chunk where the error occured. 0 will be returned if no error
+ * chunk where the error occurred. 0 will be returned if no error
* was encountered.
*/
YAJL_API size_t yajl_get_bytes_consumed(yajl_handle hand);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icinga2-2.9.0/tools/selinux/icinga2.te new/icinga2-2.9.1/tools/selinux/icinga2.te
--- old/icinga2-2.9.0/tools/selinux/icinga2.te 2018-07-17 14:27:32.000000000 +0200
+++ new/icinga2-2.9.1/tools/selinux/icinga2.te 2018-07-24 12:48:12.000000000 +0200
@@ -1,4 +1,4 @@
-policy_module(icinga2, 0.1.6)
+policy_module(icinga2, 0.1.7)
########################################
#
@@ -122,6 +122,7 @@
kernel_read_system_state(icinga2_t)
kernel_read_network_state(icinga2_t)
+kernel_dgram_send(icinga2_t)
# should be moved to nagios_plugin_template in nagios.if
icinga2_execstrans(nagios_admin_plugin_exec_t, nagios_admin_plugin_t)
1
0
Hello community,
here is the log from the commit of package qtile for openSUSE:Factory checked in at 2018-07-31 15:59:02
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/qtile (Old)
and /work/SRC/openSUSE:Factory/.qtile.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "qtile"
Tue Jul 31 15:59:02 2018 rev:7 rq:625973 version:0.12.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/qtile/qtile.changes 2018-05-16 18:44:44.532466801 +0200
+++ /work/SRC/openSUSE:Factory/.qtile.new/qtile.changes 2018-07-31 15:59:09.987522715 +0200
@@ -1,0 +2,15 @@
+Sat Jul 21 20:35:00 UTC 2018 - petr(a)cervinka.net
+
+- Update to version 0.12.0:
+ * Fix floating bug in bsp layout
+ * Fix name of `test_common`
+ * Fix syntax error in mpd widget
+ * Add error handling to mpd widget
+ * Fix caps lock affected behaviour of key bindings
+ * Use python2/3 switch for os.makedirs
+ * Create cache dir if necessary
+ * Fix typo in stack layout documentation
+ * Fix mypy checks for mypy 0.600
+ * Check for existence of BAT_DIR before listing it
+
+-------------------------------------------------------------------
Old:
----
qtile-0.11.1+20180513.39ced15a.tar.xz
New:
----
qtile-0.12.0.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ qtile.spec ++++++
--- /var/tmp/diff_new_pack.441z1e/_old 2018-07-31 15:59:10.591523738 +0200
+++ /var/tmp/diff_new_pack.441z1e/_new 2018-07-31 15:59:10.595523746 +0200
@@ -17,7 +17,7 @@
Name: qtile
-Version: 0.11.1+20180513.39ced15a
+Version: 0.12.0
Release: 0
Summary: A pure-Python tiling window manager
# All MIT except for: libqtile/widget/pacman.py:GPL (v3 or later)
++++++ _service ++++++
--- /var/tmp/diff_new_pack.441z1e/_old 2018-07-31 15:59:10.619523786 +0200
+++ /var/tmp/diff_new_pack.441z1e/_new 2018-07-31 15:59:10.619523786 +0200
@@ -4,8 +4,8 @@
<param name="scm">git</param>
<param name="changesgenerate">enable</param>
<param name="filename">qtile</param>
- <param name="revision">develop</param>
- <param name="versionformat">0.11.1+%cd.%h</param>
+ <param name="revision">master</param>
+ <param name="versionformat">0.12.0</param>
</service>
<service mode="disabled" name="recompress">
<param name="file">*.tar</param>
++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.441z1e/_old 2018-07-31 15:59:10.631523807 +0200
+++ /var/tmp/diff_new_pack.441z1e/_new 2018-07-31 15:59:10.635523814 +0200
@@ -1,4 +1,4 @@
<servicedata>
<service name="tar_scm">
<param name="url">https://github.com/qtile/qtile.git</param>
- <param name="changesrevision">39ced15a03a5ffe9903381183cb2fc80b13176e7</param></service></servicedata>
\ No newline at end of file
+ <param name="changesrevision">95919912b11eabedb59ad3215747544c48c522f9</param></service></servicedata>
\ No newline at end of file
++++++ qtile-0.11.1+20180513.39ced15a.tar.xz -> qtile-0.12.0.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtile-0.11.1+20180513.39ced15a/CHANGELOG new/qtile-0.12.0/CHANGELOG
--- old/qtile-0.11.1+20180513.39ced15a/CHANGELOG 2018-05-14 02:02:22.000000000 +0200
+++ new/qtile-0.12.0/CHANGELOG 2018-07-21 02:02:29.000000000 +0200
@@ -1,4 +1,4 @@
-qtile 0.x.x, released xxxx-xx-xx:
+qtile 0.12.0, released 2018-07-20:
!!! Config breakage !!!
- Tile layout commands up/down/shuffle_up/shuffle_down changed to be
more consistent with other layouts
@@ -7,10 +7,20 @@
* features
- add `add_after_last` option to Tile layout to add windows to the end
of the list.
+ - add new formatting options to TaskList
+ - allow Volume to open app on right click
* bugfixes
- fix floating of file transfer windows and java drop-downs
- fix exception when calling `cmd_next` and `cmd_previous` on layout
without windows
+ - fix caps lock affected behaviour of key bindings
+ - re-create cache dir if it is deleted while qtile is running
+ - fix CheckUpdates widget color when no updates
+ - handle cases where BAT_DIR does not exist
+ - fix the wallpaper widget when using `wallpaper_command`
+ - fix Tile layout order to not reverse on reset
+ - fix calling `focus_previous/next` with no windows
+ - fix floating bug is BSP layout
qtile 0.11.1, released 2018-03-01:
* bug fix
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtile-0.11.1+20180513.39ced15a/README.rst new/qtile-0.12.0/README.rst
--- old/qtile-0.11.1+20180513.39ced15a/README.rst 2018-05-14 02:02:22.000000000 +0200
+++ new/qtile-0.12.0/README.rst 2018-07-21 02:02:29.000000000 +0200
@@ -28,7 +28,7 @@
Current Release
===============
-The current stable version of qtile is 0.11.0, released 2018-02-28. See the
+The current stable version of qtile is 0.12.0, released 2018-07-20. See the
`documentation <http://docs.qtile.org/en/latest/manual/install/index.html>`_
for installation instructions.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtile-0.11.1+20180513.39ced15a/docs/conf.py new/qtile-0.12.0/docs/conf.py
--- old/qtile-0.11.1+20180513.39ced15a/docs/conf.py 2018-05-14 02:02:22.000000000 +0200
+++ new/qtile-0.12.0/docs/conf.py 2018-07-21 02:02:29.000000000 +0200
@@ -90,14 +90,14 @@
# General information about the project.
project = u'Qtile'
-copyright = u'2008-2016, Aldo Cortesi and contributers'
+copyright = u'2008-2018, Aldo Cortesi and contributers'
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
# built documents.
#
# The short X.Y version.
-version = '0.11.0'
+version = '0.12.0'
# The full version, including alpha/beta/rc tags.
release = version
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtile-0.11.1+20180513.39ced15a/libqtile/layout/bsp.py new/qtile-0.12.0/libqtile/layout/bsp.py
--- old/qtile-0.11.1+20180513.39ced15a/libqtile/layout/bsp.py 2018-05-14 02:02:22.000000000 +0200
+++ new/qtile-0.12.0/libqtile/layout/bsp.py 2018-07-21 02:02:29.000000000 +0200
@@ -189,14 +189,17 @@
def remove(self, client):
node = self.get_node(client)
- if node.parent:
- node = node.parent.remove(node)
- newclient = next(node.clients(), None)
- if newclient is None:
- self.current = self.root
- return newclient
- node.client = None
- self.current = self.root
+ if node:
+ if node.parent:
+ node = node.parent.remove(node)
+ newclient = next(node.clients(), None)
+ if newclient is None:
+ self.current = self.root
+ else:
+ self.current = self.get_node(newclient)
+ return newclient
+ node.client = None
+ self.current = self.root
def configure(self, client, screen):
self.root.calc_geom(screen.x, screen.y, screen.width,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtile-0.11.1+20180513.39ced15a/libqtile/layout/columns.py new/qtile-0.12.0/libqtile/layout/columns.py
--- old/qtile-0.11.1+20180513.39ced15a/libqtile/layout/columns.py 2018-05-14 02:02:22.000000000 +0200
+++ new/qtile-0.12.0/libqtile/layout/columns.py 2018-07-21 02:02:29.000000000 +0200
@@ -77,11 +77,11 @@
"""Extension of the Stack layout.
The screen is split into columns, which can be dynamically added or
- removed. Each column displays either a sigle window at a time from a
- stack of windows or all of them simultaneously, spliting the column
- space. Columns and windows can be resized and windows can be shuffled
- around. This layout can also emulate "Wmii", "Verical", and "Max",
- depending on the default parameters.
+ removed. Each column displays either a single window at a time from a
+ stack of windows or all of them simultaneously, spliting the column space.
+ Columns and windows can be resized and windows can be shuffled around.
+ This layout can also emulate "Wmii", "Verical", and "Max", depending on the
+ default parameters.
An example key configuration is::
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtile-0.11.1+20180513.39ced15a/libqtile/manager.py new/qtile-0.12.0/libqtile/manager.py
--- old/qtile-0.11.1+20180513.39ced15a/libqtile/manager.py 2018-05-14 02:02:22.000000000 +0200
+++ new/qtile-0.12.0/libqtile/manager.py 2018-07-21 02:02:29.000000000 +0200
@@ -22,8 +22,9 @@
try:
import tracemalloc
+ has_tracemalloc = True
except ImportError:
- tracemalloc = None
+ has_tracemalloc = False
from libqtile.dgroups import DGroups
from xcffib.xproto import EventMask, WindowError, AccessError, DrawableError
@@ -421,27 +422,20 @@
)
self.screens.append(s)
+ def _auto_modmasks(self):
+ yield 0
+ yield xcbq.ModMasks["lock"]
+ if self.numlockMask:
+ yield self.numlockMask
+ yield self.numlockMask | xcbq.ModMasks["lock"]
+
def mapKey(self, key):
self.keyMap[(key.keysym, key.modmask & self.validMask)] = key
code = self.conn.keysym_to_keycode(key.keysym)
- self.root.grab_key(
- code,
- key.modmask,
- True,
- xcffib.xproto.GrabMode.Async,
- xcffib.xproto.GrabMode.Async,
- )
- if self.numlockMask:
- self.root.grab_key(
- code,
- key.modmask | self.numlockMask,
- True,
- xcffib.xproto.GrabMode.Async,
- xcffib.xproto.GrabMode.Async,
- )
+ for amask in self._auto_modmasks():
self.root.grab_key(
code,
- key.modmask | self.numlockMask | xcbq.ModMasks["lock"],
+ key.modmask | amask,
True,
xcffib.xproto.GrabMode.Async,
xcffib.xproto.GrabMode.Async,
@@ -453,13 +447,8 @@
return
code = self.conn.keysym_to_keycode(key.keysym)
- self.root.ungrab_key(code, key.modmask)
- if self.numlockMask:
- self.root.ungrab_key(code, key.modmask | self.numlockMask)
- self.root.ungrab_key(
- code,
- key.modmask | self.numlockMask | xcbq.ModMasks["lock"]
- )
+ for amask in self._auto_modmasks():
+ self.root.ungrab_key(code, key.modmask | amask)
del(self.keyMap[key_index])
def update_net_desktops(self):
@@ -669,26 +658,10 @@
eventmask = EventMask.ButtonPress
if isinstance(i, Drag):
eventmask |= EventMask.ButtonRelease
- self.root.grab_button(
- i.button_code,
- i.modmask,
- True,
- eventmask,
- grabmode,
- xcffib.xproto.GrabMode.Async,
- )
- if self.numlockMask:
+ for amask in self._auto_modmasks():
self.root.grab_button(
i.button_code,
- i.modmask | self.numlockMask,
- True,
- eventmask,
- grabmode,
- xcffib.xproto.GrabMode.Async,
- )
- self.root.grab_button(
- i.button_code,
- i.modmask | self.numlockMask | xcbq.ModMasks["lock"],
+ i.modmask | amask,
True,
eventmask,
grabmode,
@@ -1822,6 +1795,10 @@
Running tracemalloc is required for qtile-top
"""
+ if not has_tracemalloc:
+ logger.warning('No tracemalloc module')
+ raise command.CommandError("No tracemalloc module")
+
if not tracemalloc.is_tracing():
tracemalloc.start()
else:
@@ -1829,9 +1806,10 @@
def cmd_tracemalloc_dump(self):
"""Dump tracemalloc snapshot"""
- if not tracemalloc:
+ if not has_tracemalloc:
logger.warning('No tracemalloc module')
raise command.CommandError("No tracemalloc module")
+
if not tracemalloc.is_tracing():
return [False, "Trace not started"]
cache_directory = get_cache_dir()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtile-0.11.1+20180513.39ced15a/libqtile/notify.py new/qtile-0.12.0/libqtile/notify.py
--- old/qtile-0.11.1+20180513.39ced15a/libqtile/notify.py 2018-05-14 02:02:22.000000000 +0200
+++ new/qtile-0.12.0/libqtile/notify.py 2018-07-21 02:02:29.000000000 +0200
@@ -33,13 +33,14 @@
from dbus import service
from dbus.mainloop.glib import DBusGMainLoop
DBusGMainLoop(set_as_default=True)
+ has_dbus = True
except ImportError:
- dbus = None
+ has_dbus = False
BUS_NAME = 'org.freedesktop.Notifications'
SERVICE_PATH = '/org/freedesktop/Notifications'
-if dbus:
+if has_dbus:
class NotificationService(service.Object):
def __init__(self, manager):
bus = dbus.SessionBus()
@@ -89,7 +90,7 @@
@property
def service(self):
- if dbus and self._service is None:
+ if has_dbus and self._service is None:
try:
self._service = NotificationService(self)
except Exception:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtile-0.11.1+20180513.39ced15a/libqtile/scripts/qtile.py new/qtile-0.12.0/libqtile/scripts/qtile.py
--- old/qtile-0.11.1+20180513.39ced15a/libqtile/scripts/qtile.py 2018-05-14 02:02:22.000000000 +0200
+++ new/qtile-0.12.0/libqtile/scripts/qtile.py 2018-07-21 02:02:29.000000000 +0200
@@ -28,7 +28,7 @@
from libqtile.log_utils import init_log, logger
from libqtile import confreader
-locale.setlocale(locale.LC_ALL, locale.getdefaultlocale())
+locale.setlocale(locale.LC_ALL, locale.getdefaultlocale()) # type: ignore
try:
import pkg_resources
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtile-0.11.1+20180513.39ced15a/libqtile/widget/battery.py new/qtile-0.12.0/libqtile/widget/battery.py
--- old/qtile-0.11.1+20180513.39ced15a/libqtile/widget/battery.py 2018-05-14 02:02:22.000000000 +0200
+++ new/qtile-0.12.0/libqtile/widget/battery.py 2018-07-21 02:02:29.000000000 +0200
@@ -63,12 +63,11 @@
def _get_battery_name():
- bats = [f for f in os.listdir(BAT_DIR) if f.startswith('BAT')]
-
- if bats:
- return bats[0]
- else:
- return 'BAT0'
+ if os.path.isdir(BAT_DIR):
+ bats = [f for f in os.listdir(BAT_DIR) if f.startswith('BAT')]
+ if bats:
+ return bats[0]
+ return 'BAT0'
class _Battery(base._TextBox):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtile-0.11.1+20180513.39ced15a/libqtile/widget/check_updates.py new/qtile-0.12.0/libqtile/widget/check_updates.py
--- old/qtile-0.11.1+20180513.39ced15a/libqtile/widget/check_updates.py 2018-05-14 02:02:22.000000000 +0200
+++ new/qtile-0.12.0/libqtile/widget/check_updates.py 2018-07-21 02:02:29.000000000 +0200
@@ -61,26 +61,30 @@
self.cmd = None
def _check_updates(self):
+ # type: () -> str
try:
updates = self.call_process(self.cmd)
except CalledProcessError:
updates = ""
- num_updates = str(len(updates.splitlines()) - self.subtr)
+ num_updates = len(updates.splitlines()) - self.subtr
self._set_colour(num_updates)
- return self.display_format.format(**{"updates": num_updates})
+ return self.display_format.format(**{"updates": str(num_updates)})
def _set_colour(self, num_updates):
+ # type: (int) -> None
if num_updates:
self.layout.colour = self.colour_have_updates
else:
self.layout.colour = self.colour_no_updates
def poll(self):
+ # type: () -> str
if not self.cmd:
return "N/A"
return self._check_updates()
def button_press(self, x, y, button):
+ # type: (int, int, int) -> None
base.ThreadedPollText.button_press(self, x, y, button)
if button == 1 and self.execute is not None:
Popen(self.execute, shell=True)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtile-0.11.1+20180513.39ced15a/libqtile/widget/generic_poll_text.py new/qtile-0.12.0/libqtile/widget/generic_poll_text.py
--- old/qtile-0.11.1+20180513.39ced15a/libqtile/widget/generic_poll_text.py 2018-05-14 02:02:22.000000000 +0200
+++ new/qtile-0.12.0/libqtile/widget/generic_poll_text.py 2018-07-21 02:02:29.000000000 +0200
@@ -17,6 +17,11 @@
def xmlparse(body):
raise Exception("no xmltodict library")
+try:
+ from typing import Any, List, Tuple # noqa: F401
+except ImportError:
+ pass
+
class GenPollText(base.ThreadedPollText):
"""A generic text widget that polls using poll function to get the text"""
@@ -46,7 +51,7 @@
('user_agent', 'Qtile', 'Set the user agent'),
('headers', {}, 'Extra Headers'),
('xml', False, 'Is XML?'),
- ]
+ ] # type: List[Tuple[str, Any, str]]
def __init__(self, **config):
base.ThreadedPollText.__init__(self, **config)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtile-0.11.1+20180513.39ced15a/libqtile/widget/mpd2widget.py new/qtile-0.12.0/libqtile/widget/mpd2widget.py
--- old/qtile-0.11.1+20180513.39ced15a/libqtile/widget/mpd2widget.py 2018-05-14 02:02:22.000000000 +0200
+++ new/qtile-0.12.0/libqtile/widget/mpd2widget.py 2018-07-21 02:02:29.000000000 +0200
@@ -1,4 +1,5 @@
from . import base
+from libqtile.log_utils import logger
from six import u, text_type
from socket import error as socket_error
@@ -179,7 +180,12 @@
if not isinstance(fmt, text_type):
fmt = u(fmt)
- return fmt.format(play_status=play_status, **status)
+ try:
+ formatted = fmt.format(play_status=play_status, **status)
+ return formatted
+ except KeyError as e:
+ logger.exception("mpd client did not return status: {}".format(e.args[0]))
+ return "ERROR"
def prepare_formatting(self, status, currentsong):
for key in self.prepare_status:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtile-0.11.1+20180513.39ced15a/libqtile/widget/prompt.py new/qtile-0.12.0/libqtile/widget/prompt.py
--- old/qtile-0.11.1+20180513.39ced15a/libqtile/widget/prompt.py 2018-05-14 02:02:22.000000000 +0200
+++ new/qtile-0.12.0/libqtile/widget/prompt.py 2018-07-21 02:02:29.000000000 +0200
@@ -34,6 +34,7 @@
import glob
import os
import pickle
+import six
import string
from collections import OrderedDict, deque
@@ -561,6 +562,13 @@
if self.position < self.max_history:
self.position += 1
+ if six.PY3:
+ os.makedirs(os.path.dirname(self.history_path), exist_ok=True)
+ else:
+ try:
+ os.makedirs(os.path.dirname(self.history_path))
+ except OSError: # file exists
+ pass
with open(self.history_path, mode='wb') as f:
pickle.dump(self.history, f, protocol=2)
self.callback(self.userInput)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtile-0.11.1+20180513.39ced15a/resources/qshell.1 new/qtile-0.12.0/resources/qshell.1
--- old/qtile-0.11.1+20180513.39ced15a/resources/qshell.1 2018-05-14 02:02:22.000000000 +0200
+++ new/qtile-0.12.0/resources/qshell.1 2018-07-21 02:02:29.000000000 +0200
@@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
-.TH "QSHELL" "1" "Feb 28, 2018" "0.11.0" "Qtile"
+.TH "QSHELL" "1" "Jul 20, 2018" "0.12.0" "Qtile"
.SH NAME
qshell \- Qtile Documentation
.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtile-0.11.1+20180513.39ced15a/resources/qtile.1 new/qtile-0.12.0/resources/qtile.1
--- old/qtile-0.11.1+20180513.39ced15a/resources/qtile.1 2018-05-14 02:02:22.000000000 +0200
+++ new/qtile-0.12.0/resources/qtile.1 2018-07-21 02:02:29.000000000 +0200
@@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
-.TH "QTILE" "1" "Feb 28, 2018" "0.11.0" "Qtile"
+.TH "QTILE" "1" "Jul 20, 2018" "0.12.0" "Qtile"
.SH NAME
qtile \- Qtile Documentation
.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtile-0.11.1+20180513.39ced15a/rpm/qtile.spec new/qtile-0.12.0/rpm/qtile.spec
--- old/qtile-0.11.1+20180513.39ced15a/rpm/qtile.spec 2018-05-14 02:02:22.000000000 +0200
+++ new/qtile-0.12.0/rpm/qtile.spec 2018-07-21 02:02:29.000000000 +0200
@@ -1,7 +1,7 @@
Summary: A pure-Python tiling window manager
Name: qtile
-Version: 0.10.7
-Release: 3%{?dist}
+Version: 0.12.0
+Release: 1%{?dist}
Source0: https://github.com/qtile/qtile/archive/v%{version}.tar.gz
License: MIT and GPLv3+
# All MIT except for:
@@ -70,13 +70,37 @@
%{_bindir}/qtile
%{_bindir}/qtile-run
%{_bindir}/qtile-top
+%{_bindir}/dqtile-cmd
+%{_bindir}/qtile-cmd
%{python3_sitelib}/qtile-%{version}-py%{python3_version}.egg-info
%{python3_sitelib}/libqtile
%{_datadir}/xsessions/qtile.desktop
%changelog
-* Wed Feb 28 2018 John Dulaney <jdulaney(a)fedoraproject.org> - 0.11.0-1
+* Wed Jul 18 2018 John Dulaney <jdulaney(a)fedoraproject.org> - 0.12.0-1
+- !!! Config breakage !!!
+- Tile layout commands up/down/shuffle_up/shuffle_down changed to be
+- more consistent with other layouts
+- move qcmd to qtile-cmd because of conflict with renameutils, move
+- dqcmd to dqtile-cmd for symmetry
+- add `add_after_last` option to Tile layout to add windows to the end of the list
+- add new formatting options to TaskList
+- allow Volume to open app on right click
+- fix floating of file transfer windows and java drop-downs
+- fix exception when calling `cmd_next` and `cmd_previous` on layout without windows
+- fix caps lock affected behaviour of key bindings
+- re-create cache dir if it is deleted while qtile is running
+- fix CheckUpdates widget color when no updates
+- handle cases where BAT_DIR does not exist
+- fix the wallpaper widget when using `wallpaper_command`
+- fix Tile layout order to not reverse on reset
+- fix calling `focus_previous/next` with no windows
+
+* Fri Mar 30 2018 John Dulaney <jdulaney(a)fedoraproject.org> - 0.11.1-2
+- Add unpackaged files %#{_bindir}/dqcmd %#{_bindir}/qcmd
+
+* Wed Feb 28 2018 John Dulaney <jdulaney(a)fedoraproject.org> - 0.11.1-1
- !!! Completely changed extension configuration, see the documentation !!!
- !!! `extention` subpackage renamed to `extension` !!!
- !!! `extentions` configuration variable changed to `extension_defaults` !!!
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtile-0.11.1+20180513.39ced15a/setup.cfg new/qtile-0.12.0/setup.cfg
--- old/qtile-0.11.1+20180513.39ced15a/setup.cfg 2018-05-14 02:02:22.000000000 +0200
+++ new/qtile-0.12.0/setup.cfg 2018-07-21 02:02:29.000000000 +0200
@@ -14,11 +14,15 @@
[mypy]
mypy_path = stubs
python_version = 2.7
-[mypy-libqtile/_ffi_*]
-ignore_errors = True
-[mypy-trollius]
+[mypy-_cffi_backend]
+ignore_missing_imports = True
+[mypy-cairocffi._ffi]
ignore_missing_imports = True
[mypy-libqtile._ffi_pango]
ignore_missing_imports = True
[mypy-libqtile._ffi_xcursors]
ignore_missing_imports = True
+[mypy-trollius]
+ignore_missing_imports = True
+[mypy-xcffib._ffi]
+ignore_missing_imports = True
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtile-0.11.1+20180513.39ced15a/setup.py new/qtile-0.12.0/setup.py
--- old/qtile-0.11.1+20180513.39ced15a/setup.py 2018-05-14 02:02:22.000000000 +0200
+++ new/qtile-0.12.0/setup.py 2018-07-21 02:02:29.000000000 +0200
@@ -96,7 +96,7 @@
setup(
name="qtile",
- version="0.11.1",
+ version="0.12.0",
description="A pure-Python tiling window manager.",
long_description=long_description,
classifiers=[
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtile-0.11.1+20180513.39ced15a/test/layouts/test__common.py new/qtile-0.12.0/test/layouts/test__common.py
--- old/qtile-0.11.1+20180513.39ced15a/test/layouts/test__common.py 2018-05-14 02:02:22.000000000 +0200
+++ new/qtile-0.12.0/test/layouts/test__common.py 1970-01-01 01:00:00.000000000 +0100
@@ -1,431 +0,0 @@
-# Copyright (c) 2017 Dario Giovannetti
-#
-# 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 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.
-
-import pytest
-
-from libqtile import layout
-import libqtile.manager
-import libqtile.config
-import libqtile.hook
-from .layout_utils import assertFocused, assertFocusPathUnordered
-
-
-class AllLayoutsConfig(object):
- """
- Ensure that all layouts behave consistently in some common scenarios.
- """
- auto_fullscreen = True
- main = None
- groups = [
- libqtile.config.Group("a"),
- libqtile.config.Group("b"),
- libqtile.config.Group("c"),
- libqtile.config.Group("d"),
- ]
- floating_layout = libqtile.layout.floating.Floating()
- keys = []
- mouse = []
- screens = []
-
- @staticmethod
- def iter_layouts():
- # Retrieve the layouts dynamically (i.e. do not hard-code a list) to
- # prevent forgetting to add new future layouts
- for layout_name in dir(layout):
- Layout = getattr(layout, layout_name)
- try:
- test = issubclass(Layout, layout.base.Layout)
- except TypeError:
- pass
- else:
- # Explicitly exclude the Slice layout, since it depends on
- # other layouts (tested here) and has its own specific tests
- if test and layout_name != 'Slice':
- yield layout_name, Layout
-
- @classmethod
- def generate(cls):
- """
- Generate a configuration for each layout currently in the repo.
- Each configuration has only the tested layout (i.e. 1 item) in the
- 'layouts' variable.
- """
- return [type(layout_name, (cls, ), {'layouts': [Layout()]})
- for layout_name, Layout in cls.iter_layouts()]
-
-
-class AllLayouts(AllLayoutsConfig):
- """
- Like AllLayoutsConfig, but all the layouts in the repo are installed
- together in the 'layouts' variable.
- """
- layouts = [Layout() for layout_name, Layout
- in AllLayoutsConfig.iter_layouts()]
-
-
-class AllLayoutsConfigEvents(AllLayoutsConfig):
- """
- Extends AllLayoutsConfig to test events.
- """
- def main(self, c):
- # TODO: Test more events
-
- c.test_data = {
- 'focus_change': 0,
- }
-
- def handle_focus_change():
- c.test_data['focus_change'] += 1
-
- libqtile.hook.subscribe.focus_change(handle_focus_change)
-
-
-each_layout_config = pytest.mark.parametrize("qtile", AllLayoutsConfig.generate(), indirect=True)
-all_layouts_config = pytest.mark.parametrize("qtile", [AllLayouts], indirect=True)
-each_layout_config_events = pytest.mark.parametrize("qtile", AllLayoutsConfigEvents.generate(), indirect=True)
-
-
-@each_layout_config
-def test_window_types(qtile):
- pytest.importorskip("Tkinter")
- qtile.testWindow("one")
-
- # A dialog should take focus and be floating
- qtile.testDialog("dialog")
- qtile.c.window.info()['floating'] is True
- assertFocused(qtile, "dialog")
-
- # A notification shouldn't steal focus and should be floating
- qtile.testNotification("notification")
- assert qtile.c.group.info()['focus'] != 'notification'
- qtile.c.group.info_by_name('notification')['floating'] is True
-
-
-@each_layout_config
-def test_focus_cycle(qtile):
- pytest.importorskip("Tkinter")
-
- qtile.testWindow("one")
- qtile.testWindow("two")
- qtile.testDialog("float1")
- qtile.testDialog("float2")
- qtile.testWindow("three")
-
- # Test preconditions (the order of items in 'clients' is managed by each layout)
- assert set(qtile.c.layout.info()['clients']) == {'one', 'two', 'three'}
- assertFocused(qtile, "three")
-
- # Assert that the layout cycles the focus on all windows
- assertFocusPathUnordered(qtile, 'float1', 'float2', 'one', 'two', 'three')
-
-
-@each_layout_config
-def test_focus_back(qtile):
- # No exception must be raised without windows
- qtile.c.group.focus_back()
-
- # Nothing must happen with only one window
- one = qtile.testWindow("one")
- qtile.c.group.focus_back()
- assertFocused(qtile, "one")
-
- # 2 windows
- two = qtile.testWindow("two")
- assertFocused(qtile, "two")
- qtile.c.group.focus_back()
- assertFocused(qtile, "one")
- qtile.c.group.focus_back()
- assertFocused(qtile, "two")
-
- # Float a window
- three = qtile.testWindow("three")
- qtile.c.group.focus_back()
- assertFocused(qtile, "two")
- qtile.c.window.toggle_floating()
- qtile.c.group.focus_back()
- assertFocused(qtile, "three")
-
- # If the previous window is killed, the further previous one must be focused
- four = qtile.testWindow("four")
- qtile.kill_window(two)
- qtile.kill_window(three)
- assertFocused(qtile, "four")
- qtile.c.group.focus_back()
- assertFocused(qtile, "one")
-
-
-# TODO: Test more events
-@each_layout_config_events
-def test_focus_change_event(qtile):
- # Test that the correct number of focus_change events are fired e.g. when
- # opening, closing or switching windows.
- # If for example a layout explicitly fired a focus_change event even though
- # group._Group.focus() or group._Group.remove() already fire one, the other
- # installed layouts would wrongly react to it and cause misbehaviour.
- # In short, this test prevents layouts from influencing each other in
- # unexpected ways.
-
- # TODO: Why does it start with 2?
- assert qtile.c.get_test_data()['focus_change'] == 2
-
- # Spawning a window must fire only 1 focus_change event
- one = qtile.testWindow("one")
- assert qtile.c.get_test_data()['focus_change'] == 3
- two = qtile.testWindow("two")
- assert qtile.c.get_test_data()['focus_change'] == 4
- three = qtile.testWindow("three")
- assert qtile.c.get_test_data()['focus_change'] == 5
-
- # Switching window must fire only 1 focus_change event
- assertFocused(qtile, "three")
- qtile.c.group.focus_by_name("one")
- assert qtile.c.get_test_data()['focus_change'] == 6
- assertFocused(qtile, "one")
-
- # Focusing the current window must fire another focus_change event
- qtile.c.group.focus_by_name("one")
- assert qtile.c.get_test_data()['focus_change'] == 7
-
- # Toggling a window floating should not fire focus_change events
- qtile.c.window.toggle_floating()
- assert qtile.c.get_test_data()['focus_change'] == 7
- qtile.c.window.toggle_floating()
- assert qtile.c.get_test_data()['focus_change'] == 7
-
- # Removing the focused window must fire only 1 focus_change event
- assertFocused(qtile, "one")
- assert qtile.c.group.info()['focusHistory'] == ["two", "three", "one"]
- qtile.kill_window(one)
- assert qtile.c.get_test_data()['focus_change'] == 8
-
- # The position where 'one' was after it was floated and unfloated
- # above depends on the layout, so we can't predict here what window gets
- # selected after killing it; for this reason, focus 'three' explicitly to
- # continue testing
- qtile.c.group.focus_by_name("three")
- assert qtile.c.group.info()['focusHistory'] == ["two", "three"]
- assert qtile.c.get_test_data()['focus_change'] == 9
-
- # Removing a non-focused window must not fire focus_change events
- qtile.kill_window(two)
- assert qtile.c.get_test_data()['focus_change'] == 9
- assertFocused(qtile, "three")
-
- # Removing the last window must still generate 1 focus_change event
- qtile.kill_window(three)
- assert qtile.c.layout.info()['clients'] == []
- assert qtile.c.get_test_data()['focus_change'] == 10
-
-
-@each_layout_config
-def test_remove(qtile):
- one = qtile.testWindow("one")
- two = qtile.testWindow("two")
- three = qtile.testWindow("three")
- assertFocused(qtile, "three")
- assert qtile.c.group.info()['focusHistory'] == ["one", "two", "three"]
-
- # Removing a focused window must focus another (which one depends on the layout)
- qtile.kill_window(three)
- assert qtile.c.window.info()['name'] in qtile.c.layout.info()['clients']
-
- # To continue testing, explicitly set focus on 'two'
- qtile.c.group.focus_by_name("two")
- four = qtile.testWindow("four")
- assertFocused(qtile, "four")
- assert qtile.c.group.info()['focusHistory'] == ["one", "two", "four"]
-
- # Removing a non-focused window must not change the current focus
- qtile.kill_window(two)
- assertFocused(qtile, "four")
- assert qtile.c.group.info()['focusHistory'] == ["one", "four"]
-
- # Add more windows and shuffle the focus order
- five = qtile.testWindow("five")
- six = qtile.testWindow("six")
- qtile.c.group.focus_by_name("one")
- seven = qtile.testWindow("seven")
- qtile.c.group.focus_by_name("six")
- assertFocused(qtile, "six")
- assert qtile.c.group.info()['focusHistory'] == ["four", "five", "one",
- "seven", "six"]
-
- qtile.kill_window(five)
- qtile.kill_window(one)
- assertFocused(qtile, "six")
- assert qtile.c.group.info()['focusHistory'] == ["four", "seven", "six"]
-
- qtile.c.group.focus_by_name("seven")
- qtile.kill_window(seven)
- assert qtile.c.window.info()['name'] in qtile.c.layout.info()['clients']
-
-
-@each_layout_config
-def test_remove_floating(qtile):
- pytest.importorskip("Tkinter")
-
- one = qtile.testWindow("one")
- two = qtile.testWindow("two")
- float1 = qtile.testDialog("float1")
- assertFocused(qtile, "float1")
- assert set(qtile.c.layout.info()['clients']) == {"one", "two"}
- assert qtile.c.group.info()['focusHistory'] == ["one", "two", "float1"]
-
- # Removing a focused floating window must focus the one that was focused before
- qtile.kill_window(float1)
- assertFocused(qtile, "two")
- assert qtile.c.group.info()['focusHistory'] == ["one", "two"]
-
- float2 = qtile.testDialog("float2")
- assertFocused(qtile, "float2")
- assert qtile.c.group.info()['focusHistory'] == ["one", "two", "float2"]
-
- # Removing a non-focused floating window must not change the current focus
- qtile.c.group.focus_by_name("two")
- qtile.kill_window(float2)
- assertFocused(qtile, "two")
- assert qtile.c.group.info()['focusHistory'] == ["one", "two"]
-
- # Add more windows and shuffle the focus order
- three = qtile.testWindow("three")
- float3 = qtile.testDialog("float3")
- qtile.c.group.focus_by_name("one")
- float4 = qtile.testDialog("float4")
- float5 = qtile.testDialog("float5")
- qtile.c.group.focus_by_name("three")
- qtile.c.group.focus_by_name("float3")
- assert qtile.c.group.info()['focusHistory'] == ["two", "one", "float4",
- "float5", "three", "float3"]
-
- qtile.kill_window(one)
- assertFocused(qtile, "float3")
- assert qtile.c.group.info()['focusHistory'] == ["two", "float4",
- "float5", "three", "float3"]
-
- qtile.kill_window(float5)
- assertFocused(qtile, "float3")
- assert qtile.c.group.info()['focusHistory'] == ["two", "float4", "three", "float3"]
-
- # The focus must be given to the previous window even if it's floating
- qtile.c.group.focus_by_name("float4")
- assert qtile.c.group.info()['focusHistory'] == ["two", "three", "float3", "float4"]
- qtile.kill_window(float4)
- assertFocused(qtile, "float3")
- assert qtile.c.group.info()['focusHistory'] == ["two", "three", "float3"]
-
- four = qtile.testWindow("four")
- float6 = qtile.testDialog("float6")
- five = qtile.testWindow("five")
- qtile.c.group.focus_by_name("float3")
- assert qtile.c.group.info()['focusHistory'] == ["two", "three", "four",
- "float6", "five", "float3"]
-
- # Killing several unfocused windows before the current one, and then
- # killing the current window, must focus the remaining most recently
- # focused window
- qtile.kill_window(five)
- qtile.kill_window(four)
- qtile.kill_window(float6)
- assert qtile.c.group.info()['focusHistory'] == ["two", "three", "float3"]
- qtile.kill_window(float3)
- assertFocused(qtile, "three")
- assert qtile.c.group.info()['focusHistory'] == ["two", "three"]
-
-
-@each_layout_config
-def test_desktop_notifications(qtile):
- pytest.importorskip("Tkinter")
-
- # Unlike normal floating windows such as dialogs, notifications don't steal
- # focus when they spawn, so test them separately
-
- # A notification fired in an empty group must not take focus
- notif1 = qtile.testNotification("notif1")
- assert qtile.c.group.info()['focus'] is None
- qtile.kill_window(notif1)
-
- # A window is spawned while a notification is displayed
- notif2 = qtile.testNotification("notif2")
- one = qtile.testWindow("one")
- assert qtile.c.group.info()['focusHistory'] == ["one"]
- qtile.kill_window(notif2)
-
- # Another notification is fired, but the focus must not change
- notif3 = qtile.testNotification("notif3")
- assertFocused(qtile, 'one')
- qtile.kill_window(notif3)
-
- # Complicate the scenario with multiple windows and notifications
-
- dialog1 = qtile.testDialog("dialog1")
- two = qtile.testWindow("two")
- notif4 = qtile.testNotification("notif4")
- notif5 = qtile.testNotification("notif5")
- assert qtile.c.group.info()['focusHistory'] == ["one", "dialog1", "two"]
-
- dialog2 = qtile.testDialog("dialog2")
- qtile.kill_window(notif5)
- three = qtile.testWindow("three")
- qtile.kill_window(one)
- qtile.c.group.focus_by_name("two")
- notif6 = qtile.testNotification("notif6")
- notif7 = qtile.testNotification("notif7")
- qtile.kill_window(notif4)
- notif8 = qtile.testNotification("notif8")
- assert qtile.c.group.info()['focusHistory'] == ["dialog1", "dialog2",
- "three", "two"]
-
- dialog3 = qtile.testDialog("dialog3")
- qtile.kill_window(dialog1)
- qtile.kill_window(dialog2)
- qtile.kill_window(notif6)
- qtile.c.group.focus_by_name("three")
- qtile.kill_window(notif7)
- qtile.kill_window(notif8)
- assert qtile.c.group.info()['focusHistory'] == ["two", "dialog3", "three"]
-
-
-@all_layouts_config
-def test_cycle_layouts(qtile):
- qtile.testWindow("one")
- qtile.testWindow("two")
- qtile.testWindow("three")
- qtile.testWindow("four")
- qtile.c.group.focus_by_name("three")
- assertFocused(qtile, "three")
-
- # Cycling all the layouts must keep the current window focused
- initial_layout_name = qtile.c.layout.info()['name']
- while True:
- qtile.c.next_layout()
- if qtile.c.layout.info()['name'] == initial_layout_name:
- break
- # Use qtile.c.layout.info()['name'] in the assertion message, so we
- # know which layout is buggy
- assert qtile.c.window.info()['name'] == "three", qtile.c.layout.info()['name']
-
- # Now try backwards
- while True:
- qtile.c.prev_layout()
- if qtile.c.layout.info()['name'] == initial_layout_name:
- break
- # Use qtile.c.layout.info()['name'] in the assertion message, so we
- # know which layout is buggy
- assert qtile.c.window.info()['name'] == "three", qtile.c.layout.info()['name']
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtile-0.11.1+20180513.39ced15a/test/layouts/test_common.py new/qtile-0.12.0/test/layouts/test_common.py
--- old/qtile-0.11.1+20180513.39ced15a/test/layouts/test_common.py 1970-01-01 01:00:00.000000000 +0100
+++ new/qtile-0.12.0/test/layouts/test_common.py 2018-07-21 02:02:29.000000000 +0200
@@ -0,0 +1,431 @@
+# Copyright (c) 2017 Dario Giovannetti
+#
+# 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 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.
+
+import pytest
+
+from libqtile import layout
+import libqtile.manager
+import libqtile.config
+import libqtile.hook
+from .layout_utils import assertFocused, assertFocusPathUnordered
+
+
+class AllLayoutsConfig(object):
+ """
+ Ensure that all layouts behave consistently in some common scenarios.
+ """
+ auto_fullscreen = True
+ main = None
+ groups = [
+ libqtile.config.Group("a"),
+ libqtile.config.Group("b"),
+ libqtile.config.Group("c"),
+ libqtile.config.Group("d"),
+ ]
+ floating_layout = libqtile.layout.floating.Floating()
+ keys = []
+ mouse = []
+ screens = []
+
+ @staticmethod
+ def iter_layouts():
+ # Retrieve the layouts dynamically (i.e. do not hard-code a list) to
+ # prevent forgetting to add new future layouts
+ for layout_name in dir(layout):
+ Layout = getattr(layout, layout_name)
+ try:
+ test = issubclass(Layout, layout.base.Layout)
+ except TypeError:
+ pass
+ else:
+ # Explicitly exclude the Slice layout, since it depends on
+ # other layouts (tested here) and has its own specific tests
+ if test and layout_name != 'Slice':
+ yield layout_name, Layout
+
+ @classmethod
+ def generate(cls):
+ """
+ Generate a configuration for each layout currently in the repo.
+ Each configuration has only the tested layout (i.e. 1 item) in the
+ 'layouts' variable.
+ """
+ return [type(layout_name, (cls, ), {'layouts': [Layout()]})
+ for layout_name, Layout in cls.iter_layouts()]
+
+
+class AllLayouts(AllLayoutsConfig):
+ """
+ Like AllLayoutsConfig, but all the layouts in the repo are installed
+ together in the 'layouts' variable.
+ """
+ layouts = [Layout() for layout_name, Layout
+ in AllLayoutsConfig.iter_layouts()]
+
+
+class AllLayoutsConfigEvents(AllLayoutsConfig):
+ """
+ Extends AllLayoutsConfig to test events.
+ """
+ def main(self, c):
+ # TODO: Test more events
+
+ c.test_data = {
+ 'focus_change': 0,
+ }
+
+ def handle_focus_change():
+ c.test_data['focus_change'] += 1
+
+ libqtile.hook.subscribe.focus_change(handle_focus_change)
+
+
+each_layout_config = pytest.mark.parametrize("qtile", AllLayoutsConfig.generate(), indirect=True)
+all_layouts_config = pytest.mark.parametrize("qtile", [AllLayouts], indirect=True)
+each_layout_config_events = pytest.mark.parametrize("qtile", AllLayoutsConfigEvents.generate(), indirect=True)
+
+
+@each_layout_config
+def test_window_types(qtile):
+ pytest.importorskip("Tkinter")
+ qtile.testWindow("one")
+
+ # A dialog should take focus and be floating
+ qtile.testDialog("dialog")
+ qtile.c.window.info()['floating'] is True
+ assertFocused(qtile, "dialog")
+
+ # A notification shouldn't steal focus and should be floating
+ qtile.testNotification("notification")
+ assert qtile.c.group.info()['focus'] != 'notification'
+ qtile.c.group.info_by_name('notification')['floating'] is True
+
+
+@each_layout_config
+def test_focus_cycle(qtile):
+ pytest.importorskip("Tkinter")
+
+ qtile.testWindow("one")
+ qtile.testWindow("two")
+ qtile.testDialog("float1")
+ qtile.testDialog("float2")
+ qtile.testWindow("three")
+
+ # Test preconditions (the order of items in 'clients' is managed by each layout)
+ assert set(qtile.c.layout.info()['clients']) == {'one', 'two', 'three'}
+ assertFocused(qtile, "three")
+
+ # Assert that the layout cycles the focus on all windows
+ assertFocusPathUnordered(qtile, 'float1', 'float2', 'one', 'two', 'three')
+
+
+@each_layout_config
+def test_focus_back(qtile):
+ # No exception must be raised without windows
+ qtile.c.group.focus_back()
+
+ # Nothing must happen with only one window
+ one = qtile.testWindow("one")
+ qtile.c.group.focus_back()
+ assertFocused(qtile, "one")
+
+ # 2 windows
+ two = qtile.testWindow("two")
+ assertFocused(qtile, "two")
+ qtile.c.group.focus_back()
+ assertFocused(qtile, "one")
+ qtile.c.group.focus_back()
+ assertFocused(qtile, "two")
+
+ # Float a window
+ three = qtile.testWindow("three")
+ qtile.c.group.focus_back()
+ assertFocused(qtile, "two")
+ qtile.c.window.toggle_floating()
+ qtile.c.group.focus_back()
+ assertFocused(qtile, "three")
+
+ # If the previous window is killed, the further previous one must be focused
+ four = qtile.testWindow("four")
+ qtile.kill_window(two)
+ qtile.kill_window(three)
+ assertFocused(qtile, "four")
+ qtile.c.group.focus_back()
+ assertFocused(qtile, "one")
+
+
+# TODO: Test more events
+@each_layout_config_events
+def test_focus_change_event(qtile):
+ # Test that the correct number of focus_change events are fired e.g. when
+ # opening, closing or switching windows.
+ # If for example a layout explicitly fired a focus_change event even though
+ # group._Group.focus() or group._Group.remove() already fire one, the other
+ # installed layouts would wrongly react to it and cause misbehaviour.
+ # In short, this test prevents layouts from influencing each other in
+ # unexpected ways.
+
+ # TODO: Why does it start with 2?
+ assert qtile.c.get_test_data()['focus_change'] == 2
+
+ # Spawning a window must fire only 1 focus_change event
+ one = qtile.testWindow("one")
+ assert qtile.c.get_test_data()['focus_change'] == 3
+ two = qtile.testWindow("two")
+ assert qtile.c.get_test_data()['focus_change'] == 4
+ three = qtile.testWindow("three")
+ assert qtile.c.get_test_data()['focus_change'] == 5
+
+ # Switching window must fire only 1 focus_change event
+ assertFocused(qtile, "three")
+ qtile.c.group.focus_by_name("one")
+ assert qtile.c.get_test_data()['focus_change'] == 6
+ assertFocused(qtile, "one")
+
+ # Focusing the current window must fire another focus_change event
+ qtile.c.group.focus_by_name("one")
+ assert qtile.c.get_test_data()['focus_change'] == 7
+
+ # Toggling a window floating should not fire focus_change events
+ qtile.c.window.toggle_floating()
+ assert qtile.c.get_test_data()['focus_change'] == 7
+ qtile.c.window.toggle_floating()
+ assert qtile.c.get_test_data()['focus_change'] == 7
+
+ # Removing the focused window must fire only 1 focus_change event
+ assertFocused(qtile, "one")
+ assert qtile.c.group.info()['focusHistory'] == ["two", "three", "one"]
+ qtile.kill_window(one)
+ assert qtile.c.get_test_data()['focus_change'] == 8
+
+ # The position where 'one' was after it was floated and unfloated
+ # above depends on the layout, so we can't predict here what window gets
+ # selected after killing it; for this reason, focus 'three' explicitly to
+ # continue testing
+ qtile.c.group.focus_by_name("three")
+ assert qtile.c.group.info()['focusHistory'] == ["two", "three"]
+ assert qtile.c.get_test_data()['focus_change'] == 9
+
+ # Removing a non-focused window must not fire focus_change events
+ qtile.kill_window(two)
+ assert qtile.c.get_test_data()['focus_change'] == 9
+ assertFocused(qtile, "three")
+
+ # Removing the last window must still generate 1 focus_change event
+ qtile.kill_window(three)
+ assert qtile.c.layout.info()['clients'] == []
+ assert qtile.c.get_test_data()['focus_change'] == 10
+
+
+@each_layout_config
+def test_remove(qtile):
+ one = qtile.testWindow("one")
+ two = qtile.testWindow("two")
+ three = qtile.testWindow("three")
+ assertFocused(qtile, "three")
+ assert qtile.c.group.info()['focusHistory'] == ["one", "two", "three"]
+
+ # Removing a focused window must focus another (which one depends on the layout)
+ qtile.kill_window(three)
+ assert qtile.c.window.info()['name'] in qtile.c.layout.info()['clients']
+
+ # To continue testing, explicitly set focus on 'two'
+ qtile.c.group.focus_by_name("two")
+ four = qtile.testWindow("four")
+ assertFocused(qtile, "four")
+ assert qtile.c.group.info()['focusHistory'] == ["one", "two", "four"]
+
+ # Removing a non-focused window must not change the current focus
+ qtile.kill_window(two)
+ assertFocused(qtile, "four")
+ assert qtile.c.group.info()['focusHistory'] == ["one", "four"]
+
+ # Add more windows and shuffle the focus order
+ five = qtile.testWindow("five")
+ six = qtile.testWindow("six")
+ qtile.c.group.focus_by_name("one")
+ seven = qtile.testWindow("seven")
+ qtile.c.group.focus_by_name("six")
+ assertFocused(qtile, "six")
+ assert qtile.c.group.info()['focusHistory'] == ["four", "five", "one",
+ "seven", "six"]
+
+ qtile.kill_window(five)
+ qtile.kill_window(one)
+ assertFocused(qtile, "six")
+ assert qtile.c.group.info()['focusHistory'] == ["four", "seven", "six"]
+
+ qtile.c.group.focus_by_name("seven")
+ qtile.kill_window(seven)
+ assert qtile.c.window.info()['name'] in qtile.c.layout.info()['clients']
+
+
+@each_layout_config
+def test_remove_floating(qtile):
+ pytest.importorskip("Tkinter")
+
+ one = qtile.testWindow("one")
+ two = qtile.testWindow("two")
+ float1 = qtile.testDialog("float1")
+ assertFocused(qtile, "float1")
+ assert set(qtile.c.layout.info()['clients']) == {"one", "two"}
+ assert qtile.c.group.info()['focusHistory'] == ["one", "two", "float1"]
+
+ # Removing a focused floating window must focus the one that was focused before
+ qtile.kill_window(float1)
+ assertFocused(qtile, "two")
+ assert qtile.c.group.info()['focusHistory'] == ["one", "two"]
+
+ float2 = qtile.testDialog("float2")
+ assertFocused(qtile, "float2")
+ assert qtile.c.group.info()['focusHistory'] == ["one", "two", "float2"]
+
+ # Removing a non-focused floating window must not change the current focus
+ qtile.c.group.focus_by_name("two")
+ qtile.kill_window(float2)
+ assertFocused(qtile, "two")
+ assert qtile.c.group.info()['focusHistory'] == ["one", "two"]
+
+ # Add more windows and shuffle the focus order
+ three = qtile.testWindow("three")
+ float3 = qtile.testDialog("float3")
+ qtile.c.group.focus_by_name("one")
+ float4 = qtile.testDialog("float4")
+ float5 = qtile.testDialog("float5")
+ qtile.c.group.focus_by_name("three")
+ qtile.c.group.focus_by_name("float3")
+ assert qtile.c.group.info()['focusHistory'] == ["two", "one", "float4",
+ "float5", "three", "float3"]
+
+ qtile.kill_window(one)
+ assertFocused(qtile, "float3")
+ assert qtile.c.group.info()['focusHistory'] == ["two", "float4",
+ "float5", "three", "float3"]
+
+ qtile.kill_window(float5)
+ assertFocused(qtile, "float3")
+ assert qtile.c.group.info()['focusHistory'] == ["two", "float4", "three", "float3"]
+
+ # The focus must be given to the previous window even if it's floating
+ qtile.c.group.focus_by_name("float4")
+ assert qtile.c.group.info()['focusHistory'] == ["two", "three", "float3", "float4"]
+ qtile.kill_window(float4)
+ assertFocused(qtile, "float3")
+ assert qtile.c.group.info()['focusHistory'] == ["two", "three", "float3"]
+
+ four = qtile.testWindow("four")
+ float6 = qtile.testDialog("float6")
+ five = qtile.testWindow("five")
+ qtile.c.group.focus_by_name("float3")
+ assert qtile.c.group.info()['focusHistory'] == ["two", "three", "four",
+ "float6", "five", "float3"]
+
+ # Killing several unfocused windows before the current one, and then
+ # killing the current window, must focus the remaining most recently
+ # focused window
+ qtile.kill_window(five)
+ qtile.kill_window(four)
+ qtile.kill_window(float6)
+ assert qtile.c.group.info()['focusHistory'] == ["two", "three", "float3"]
+ qtile.kill_window(float3)
+ assertFocused(qtile, "three")
+ assert qtile.c.group.info()['focusHistory'] == ["two", "three"]
+
+
+@each_layout_config
+def test_desktop_notifications(qtile):
+ pytest.importorskip("Tkinter")
+
+ # Unlike normal floating windows such as dialogs, notifications don't steal
+ # focus when they spawn, so test them separately
+
+ # A notification fired in an empty group must not take focus
+ notif1 = qtile.testNotification("notif1")
+ assert qtile.c.group.info()['focus'] is None
+ qtile.kill_window(notif1)
+
+ # A window is spawned while a notification is displayed
+ notif2 = qtile.testNotification("notif2")
+ one = qtile.testWindow("one")
+ assert qtile.c.group.info()['focusHistory'] == ["one"]
+ qtile.kill_window(notif2)
+
+ # Another notification is fired, but the focus must not change
+ notif3 = qtile.testNotification("notif3")
+ assertFocused(qtile, 'one')
+ qtile.kill_window(notif3)
+
+ # Complicate the scenario with multiple windows and notifications
+
+ dialog1 = qtile.testDialog("dialog1")
+ two = qtile.testWindow("two")
+ notif4 = qtile.testNotification("notif4")
+ notif5 = qtile.testNotification("notif5")
+ assert qtile.c.group.info()['focusHistory'] == ["one", "dialog1", "two"]
+
+ dialog2 = qtile.testDialog("dialog2")
+ qtile.kill_window(notif5)
+ three = qtile.testWindow("three")
+ qtile.kill_window(one)
+ qtile.c.group.focus_by_name("two")
+ notif6 = qtile.testNotification("notif6")
+ notif7 = qtile.testNotification("notif7")
+ qtile.kill_window(notif4)
+ notif8 = qtile.testNotification("notif8")
+ assert qtile.c.group.info()['focusHistory'] == ["dialog1", "dialog2",
+ "three", "two"]
+
+ dialog3 = qtile.testDialog("dialog3")
+ qtile.kill_window(dialog1)
+ qtile.kill_window(dialog2)
+ qtile.kill_window(notif6)
+ qtile.c.group.focus_by_name("three")
+ qtile.kill_window(notif7)
+ qtile.kill_window(notif8)
+ assert qtile.c.group.info()['focusHistory'] == ["two", "dialog3", "three"]
+
+
+@all_layouts_config
+def test_cycle_layouts(qtile):
+ qtile.testWindow("one")
+ qtile.testWindow("two")
+ qtile.testWindow("three")
+ qtile.testWindow("four")
+ qtile.c.group.focus_by_name("three")
+ assertFocused(qtile, "three")
+
+ # Cycling all the layouts must keep the current window focused
+ initial_layout_name = qtile.c.layout.info()['name']
+ while True:
+ qtile.c.next_layout()
+ if qtile.c.layout.info()['name'] == initial_layout_name:
+ break
+ # Use qtile.c.layout.info()['name'] in the assertion message, so we
+ # know which layout is buggy
+ assert qtile.c.window.info()['name'] == "three", qtile.c.layout.info()['name']
+
+ # Now try backwards
+ while True:
+ qtile.c.prev_layout()
+ if qtile.c.layout.info()['name'] == initial_layout_name:
+ break
+ # Use qtile.c.layout.info()['name'] in the assertion message, so we
+ # know which layout is buggy
+ assert qtile.c.window.info()['name'] == "three", qtile.c.layout.info()['name']
1
0
Hello community,
here is the log from the commit of package python-peewee for openSUSE:Factory checked in at 2018-07-31 15:58:58
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-peewee (Old)
and /work/SRC/openSUSE:Factory/.python-peewee.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-peewee"
Tue Jul 31 15:58:58 2018 rev:3 rq:625970 version:3.6.4
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-peewee/python-peewee.changes 2018-07-06 10:42:02.899250979 +0200
+++ /work/SRC/openSUSE:Factory/.python-peewee.new/python-peewee.changes 2018-07-31 15:59:03.211511223 +0200
@@ -1,0 +2,25 @@
+Sat Jul 28 18:06:40 UTC 2018 - jengelh(a)inai.de
+
+- Add missing "that".
+
+-------------------------------------------------------------------
+Thu Jul 19 15:38:58 UTC 2018 - mcepl(a)suse.com
+
+- Update to 3.6.4:
+ - bugfixes
+ - works with python 3.7.0
+ - Support for specifying ROWS or RANGE window frame types.
+ - Add APIs for user-defined window functions if using
+ pysqlite3 and sqlite 3.25.0 or newer.
+ - TimestampField now uses 64-bit integer data-type for
+ storage.
+ - Added support to pwiz and playhouse.reflection to enable
+ generating models from VIEWs.
+ - Added lower-level database API for introspecting VIEWs.
+ - Revamped continuous integration setup for better coverage,
+ including 3.7 and 3.8-dev.
+ - Allow building C extensions even if Cython is not
+ installed, by distributing pre-generated C source files.
+- Fixes tests
+
+-------------------------------------------------------------------
Old:
----
peewee-3.5.2.tar.gz
New:
----
peewee-3.6.4.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-peewee.spec ++++++
--- /var/tmp/diff_new_pack.yeo5tS/_old 2018-07-31 15:59:03.903512396 +0200
+++ /var/tmp/diff_new_pack.yeo5tS/_new 2018-07-31 15:59:03.907512403 +0200
@@ -18,9 +18,9 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-peewee
-Version: 3.5.2
+Version: 3.6.4
Release: 0
-Summary: A small expressive orm supports postgresql, mysql and sqlite
+Summary: An expressive ORM that supports multiple SQL backends
License: BSD-3-Clause
Group: Development/Languages/Python
URL: https://github.com/coleifer/peewee
@@ -29,6 +29,7 @@
BuildRequires: %{python_module devel}
BuildRequires: %{python_module setuptools}
BuildRequires: fdupes
+BuildRequires: fdupes
BuildRequires: pkgconfig
BuildRequires: python-rpm-macros
BuildRequires: unzip
@@ -36,7 +37,7 @@
%python_subpackages
%description
-A small, expressive orm -- supports postgresql, mysql and sqlite
+An expressive ORM that supports PostgreSQL, MySQL and SQLite.
%prep
%setup -q -n peewee-%{version}
@@ -48,6 +49,7 @@
%python_install
%python_expand %fdupes %{buildroot}%{$python_sitelib}
%python_clone %{buildroot}%{_bindir}/pwiz.py
+%python_expand %fdupes %{buildroot}%{$python_sitearch}
%files %{python_files}
%license LICENSE
++++++ peewee-3.5.2.tar.gz -> peewee-3.6.4.tar.gz ++++++
++++ 38903 lines of diff (skipped)
1
0
Hello community,
here is the log from the commit of package python-parallax for openSUSE:Factory checked in at 2018-07-31 15:58:53
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-parallax (Old)
and /work/SRC/openSUSE:Factory/.python-parallax.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-parallax"
Tue Jul 31 15:58:53 2018 rev:11 rq:625969 version:1.0.4
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-parallax/python-parallax.changes 2018-06-29 22:36:35.357991985 +0200
+++ /work/SRC/openSUSE:Factory/.python-parallax.new/python-parallax.changes 2018-07-31 15:58:56.455499766 +0200
@@ -1,0 +2,5 @@
+Fri Jul 27 14:41:09 UTC 2018 - jengelh(a)inai.de
+
+- Use noun phrase in summary.
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-parallax.spec ++++++
--- /var/tmp/diff_new_pack.zWs6kU/_old 2018-07-31 15:58:57.567501652 +0200
+++ /var/tmp/diff_new_pack.zWs6kU/_new 2018-07-31 15:58:57.571501658 +0200
@@ -21,7 +21,7 @@
Name: python-parallax
Version: 1.0.4
Release: 0
-Summary: Execute commands and copy files over SSH to multiple machines at once
+Summary: Python module for multi-node SSH command execution and file copy
License: BSD-3-Clause
Group: Development/Languages/Python
Url: https://github.com/krig/parallax/
1
0