openSUSE Commits
Threads by month
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
April 2018
- 1 participants
- 1679 discussions
Hello community,
here is the log from the commit of package geary for openSUSE:Factory checked in at 2018-04-30 22:53:30
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/geary (Old)
and /work/SRC/openSUSE:Factory/.geary.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "geary"
Mon Apr 30 22:53:30 2018 rev:36 rq:601530 version:0.12.2
Changes:
--------
--- /work/SRC/openSUSE:Factory/geary/geary.changes 2018-03-08 10:57:15.981840772 +0100
+++ /work/SRC/openSUSE:Factory/.geary.new/geary.changes 2018-04-30 22:54:04.815097731 +0200
@@ -1,0 +2,16 @@
+Tue Apr 24 23:23:31 UTC 2018 - luc14n0(a)linuxmail.org
+
+- Update to version 0.12.2:
+ + Bug fixed:
+ - bgo#792555, bgo#778976, bgo#790435, bgo#778027, bgo#795216,
+ bgo#793710, bgo#788637, bgo#790103, bgo#776881, bgo#783025.
+ - Ensure gnome-control-centre knows in advance Geary uses
+ notifications.
+ - Fix message body quote button styling under WebKitGTK 2.20.
+ - Don't show unused header widgets when showing a message via
+ notifications.
+ - Fix some serious run-time memory leaks.
+- Update License tag from LGPL-2.0-or-later to LGPL-2.1-or-later
+ and add CC-BY-3.0 and BSD-2-Clause to comply with due copyrights.
+
+-------------------------------------------------------------------
Old:
----
geary-0.12.1.tar.xz
New:
----
geary-0.12.2.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ geary.spec ++++++
--- /var/tmp/diff_new_pack.GLGRnD/_old 2018-04-30 22:54:05.523071899 +0200
+++ /var/tmp/diff_new_pack.GLGRnD/_new 2018-04-30 22:54:05.531071607 +0200
@@ -17,10 +17,10 @@
Name: geary
-Version: 0.12.1
+Version: 0.12.2
Release: 0
Summary: A lightweight email reader for the GNOME desktop
-License: LGPL-2.0-or-later
+License: LGPL-2.1-or-later AND CC-BY-3.0 AND BSD-2-Clause
Group: Productivity/Networking/Email/Clients
URL: https://wiki.gnome.org/Apps/Geary
Source: http://download.gnome.org/sources/geary/0.12/%{name}-%{version}.tar.xz
@@ -79,7 +79,7 @@
%fdupes %{buildroot}%{_datadir}
%files
-%license COPYING
+%license COPYING COPYING.icons COPYING.snowball
%doc README NEWS THANKS AUTHORS
%dir %{_datadir}/gnome
%dir %{_datadir}/gnome/help
++++++ geary-0.12.1.tar.xz -> geary-0.12.2.tar.xz ++++++
++++ 3658 lines of diff (skipped)
1
0
Hello community,
here is the log from the commit of package cgal for openSUSE:Factory checked in at 2018-04-30 22:53:26
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/cgal (Old)
and /work/SRC/openSUSE:Factory/.cgal.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "cgal"
Mon Apr 30 22:53:26 2018 rev:14 rq:601504 version:4.12
Changes:
--------
--- /work/SRC/openSUSE:Factory/cgal/cgal.changes 2018-02-27 17:00:38.926208416 +0100
+++ /work/SRC/openSUSE:Factory/.cgal.new/cgal.changes 2018-04-30 22:54:00.263263815 +0200
@@ -1,0 +2,12 @@
+Thu Apr 26 10:02:46 UTC 2018 - mvetter(a)suse.com
+
+- Remove cgal-4.11-opengl-es-arm.patch: upstreamed
+- Update to 4.12:
+ * New 2D Movable Separability of Sets
+ * Classification: algorithm that classifies a data set into a
+ user-defined set of labels
+ * Removed Kinetic Data Structures
+ * See https://www.cgal.org/2018/04/25/cgal412/ for a complete
+ list of changes
+
+-------------------------------------------------------------------
Old:
----
CGAL-4.11.1-doc_html.tar.xz
CGAL-4.11.1.tar.xz
cgal-4.11-opengl-es-arm.patch
New:
----
CGAL-4.12-doc_html.tar.xz
CGAL-4.12.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ cgal.spec ++++++
--- /var/tmp/diff_new_pack.WOXopZ/_old 2018-04-30 22:54:01.755209378 +0200
+++ /var/tmp/diff_new_pack.WOXopZ/_new 2018-04-30 22:54:01.759209232 +0200
@@ -26,17 +26,16 @@
%define _sourcename CGAL
%define _libname libCGAL%{_sover}
Name: cgal
-Version: 4.11.1
+Version: 4.12
Release: 0
Summary: Computational Geometry Algorithms Library
-License: GPL-3.0+ AND LGPL-3.0+
+License: GPL-3.0-or-later AND LGPL-3.0-or-later
Group: Productivity/Graphics/CAD
Url: http://www.cgal.org/
# You will need to update the magic numbers from the download urls on updating
Source0: https://github.com/CGAL/cgal/releases/download/releases%%2FCGAL-%{version}/…
Source1: https://github.com/CGAL/cgal/releases/download/releases%%2FCGAL-%{version}/…
Source2: cgal-rpmlintrc
-Patch0: cgal-4.11-opengl-es-arm.patch
BuildRequires: blas-devel
BuildRequires: cmake >= 2.8.11
BuildRequires: fdupes
@@ -44,17 +43,18 @@
BuildRequires: glu-devel
BuildRequires: gmp-devel
BuildRequires: lapack-devel
-BuildRequires: mpfr-devel
-BuildRequires: xz
-BuildRequires: zlib-devel
-Requires: libcgal-devel = %{version}
BuildRequires: libQt5OpenGL-devel >= 5.3
+BuildRequires: libboost_atomic1_66_0-devel
BuildRequires: libboost_system-devel
BuildRequires: libboost_thread-devel
BuildRequires: libqt5-qtbase-devel >= 5.3
BuildRequires: libqt5-qtscript-devel >= 5.3
BuildRequires: libqt5-qtsvg-devel >= 5.3
BuildRequires: libqt5-qttools-devel >= 5.3
+BuildRequires: mpfr-devel
+BuildRequires: xz
+BuildRequires: zlib-devel
+Requires: libcgal-devel = %{version}
%description
CGAL provides geometric algorithms in a C++ library.
@@ -67,7 +67,7 @@
%package -n %{_libname}
Summary: Computational Geometry Algorithms Library
-License: GPL-3.0+ AND LGPL-3.0+
+License: GPL-3.0-or-later AND LGPL-3.0-or-later
Group: System/Libraries
%description -n %{_libname}
@@ -81,7 +81,7 @@
%package devel
Summary: Development files and tools for CGAL applications
-License: GPL-3.0+ AND LGPL-3.0+ AND BSL-1.0
+License: GPL-3.0-or-later AND LGPL-3.0-or-later AND BSL-1.0
Group: Development/Libraries/C and C++
Requires: %{_libname} = %{version}
Requires: blas
@@ -101,7 +101,7 @@
%package demo-examples-devel
Summary: Example & demo files for CGAL library usage
-License: GPL-3.0+ AND LGPL-3.0+ AND BSL-1.0 AND MIT
+License: GPL-3.0-or-later AND LGPL-3.0-or-later AND BSL-1.0 AND MIT
Group: Development/Libraries/C and C++
Requires: %{name}-devel = %{version}
BuildArch: noarch
@@ -113,7 +113,7 @@
%package doc
Summary: Documentation CGAL algorithms
-License: GPL-3.0+ AND LGPL-3.0+
+License: GPL-3.0-or-later AND LGPL-3.0-or-later
Group: Documentation/HTML
BuildArch: noarch
@@ -123,7 +123,6 @@
%prep
%setup -q -n CGAL-%{version}
tar -xJf %{SOURCE1}
-%patch0 -p1
%build
export LDFLAGS="-Wl,-z,relro,-z,now -pie"
@@ -161,29 +160,33 @@
%postun -n %{_libname} -p /sbin/ldconfig
%files -n %{_libname}
-%doc AUTHORS CHANGES LICENSE*
+%license LICENSE*
+%doc AUTHORS CHANGES.md
%{_libdir}/libCGAL.so.%{_sover}*
%{_libdir}/libCGAL_Core.so.%{_sover}*
%{_libdir}/libCGAL_ImageIO.so.%{_sover}*
%{_libdir}/libCGAL_Qt5.so.%{_sover}*
%files devel
-%doc AUTHORS CHANGES LICENSE*
+%license LICENSE*
+%doc AUTHORS CHANGES.md
%{_includedir}/CGAL
%{_libdir}/libCGAL.so
%{_libdir}/libCGAL_Core.so
%{_libdir}/libCGAL_ImageIO.so
%{_libdir}/libCGAL_Qt5.so
-%{_libdir}/CGAL
+%{_libdir}/cmake/CGAL
%{_bindir}/*
-%{_mandir}/man1/cgal_create_cmake_script.1*
+%{_mandir}/man1/cgal_create_cmake_script.1%{?ext_man}
%files demo-examples-devel
-%doc AUTHORS CHANGES LICENSE*
+%license LICENSE*
+%doc AUTHORS CHANGES.md
%{_datadir}/CGAL
%files doc
-%doc AUTHORS CHANGES LICENSE*
+%license LICENSE*
+%doc AUTHORS CHANGES.md
%doc doc_html
%changelog
++++++ CGAL-4.11.1-doc_html.tar.xz -> CGAL-4.12-doc_html.tar.xz ++++++
/work/SRC/openSUSE:Factory/cgal/CGAL-4.11.1-doc_html.tar.xz /work/SRC/openSUSE:Factory/.cgal.new/CGAL-4.12-doc_html.tar.xz differ: char 26, line 1
++++++ CGAL-4.11.1-doc_html.tar.xz -> CGAL-4.12.tar.xz ++++++
/work/SRC/openSUSE:Factory/cgal/CGAL-4.11.1-doc_html.tar.xz /work/SRC/openSUSE:Factory/.cgal.new/CGAL-4.12.tar.xz differ: char 25, line 1
1
0
Hello community,
here is the log from the commit of package python-pyghmi for openSUSE:Factory checked in at 2018-04-30 22:53:17
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-pyghmi (Old)
and /work/SRC/openSUSE:Factory/.python-pyghmi.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-pyghmi"
Mon Apr 30 22:53:17 2018 rev:9 rq:600819 version:1.0.44
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-pyghmi/python-pyghmi.changes 2016-05-13 09:24:13.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.python-pyghmi.new/python-pyghmi.changes 2018-04-30 22:53:20.264723250 +0200
@@ -1,0 +2,157 @@
+Wed Apr 25 07:50:29 UTC 2018 - cloud-devel(a)suse.de
+
+- update to version 1.0.44
+ - Replace IPv4 inet_p functions with inet_a
+ - Do not suppress all exceptions
+ - Request a small MSS in web connection explicitly
+ - Connect backend completion to OEM handler
+ - Support text_data IMM/XCC configuration
+ - Fix support for absolute pathname
+ - Fix the error message on unsupported protocols
+ - Update "nework" to "network" in comments
+ - Block problematic operations while update in progress
+ - Fix for DIMM models with invalid bytes
+ - Better error message on unsupported media
+ - Provide opt-in performance boost to firmware
+ - Correct mistaken function call
+ - Provide more specific info on update process
+ - Explicitly check RDOC list after add
+ - Update webclient management of cookies
+ - Convert to using xraw_command
+ - repeatedly assign value
+ - Do not set referer on XCC
+ - Implement SMM data extension
+ - Support XCC variations for inventory
+ - Add LXPM driver bundle info to inventory
+ - Provide support for event only SDR
+ - Extend the config.efi wait
+ - Set referer in IMM web
+ - Whitelist more core drivers
+ - Implement state feedback on firmware update
+ - Migrate to zuulv3 - move legacy job to project
+ - Add support for Lenovo Energy Meters
+ - Change from 'Power' to 'Energy'
+ - Provide interface for managing sys config
+ - Obey custom ports in SOL client and server
+ - iSCSI settings aren't viable, mask for now
+ - Provide a sortid to preserve the settings order
+ - Correct a typo in dictionary name
+ - Add error checking to settings
+ - Add XCC Pending version to firmware inventory
+ - Manage NTP configuration of ThinkSystem D2 SMM
+ - Rename zuul v3 job
+ - Add storage configuration
+ - Shore up support of numeric_data, mask others
+ - Fix init race condition
+ - Localize console lock
+ - Fixes import issues
+ - Provide reseat command
+ - Gracefully disable localsession without fcntl
+ - Make the webclient primitives a bit more resilient
+ - Zuul: add file extension to playbook path
+ - Sort the inventory data
+ - Apply firmware update through XCC
+ - Provide for Adapter updates
+ - Reduce memory usage for uploading
+ - Provide better error message for common scenarios
+ - Fix ordering if list config
+ - Remove NUL bytes from SMM serial/model
+ - Add IBM FPC id
+ - Do not error if the platform does not support restricting the MAXSEG
+ - Handle hypphenated categories
+ - Add the bay number for dense Lenovo platform
+ - Removes relative import for EfiDecompressor
+ - Fix the custom cookies feature
+ - Preserve comma delimited lists
+ - Fix concurrent firmware updates
+ - Fix media urls
+ - Skip FPGA when not supported
+ - Implement remote media upload
+ - Fix the tempest job
+ - Make XCC update process more robust
+ - Replace waitall mechanism with never wait
+ - Keep web session alive while media mounted
+ - Do not declare 'complete' before the 'mount'.
+ - Support update of backup XCC bank
+ - Ignore small packets claiming to be IPMI payload
+ - Update test-requirements
+ - Get UUID of ThinkSystem D2 enclosures
+ - Implement firmware update for ThinkSystem SMM
+
+-------------------------------------------------------------------
+Tue Apr 24 15:56:29 UTC 2018 - cloud-devel(a)suse.de
+
+- update to version 1.0.22
+ - Consolidate IMM date string parsing
+ - Handle disconnect notification without session
+ - Fix multiple console object behavior
+ - Implement Serial-over-LAN (SOL) in BMC
+ - Ignore KeyError on delete of missing sensor
+ - Fix bullet points in README.md
+ - Implement support for ThinkSystem servers
+ - Correct mistake with image name abbreviation
+ - Bypass eventlet sendto when detected
+ - Correct the offset to adjust for IPMIv2
+ - Add script to help build rpms
+ - Move raising sync login exception
+ - Recognize and use CSRF token
+ - Pyghmi does not follow the pep8 standard
+ - Only complain about Device SDR if no SDRR
+ - Do not reuse an expired session
+ - Improve SOL responsiveness
+ - Refactor Lenovo OEM support
+ - Fix webclient viability after error
+ - Abort MAC decode from FRU if not 'binary'
+ - Remove xrange for run both Python 2 and Python 3
+ - Extend FPC status
+ - Implement util.protect() lock manager
+ - Improve (de)activate payload in virshbmc
+ - Protect Session.*_sessions operations
+ - Set a 60 second timeout on web
+ - Allow things like multiple distinct users
+ - Correct offset of a capability bit
+ - Fix issues with idle behavior
+ - Have range become xrange where available
+ - Protect Console.pendingoutput operations
+ - Raise IpmiException on error checking power state
+ - Fix error behavior when target has no SOL session
+ - Implement IMM remote media mount
+ - Check for buffer and use memoryview if missing
+ - Fix get_network_channel for BMCs that dislike 0xe
+ - Improve .gitignore
+ - Provide more consistent attributes
+ - Add base for unittests and fix docs
+ - Fix cleanup loop of changing dictionary
+ - IpmiServer to allow using IP version 4
+ - Support in-band IPMI for Linux systems
+ - Allow LookupError on decode
+ - Change the wording of setup event
+ - Add referer header to https requests
+- switch to rpm-packaging spec template
+- switch to singlespec
+
+-------------------------------------------------------------------
+Thu Jan 12 21:13:16 UTC 2017 - dmueller(a)suse.com
+
+- update to 1.0.9:
+ * Tolerate client reuse of UDP ports
+ * Fix errors in IPMI server
+ * Fix BMC compatibility with Python 2.6
+ * Fix raid driver bitmask
+ * Support NMI in bmc
+ * Implement identify workaround for ThinkServer SD350
+ * Declare strings explicitly as binary
+ * Supports cold reset in bmc
+ * Implement Python3 compatibility
+ * Convert data tuple to a list
+ * Correct firmware inventory issue on IBM M4 servers
+ * Raise incurred exception if appropriate
+ * Fix FPC detection for Lenovo Nextscale
+ * Fix KeyError due to lazy use of raw_command
+ * Disable futile attempts to correct uncorrectable time
+ * Remove errant IBM nextscale id
+ * Fix agentless error on M4 systems
+ * Add node status checks to FPC sensors
+ * Add Nextscale total power capacity as a sensor
+
+-------------------------------------------------------------------
Old:
----
pyghmi-1.0.4.tar.gz
New:
----
_service
pyghmi-1.0.44.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-pyghmi.spec ++++++
--- /var/tmp/diff_new_pack.OQJQnh/_old 2018-04-30 22:53:21.016695813 +0200
+++ /var/tmp/diff_new_pack.OQJQnh/_new 2018-04-30 22:53:21.016695813 +0200
@@ -1,7 +1,7 @@
#
# spec file for package python-pyghmi
#
-# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -17,51 +17,93 @@
Name: python-pyghmi
-Version: 1.0.4
+Version: 1.0.44
Release: 0
-Summary: Python General Hardware Management Initiative (IPMI and others)
+Summary: General Hardware Management Initiative (IPMI and others)
License: Apache-2.0
Group: Development/Languages/Python
-Url: http://xcat.sf.net/
-Source: https://pypi.python.org/packages/b2/72/47809f0059af26b3de70f8242ab56ea8e391…
+URL: https://launchpad.net/pyghmi
+Source0: https://files.pythonhosted.org/packages/source/p/pyghmi/pyghmi-1.0.44.tar.gz
+BuildRequires: openstack-macros
BuildRequires: python-devel
-BuildRequires: python-pbr
-BuildRequires: python-python-subunit
-BuildRequires: python-testrepository
-Requires: python-pbr
+BuildRequires: python2-oslotest >= 3.2.0
+BuildRequires: python2-pycrypto >= 2.6
+BuildRequires: python3-devel
+BuildRequires: python3-oslotest >= 3.2.0
+BuildRequires: python3-pycrypto >= 2.6
Requires: python-pycrypto >= 2.6
+BuildArch: noarch
%if 0%{?suse_version}
-# libvirt-python is only needed for bin/virshbmc
-Recommends: libvirt-python >= 1.2.5
-%endif
-BuildRoot: %{_tmppath}/%{name}-%{version}-build
-%if 0%{?suse_version} && 0%{?suse_version} <= 1110
-%{!?python_sitelib: %global python_sitelib %(python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")}
+Requires(post): update-alternatives
+Requires(postun): update-alternatives
%else
-BuildArch: noarch
+# on RDO, update-alternatives is in chkconfig
+Requires(post): chkconfig
+Requires(postun): chkconfig
%endif
+%python_subpackages
%description
This is a pure python implementation of IPMI protocol.
+pyghmicons and pyghmiutil are example scripts to show how one may incorporate
+this library into python code
+
+%package -n python-pyghmi-doc
+Summary: General Hardware Management Initiative (IPMI and others) -- Documentation
+Group: Documentation/HTML
+BuildRequires: python-Sphinx
+BuildRequires: python-openstackdocstheme >= 1.18.1
+
+%description -n python-pyghmi-doc
+This is a pure python implementation of IPMI protocol.
+
+pyghmicons and pyghmiutil are example scripts to show how one may incorporate
+this library into python code
+
%prep
-%setup -q -n pyghmi-%{version}
+%autosetup -p1 -n pyghmi-%{version}
+%py_req_cleanup
+sed -i 's/^warning-is-error.*/warning-is-error = 0/g' setup.cfg
%build
-python setup.py build
+%{python_build}
+
+%{__python2} setup.py build_sphinx --builder=html
+rm -rf html/.{doctrees,buildinfo}
%install
-python setup.py install --prefix=%{_prefix} --root=%{buildroot}
+%{python_install}
+%python_clone -a %{buildroot}%{_bindir}/pyghmicons
+%python_clone -a %{buildroot}%{_bindir}/pyghmiutil
+%python_clone -a %{buildroot}%{_bindir}/virshbmc
+
+%post
+%python_install_alternative pyghmicons
+%python_install_alternative pyghmiutil
+%python_install_alternative virshbmc
+
+%postun
+%python_uninstall_alternative pyghmicons
+%python_uninstall_alternative pyghmiutil
+%python_uninstall_alternative virshbmc
%check
-testr init && testr run --parallel
-
-%files
-%defattr(-,root,root,-)
-%doc ChangeLog README LICENSE AUTHORS
-%{_bindir}/pyghmicons
-%{_bindir}/pyghmiutil
-%{_bindir}/virshbmc
-%{python_sitelib}/*
+%{python_expand rm -rf .testrepository
+$python setup.py testr
+}
+
+%files %{python_files}
+%doc README.md ChangeLog
+%license LICENSE
+%python_alternative %{_bindir}/pyghmicons
+%python_alternative %{_bindir}/pyghmiutil
+%python_alternative %{_bindir}/virshbmc
+%{python_sitelib}/pyghmi*
+%{python_sitelib}/*.egg-info
+
+%files -n python-pyghmi-doc
+%doc doc/build/html
+%license LICENSE
%changelog
++++++ _service ++++++
<services>
<service mode="disabled" name="renderspec">
<param name="input-template">https://raw.githubusercontent.com/openstack/rpm-packaging/master/openstack/…</param>
<param name="output-name">python-pyghmi.spec</param>
<param name="requirements">https://raw.githubusercontent.com/openstack/rpm-packaging/master/requiremen…</param>
<param name="changelog-email">cloud-devel(a)suse.de</param>
<param name="changelog-provider">gh,openstack,pyghmi</param>
</service>
<service mode="disabled" name="download_files">
</service>
<service name="format_spec_file" mode="disabled"/>
</services>
++++++ pyghmi-1.0.4.tar.gz -> pyghmi-1.0.44.tar.gz ++++++
++++ 8322 lines of diff (skipped)
1
0
Hello community,
here is the log from the commit of package ntp for openSUSE:Factory checked in at 2018-04-30 22:52:21
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ntp (Old)
and /work/SRC/openSUSE:Factory/.ntp.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ntp"
Mon Apr 30 22:52:21 2018 rev:115 rq:601632 version:4.2.8p11
Changes:
--------
--- /work/SRC/openSUSE:Factory/ntp/ntp.changes 2018-04-01 17:25:25.009929455 +0200
+++ /work/SRC/openSUSE:Factory/.ntp.new/ntp.changes 2018-04-30 22:52:22.670824669 +0200
@@ -1,0 +2,7 @@
+Tue Apr 24 10:19:39 UTC 2018 - max(a)suse.com
+
+- Refactor the key handling in %post so that it does not overwrite
+ user settings (bsc#1036505) and is more robust against ignored
+ SIGPIPE (bsc#1090564).
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ntp.spec ++++++
--- /var/tmp/diff_new_pack.sK2oza/_old 2018-04-30 22:52:23.574791686 +0200
+++ /var/tmp/diff_new_pack.sK2oza/_new 2018-04-30 22:52:23.578791540 +0200
@@ -83,6 +83,8 @@
Requires(pre): %{_bindir}/diff
Requires(pre): %{_bindir}/grep
Requires(pre): pwdutils
+Requires(post): /usr/bin/base64
+Requires(post): /usr/bin/gawk
Suggests: logrotate
Provides: ntp-daemon
Provides: xntp = %{version}
@@ -273,38 +275,87 @@
fi
%post
-# Create ntp.keys file
-if [ ! -f /etc/ntp.keys ]; then
+
+getntpconf() {
+ # Get the value of a single-value ntp.conf directive, first match wins.
+ awk 'NF >= 2 && $1 == option { print $2; exit } ' "option=$1" $NTPCONF
+}
+
+keyexists() {
+ # Check whether a key with the given ID exists in the ntp keys file.
+ awk '$1 == keyno {found = 1} END {exit !found}' "keyno=$1" $KEYSFILE
+}
+
+add_trustedkey() {
+ # Merge the given key ID into the trustedkey directive.
+ # Add the directive if it does not yet exist.
+ FILE=$(mktemp -p /etc)
+ gawk '
+ NF >= 2 && $1 == "trustedkey" {
+ n = split($0, a)
+ for (i = 1; i <= n; i++) {
+ if (a[i] == newkey) newkey = "";
+ if (a[i] ~ /^#/ && newkey) {
+ $(++j) = newkey; newkey = ""
+ }
+ $(++j) = a[i];
+ }
+ if (newkey) { $(++j) = newkey; newkey = "" }
+ }
+ { print }
+ ENDFILE {
+ if (newkey) { print "trustedkey", newkey }
+ }
+ ' "newkey=$1" $NTPCONF > $FILE
+ if ! cmp --quiet $FILE $NTPCONF; then
+ cat $FILE > $NTPCONF
+ fi
+ rm $FILE
+}
+
+NTPCONF=/etc/ntp.conf
+KEYSFILE=$(getntpconf keys)
+if test -z "$KEYSFILE"; then
+ KEYSFILE=/etc/ntp.keys
+ echo "keys $KEYSFILE" >> $NTPCONF
+fi
+
+if [ ! -f $KEYSFILE ]; then
FILE=$(mktemp -p /etc)
chmod 0640 $FILE
chown root:ntp $FILE
- mv $FILE /etc/ntp.keys
+ mv $FILE $KEYSFILE
fi
-# Make sure we have a key with ID 1, because it is needed
-# by the startup scripts.
-if awk '$1 == "1" {exit 1}' /etc/ntp.keys; then
- KEY=$(tr -dc '[:alnum:]' < /dev/urandom | head -c 20)
- echo "1 SHA1 $KEY" >> /etc/ntp.keys
-fi
-# Are we in update mode?
-if [ -f /etc/sysconfig/ntp ]; then
- grep -q '^keys /etc/ntp.keys' /etc/ntp.conf || {
- echo "#
-# Authentication stuff
-#
-keys /etc/ntp.keys # path for keys file
-trustedkey 1 # define trusted keys
-requestkey 1 # key (7) for accessing server variables
-" >> /etc/ntp.conf
-}
+
+CONTROLKEY=$(getntpconf controlkey)
+REQUESTKEY=$(getntpconf requestkey)
+
+if test -z "$CONTROLKEY"; then
+ if -n "$REQUESTKEY"; then
+ CONTROLKEY=$REQUESTKEY
+ else
+ for (( CONTROLKEY = 1; CONTROLKEY < 65535; CONTROLKEY++ )); do
+ keyexists $CONTROLKEY || break
+ done
+ fi
+ echo "controlkey $CONTROLKEY" >> $NTPCONF
fi
-if [ -f /etc/sysconfig/ntp ]; then
- grep -q '^controlkey ' /etc/ntp.conf || {
- echo "#
-controlkey 1 # key (6) for accessing server variables
- " >> /etc/ntp.conf
-}
+
+if test -z "$REQUESTKEY"; then
+ REQUESTKEY=$CONTROLKEY;
+ echo "requestkey $REQUESTKEY" >> $NTPCONF
fi
+
+for KEYNO in $REQUESTKEY $CONTROLKEY; do
+ if ! keyexists $KEYNO; then
+ KEY=$(head -c 15 /dev/urandom | base64)
+ echo "$KEYNO SHA1 $KEY" >> $KEYSFILE
+ fi
+done
+
+add_trustedkey $REQUESTKEY
+add_trustedkey $CONTROLKEY
+
# update from previous permissions
if [ -f %{_sysconfdir}/ntp.conf ]; then
chown root:ntp %{_sysconfdir}/ntp.conf
1
0
Hello community,
here is the log from the commit of package checkmedia for openSUSE:Factory checked in at 2018-04-30 22:52:16
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/checkmedia (Old)
and /work/SRC/openSUSE:Factory/.checkmedia.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "checkmedia"
Mon Apr 30 22:52:16 2018 rev:29 rq:601622 version:3.8
Changes:
--------
--- /work/SRC/openSUSE:Factory/checkmedia/checkmedia.changes 2017-12-06 08:54:14.678527129 +0100
+++ /work/SRC/openSUSE:Factory/.checkmedia.new/checkmedia.changes 2018-04-30 22:52:16.319056423 +0200
@@ -1,0 +2,10 @@
+Thu Apr 26 14:44:26 UTC 2018 - wfeldt(a)opensuse.org
+
+- merge gh#openSUSE/checkmedia#5
+- improve documentation
+- fix Makefile
+- update git2log script
+- add simple usage examples
+- 3.8
+
+--------------------------------------------------------------------
Old:
----
checkmedia-3.7.tar.xz
New:
----
checkmedia-3.8.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ checkmedia.spec ++++++
--- /var/tmp/diff_new_pack.MPzrOh/_old 2018-04-30 22:52:16.879035991 +0200
+++ /var/tmp/diff_new_pack.MPzrOh/_new 2018-04-30 22:52:16.891035553 +0200
@@ -1,7 +1,7 @@
#
# spec file for package checkmedia
#
-# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -20,7 +20,7 @@
Summary: Check Installation Media
License: GPL-3.0+
Group: System/Management
-Version: 3.7
+Version: 3.8
Release: 0
Url: https://github.com/wfeldt/checkmedia.git
Source: %{name}-%{version}.tar.xz
++++++ checkmedia-3.7.tar.xz -> checkmedia-3.8.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/checkmedia-3.7/Makefile new/checkmedia-3.8/Makefile
--- old/checkmedia-3.7/Makefile 2017-12-01 13:07:37.000000000 +0100
+++ new/checkmedia-3.8/Makefile 2018-04-26 16:44:26.000000000 +0200
@@ -33,4 +33,4 @@
xz -f package/$(PREFIX).tar
clean:
- rm -rf $(OBJ) package checkmedia *~
+ rm -rf $(OBJ) package checkmedia *~ changelog VERSION
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/checkmedia-3.7/README.md new/checkmedia-3.8/README.md
--- old/checkmedia-3.7/README.md 2017-12-01 13:07:37.000000000 +0100
+++ new/checkmedia-3.8/README.md 2018-04-26 16:44:26.000000000 +0200
@@ -21,12 +21,45 @@
To avoid problems with isohybrid images, checkmedia also does not check the
first 512 bytes of the iso image (isohybrid writes an MBR there).
+## Usage
+
+ - add checksum
+```
+tagmedia --sha256 foo.iso
+```
+
+ - verify checksum
+
+```
+checkmedia foo.iso
+```
+
+## Downloads
+
+Get the latest version from the [openSUSE Build Service](https://software.opensuse.org/package/checkmedia).
+
## openSUSE Development
-The package is automatically submitted from the `master` branch to
-[system:install:head](https://build.opensuse.org/package/show/system:install:head/checkmedia)
-OBS project. From that place it is forwarded to
-[openSUSE Factory](https://build.opensuse.org/project/show/openSUSE:Factory).
+To build, simply run `make`. Install with `make install`.
+
+Basically every new commit into the master branch of the repository will be auto-submitted
+to all current SUSE products. No further action is needed except accepting the pull request.
+
+Submissions are managed by a SUSE internal [jenkins](https://jenkins.io) node in the InstallTools tab.
+
+Each time a new commit is integrated into the master branch of the repository,
+a new submit request is created to the openSUSE Build Service. The devel project
+is [system:install:head](https://build.opensuse.org/package/show/system:install….
+
+`*.changes` and version numbers are auto-generated from git commits, you don't have to worry about this.
+
+The spec file is maintained in the Build Service only. If you need to change it for the `master` branch,
+submit to the
+[devel project](https://build.opensuse.org/package/show/system:install:head/checkm…
+in the build service directly.
+
+Development happens exclusively in the `master` branch. The branch is used for all current products.
-You can find more information about this workflow in the [linuxrc-devtools
+You can find more information about the changes auto-generation and the
+tools used for jenkis submissions in the [linuxrc-devtools
documentation](https://github.com/openSUSE/linuxrc-devtools#opensuse-develo….
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/checkmedia-3.7/VERSION new/checkmedia-3.8/VERSION
--- old/checkmedia-3.7/VERSION 2017-12-01 13:07:37.000000000 +0100
+++ new/checkmedia-3.8/VERSION 2018-04-26 16:44:26.000000000 +0200
@@ -1 +1 @@
-3.7
+3.8
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/checkmedia-3.7/changelog new/checkmedia-3.8/changelog
--- old/checkmedia-3.7/changelog 2017-12-01 13:07:37.000000000 +0100
+++ new/checkmedia-3.8/changelog 2018-04-26 16:44:26.000000000 +0200
@@ -1,24 +1,34 @@
-2017-12-01: 3e4db1283b3c552694550d8c20dc454d601d4383-3.7
+2018-04-26: 3.8
+ - merge gh#openSUSE/checkmedia#5
+ - improve documentation
+ - fix Makefile
+ - update git2log script
+ - add simple usage examples
+
+2017-12-01: 3.7
+ - merge gh#openSUSE/checkmedia#4
+ - determine image size correctly (bsc#1070745)
- more comments
- - determine image size correctly (bsc #1070745)
-2017-05-27: 3.6
+2017-09-12: 3.6
+ - merge gh#openSUSE/checkmedia#3
- sort input files (boo#1041090)
-2015-09-28: 3.5
- - Add information about openSUSE development
+2015-09-29: 3.5
+ - merge gh#openSUSE/checkmedia#2
- Convert README to Markdown
+ - Add information about openSUSE development
2015-01-27: 3.4
- updated git2log script
2014-10-14: 3.3
- - added 'archive' Makefile target
- update git2log
+ - added 'archive' Makefile target
2014-04-30: 3.2
+ - ignore padding area when calculating checksum (bnc#804160)
- added 'package' target to Makefile
- - ignore padding area when calculating checksum (bnc #804160)
2013-11-05: 3.1
- make sure WORDS_BIGENDIAN is defined correctly where needed
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/checkmedia-3.7/git2log new/checkmedia-3.8/git2log
--- old/checkmedia-3.7/git2log 2017-12-01 13:07:37.000000000 +0100
+++ new/checkmedia-3.8/git2log 2018-04-26 16:44:26.000000000 +0200
@@ -1,5 +1,14 @@
#! /usr/bin/perl
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+#
+# This script is maintained at https://github.com/openSUSE/linuxrc-devtools
+#
+# If you're in another project, this is just a copy.
+# You may update it to the latest version from time to time...
+#
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
use strict;
use Getopt::Long;
@@ -10,283 +19,927 @@
$Data::Dumper::Indent = 1;
sub usage;
-sub get_branch_tags;
-sub get_branch;
-sub get_parent_branch;
+sub changelog_outdated;
+sub get_github_project;
sub get_version;
+sub get_tags;
+sub get_log;
+sub is_formatted_tag;
+sub get_branch;
+sub choose_tags;
+sub add_head_tag;
+sub tags_to_str;
+sub format_log;
+sub format_all_logs;
+sub fix_dates;
+sub add_line_breaks;
+sub format_date_obs;
+sub format_date_iso;
+sub raw_date_to_s;
usage 0 if !@ARGV;
-my @deps = qw ( .git/HEAD .git/refs/heads .git/refs/tags );
+my @changelog_deps = qw ( .git/HEAD .git/refs/heads .git/refs/tags );
my $branch;
my $current_version;
my @tags;
my @all_tags;
+my $config;
my $opt_log;
my $opt_version;
my $opt_branch;
my $opt_update;
my $opt_file;
+my $opt_start;
+my $opt_max;
+my $opt_width = 66;
+my $opt_width_fuzz = 8;
+my $opt_sep_width = 68;
+my $opt_format = 'internal'; # obs, internal
+my $opt_merge_msg_before = 1; # log auto generated pr merge message before the commit messages (vs. after)
+my $opt_join_author = 1; # join consecutive commit messages as long as they are by the same author
+my $opt_keep_date = 1; # don't join consecutive commit messages if they have different time stamps
+my $opt_default_email = 'opensuse-packaging(a)opensuse.org'; # default email to use in changelog
GetOptions(
'help' => sub { usage 0 },
'version' => \$opt_version,
'branch' => \$opt_branch,
'update' => \$opt_update,
+ 'start=s' => \$opt_start,
+ 'format=s' => \$opt_format,
+ 'max=i' => \$opt_max,
+ 'width=i' => \$opt_width,
+ 'fuzz=i' => \$opt_width_fuzz,
+ 'merge-msg=s' => sub { $opt_merge_msg_before = ($_[1] eq 'after' ? 0 : 1) },
+ 'join-author!' => \$opt_join_author,
+ 'keep-date!' => \$opt_keep_date,
'log|changelog' => \$opt_log,
+ 'default-email=s' => \$opt_default_email,
) || usage 1;
+# ensure we are used correctly
usage 1 if @ARGV > 1 || !($opt_log || $opt_version || $opt_branch);
$opt_file = @ARGV ? shift : '-';
die "no git repo\n" unless -d ".git";
-if($opt_update && $opt_file ne '-' && -f($opt_file)) {
- my $ok = 1;
+# if update option has been give write changelog only if git refs are newer
+exit 0 if $opt_update && $opt_file ne '-' && -f($opt_file) && !changelog_outdated($opt_file);
- my $t = (stat $opt_file)[9];
+$opt_max = 2 if $opt_version || $opt_branch;
- for (@deps) {
- $ok = 0 if (stat)[9] > $t;
- }
+# gather some data
+get_github_project;
+get_branch;
+get_log;
+fix_dates;
+get_tags;
+choose_tags;
+add_head_tag;
+get_version;
+
+# just print current branch
+if($opt_branch) {
+ open my $f, ">$opt_file";
+ print $f $config->{branch} ? $config->{branch} : "master", "\n";
+ close $f;
- exit 0 if $ok;
+ exit 0;
}
-@all_tags = `git tag`;
-chomp @all_tags;
+# just print current version
+if($opt_version) {
+ my $old_version;
-$branch = get_branch;
-die "no branch?\n" unless $branch;
+ if($opt_file ne '-' && open(my $f, $opt_file)) {
+ chomp($old_version = <$f>);
+ close $f;
+ }
-@tags = get_branch_tags;
-die "no tags at all?\n" unless @tags;
+ if($config->{version} ne $old_version) {
+ open my $f, ">$opt_file";
+ print $f "$config->{version}\n";
+ close $f;
+ }
-if(!grep { /^$branch\-/ } @tags) {
- $branch = get_parent_branch;
- die "sorry, can't determine branch\n" unless $branch;
+ exit 0;
+}
- @tags = get_branch_tags;
- die "no tags at all?\n" unless @tags;
+# set start tag
+if($opt_start) {
+ my $x = is_formatted_tag $opt_start;
+ die "$opt_start: not a valid start tag\n" if !$x;
+ $x->{branch} = $config->{branch} if !$x->{branch};
+ $config->{start} = $x;
}
-if($opt_branch) {
- open my $f, ">$opt_file";
- print $f "$branch\n";
- close $f;
+format_all_logs;
- exit 0;
+open my $f, ">$opt_file";
+
+print $f $_->{formatted} for @{$config->{log}};
+
+close $f;
+
+exit 0;
+
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+# usage(exit_code)
+#
+# Print help message and exit.
+# - exit_code: exit code
+#
+# Function does not return.
+#
+sub usage
+{
+ my $err = shift;
+
+ print <<" usage";
+Usage: git2log [OPTIONS] [FILE]
+Create changelog and project version from git repo.
+ --changelog Write changelog to FILE.
+ --version Write version number to FILE.
+ --branch Write current branch to FILE.
+ --start START_TAG Start with tag START_TAG.
+ --max N Write at most MAX long entries.
+ --update Write changelog or version only if FILE is outdated.
+ --format FORMAT Write log using FORMAT. Supported FORMATs are 'internal' (default) and 'obs'.
+ --width WIDTH Reformat log entries to be max WIDTH chars wide.
+ --fuzz FUZZ Allow log lines to be up to FUZZ chars longer as WIDTH to avoid
+ line breaks leaving tiny bits on the last line.
+ --merge-msg WHERE Log message about merges before or after the actual merge commit messages.
+ Valid values for WHERE are 'after' and 'before' (default).
+ --join-author Join consecutive commits as long as they are by the same author. (default)
+ --no-join-author Keep consecutive commits by the same author separate.
+ --keep-date Join consecutive commits only if they have the same date. (default)
+ --no-keep-date Join consecutive commits even if dates differ.
+ --default-email Use this email in changelog entries if no other suitable email could be
+ determined (default: opensuse-packaging\(a)opensuse.org)
+ --help Print this help text.
+ usage
+
+ exit $err;
}
-$current_version = get_version;
-if($opt_version) {
- open my $f, ">$opt_file";
- print $f "$current_version\n";
- close $f;
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+# res = changelog_outdated(file)
+#
+# Return status of changelog file.
+# - file: changelog file name
+# - res: status
+# 1: file is newer than the last git repo change and should be updated
+# 0: file is still recent enough
+#
+# Relies on global var @changelog_deps.
+#
+sub changelog_outdated
+{
+ my $file = $_[0];
- exit 0;
+ my $changelog_time = (stat $file)[9];
+
+ return 1 if !defined $changelog_time;
+
+ for (@changelog_deps) {
+ return 1 if (stat)[9] > $changelog_time;
+ }
+
+ return 0;
}
-if($branch ne 'master') {
- my ($i1, $i2, $bi);
- for (my $i = 0; $i < @tags; $i++) {
- if($tags[$i] =~ /^$branch\-(\S+)/) {
- $i2 = $i;
- $bi = $1;
- last;
- }
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+# get_github_project()
+#
+# Set $config->{github_project} to the github project name.
+#
+sub get_github_project
+{
+ if(`git config remote.origin.url` =~ m#github.com[:/]+(\S+/\S+)#) {
+ $config->{github_project} = $1;
+ $config->{github_project} =~ s/\.git$//;
}
+}
- # print STDERR ">> $branch-$bi\n";
- warn "no tags in this branch yet\n" unless $bi;
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+# get_version()
+#
+# Set $config->{branch} and $config->{version} to the current branch and
+# version info.
+#
+# This might be taken directly from HEAD if HEAD is tagged or otherwise be
+# exprapolated from the most recent tag (cf. add_head_tag()).
+#
+sub get_version
+{
+ $config->{version} = "0.0";
- for (my $i = 0; $i < $i2; $i++) {
- if($tags[$i] ge $bi) {
- if($tags[$i] eq $bi) {
- $i1 = $i;
+ my $tag = $config->{log}[0]{tags}[0];
+
+ if($tag->{version}) {
+ $config->{version} = $tag->{version};
+ $config->{branch} = $tag->{branch};
+ }
+}
+
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+# get_tags()
+#
+# Parse $config->{raw_log}, extract tag names, and split into per-tag
+# sections.
+#
+# Only tags recognized by is_formatted_tag() are considered.
+#
+# The parsed logs is stored in $config->{log}, an array of log sections.
+# Each section is a hash with these keys:
+# - 'tags': array of tags for this section
+# - 'commit': git commit id associated with these tags
+# - 'lines': git log lines
+#
+sub get_tags
+{
+ my $log_entry;
+
+ for (@{$config->{raw_log}}) {
+ if(/^commit (\S+)( \((.*)\))?/) {
+ my $commit = $1;
+ my $tag_list = $3;
+ my $xtag;
+
+ for my $t (split /, /, $tag_list) {
+ if($t =~ /tag: (\S+)/) {
+ my $tag = $1;
+ my $x = is_formatted_tag $tag;
+ push @$xtag, $x if $x;
+ }
+ }
+
+ if($xtag) {
+ if($log_entry) {
+ push @{$config->{log}}, $log_entry;
+ last if $opt_max && @{$config->{log}} >= $opt_max;
+ }
+ $log_entry = { commit => $commit, tags => $xtag };
}
- elsif($i > 0) {
- $i1 = $i - 1;
+ else {
+ $log_entry = { commit => $commit } if !$log_entry;
}
- last;
}
+
+ push @{$log_entry->{lines}}, $_ if $log_entry;
}
+}
- splice @tags, $i1, $i2 - $i1;
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+# get_log()
+#
+# Read git log and store lines as array in $config->{raw_log} (trailing
+# newlines removed).
+#
+sub get_log
+{
+ chomp(@{$config->{raw_log}} = `git log --pretty=medium --date=raw --topo-order --decorate`);
}
-map { s/(\d+)/$1 + 0/eg } @tags;
-push @tags, "HEAD";
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+# hash_ref = is_formatted_tag(tag_name)
+#
+# Parse tag and return hash ref with branch and version number parts or
+# undef if it doesn't match.
+# - tag_name: tag as string
+# - hash_ref: hash ref with internal tag representation (with keys 'branch' and 'version').
+#
+# This expects tags of the form "VERSION" or "BRANCH-VERSION" where VERSION
+# consists of decimal numbers separated by dots '.' and BRANCH can be any
+# string.
+# (Note: it doesn't really have to be the name of an existing branch.)
+#
+# Tags not conforming to this convention are ignored.
+#
+sub is_formatted_tag
+{
+ if($_[0] =~ /^((.+)-)?((\d+\.)*\d+)$/) {
+ return { branch => $2, version => $3 }
+ }
-# print Dumper(\@tags);
+ return undef;
+}
-open F, ">$opt_file";
-for (my $i = @tags - 1; $i > 0; $i--) {
- my ($date, @t2);
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+# get_branch()
+#
+# Get currently active git branch and store in $config->{branch}.
+#
+# 'master' branch is represented by empty 'branch' key.
+#
+sub get_branch
+{
+ chomp(my $branch = `git rev-parse --abbrev-ref HEAD`);
- my @t = `git log --pretty=medium --date=iso '$tags[$i-1]..$tags[$i]'`;
+ $branch = "" if $branch eq 'master';
- # print "\n--- $tags[$i-1]..$tags[$i] ---\n", @t, "---\n";
+ $config->{branch} = $branch;
+}
- my $merge = 0;
- for (@t) {
- $merge = 1 if /^Merge: /;
- $merge = 0 if /^commit /;
- push @t2, $_ if !$merge;
- }
- @t = @t2;
- undef @t2;
- my $detail = 0;
- for (@t) {
- $detail = 1 if /^ $/;
- $detail = 2 if /^ Conflicts:$/;
- $detail = 0 if /^commit /;
- if(!$detail || !/^ [^\-\s]/) {
- push @t2, $_ if $detail < 2;
- }
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+# res = tag_sort(a, b)
+#
+# Compare 2 tags.
+# - a, b: refs to tag hash
+# - res: -1, 0, 1
+#
+# This is used when we have to decide between alternative tags.
+# (Prefer 'lesser' variant.)
+#
+sub tag_sort
+{
+ my ($x, $y);
+
+ $x = length $a->{version};
+ $y = length $b->{version};
+
+ # longer version number first
+ return $y <=> $x if $y <=> $x;
+
+ return $a->{branch} cmp $b->{branch};
+}
+
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+# str = tag_to_str(tag_ref)
+#
+# Convert tag into string.
+# - tag_ref: ref to hash with 'branch' and 'version' keys
+# - str: string (e.g. "foo-1.44")
+#
+# 'master' branch is represented by missing/empty 'branch' key.
+#
+sub tag_to_str
+{
+ my $tag = $_[0];
+ my $str;
+
+ $str = "$tag->{branch}-" if $tag->{branch} ne "";
+ $str .= $tag->{version};
+
+ return $str;
+}
+
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+# str = tags_to_str(tag_array_ref)
+#
+# Convert array of tags into string.
+# - tag_array_ref: ref to array of tags
+# - str: string (e.g. "(tag1, tag2)"
+#
+# This function is used only internally for debugging.
+#
+sub tags_to_str
+{
+ my $tags = $_[0];
+ my $str;
+
+ for my $t (@$tags) {
+ $str .= ", " if $str;
+ $str .= tag_to_str $t;
}
- @t = @t2;
- # print "\n--- $tags[$i-1]..$tags[$i] ---\n", @t;
+ return "($str)";
+}
+
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+# choose_tags()
+#
+# Scan commit messages and extract tag & branch information.
+#
+# This stores the tag/branch info in $config->{log}[]{tags}.
+#
+sub choose_tags
+{
+ my $branch = $config->{branch};
+
+ for my $x (@{$config->{log}}) {
+ # printf "# %s\n", tags_to_str($x->{tags});
+
+ # no tag info? -> ignore
+ next if !$x->{tags};
- chomp @t;
- for (@t) {
- if(/^Date:\s*(\S+)/) {
- $date = $1;
- last;
+ # single tag? -> remember branch info
+ if(@{$x->{tags}} == 1) {
+ $branch = $x->{tags}[0]{branch};
+ next;
}
- }
- # handle white space in every first line once and for all
- my $empty = 1;
- for (@t) {
- $empty = 1, $_ = "", next if $_ =~ /^\s*$/;
- next if !$empty;
- s/^\s*//;
- $empty = 0;
- }
+ # several tags? -> choose one
+
+ # any with current branch name?
+ my @t = grep { $_->{branch} eq $branch } @{$x->{tags}};
- @t = grep { !/^(commit|Author:|Date:|Merge:|\s*$)|created.*tag/ } @t;
- if(@t) {
- # rewrite a bit to have it look more consistent
- map { s/(fate|bnc|bsc)#/$1 #/g } @t;
- map { s/(fate|bnc|bsc)\s*(\d{4})/$1 #$2/g } @t;
- map { s/\(#/(bnc #/g } @t;
- map { s/bug\s*#/bnc #/g } @t;
- map { s/feat(\.|ure)?\s*#?(\d+)/fate #$2/g } @t;
- map { s/^ {4}// } @t;
- map { s/^ {8}// } @t;
- map { s/^ +/ / } @t;
- map { s/^\s*[+\-][\-\s]*/- / } @t;
- map { s/^([^ \-])/- $1/ } @t;
- map { s/^/\t/ } @t;
- map { s/\\'/'/ } @t;
+ # no? -> choose among all
+ @t = @{$x->{tags}} if @t == 0;
- # print "\n--- $tags[$i-1]..$tags[$i] ---\n", join("\n", @t);
+ # prefer longest version number, then alphanumerically smallest branch name
+ @t = sort tag_sort @t;
- my $t = $tags[$i];
- $t = "${branch}-$t" if $branch ne 'master' && $t eq "HEAD";
- $t =~ s/HEAD/$current_version/;
- print F "$date:\t$t\n";
- print F join("\n", @t), "\n\n";
+ $branch = $t[0]{branch};
+ $x->{tags} = [ $t[0] ];
+
+ # printf "X %s\n", tags_to_str($x->{tags});
}
}
-close F;
-
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-sub usage
+# add_head_tag()
+#
+# Suggest tag for HEAD if there isn't one.
+#
+# Basically, use branch + version from most recent tag and increment version.
+#
+sub add_head_tag
{
- my $err = shift;
+ return if @{$config->{log}} < 2;
- print <<" usage";
-Usage: git2log [OPTIONS] [FILE]
-Create changelog and project version from git repo.
- --changelog Write changelog to FILE.
- --version Write version number to FILE.
- --branch Write current branch to FILE.
- --update Write changelog or version only if FILE is outdated.
- --help Print this help text.
- usage
+ # HEAD tagged already?
+ return if $config->{log}[0]{tags};
- exit $err;
+ # the first tagged commit if HEAD isn't tagged
+ my $tag = { %{$config->{log}[1]{tags}[0]} };
+
+ # increment version
+ $tag->{version} =~ s/(\d+)$/$1 + 1/e;
+
+ $config->{log}[0]{tags}[0] = $tag;
+
+ # remember that the tag was generated
+ $config->{log}[0]{was_untagged} = 1;
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-sub get_branch_tags
+# fix_dates()
+#
+# Adjust time stamps in entire git log.
+#
+# The time stamps of the git commits are not necessarily ordered by date.
+# But the generated changelog is required to have a strictly monotonic time.
+#
+# We do this by going through the log in reverse and rewriting any dates we
+# find whenever the date decreases.
+#
+# A minimum time difference of 1 second beween entries is maintained.
+#
+# Not very subtle but it works.
+#
+sub fix_dates
{
- my @ntags;
+ my $last_date;
- for (@all_tags) {
- if(/^\d/) {
- s/(\d+)/sprintf "%04d", $1/eg;
- push @ntags, $_;
+ for (reverse @{$config->{raw_log}}) {
+ # e.g. "Date: 1443184889 +0200"
+ if(/^(Date:\s+)(\S+)(\s+\S+)/) {
+ if(defined $last_date && $2 < $last_date) {
+ $_ = "$1$last_date$3\n";
+ }
+ else {
+ $last_date = $2;
+ }
+
+ # ensure a minimal time gap of 1 second
+ $last_date += 1;
}
- elsif(s/^$branch\-//) {
- s/(\d+)/sprintf "%04d", $1/eg;
- push @ntags, "$branch-$_";
+ }
+}
+
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+# format_all_logs()
+#
+# Format the entire git log.
+#
+# This is done for every code version individually (the log has already been
+# split accordingly).
+#
+# If $config->{start} is set, use this as starting point. Else format the
+# entire git log.
+#
+sub format_all_logs
+{
+ # check if start tag actually exists - if not, print nothing
+ if($config->{start}) {
+ my $tag_found;
+ for (@{$config->{log}}) {
+ $tag_found = 1, last if grep { tag_to_str($config->{start}) eq tag_to_str($_) } @{$_->{tags}};
}
+ return if !$tag_found;
}
- return sort @ntags;
+ for (@{$config->{log}}) {
+ if($config->{start}) {
+ # stop if we meet the start tag
+ last if grep { tag_to_str($config->{start}) eq tag_to_str($_) } @{$_->{tags}};
+ }
+ format_log $_;
+ }
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-sub get_branch
+# format_log(log)
+#
+# Format log messages.
+# - log: is an array ref with individual commits
+#
+# All commits belong to a specific code version (stored in $log->{tag}).
+# $log->{formatted} holds the result.
+#
+# The process is done in several individual steps, documented below in the code.
+#
+sub format_log
{
- my $b;
+ my $log = $_[0];
+
+ my $merge;
+ my $commit;
+ my $saved_commit;
+ my $commits;
+
+ for (@{$log->{lines}}) {
+ if(/^commit (\S+)/) {
+ $commit = { ref => $1 };
+ push @{$commits}, $commit;
+
+ if(
+ $merge &&
+ $merge->{merge_end} eq substr($commit->{ref}, 0, length($merge->{merge_end}))
+ ) {
+ undef $merge;
+ }
+
+ if($merge) {
+ $commit->{merge_ref} = $merge->{ref};
+ $commit->{date} = $merge->{date};
+ # add to all commits so it's not lost when we re-arrange
+ $commit->{merge_msg} = $merge->{msg} if $merge->{msg};
+ # saved entry no longer needed
+ undef $saved_commit;
+ }
+
+ next;
+ }
+
+ if(/^Merge: (\S+)/) {
+ if($commit) {
+ $merge = { merge_end => $1, ref => $commit->{ref} } unless $merge;
+ $saved_commit = pop @{$commits};
+ }
+ undef $commit;
+ next;
+ }
+
+ if(/^Date:\s+(\S.*)/) {
+ if($commit) {
+ $commit->{date} = $1 if !$commit->{date};
+ }
+ elsif($merge) {
+ $merge->{date} = $1 if !$merge->{date};
+ }
+ next;
+ }
+
+ if(/^Author:\s+(\S.*)/) {
+ $commit->{author} = $1 if $commit;
+ $merge->{author} = $1 if $merge && !$merge->{author};
+ next;
+ }
+
+ if($commit) {
+ push @{$commit->{lines}}, $_ if s/^ //;
+ }
+ elsif($merge && !$merge->{msg}) {
+ if(/^ Merge pull request (#\d+) from (\S+)/) {
+ if($config->{github_project}) {
+ $merge->{msg} = "merge gh#$config->{github_project}$1";
+ }
+ else {
+ $merge->{msg} = "merge pr $2";
+ }
+ }
+ elsif(/^ Merge branch '([^']+)'/) {
+ $merge->{msg} = "merge branch $1";
+ }
+ }
+ }
+
+ # it can happen that there's a lonely merge commit left at the end
+ if($merge && $saved_commit) {
+ $saved_commit->{merge_ref} = $merge->{ref};
+ $saved_commit->{date} = $merge->{date};
+ $saved_commit->{author} = $merge->{author};
+ $saved_commit->{merge_msg} = $merge->{msg} if $merge->{msg};
+ $saved_commit->{formatted} = [];
+
+ push @{$commits}, $saved_commit;
+ }
+
+ # Note: the individual steps below work on the array @$commits and modify
+ # its content.
+
+ # step 1
+ # - if there are paragraphs starting with '@log@' or '@+log@'
+ # - delete first paragraph (short summary)
+ # - else
+ # - keep only first paragraph
+ # - if there is a paragraph starting with '@-log', delete entire log
+ # - tag commits that have a '@log@' tag so we can delete untagged commits
+ # belonging to the same merge commit later
+
+ my $tagged_merges = {};
+
+ for my $commit (@$commits) {
+ my $para_cnt = 0;
+ my $delete_all = 0;
+ my $delete_first = 0;
+ for (@{$commit->{lines}}) {
+ $para_cnt++ if $_ eq "";
+ $para_cnt = 0, $delete_first = 1 if /^\@\+log\@/;
+ $delete_all = 1 if /^\@\-log\@/;
+ if(/^\@log\@/) {
+ $para_cnt = 0;
+ $commit->{clear} = 1;
+ $tagged_merges->{$commit->{merge_ref}} = 1 if $commit->{merge_ref} || $log->{was_untagged};
+ }
+ $_ = undef if $para_cnt;
+ }
+ shift @{$commit->{lines}} if $delete_first;
+ $commit->{lines} = [] if $delete_all;
+ }
+
+ # step 2
+ # - clean up tagged commits or commits belonging to tagged merges
+
+ for my $commit (@$commits) {
+ next unless $commit->{clear} || $tagged_merges->{$commit->{merge_ref}};
+ for (@{$commit->{lines}}) {
+ last if /^\@\+?log\@/;
+ $_ = undef;
+ }
+ }
+
+ # step 3
+ # - join lines
+
+ for my $commit (@$commits) {
+ my $lines;
+ my $line;
+
+ for (@{$commit->{lines}}) {
+ next if $_ eq "";
+ if(
+ s/^\s*[+\-][\-\s]*// ||
+ s/^\@\+?log\@// ||
+ $line eq ""
+ ) {
+ s/^\s*//;
+ push @$lines, $line if $line ne "";
+ $line = $_;
+ }
+ else {
+ s/^\s*//;
+ $line .= " " if $line ne "";
+ $line .= $_;
+ }
+ }
+ push @$lines, $line if $line ne "";
+
+ $commit->{formatted} = $lines if $lines;
+ }
+
+ # step 4
+ # - fix small glitches
+
+ for my $commit (@$commits) {
+ next unless $commit->{formatted};
+ for (@{$commit->{formatted}}) {
+ s/(fate|bnc|bsc)\s*(#\d+)/\L$1\E$2/ig;
+ }
+ }
+
+ # step 5
+ # - add merge info at the top or bottom (depending on $opt_merge_msg_before)
+
+ my $merge_logged;
+
+ for my $commit ($opt_merge_msg_before ? reverse(@$commits) : @$commits) {
+ next unless $commit->{formatted};
- for (`git branch`) {
- if(/^\*\s+(\S+)/) {
- $b = $1;
- last;
+ if($commit->{merge_ref} && !$merge_logged->{$commit->{merge_ref}}) {
+ $merge_logged->{$commit->{merge_ref}} = 1;
+ if($commit->{merge_msg}) {
+ if($opt_merge_msg_before) {
+ unshift @{$commit->{formatted}}, $commit->{merge_msg};
+ }
+ else {
+ push @{$commit->{formatted}}, $commit->{merge_msg};
+ }
+ }
}
}
- $b = "master" if $b eq '(no';
+ # step 6
+ # - join commit messages with same author (optionally even with different dates)
+
+ my $commit0;
- return $b;
+ for my $commit (@$commits) {
+ next if !$commit->{formatted};
+ $commit0 = $commit, next if !$commit0;
+
+ if(
+ # $commit->{merge_ref} eq $commit0->{merge_ref} &&
+ (
+ $opt_join_author && ($commit->{author} eq $commit0->{author})
+ && (!$opt_keep_date || $commit->{date} eq $commit0->{date})
+ )
+ || $opt_format eq 'internal'
+ ) {
+ unshift @{$commit0->{formatted}}, @{$commit->{formatted}};
+ delete $commit->{formatted};
+ }
+ else {
+ $commit0 = $commit;
+ }
+ }
+
+ # step 7
+ # - add version tag at the end of the first log entry
+
+ for my $commit (@$commits) {
+ next unless $commit->{formatted};
+
+ if($opt_format eq 'obs') {
+ push @{$commit->{formatted}}, $log->{tags}[0]{version} if defined $log->{tags}[0]{version};
+ }
+ else {
+ # push @{$commit->{formatted}}, tag_to_str($log->{tags}[0]);
+ }
+
+ last;
+ }
+
+ # step 8
+ # - add line breaks
+
+ for my $commit (@$commits) {
+ next unless $commit->{formatted};
+ for (@{$commit->{formatted}}) {
+ $_ = add_line_breaks $_;
+ }
+ }
+
+ # step 9
+ # - generate final log message
+ #
+ # note: non-(open)suse email addresses are replaced by $opt_default_email
+
+ my $formated_log;
+
+ for my $commit (@$commits) {
+ next unless $commit->{formatted} && @{$commit->{formatted}};
+
+ if($opt_format eq 'obs') {
+ $formated_log .= "-" x $opt_sep_width . "\n";
+ $formated_log .= format_date_obs($commit->{date});
+ }
+ else {
+ $formated_log .= format_date_iso($commit->{date});
+ }
+ if($opt_format eq 'obs') {
+ my $auth = $commit->{author};
+ $auth =~ s/^.*<//;
+ $auth =~ s/>.*$//;
+ # replace non-suse e-mail addresses with a generic one
+ if($auth !~ /\(a)(suse\.(com|cz|de)|opensuse\.org)$/) {
+ $auth = $opt_default_email;
+ }
+ $formated_log .= " - $auth\n\n";
+ }
+ else {
+ $formated_log .= ":\t" . tag_to_str($log->{tags}[0]) . "\n";
+ }
+
+ for (@{$commit->{formatted}}) {
+ s/^/\t/mg if $opt_format eq 'internal';
+ $formated_log .= "$_\n";
+ }
+
+ $formated_log .= "\n";
+ }
+
+ $log->{formatted} = $formated_log;
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-sub get_parent_branch
+# new_text = add_line_breaks(text)
+#
+# Add line breaks to text.
+# - text: some text
+# - new_text: same text, reformatted
+#
+# Lines are formatted to have a maximal length of $opt_width. If this causes
+# the last line to be shorter than $opt_width_fuzz, it is appended to the
+# previous line.
+#
+sub add_line_breaks
{
- my $p;
+ my @words = split /\s+/, @_[0];
+ my $remaining_len = length(join '', @words);
- for (`git log -g --pretty=oneline`) {
- $p = $1 if /checkout: moving from (\S+) to $branch/;
- }
+ my $str = shift(@words);
+ my $len = length $str;
+
+ my $next_len;
+ my $word_len;
- # print "parent = $p\n";
+ for (@words) {
+ $word_len = length;
+ $remaining_len -= $word_len;
+ $next_len = $len + $word_len + 1;
+ if(
+ $next_len >= $opt_width &&
+ $next_len + $remaining_len + 1 >= $opt_width + $opt_width_fuzz
+ ) {
+ $str .= "\n $_";
+ $len = $word_len;
+ }
+ else {
+ $str .= " $_";
+ $len += $word_len + 1;
+ }
+ }
- return $p || "master";
+ return "- " . $str;
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-sub get_version
+# seconds = raw_date_to_s(git_date)
+#
+# Convert git raw date to seconds.
+# - git_date: raw git format (e.g. "1443184889 +0200")
+# - seconds: the seconds part (e.g. "1443184889")
+#
+sub raw_date_to_s
{
- my $v = $tags[-1];
- $v =~ s/(\d+)/$1 + 0/eg;
+ return (split / /, $_[0])[0];
+}
- if(`git log --pretty=medium --date=iso '$v..HEAD'`) {
- $v =~ s/(\d+)$/$1 + 1/e;
- }
- $v =~ s/^$branch\-//;
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+# date = format_date_obs(git_date)
+#
+# Convert git raw date to obs format.
+# - git_date: raw git format (e.g. "1443184889 +0200")
+# - date: obs format ("Fri Sep 25 12:41:29 UTC 2015")
+#
+sub format_date_obs
+{
+ my @d = gmtime(raw_date_to_s($_[0]));
- return $v;
+ return
+ qw(Sun Mon Tue Wed Thu Fri Sat)[$d[6]] . " " .
+ qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)[$d[4]] . " " .
+ $d[3] . " " .
+ sprintf("%02d:%02d:%02d", $d[2], $d[1], $d[0]) . " UTC " .
+ (1900 + $d[5]);
}
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+# date = format_date_iso(git_date)
+#
+# Convert git raw date to iso format.
+# - git_date: raw git format (e.g. "1443184889 +0200")
+# - date: obs format ("2015-09-25")
+#
+sub format_date_iso
+{
+ my @d = gmtime(raw_date_to_s($_[0]));
+
+ return sprintf("%04d-%02d-%02d", 1900 + $d[5], $d[4] + 1, $d[3]);
+}
1
0
Hello community,
here is the log from the commit of package plasma5-workspace for openSUSE:Factory checked in at 2018-04-30 22:52:10
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/plasma5-workspace (Old)
and /work/SRC/openSUSE:Factory/.plasma5-workspace.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "plasma5-workspace"
Mon Apr 30 22:52:10 2018 rev:91 rq:601512 version:5.12.4
Changes:
--------
--- /work/SRC/openSUSE:Factory/plasma5-workspace/plasma5-workspace.changes 2018-04-19 15:20:22.197244341 +0200
+++ /work/SRC/openSUSE:Factory/.plasma5-workspace.new/plasma5-workspace.changes 2018-04-30 22:52:12.207206451 +0200
@@ -1,0 +2,6 @@
+Mon Apr 23 07:07:44 UTC 2018 - fabian(a)ritter-vogt.de
+
+- Add patch to avoid listing all users over NIS:
+ * lazy-sddm-theme.patch
+
+-------------------------------------------------------------------
New:
----
lazy-sddm-theme.patch
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ plasma5-workspace.spec ++++++
--- /var/tmp/diff_new_pack.1yzAgC/_old 2018-04-30 22:52:13.267167776 +0200
+++ /var/tmp/diff_new_pack.1yzAgC/_new 2018-04-30 22:52:13.271167630 +0200
@@ -50,8 +50,10 @@
Patch503: 0001-Set-GTK_BACKEND-x11-in-a-wayland-session.patch
# PATCH-FIX-UPSTREAM (once sddm part merged)
Patch504: 0001-Add-suffix-to-the-wayland-session-s-name.patch
-# PATCH-FIX-UPSTRAM (or alternative solution)
+# PATCH-FIX-UPSTREAM (or alternative solution)
Patch505: 0001-Set-XDG_SESSION_TYPE-wayland-in-startplasmacomposito.patch
+# PATCH-FIX-OPENSUSE
+Patch506: lazy-sddm-theme.patch
BuildRequires: breeze5-icons
BuildRequires: fdupes
BuildRequires: kf5-filesystem
++++++ lazy-sddm-theme.patch ++++++
From: Fabian Vogt <fabian(a)ritter-vogt.de>
Subject: sddm-theme: Set needsFullUserModel=false
Otherwise SDDM has to load all users even if they're not shown.
See https://github.com/sddm/sddm/pull/1017
diff --git a/sddm-theme/Main.qml b/sddm-theme/Main.qml
index 71fcd44d..e951aa2f 100644
--- a/sddm-theme/Main.qml
+++ b/sddm-theme/Main.qml
@@ -97,6 +97,8 @@ PlasmaCore.ColorScope {
if ( userListModel.count == 0 ) return false
+ if ( userListModel.hasOwnProperty("containsAllUsers") && !userListModel.containsAllUsers) return false
+
return userListModel.count <= userListModel.disableAvatarsThreshold && (userList.y + mainStack.y) > 0
}
diff --git a/sddm-theme/theme.conf b/sddm-theme/theme.conf
index c293b25b..54d7f1b2 100644
--- a/sddm-theme/theme.conf
+++ b/sddm-theme/theme.conf
@@ -2,3 +2,4 @@
type=color
color=#1d99f3
background=
+needsFullUserModel=false
1
0
Hello community,
here is the log from the commit of package plasma5-openSUSE for openSUSE:Factory checked in at 2018-04-30 22:52:05
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/plasma5-openSUSE (Old)
and /work/SRC/openSUSE:Factory/.plasma5-openSUSE.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "plasma5-openSUSE"
Mon Apr 30 22:52:05 2018 rev:71 rq:601511 version:15.0~git20180421T093411~6c02346
Changes:
--------
--- /work/SRC/openSUSE:Factory/plasma5-openSUSE/plasma5-openSUSE.changes 2018-04-25 09:56:01.934551327 +0200
+++ /work/SRC/openSUSE:Factory/.plasma5-openSUSE.new/plasma5-openSUSE.changes 2018-04-30 22:52:06.523413832 +0200
@@ -1,0 +2,5 @@
+Mon Apr 23 07:08:56 UTC 2018 - fabian(a)ritter-vogt.de
+
+- Adjust sddmtheme.diff to changes in plasma5-workspace
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ sddmtheme.diff ++++++
--- /var/tmp/diff_new_pack.TneseA/_old 2018-04-30 22:52:07.623373698 +0200
+++ /var/tmp/diff_new_pack.TneseA/_new 2018-04-30 22:52:07.623373698 +0200
@@ -21,10 +21,11 @@
index 5dae68f..adacdc1 100644
--- a/breeze/theme.conf
+++ b/breeze-openSUSE/theme.conf
-@@ -1,4 +1,4 @@
+@@ -1,5 +1,5 @@
[General]
-type=color
+type=image
color=#1d99f3
-background=
+background=components/artwork/1920x1080.jpg
+ needsFullUserModel=false
1
0
Hello community,
here is the log from the commit of package sddm for openSUSE:Factory checked in at 2018-04-30 22:52:00
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/sddm (Old)
and /work/SRC/openSUSE:Factory/.sddm.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "sddm"
Mon Apr 30 22:52:00 2018 rev:33 rq:601509 version:0.17.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/sddm/sddm.changes 2018-03-29 11:48:35.261565879 +0200
+++ /work/SRC/openSUSE:Factory/.sddm.new/sddm.changes 2018-04-30 22:52:02.943544449 +0200
@@ -1,0 +2,22 @@
+Mon Apr 23 06:55:16 UTC 2018 - fabian(a)ritter-vogt.de
+
+- Add patch to show a username input field with too many users:
+ * 0006-Don-t-fill-UserModel-if-theme-does-not-require-it.patch
+- Backport related changes from develop branch:
+ * 0001-Support-for-theme-supplied-default-avatars.patch
+ * 0002-Remove-trailing-spaces.patch
+ * 0003-UserModel-optimize-filtering-out-duplicate-users-995.patch
+ * 0004-UserModel-fix-filtering-out-duplicate-users-998.patch
+ * 0005-UserModel-optimize-setting-of-default-user-icon-999.patch
+
+-------------------------------------------------------------------
+Mon Apr 16 09:30:50 UTC 2018 - fabian(a)ritter-vogt.de
+
+- Revert previous change, had the opposite effect for some reason
+
+-------------------------------------------------------------------
+Thu Apr 12 08:50:03 UTC 2018 - fabian(a)ritter-vogt.de
+
+- Start the X server with -keeptty (boo#1089287)
+
+-------------------------------------------------------------------
New:
----
0001-Support-for-theme-supplied-default-avatars.patch
0002-Remove-trailing-spaces.patch
0003-UserModel-optimize-filtering-out-duplicate-users-995.patch
0004-UserModel-fix-filtering-out-duplicate-users-998.patch
0005-UserModel-optimize-setting-of-default-user-icon-999.patch
0006-Don-t-fill-UserModel-if-theme-does-not-require-it.patch
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ sddm.spec ++++++
--- /var/tmp/diff_new_pack.aqdkjx/_old 2018-04-30 22:52:03.931508401 +0200
+++ /var/tmp/diff_new_pack.aqdkjx/_new 2018-04-30 22:52:03.935508255 +0200
@@ -32,8 +32,15 @@
Patch2: 0001-greeter-Use-Qt-command-line-parser.patch
Patch3: 0001-Fix-platform-detection-for-EnableHiDPI.patch
Patch4: 0001-Fix-build-with-Qt-5.10-Use-QString-instead-of-QLatin.patch
+Patch5: 0001-Support-for-theme-supplied-default-avatars.patch
+Patch6: 0002-Remove-trailing-spaces.patch
+Patch7: 0003-UserModel-optimize-filtering-out-duplicate-users-995.patch
+Patch8: 0004-UserModel-fix-filtering-out-duplicate-users-998.patch
+Patch9: 0005-UserModel-optimize-setting-of-default-user-icon-999.patch
# Not merged yet: https://github.com/sddm/sddm/pull/997
Patch50: 0001-Remove-suffix-for-Wayland-session.patch
+# Not merged yet: https://github.com/sddm/sddm/pull/1017
+Patch51: 0006-Don-t-fill-UserModel-if-theme-does-not-require-it.patch
# Patch100-?: PATCH-FIX-OPENSUSE
# Use openSUSE pam config
Patch100: proper_pam.diff
++++++ 0001-Support-for-theme-supplied-default-avatars.patch ++++++
>From 2f079338408dfead4ba0e3e424a4d84a6bdf6019 Mon Sep 17 00:00:00 2001
From: Sogatori <Sogatori(a)users.noreply.github.com>
Date: Sun, 4 Mar 2018 00:42:28 +0100
Subject: [PATCH 1/6] Support for theme supplied default avatars
This patch adds support for custom default avatars
under $ThemeDir/themeName/faces.
This will make sddm use an avatar icon that is provided by
the theme and is consistent with its look.
---
src/greeter/UserModel.cpp | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/src/greeter/UserModel.cpp b/src/greeter/UserModel.cpp
index ebc1819..c790336 100644
--- a/src/greeter/UserModel.cpp
+++ b/src/greeter/UserModel.cpp
@@ -52,7 +52,10 @@ namespace SDDM {
UserModel::UserModel(QObject *parent) : QAbstractListModel(parent), d(new UserModelPrivate()) {
const QString facesDir = mainConfig.Theme.FacesDir.get();
- const QString defaultFace = QStringLiteral("file://%1/.face.icon").arg(facesDir);
+ const QString themeDir = mainConfig.Theme.ThemeDir.get();
+ const QString currentTheme = mainConfig.Theme.Current.get();
+ const QString themeDefaultFace = QStringLiteral("%1/%2/faces/.face.icon").arg(themeDir).arg(currentTheme);
+ const QString defaultFace = QStringLiteral("%1/.face.icon").arg(facesDir);
struct passwd *current_pw;
while ((current_pw = getpwent()) != nullptr) {
@@ -91,7 +94,10 @@ namespace SDDM {
user->needsPassword = strcmp(current_pw->pw_passwd, "") != 0;
// search for face icon
- user->icon = defaultFace;
+ if (QFile::exists(themeDefaultFace))
+ user->icon = QStringLiteral("file://%1").arg(themeDefaultFace);
+ else
+ user->icon = QStringLiteral("file://%1").arg(defaultFace);
// add user
d->users << user;
--
2.16.2
++++++ 0002-Remove-trailing-spaces.patch ++++++
>From 719e6590f325e60e415defc9af3642dbd0183a9f Mon Sep 17 00:00:00 2001
From: Pier Luigi Fiorini <pierluigi.fiorini(a)liri.io>
Date: Sat, 17 Mar 2018 20:02:48 +0100
Subject: [PATCH 2/6] Remove trailing spaces
---
src/greeter/UserModel.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/greeter/UserModel.cpp b/src/greeter/UserModel.cpp
index c790336..fae5cfa 100644
--- a/src/greeter/UserModel.cpp
+++ b/src/greeter/UserModel.cpp
@@ -94,9 +94,9 @@ namespace SDDM {
user->needsPassword = strcmp(current_pw->pw_passwd, "") != 0;
// search for face icon
- if (QFile::exists(themeDefaultFace))
+ if (QFile::exists(themeDefaultFace))
user->icon = QStringLiteral("file://%1").arg(themeDefaultFace);
- else
+ else
user->icon = QStringLiteral("file://%1").arg(defaultFace);
// add user
--
2.16.2
++++++ 0003-UserModel-optimize-filtering-out-duplicate-users-995.patch ++++++
>From 47f28bb0b903ae1603b8f855e77bbeb79d8e6ace Mon Sep 17 00:00:00 2001
From: Dmitry Torokhov <dmitry.torokhov(a)gmail.com>
Date: Mon, 19 Mar 2018 19:07:12 -0700
Subject: [PATCH 3/6] UserModel: optimize filtering out duplicate users (#995)
Instead of using naive approach of trying to detect duplicates when
inserting a new user into the list of users, which is O(n^2) complexity,
let's filter them out after the fact, which is much more efficient on
real-world data.
With this change time to load user list in our environment (over 500000
account entries) is reduced from over 1 hour to about 2 seconds.
---
src/greeter/UserModel.cpp | 10 +++-------
1 file changed, 3 insertions(+), 7 deletions(-)
diff --git a/src/greeter/UserModel.cpp b/src/greeter/UserModel.cpp
index fae5cfa..daf93c5 100644
--- a/src/greeter/UserModel.cpp
+++ b/src/greeter/UserModel.cpp
@@ -75,13 +75,6 @@ namespace SDDM {
if (mainConfig.Users.HideShells.get().contains(QString::fromLocal8Bit(current_pw->pw_shell)))
continue;
- // skip duplicates
- // Note: getpwent() makes no attempt to suppress duplicate information
- // if multiple sources are specified in nsswitch.conf(5).
- if (d->users.cend()
- != std::find_if(d->users.cbegin(), d->users.cend(), [current_pw](const UserPtr & u) { return u->uid == current_pw->pw_uid; }))
- continue;
-
// create user
UserPtr user { new User() };
user->name = QString::fromLocal8Bit(current_pw->pw_name);
@@ -107,6 +100,9 @@ namespace SDDM {
// sort users by username
std::sort(d->users.begin(), d->users.end(), [&](const UserPtr &u1, const UserPtr &u2) { return u1->name < u2->name; });
+ // Remove duplicates in case we have several sources specified
+ // in nsswitch.conf(5).
+ std::unique(d->users.begin(), d->users.end(), [&](const UserPtr &u1, const UserPtr &u2) { return u1->name == u2->name; });
bool avatarsEnabled = mainConfig.Theme.EnableAvatars.get();
if (avatarsEnabled && mainConfig.Theme.EnableAvatars.isDefault()) {
--
2.16.2
++++++ 0004-UserModel-fix-filtering-out-duplicate-users-998.patch ++++++
>From 126a722a4a36cb4cc6d17714ff4b18b6657493e4 Mon Sep 17 00:00:00 2001
From: Dmitry Torokhov <dmitry.torokhov(a)gmail.com>
Date: Wed, 21 Mar 2018 14:24:39 -0700
Subject: [PATCH 4/6] UserModel: fix filtering out duplicate users (#998)
std::unique() is "interesting": it modifies the container, rearranging
elements in it, but does not reduce the size of the container, so there
are invalid elements at the end that have to be erased explicitly.
---
src/greeter/UserModel.cpp | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/greeter/UserModel.cpp b/src/greeter/UserModel.cpp
index daf93c5..57f236d 100644
--- a/src/greeter/UserModel.cpp
+++ b/src/greeter/UserModel.cpp
@@ -102,7 +102,8 @@ namespace SDDM {
std::sort(d->users.begin(), d->users.end(), [&](const UserPtr &u1, const UserPtr &u2) { return u1->name < u2->name; });
// Remove duplicates in case we have several sources specified
// in nsswitch.conf(5).
- std::unique(d->users.begin(), d->users.end(), [&](const UserPtr &u1, const UserPtr &u2) { return u1->name == u2->name; });
+ auto newEnd = std::unique(d->users.begin(), d->users.end(), [&](const UserPtr &u1, const UserPtr &u2) { return u1->name == u2->name; });
+ d->users.erase(newEnd, d->users.end());
bool avatarsEnabled = mainConfig.Theme.EnableAvatars.get();
if (avatarsEnabled && mainConfig.Theme.EnableAvatars.isDefault()) {
--
2.16.2
++++++ 0005-UserModel-optimize-setting-of-default-user-icon-999.patch ++++++
>From 1ea5a0a85488e425c2d1ffcf3eafa8d8b0abe0b1 Mon Sep 17 00:00:00 2001
From: Dmitry Torokhov <dmitry.torokhov(a)gmail.com>
Date: Fri, 6 Apr 2018 19:56:14 -0700
Subject: [PATCH 5/6] UserModel: optimize setting of default user icon (#999)
Instead of checking for existence of theme-specific icon and re-creating
string literals every time we add a new user to the list, do it once.
It helps in large organizations with a lot of users.
---
src/greeter/UserModel.cpp | 9 +++------
1 file changed, 3 insertions(+), 6 deletions(-)
diff --git a/src/greeter/UserModel.cpp b/src/greeter/UserModel.cpp
index 57f236d..f6f4f95 100644
--- a/src/greeter/UserModel.cpp
+++ b/src/greeter/UserModel.cpp
@@ -56,6 +56,8 @@ namespace SDDM {
const QString currentTheme = mainConfig.Theme.Current.get();
const QString themeDefaultFace = QStringLiteral("%1/%2/faces/.face.icon").arg(themeDir).arg(currentTheme);
const QString defaultFace = QStringLiteral("%1/.face.icon").arg(facesDir);
+ const QString iconURI = QStringLiteral("file://%1").arg(
+ QFile::exists(themeDefaultFace) ? themeDefaultFace : defaultFace);
struct passwd *current_pw;
while ((current_pw = getpwent()) != nullptr) {
@@ -85,12 +87,7 @@ namespace SDDM {
// if shadow is used pw_passwd will be 'x' nevertheless, so this
// will always be true
user->needsPassword = strcmp(current_pw->pw_passwd, "") != 0;
-
- // search for face icon
- if (QFile::exists(themeDefaultFace))
- user->icon = QStringLiteral("file://%1").arg(themeDefaultFace);
- else
- user->icon = QStringLiteral("file://%1").arg(defaultFace);
+ user->icon = iconURI;
// add user
d->users << user;
--
2.16.2
++++++ 0006-Don-t-fill-UserModel-if-theme-does-not-require-it.patch ++++++
>From 2dcff84bfe21c8e1c7976797c3f22b91b45f0695 Mon Sep 17 00:00:00 2001
From: Fabian Vogt <fabian(a)ritter-vogt.de>
Date: Sat, 21 Apr 2018 17:40:56 +0200
Subject: [PATCH 6/6] Don't fill UserModel if theme does not require it
Certain themes switch to a username input field if there are too many users
to show. In those cases we don't need to provide a complete user model.
The last logged in user is still added (if available) to keep the index
and data valid.
To tell sddm that a theme does not need a full user model, theme.conf has to
set "General/needsFullUserModel=false".
Fixes #479
---
src/greeter/GreeterApp.cpp | 11 ++++++++++-
src/greeter/UserModel.cpp | 49 ++++++++++++++++++++++++++++++++++------------
src/greeter/UserModel.h | 4 +++-
3 files changed, 49 insertions(+), 15 deletions(-)
diff --git a/src/greeter/GreeterApp.cpp b/src/greeter/GreeterApp.cpp
index 1230efa..a9d785c 100644
--- a/src/greeter/GreeterApp.cpp
+++ b/src/greeter/GreeterApp.cpp
@@ -60,7 +60,6 @@ namespace SDDM {
// Create models
m_sessionModel = new SessionModel();
- m_userModel = new UserModel();
m_keyboard = new KeyboardModel();
}
@@ -111,6 +110,16 @@ namespace SDDM {
else
m_themeConfig = new ThemeConfig(configFile);
+ const bool themeNeedsAllUsers = m_themeConfig->value(QStringLiteral("needsFullUserModel"), true).toBool();
+ if(m_userModel && themeNeedsAllUsers && !m_userModel->containsAllUsers()) {
+ // The theme needs all users, but the current user model doesn't have them -> recreate
+ m_userModel->deleteLater();
+ m_userModel = nullptr;
+ }
+
+ if (!m_userModel)
+ m_userModel = new UserModel(themeNeedsAllUsers, nullptr);
+
// Set default icon theme from greeter theme
if (m_themeConfig->contains(QStringLiteral("iconTheme")))
QIcon::setThemeName(m_themeConfig->value(QStringLiteral("iconTheme")).toString());
diff --git a/src/greeter/UserModel.cpp b/src/greeter/UserModel.cpp
index f6f4f95..fdf2b7e 100644
--- a/src/greeter/UserModel.cpp
+++ b/src/greeter/UserModel.cpp
@@ -33,13 +33,25 @@
namespace SDDM {
class User {
public:
+ User(const struct passwd *data, const QString icon) :
+ name(QString::fromLocal8Bit(data->pw_name)),
+ realName(QString::fromLocal8Bit(data->pw_gecos).split(QLatin1Char(',')).first()),
+ homeDir(QString::fromLocal8Bit(data->pw_dir)),
+ uid(data->pw_uid),
+ gid(data->pw_gid),
+ // if shadow is used pw_passwd will be 'x' nevertheless, so this
+ // will always be true
+ needsPassword(strcmp(data->pw_passwd, "") != 0),
+ icon(icon)
+ {}
+
QString name;
QString realName;
QString homeDir;
- QString icon;
- bool needsPassword { false };
int uid { 0 };
int gid { 0 };
+ bool needsPassword { false };
+ QString icon;
};
typedef std::shared_ptr<User> UserPtr;
@@ -48,9 +60,10 @@ namespace SDDM {
public:
int lastIndex { 0 };
QList<UserPtr> users;
+ bool containsAllUsers { true };
};
- UserModel::UserModel(QObject *parent) : QAbstractListModel(parent), d(new UserModelPrivate()) {
+ UserModel::UserModel(bool needAllUsers, QObject *parent) : QAbstractListModel(parent), d(new UserModelPrivate()) {
const QString facesDir = mainConfig.Theme.FacesDir.get();
const QString themeDir = mainConfig.Theme.ThemeDir.get();
const QString currentTheme = mainConfig.Theme.Current.get();
@@ -59,6 +72,8 @@ namespace SDDM {
const QString iconURI = QStringLiteral("file://%1").arg(
QFile::exists(themeDefaultFace) ? themeDefaultFace : defaultFace);
+ bool lastUserFound = false;
+
struct passwd *current_pw;
while ((current_pw = getpwent()) != nullptr) {
@@ -78,19 +93,23 @@ namespace SDDM {
continue;
// create user
- UserPtr user { new User() };
- user->name = QString::fromLocal8Bit(current_pw->pw_name);
- user->realName = QString::fromLocal8Bit(current_pw->pw_gecos).split(QLatin1Char(',')).first();
- user->homeDir = QString::fromLocal8Bit(current_pw->pw_dir);
- user->uid = int(current_pw->pw_uid);
- user->gid = int(current_pw->pw_gid);
- // if shadow is used pw_passwd will be 'x' nevertheless, so this
- // will always be true
- user->needsPassword = strcmp(current_pw->pw_passwd, "") != 0;
- user->icon = iconURI;
+ UserPtr user { new User(current_pw, iconURI) };
// add user
d->users << user;
+
+ if (user->name == lastUser())
+ lastUserFound = true;
+
+ if (!needAllUsers && d->users.count() > mainConfig.Theme.DisableAvatarsThreshold.get()) {
+ struct passwd *lastUserData;
+ // If the theme doesn't require that all users are present, try to add the data for lastUser at least
+ if(!lastUserFound && (lastUserData = getpwnam(qPrintable(lastUser()))))
+ d->users << UserPtr(new User(lastUserData, themeDefaultFace));
+
+ d->containsAllUsers = false;
+ break;
+ }
}
endpwent();
@@ -182,4 +201,8 @@ namespace SDDM {
int UserModel::disableAvatarsThreshold() const {
return mainConfig.Theme.DisableAvatarsThreshold.get();
}
+
+ bool UserModel::containsAllUsers() const {
+ return d->containsAllUsers;
+ }
}
diff --git a/src/greeter/UserModel.h b/src/greeter/UserModel.h
index 1bbf77e..b63cf9a 100644
--- a/src/greeter/UserModel.h
+++ b/src/greeter/UserModel.h
@@ -34,6 +34,7 @@ namespace SDDM {
Q_PROPERTY(QString lastUser READ lastUser CONSTANT)
Q_PROPERTY(int count READ rowCount CONSTANT)
Q_PROPERTY(int disableAvatarsThreshold READ disableAvatarsThreshold CONSTANT)
+ Q_PROPERTY(bool containsAllUsers READ containsAllUsers CONSTANT)
public:
enum UserRoles {
NameRole = Qt::UserRole + 1,
@@ -43,7 +44,7 @@ namespace SDDM {
NeedsPasswordRole
};
- UserModel(QObject *parent = 0);
+ UserModel(bool needAllUsers, QObject *parent = 0);
~UserModel();
QHash<int, QByteArray> roleNames() const override;
@@ -55,6 +56,7 @@ namespace SDDM {
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
int disableAvatarsThreshold() const;
+ bool containsAllUsers() const;
private:
UserModelPrivate *d { nullptr };
};
--
2.16.2
1
0
Hello community,
here is the log from the commit of package go for openSUSE:Factory checked in at 2018-04-30 22:51:54
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/go (Old)
and /work/SRC/openSUSE:Factory/.go.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "go"
Mon Apr 30 22:51:54 2018 rev:88 rq:601490 version:1.9.4
Changes:
--------
--- /work/SRC/openSUSE:Factory/go/go.changes 2018-03-06 10:44:20.142683517 +0100
+++ /work/SRC/openSUSE:Factory/.go.new/go.changes 2018-04-30 22:51:57.003761170 +0200
@@ -17,0 +18,6 @@
+Tue Feb 13 12:11:44 UTC 2018 - dimstar(a)opensuse.org
+
+- Provide golang(API) = 1.9, so that this symbol can be required
+ and provided, as preferred one, by the unversioned go package.
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ go.spec ++++++
--- /var/tmp/diff_new_pack.2Wweq4/_old 2018-04-30 22:51:57.743734171 +0200
+++ /var/tmp/diff_new_pack.2Wweq4/_new 2018-04-30 22:51:57.743734171 +0200
@@ -33,6 +33,7 @@
Recommends: go-doc = %{version}
ExclusiveArch: %ix86 x86_64 %arm aarch64 ppc64 ppc64le s390x
Requires: go%{short_version}
+Provides: golang(API) = %{short_version}
%description
Go is an expressive, concurrent, garbage collected systems programming language
1
0
Hello community,
here is the log from the commit of package udisks2 for openSUSE:Factory checked in at 2018-04-30 22:51:48
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/udisks2 (Old)
and /work/SRC/openSUSE:Factory/.udisks2.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "udisks2"
Mon Apr 30 22:51:48 2018 rev:31 rq:601127 version:2.7.6
Changes:
--------
--- /work/SRC/openSUSE:Factory/udisks2/udisks2.changes 2018-04-22 14:31:55.377723136 +0200
+++ /work/SRC/openSUSE:Factory/.udisks2.new/udisks2.changes 2018-04-30 22:51:51.475962860 +0200
@@ -1,0 +2,6 @@
+Wed Apr 25 22:59:33 UTC 2018 - luc14n0(a)linuxmail.org
+
+- Add missing libblockdev-loop Requires tag: it is needed by
+ default.
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ udisks2.spec ++++++
--- /var/tmp/diff_new_pack.Rx1DVY/_old 2018-04-30 22:51:52.251934548 +0200
+++ /var/tmp/diff_new_pack.Rx1DVY/_new 2018-04-30 22:51:52.255934401 +0200
@@ -44,7 +44,6 @@
BuildRequires: libblockdev-part-devel >= %{libblockdev_version}
BuildRequires: libblockdev-swap-devel >= %{libblockdev_version}
BuildRequires: lvm2-devel
-BuildRequires: open-iscsi-devel
BuildRequires: pkgconfig
BuildRequires: xsltproc
BuildRequires: pkgconfig(blkid) >= 2.17.0
@@ -80,6 +79,7 @@
Requires: libblockdev >= %{libblockdev_version}
Requires: libblockdev-crypto >= %{libblockdev_version}
Requires: libblockdev-fs >= %{libblockdev_version}
+Requires: libblockdev-loop >= %{libblockdev_version}
Requires: libblockdev-mdraid >= %{libblockdev_version}
Requires: libblockdev-part >= %{libblockdev_version}
Requires: libblockdev-swap >= %{libblockdev_version}
1
0