openSUSE Commits
Threads by month
- ----- 2025 -----
- January
- ----- 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
December 2021
- 1 participants
- 2461 discussions
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package gsequencer for openSUSE:Factory checked in at 2021-12-01 20:47:25
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gsequencer (Old)
and /work/SRC/openSUSE:Factory/.gsequencer.new.31177 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gsequencer"
Wed Dec 1 20:47:25 2021 rev:102 rq:934935 version:3.13.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/gsequencer/gsequencer.changes 2021-10-30 23:14:41.515101588 +0200
+++ /work/SRC/openSUSE:Factory/.gsequencer.new.31177/gsequencer.changes 2021-12-02 02:14:05.206876317 +0100
@@ -1,0 +2,7 @@
+Wed Dec 1 04:22:40 UTC 2021 - Jo��l Kr��hemann <jkraehemann(a)gmail.com>
+
+- new upstream v3.13.0 implemented time stretch utility functions
+ and made it available in gsequencer wave form editor.
+- extended developer manual.
+
+-------------------------------------------------------------------
Old:
----
gsequencer-3.12.6.tar.gz
New:
----
gsequencer-3.13.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ gsequencer.spec ++++++
--- /var/tmp/diff_new_pack.pUwu9n/_old 2021-12-02 02:14:05.718874755 +0100
+++ /var/tmp/diff_new_pack.pUwu9n/_new 2021-12-02 02:14:05.722874742 +0100
@@ -22,13 +22,13 @@
# activated with --with run_functional_tests command line switch.
%bcond_with run_functional_tests
Name: gsequencer
-Version: 3.12.6
+Version: 3.13.0
Release: 0
Summary: Audio processing engine
License: AGPL-3.0-or-later AND GPL-3.0-or-later AND GFDL-1.3-only
Group: Productivity/Multimedia/Sound/Midi
URL: https://nongnu.org/gsequencer
-Source0: https://download.savannah.gnu.org/releases/gsequencer/3.12.x/%{name}-%{vers…
+Source0: https://download.savannah.gnu.org/releases/gsequencer/3.13.x/%{name}-%{vers…
# improve glib-2.0 compatibility to version 2.54
Patch1: gsequencer.1-improved-glib-compatibility.patch
BuildRequires: gcc-c++
++++++ gsequencer-3.12.6.tar.gz -> gsequencer-3.13.0.tar.gz ++++++
/work/SRC/openSUSE:Factory/gsequencer/gsequencer-3.12.6.tar.gz /work/SRC/openSUSE:Factory/.gsequencer.new.31177/gsequencer-3.13.0.tar.gz differ: char 24, line 1
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package grass for openSUSE:Factory checked in at 2021-12-01 20:47:13
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/grass (Old)
and /work/SRC/openSUSE:Factory/.grass.new.31177 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "grass"
Wed Dec 1 20:47:13 2021 rev:9 rq:934872 version:7.8.6
Changes:
--------
--- /work/SRC/openSUSE:Factory/grass/grass.changes 2021-06-18 10:14:00.274011558 +0200
+++ /work/SRC/openSUSE:Factory/.grass.new.31177/grass.changes 2021-12-02 02:14:02.042885966 +0100
@@ -1,0 +2,8 @@
+Sun Oct 10 14:08:05 UTC 2021 - Predrag Ivanovi�� <predivan(a)mts.rs>
+
+- Update to 7.8.6:
+ * Over 145 fixes and improvements with respect to 7.8.5
+ Changelog at https://trac.osgeo.org/grass/wiki/Release/7.8.6-News
+ * Drop b86314c7.patch, merged upstream.
+
+-------------------------------------------------------------------
Old:
----
b86314c7.patch
grass-7.8.5.md5sum
grass-7.8.5.tar.gz
New:
----
grass-7.8.6.md5sum
grass-7.8.6.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ grass.spec ++++++
--- /var/tmp/diff_new_pack.wkcDKH/_old 2021-12-02 02:14:02.758883783 +0100
+++ /var/tmp/diff_new_pack.wkcDKH/_new 2021-12-02 02:14:02.762883770 +0100
@@ -34,7 +34,7 @@
BuildRequires: wxWidgets-devel >= 2.8
%endif
Name: grass
-Version: 7.8.5
+Version: 7.8.6
Release: 0
Summary: Geographic Resources Analysis Support System
License: GPL-2.0-or-later
@@ -42,8 +42,6 @@
URL: https://grass.osgeo.org/
Source: https://grass.osgeo.org/grass%{shortver}/source/%{name}-%{version}.tar.gz
Source1: https://grass.osgeo.org/grass%{shortver}/source/%{name}-%{version}.md5sum
-# UPSTREAM-PATCH fix compilation with GDAL 3.3.0
-Patch0: https://github.com/OSGeo/grass/commit/b86314c7.patch
BuildRequires: -post-build-checks
BuildRequires: bison
BuildRequires: blas-devel
@@ -123,7 +121,6 @@
%prep
%setup -q -n grass-%{version}
-%patch0 -p1
%define grasver -@GRASS_VERSION_MAJOR@.@GRASS_VERSION_MINOR@.@GRASS_VERSION_RELEASE@
%define grasver2 '-${GRASS_VERSION_MAJOR}.${GRASS_VERSION_MINOR}.${GRASS_VERSION_RELEASE}'
++++++ grass-7.8.5.md5sum -> grass-7.8.6.md5sum ++++++
--- /work/SRC/openSUSE:Factory/grass/grass-7.8.5.md5sum 2021-05-10 15:41:19.293099960 +0200
+++ /work/SRC/openSUSE:Factory/.grass.new.31177/grass-7.8.6.md5sum 2021-12-02 02:14:01.038889028 +0100
@@ -1 +1 @@
-91f4830a5164cea703384814cd89cdf9 grass-7.8.5.tar.gz
+6a16bbefdb1f31480be82e6f352c3c10 grass-7.8.6.tar.gz
++++++ grass-7.8.5.tar.gz -> grass-7.8.6.tar.gz ++++++
/work/SRC/openSUSE:Factory/grass/grass-7.8.5.tar.gz /work/SRC/openSUSE:Factory/.grass.new.31177/grass-7.8.6.tar.gz differ: char 12, line 1
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package graphviz for openSUSE:Factory checked in at 2021-12-01 20:46:30
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/graphviz (Old)
and /work/SRC/openSUSE:Factory/.graphviz.new.31177 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "graphviz"
Wed Dec 1 20:46:30 2021 rev:93 rq:934868 version:2.49.3
Changes:
--------
--- /work/SRC/openSUSE:Factory/graphviz/graphviz.changes 2021-10-30 23:14:36.763097765 +0200
+++ /work/SRC/openSUSE:Factory/.graphviz.new.31177/graphviz.changes 2021-12-02 02:14:00.110891858 +0100
@@ -1,0 +2,16 @@
+Wed Nov 24 21:32:38 UTC 2021 - Dirk M��ller <dmueller(a)suse.com>
+
+- update to 2.49.3:
+ - gvpr "split", "tokens", and "index" functions produce incorrect results
+ This was a regression that occurred between 2.47.1 and 2.47.2.
+ - Lefty is disabled by default in the Autotools build system. To re-enable it,
+ pass `--enable-lefty` to `./configure`. In a future release, Lefty will be
+ removed.
+ - remove PHP5 support in SWIG bindings
+ - Msys experimental packages are included in release artifacts
+ - CMake build system incorrectly aliases gv2gml to gml2gv
+ - Gv2gml Doesn't escape quotes in attributes
+ - GVPR incorrectly understands color schemes
+- reenable lefty to fix addons build
+
+-------------------------------------------------------------------
@@ -1561 +1576,0 @@
-
Old:
----
graphviz-2.49.1.tar.bz2
New:
----
graphviz-2.49.3.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ graphviz.spec ++++++
--- /var/tmp/diff_new_pack.mZYVSE/_old 2021-12-02 02:14:00.850889601 +0100
+++ /var/tmp/diff_new_pack.mZYVSE/_new 2021-12-02 02:14:00.854889590 +0100
@@ -1,5 +1,5 @@
#
-# spec file for package graphviz
+# spec file
#
# Copyright (c) 2021 SUSE LLC
#
@@ -53,7 +53,7 @@
%define sle12 0
%endif
Name: graphviz%{psuffix}
-Version: 2.49.1
+Version: 2.49.3
Release: 0
Summary: Graph Visualization Tools
License: EPL-1.0
@@ -394,11 +394,6 @@
The graphviz-devel package contains all that's necessary for developing
programs that use the graphviz libraries including man3 pages.
-
-
-
-
-
#autosetup breaks graphviz-addons
%prep
%setup -q -n %{mname}-%{version}
@@ -449,6 +444,7 @@
--without-visio \
%if "%{flavor}" == "addons"
--with-x \
+ --enable-lefty \
--with-qt \
--with-smyrna \
RUBY_VER=%{ruby_version} \
++++++ graphviz-2.49.1.tar.bz2 -> graphviz-2.49.3.tar.bz2 ++++++
/work/SRC/openSUSE:Factory/graphviz/graphviz-2.49.1.tar.bz2 /work/SRC/openSUSE:Factory/.graphviz.new.31177/graphviz-2.49.3.tar.bz2 differ: char 11, line 1
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package google-osconfig-agent for openSUSE:Factory checked in at 2021-12-01 20:47:16
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/google-osconfig-agent (Old)
and /work/SRC/openSUSE:Factory/.google-osconfig-agent.new.31177 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "google-osconfig-agent"
Wed Dec 1 20:47:16 2021 rev:9 rq:934875 version:20211117.00
Changes:
--------
--- /work/SRC/openSUSE:Factory/google-osconfig-agent/google-osconfig-agent.changes 2021-10-23 00:52:21.833158114 +0200
+++ /work/SRC/openSUSE:Factory/.google-osconfig-agent.new.31177/google-osconfig-agent.changes 2021-12-02 02:13:53.366912426 +0100
@@ -1,0 +2,14 @@
+Tue Nov 30 19:50:35 UTC 2021 - John Paul Adrian Glaubitz <adrian.glaubitz(a)suse.com>
+
+- Update to version 20211117.00 (bsc#1193257, bsc#1193258)
+ * Add retry logic for RegisterAgent (#404)
+- from version 20211111.01
+ * e2e_test: drop ubuntu 1604 image as its EOL (#403)
+- from version 20211111.00
+ * e2e_test: move to V1 api for OSPolicies (#397)
+- from version 20211102.00
+ * Fix context logging and fix label names (#400)
+- from version 20211028.00
+ * Add cloudops example for gcloud (#399)
+
+-------------------------------------------------------------------
Old:
----
osconfig-20211021.00.tar.gz
New:
----
osconfig-20211117.00.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ google-osconfig-agent.spec ++++++
--- /var/tmp/diff_new_pack.5i50Mr/_old 2021-12-02 02:13:53.962910609 +0100
+++ /var/tmp/diff_new_pack.5i50Mr/_new 2021-12-02 02:13:53.966910597 +0100
@@ -24,7 +24,7 @@
%global import_path %{provider_prefix}
Name: google-osconfig-agent
-Version: 20211021.00
+Version: 20211117.00
Release: 0
Summary: Google Cloud Guest Agent
License: Apache-2.0
++++++ _service ++++++
--- /var/tmp/diff_new_pack.5i50Mr/_old 2021-12-02 02:13:54.010910463 +0100
+++ /var/tmp/diff_new_pack.5i50Mr/_new 2021-12-02 02:13:54.010910463 +0100
@@ -3,8 +3,8 @@
<param name="url">https://github.com/GoogleCloudPlatform/osconfig</param>
<param name="scm">git</param>
<param name="exclude">.git</param>
- <param name="versionformat">20211021.00</param>
- <param name="revision">20211021.00</param>
+ <param name="versionformat">20211117.00</param>
+ <param name="revision">20211117.00</param>
<param name="changesgenerate">enable</param>
</service>
<service name="recompress" mode="disabled">
@@ -15,6 +15,6 @@
<param name="basename">osconfig</param>
</service>
<service name="go_modules" mode="disabled">
- <param name="archive">osconfig-20211021.00.tar.gz</param>
+ <param name="archive">osconfig-20211117.00.tar.gz</param>
</service>
</services>
++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.5i50Mr/_old 2021-12-02 02:13:54.034910389 +0100
+++ /var/tmp/diff_new_pack.5i50Mr/_new 2021-12-02 02:13:54.034910389 +0100
@@ -1,4 +1,4 @@
<servicedata>
<service name="tar_scm">
<param name="url">https://github.com/GoogleCloudPlatform/osconfig</param>
- <param name="changesrevision">9eaed5553a4f7946a2e05d898d8154b30f99c88a</param></service></servicedata>
\ No newline at end of file
+ <param name="changesrevision">90dc87cc9d87449df0278b0c7068aca18d08c003</param></service></servicedata>
\ No newline at end of file
++++++ osconfig-20211021.00.tar.gz -> osconfig-20211117.00.tar.gz ++++++
++++ 31203 lines of diff (skipped)
++++++ vendor.tar.gz ++++++
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package google-guest-agent for openSUSE:Factory checked in at 2021-12-01 20:47:16
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/google-guest-agent (Old)
and /work/SRC/openSUSE:Factory/.google-guest-agent.new.31177 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "google-guest-agent"
Wed Dec 1 20:47:16 2021 rev:9 rq:934874 version:20211116.00
Changes:
--------
--- /work/SRC/openSUSE:Factory/google-guest-agent/google-guest-agent.changes 2021-10-23 00:52:10.785153225 +0200
+++ /work/SRC/openSUSE:Factory/.google-guest-agent.new.31177/google-guest-agent.changes 2021-12-02 02:13:50.658920685 +0100
@@ -1,0 +2,17 @@
+Thu Nov 18 13:33:12 UTC 2021 - John Paul Adrian Glaubitz <adrian.glaubitz(a)suse.com>
+
+- Update to version 20211116.00 (bsc#1193257, bsc#1193258)
+ * dont duplicate logs (#146)
+ * Add WantedBy network dependencies to google-guest-agent service (#136)
+ * dont try dhcpv6 when not needed (#145)
+ * Integration tests: instance setup (#143)
+ * Integration test: test create and remove google user (#128)
+ * handle comm errors in script runner (#140)
+ * enforce script ordering (#138)
+ * enable ipv6 on secondary interfaces (#133)
+- from version 20211103.00
+ * Integration tests: instance setup (#143)
+- from version 20211027.00
+ * Integration test: test create and remove google user (#128)
+
+-------------------------------------------------------------------
Old:
----
guest-agent-20211019.00.tar.gz
New:
----
guest-agent-20211116.00.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ google-guest-agent.spec ++++++
--- /var/tmp/diff_new_pack.vaPcnv/_old 2021-12-02 02:13:51.270918818 +0100
+++ /var/tmp/diff_new_pack.vaPcnv/_new 2021-12-02 02:13:51.274918807 +0100
@@ -24,7 +24,7 @@
%global import_path %{provider_prefix}
Name: google-guest-agent
-Version: 20211019.00
+Version: 20211116.00
Release: 0
Summary: Google Cloud Guest Agent
License: Apache-2.0
++++++ _service ++++++
--- /var/tmp/diff_new_pack.vaPcnv/_old 2021-12-02 02:13:51.306918709 +0100
+++ /var/tmp/diff_new_pack.vaPcnv/_new 2021-12-02 02:13:51.306918709 +0100
@@ -3,8 +3,8 @@
<param name="url">https://github.com/GoogleCloudPlatform/guest-agent/</param>
<param name="scm">git</param>
<param name="exclude">.git</param>
- <param name="versionformat">20211019.00</param>
- <param name="revision">20211019.00</param>
+ <param name="versionformat">20211116.00</param>
+ <param name="revision">20211116.00</param>
<param name="changesgenerate">enable</param>
</service>
<service name="recompress" mode="disabled">
@@ -15,6 +15,6 @@
<param name="basename">guest-agent</param>
</service>
<service name="go_modules" mode="disabled">
- <param name="archive">guest-agent-20211019.00.tar.gz</param>
+ <param name="archive">guest-agent-20211116.00.tar.gz</param>
</service>
</services>
++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.vaPcnv/_old 2021-12-02 02:13:51.322918660 +0100
+++ /var/tmp/diff_new_pack.vaPcnv/_new 2021-12-02 02:13:51.322918660 +0100
@@ -1,4 +1,4 @@
<servicedata>
<service name="tar_scm">
<param name="url">https://github.com/GoogleCloudPlatform/guest-agent/</param>
- <param name="changesrevision">a1c10d174f1e9cb026585c6b141e1d4c8349e1ba</param></service></servicedata>
\ No newline at end of file
+ <param name="changesrevision">b0c8cbdfb9e74a4ef05e0ac09faf20e83eddbbcc</param></service></servicedata>
\ No newline at end of file
++++++ guest-agent-20211019.00.tar.gz -> guest-agent-20211116.00.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/guest-agent-20211019.00/google-guest-agent.service new/guest-agent-20211116.00/google-guest-agent.service
--- old/guest-agent-20211019.00/google-guest-agent.service 2021-10-20 00:09:13.000000000 +0200
+++ new/guest-agent-20211116.00/google-guest-agent.service 2021-11-11 20:48:43.000000000 +0100
@@ -17,8 +17,8 @@
ExecStart=/usr/bin/google_guest_agent
OOMScoreAdjust=-999
Restart=always
-StandardOutput=journal+console
[Install]
WantedBy=sshd.service
WantedBy=multi-user.target
+WantedBy=network.service networking.service NetworkManager.service systemd-networkd.service
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/guest-agent-20211019.00/google-shutdown-scripts.service new/guest-agent-20211116.00/google-shutdown-scripts.service
--- old/guest-agent-20211019.00/google-shutdown-scripts.service 2021-10-20 00:09:13.000000000 +0200
+++ new/guest-agent-20211116.00/google-shutdown-scripts.service 2021-11-11 20:48:43.000000000 +0100
@@ -11,7 +11,6 @@
ExecStop=/usr/bin/google_metadata_script_runner shutdown
TimeoutStopSec=0
KillMode=process
-StandardOutput=journal+console
[Install]
WantedBy=multi-user.target
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/guest-agent-20211019.00/google-startup-scripts.service new/guest-agent-20211116.00/google-startup-scripts.service
--- old/guest-agent-20211019.00/google-startup-scripts.service 2021-10-20 00:09:13.000000000 +0200
+++ new/guest-agent-20211116.00/google-startup-scripts.service 2021-11-11 20:48:43.000000000 +0100
@@ -9,7 +9,6 @@
ExecStart=/usr/bin/google_metadata_script_runner startup
#TimeoutStartSec is ignored for Type=oneshot service units.
KillMode=process
-StandardOutput=journal+console
[Install]
WantedBy=multi-user.target
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/guest-agent-20211019.00/google_guest_agent/accounts_test.go new/guest-agent-20211116.00/google_guest_agent/accounts_test.go
--- old/guest-agent-20211019.00/google_guest_agent/accounts_test.go 2021-10-20 00:09:13.000000000 +0200
+++ new/guest-agent-20211116.00/google_guest_agent/accounts_test.go 1970-01-01 01:00:00.000000000 +0100
@@ -1,247 +0,0 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package main
-
-import (
- "crypto/rand"
- "crypto/rsa"
- "crypto/sha1"
- "crypto/sha256"
- "crypto/sha512"
- "encoding/base64"
- "hash"
- "math/big"
- "reflect"
- "testing"
- "time"
- "unicode"
-
- "github.com/go-ini/ini"
-)
-
-func mkptr(b bool) *bool {
- ret := b
- return &ret
-}
-
-func TestExpired(t *testing.T) {
- var tests = []struct {
- sTime string
- e bool
- }{
- {time.Now().Add(5 * time.Minute).Format(time.RFC3339), false},
- {time.Now().Add(-5 * time.Minute).Format(time.RFC3339), true},
- {"some bad time", true},
- }
-
- for _, tt := range tests {
- k := windowsKey{ExpireOn: tt.sTime}
- if tt.e != k.expired() {
- t.Errorf("windowsKey.expired() with ExpiredOn %q should return %t", k.ExpireOn, tt.e)
- }
- }
-}
-
-func TestAccountsDisabled(t *testing.T) {
- var tests = []struct {
- name string
- data []byte
- md *metadata
- want bool
- }{
- {"not explicitly disabled", []byte(""), &metadata{}, false},
- {"enabled in cfg only", []byte("[accountManager]\ndisable=false"), &metadata{}, false},
- {"disabled in cfg only", []byte("[accountManager]\ndisable=true"), &metadata{}, true},
- {"disabled in cfg, enabled in instance metadata", []byte("[accountManager]\ndisable=true"), &metadata{Instance: instance{Attributes: attributes{DisableAccountManager: mkptr(false)}}}, true},
- {"enabled in cfg, disabled in instance metadata", []byte("[accountManager]\ndisable=false"), &metadata{Instance: instance{Attributes: attributes{DisableAccountManager: mkptr(true)}}}, false},
- {"enabled in instance metadata only", []byte(""), &metadata{Instance: instance{Attributes: attributes{DisableAccountManager: mkptr(false)}}}, false},
- {"enabled in project metadata only", []byte(""), &metadata{Project: project{Attributes: attributes{DisableAccountManager: mkptr(false)}}}, false},
- {"disabled in instance metadata only", []byte(""), &metadata{Instance: instance{Attributes: attributes{DisableAccountManager: mkptr(true)}}}, true},
- {"enabled in instance metadata, disabled in project metadata", []byte(""), &metadata{Instance: instance{Attributes: attributes{DisableAccountManager: mkptr(false)}}, Project: project{Attributes: attributes{DisableAccountManager: mkptr(true)}}}, false},
- {"disabled in project metadata only", []byte(""), &metadata{Project: project{Attributes: attributes{DisableAccountManager: mkptr(true)}}}, true},
- }
-
- for _, tt := range tests {
- cfg, err := ini.InsensitiveLoad(tt.data)
- if err != nil {
- t.Errorf("test case %q: error parsing config: %v", tt.name, err)
- continue
- }
- if cfg == nil {
- cfg = &ini.File{}
- }
- newMetadata = tt.md
- config = cfg
- got := (&winAccountsMgr{}).disabled("windows")
- if got != tt.want {
- t.Errorf("test case %q, accounts.disabled() got: %t, want: %t", tt.name, got, tt.want)
- }
- }
- got := (&winAccountsMgr{}).disabled("linux")
- if got != true {
- t.Errorf("winAccountsMgr.disabled(\"linux\") got: %t, want: true", got)
- }
-}
-
-// rename this with leading disabled because this is a resource
-// intensive test. this test takes approx. 141 seconds to complete, next
-// longest test is 0.43 seconds.
-func disabledTestNewPwd(t *testing.T) {
- minPasswordLength := 15
- maxPasswordLength := 255
- var tests = []struct {
- name string
- passwordLength int
- wantPasswordLength int
- }{
- {"0 characters, default value", 0, minPasswordLength},
- {"5 characters, below min", 5, minPasswordLength},
- {"15 characters", 5, minPasswordLength},
- {"30 characters", 30, 30},
- {"127 characters", 127, 127},
- {"254 characters", 254, 254},
- {"256 characters", 256, maxPasswordLength},
- }
-
- for _, tt := range tests {
- for i := 0; i < 100000; i++ {
- pwd, err := newPwd(tt.passwordLength)
- if err != nil {
- t.Fatal(err)
- }
- if len(pwd) != tt.wantPasswordLength {
- t.Errorf("Password is not %d characters: len(%s)=%d", tt.wantPasswordLength, pwd, len(pwd))
- }
- var l, u, n, s int
- for _, r := range pwd {
- switch {
- case unicode.IsLower(r):
- l = 1
- case unicode.IsUpper(r):
- u = 1
- case unicode.IsDigit(r):
- n = 1
- case unicode.IsPunct(r) || unicode.IsSymbol(r):
- s = 1
- }
- }
- if l+u+n+s < 3 {
- t.Errorf("Password does not have at least one character from 3 categories: '%v'", pwd)
- }
- }
- }
-}
-
-func TestCreatecredsJSON(t *testing.T) {
- pwd := "password"
- prv, err := rsa.GenerateKey(rand.Reader, 2048)
- if err != nil {
- t.Fatalf("error generating key: %v", err)
- }
- k := windowsKey{
- Email: "email",
- ExpireOn: "expire",
- Exponent: base64.StdEncoding.EncodeToString(new(big.Int).SetInt64(int64(prv.PublicKey.E)).Bytes()),
- Modulus: base64.StdEncoding.EncodeToString(prv.PublicKey.N.Bytes()),
- UserName: "username",
- }
- for name, hashFunc := range map[string]hash.Hash{"": sha1.New(), "sha1": sha1.New(), "sha256": sha256.New(), "sha512": sha512.New()} {
- k.HashFunction = name
- c, err := createcredsJSON(k, pwd)
- if err != nil {
- t.Fatalf("error running createcredsJSON: %v", err)
- }
- if k.HashFunction == "" {
- k.HashFunction = "sha1"
- }
-
- bPwd, err := base64.StdEncoding.DecodeString(c.EncryptedPassword)
- if err != nil {
- t.Fatalf("error base64 decoding encoded pwd: %v", err)
- }
- decPwd, err := rsa.DecryptOAEP(hashFunc, rand.Reader, prv, bPwd, nil)
- if err != nil {
- t.Fatalf("error decrypting password: %v", err)
- }
- if pwd != string(decPwd) {
- t.Errorf("decrypted password does not match expected for hash func %q, got: %s, want: %s", name, string(decPwd), pwd)
- }
- if k.UserName != c.UserName {
- t.Errorf("returned credsJSON UserName field unexpected, got: %s, want: %s", c.UserName, k.UserName)
- }
- if k.HashFunction != c.HashFunction {
- t.Errorf("returned credsJSON HashFunction field unexpected, got: %s, want: %s", c.HashFunction, k.HashFunction)
- }
- if !c.PasswordFound {
- t.Error("returned credsJSON PasswordFound field is not true")
- }
- }
-}
-
-func TestCompareAccounts(t *testing.T) {
- var tests = []struct {
- newKeys windowsKeys
- oldStrKeys []string
- wantAdd windowsKeys
- }{
- // These should return toAdd:
- // In MD, not Reg
- {windowsKeys{{UserName: "foo"}}, nil, windowsKeys{{UserName: "foo"}}},
- {windowsKeys{{UserName: "foo"}}, []string{`{"UserName":"bar"}`}, windowsKeys{{UserName: "foo"}}},
-
- // These should return nothing:
- // In Reg and MD
- {windowsKeys{{UserName: "foo"}}, []string{`{"UserName":"foo"}`}, nil},
- // In Reg, not MD
- {nil, []string{`{UserName":"foo"}`}, nil},
- }
-
- for _, tt := range tests {
- toAdd := compareAccounts(tt.newKeys, tt.oldStrKeys)
- if !reflect.DeepEqual(tt.wantAdd, toAdd) {
- t.Errorf("toAdd does not match expected: newKeys: %v, oldStrKeys: %q, got: %v, want: %v", tt.newKeys, tt.oldStrKeys, toAdd, tt.wantAdd)
- }
- }
-}
-
-func TestRemoveExpiredKeys(t *testing.T) {
- var tests = []struct {
- key string
- valid bool
- }{
- {`user:ssh-rsa [KEY] google-ssh {"userName":"user(a)email.com", "expireOn":"2028-11-08T19:30:47+0000"}`, true},
- {`user:ssh-rsa [KEY] google-ssh {"userName":"user(a)email.com", "expireOn":"2028-11-08T19:30:47+0700"}`, true},
- {`user:ssh-rsa [KEY] google-ssh {"userName":"user(a)email.com", "expireOn":"2028-11-08T19:30:47+0700", "futureField": "UNUSED_FIELDS_IGNORED"}`, true},
- {`user:ssh-rsa [KEY] google-ssh {"userName":"user(a)email.com", "expireOn":"2018-11-08T19:30:46+0000"}`, false},
- {`user:ssh-rsa [KEY] google-ssh {"userName":"user(a)email.com", "expireOn":"2018-11-08T19:30:46+0700"}`, false},
- {`user:ssh-rsa [KEY] google-ssh {"userName":"user(a)email.com", "expireOn":"INVALID_TIMESTAMP"}`, false},
- {`user:ssh-rsa [KEY] google-ssh`, false},
- {`user:ssh-rsa [KEY] user`, true},
- {`user:ssh-rsa [KEY]`, true},
- {},
- }
-
- for _, tt := range tests {
- ret := removeExpiredKeys([]string{tt.key})
- if tt.valid {
- if len(ret) == 0 || ret[0] != tt.key {
- t.Errorf("valid key was removed: %q", tt.key)
- }
- }
- if !tt.valid && len(ret) == 1 {
- t.Errorf("invalid key was kept: %q", tt.key)
- }
- }
-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/guest-agent-20211019.00/google_guest_agent/addresses.go new/guest-agent-20211116.00/google_guest_agent/addresses.go
--- old/guest-agent-20211019.00/google_guest_agent/addresses.go 2021-10-20 00:09:13.000000000 +0200
+++ new/guest-agent-20211116.00/google_guest_agent/addresses.go 2021-11-11 20:48:43.000000000 +0100
@@ -431,7 +431,7 @@
func configureIPv6() error {
var newNi, oldNi networkInterfaces
if len(newMetadata.Instance.NetworkInterfaces) == 0 {
- return fmt.Errorf("No interfaces found in metadata")
+ return fmt.Errorf("no interfaces found in metadata")
}
newNi = newMetadata.Instance.NetworkInterfaces[0]
if len(oldMetadata.Instance.NetworkInterfaces) > 0 {
@@ -543,6 +543,10 @@
return err
}
+ if len(googleIpv6Interfaces) == 0 {
+ return nil
+ }
+
var dhclientArgs6 []string
dhclientArgs6 = append([]string{"-6"}, googleIpv6Interfaces...)
return runCmd(exec.Command("dhclient", dhclientArgs6...))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/guest-agent-20211019.00/google_guest_agent/instance_setup_integ_test.go new/guest-agent-20211116.00/google_guest_agent/instance_setup_integ_test.go
--- old/guest-agent-20211019.00/google_guest_agent/instance_setup_integ_test.go 1970-01-01 01:00:00.000000000 +0100
+++ new/guest-agent-20211116.00/google_guest_agent/instance_setup_integ_test.go 2021-11-11 20:48:43.000000000 +0100
@@ -0,0 +1,235 @@
+// Copyright 2021 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// +build integration
+
+package main
+
+import (
+ "context"
+ "io/ioutil"
+ "os"
+ "strings"
+ "testing"
+)
+
+const (
+ botoCfg = "/etc/boto.cfg"
+)
+
+// TestInstanceSetupSSHKeys validates SSH keys are generated on first boot and not changed afterward.
+func TestInstanceSetupSSHKeys(t *testing.T) {
+ cfg, err := parseConfig("") // get empty config
+ if err != nil {
+ t.Fatal("failed to init config object")
+ }
+ config = cfg // set the global
+ defer func() { config = nil }() // unset at end of test
+
+ tempdir, err := ioutil.TempDir("/tmp", "test_instance_setup")
+ if err != nil {
+ t.Fatal("failed to create working dir")
+ }
+
+ // Configure a non-standard instance ID dir for us to play with.
+ config.Section("Instance").Key("instance_id_dir").SetValue(tempdir)
+ config.Section("InstanceSetup").Key("host_key_dir").SetValue(tempdir)
+
+ ctx := context.Background()
+ agentInit(ctx)
+
+ if _, err := os.Stat(tempdir + "/google_instance_id"); err != nil {
+ t.Fatal("instance ID File was not created by agentInit")
+ }
+
+ dir, err := os.Open(tempdir)
+ if err != nil {
+ t.Fatal("failed to open working dir")
+ }
+ defer dir.Close()
+
+ files, err := dir.Readdirnames(0)
+ if err != nil {
+ t.Fatal("failed to read files")
+ }
+
+ var keys []string
+ for _, file := range files {
+ if strings.HasPrefix(file, "ssh_host_") {
+ keys = append(keys, file)
+ }
+ }
+
+ if len(keys) == 0 {
+ t.Fatal("instance setup didn't create SSH host keys")
+ }
+
+ // Remove one key file and run again to confirm SSH keys have not
+ // changed because the instance ID file has not changed.
+ if err := os.Remove(tempdir + "/" + keys[0]); err != nil {
+ t.Fatal("failed to remove key file")
+ }
+
+ agentInit(ctx)
+
+ if _, err := dir.Seek(0, 0); err != nil {
+ t.Fatal("failed to rewind dir for second check")
+ }
+ files2, err := dir.Readdirnames(0)
+ if err != nil {
+ t.Fatal("failed to read files")
+ }
+
+ var keys2 []string
+ for _, file := range files2 {
+ if strings.HasPrefix(file, "ssh_host_") {
+ keys2 = append(keys2, file)
+ }
+ if file == keys[0] {
+ t.Fatalf("agentInit recreated key %s", file)
+ }
+ }
+
+ if len(keys) == len(keys2) {
+ t.Fatal("agentInit recreated SSH host keys")
+ }
+}
+
+// TestInstanceSetupSSHKeysDisabled validates the config option to disable host
+// key generation is respected.
+func TestInstanceSetupSSHKeysDisabled(t *testing.T) {
+ cfg, err := parseConfig("") // get empty config
+ if err != nil {
+ t.Fatal("failed to init config object")
+ }
+ config = cfg // set the global
+ defer func() { config = nil }() // unset at end of test
+
+ tempdir, err := ioutil.TempDir("/tmp", "test_instance_setup")
+ if err != nil {
+ t.Fatal("failed to create working dir")
+ }
+
+ // Configure a non-standard instance ID dir for us to play with.
+ config.Section("Instance").Key("instance_id_dir").SetValue(tempdir)
+ config.Section("InstanceSetup").Key("host_key_dir").SetValue(tempdir)
+
+ // Disable SSH host key generation.
+ config.Section("InstanceSetup").Key("set_host_keys").SetValue("false")
+
+ ctx := context.Background()
+ agentInit(ctx)
+
+ dir, err := os.Open(tempdir)
+ if err != nil {
+ t.Fatal("failed to open working dir")
+ }
+ defer dir.Close()
+
+ files, err := dir.Readdirnames(0)
+ if err != nil {
+ t.Fatal("failed to read files")
+ }
+
+ for _, file := range files {
+ if strings.HasPrefix(file, "ssh_host_") {
+ t.Fatal("agentInit created SSH host keys when disabled")
+ }
+ }
+}
+
+func TestInstanceSetupBotoConfig(t *testing.T) {
+ cfg, err := parseConfig("") // get empty config
+ if err != nil {
+ t.Fatal("failed to init config object")
+ }
+ config = cfg // set the global
+ defer func() { config = nil }() // unset at end of test
+
+ tempdir, err := ioutil.TempDir("/tmp", "test_instance_setup")
+ if err != nil {
+ t.Fatal("failed to create working dir")
+ }
+
+ // Configure a non-standard instance ID dir for us to play with.
+ config.Section("Instance").Key("instance_id_dir").SetValue(tempdir)
+ config.Section("InstanceSetup").Key("host_key_dir").SetValue(tempdir)
+
+ ctx := context.Background()
+
+ if err := os.Rename(botoCfg, botoCfg+".bak"); err != nil {
+ t.Fatalf("failed to move boto config: %v", err)
+ }
+ defer func() {
+ // Restore file at end of test.
+ if err := os.Rename(botoCfg+".bak", botoCfg); err != nil {
+ t.Fatalf("failed to restore boto config: %v", err)
+ }
+ }()
+
+ // Test it is created by default on first boot
+ agentInit(ctx)
+ if _, err := os.Stat(botoCfg); err != nil {
+ t.Fatal("boto config was not created on first boot")
+ }
+
+ // Test it is not recreated on subsequent invocations
+ if err := os.Remove(botoCfg); err != nil {
+ t.Fatal("failed to remove boto config")
+ }
+ agentInit(ctx)
+ if _, err := os.Stat(botoCfg); err == nil || !os.IsNotExist(err) {
+ // If we didn't get an error, or if we got some other kind of error
+ t.Fatal("boto config was recreated after first boot")
+ }
+}
+
+func TestInstanceSetupBotoConfigDisabled(t *testing.T) {
+ cfg, err := parseConfig("") // get empty config
+ if err != nil {
+ t.Fatal("failed to init config object")
+ }
+ config = cfg // set the global
+ defer func() { config = nil }() // unset at end of test
+
+ tempdir, err := ioutil.TempDir("/tmp", "test_instance_setup")
+ if err != nil {
+ t.Fatal("failed to create working dir")
+ }
+
+ // Configure a non-standard instance ID dir for us to play with.
+ config.Section("Instance").Key("instance_id_dir").SetValue(tempdir)
+ config.Section("InstanceSetup").Key("host_key_dir").SetValue(tempdir)
+
+ ctx := context.Background()
+
+ if err := os.Rename(botoCfg, botoCfg+".bak"); err != nil {
+ t.Fatalf("failed to move boto config: %v", err)
+ }
+ defer func() {
+ // Restore file at end of test.
+ if err := os.Rename(botoCfg+".bak", botoCfg); err != nil {
+ t.Fatalf("failed to restore boto config: %v", err)
+ }
+ }()
+
+ // Test it is not created if disabled in config.
+ config.Section("InstanceSetup").Key("set_boto_config").SetValue("false")
+ agentInit(ctx)
+
+ if _, err := os.Stat(botoCfg); err == nil || !os.IsNotExist(err) {
+ // If we didn't get an error, or if we got some other kind of error
+ t.Fatal("boto config was created when disabled in config")
+ }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/guest-agent-20211019.00/google_guest_agent/non_windows_accounts.go new/guest-agent-20211116.00/google_guest_agent/non_windows_accounts.go
--- old/guest-agent-20211019.00/google_guest_agent/non_windows_accounts.go 2021-10-20 00:09:13.000000000 +0200
+++ new/guest-agent-20211116.00/google_guest_agent/non_windows_accounts.go 2021-11-11 20:48:43.000000000 +0100
@@ -390,7 +390,6 @@
}
gpasswddel := config.Section("Accounts").Key("gpasswd_remove_cmd").MustString("gpasswd -d {user} {group}")
return runCmd(createUserGroupCmd(gpasswddel, user, "google-sudoers"))
-
}
// createSudoersFile creates the google_sudoers configuration file if it does
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/guest-agent-20211019.00/google_guest_agent/non_windows_accounts_integ_test.go new/guest-agent-20211116.00/google_guest_agent/non_windows_accounts_integ_test.go
--- old/guest-agent-20211019.00/google_guest_agent/non_windows_accounts_integ_test.go 2021-10-20 00:09:13.000000000 +0200
+++ new/guest-agent-20211116.00/google_guest_agent/non_windows_accounts_integ_test.go 2021-11-11 20:48:43.000000000 +0100
@@ -3,10 +3,58 @@
package main
import (
+ "fmt"
+ "os"
"os/exec"
+ "strings"
"testing"
)
+const (
+ testUser = "integration-test-user"
+ defaultgroupstring = "adm,dip,docker,lxd,plugdev,video,google-sudoers"
+)
+
+func TestCreateAndRemoveGoogleUser(t *testing.T) {
+ if exist, err := userExists(testUser); err != nil && exist {
+ t.Fatalf("test user should not exist")
+ }
+ if err := createGoogleUser(testUser); err != nil {
+ t.Errorf("createGoogleUser failed creating test user")
+ }
+ if exist, err := userExists(testUser); exist != true || err != nil {
+ t.Errorf("test user should exist")
+ }
+ cmd := exec.Command("groups", testUser)
+ ret := runCmdOutput(cmd)
+ if ret.ExitCode() != 0 {
+ t.Errorf("failed looking up groups for user: stdout:%s stderr:%s", ret.Stdout(), ret.Stderr())
+ }
+ groups := strings.Split(strings.TrimSpace(strings.Split(ret.Stdout(), ":")[1]), " ")
+ expectedGroupString := config.Section("Accounts").Key("groups").MustString(defaultgroupstring)
+ expectedGroups := strings.Split(expectedGroupString, ",")
+ for _, group := range groups {
+ if !contains(group, expectedGroups) {
+ t.Errorf("test user has been added to an unexpected group %s", group)
+ }
+ }
+ if _, err := os.Stat(fmt.Sprintf("/home/%s", testUser)); err != nil {
+ t.Errorf("test user home directory does not exist")
+ }
+ if err := createGoogleUser(testUser); err == nil {
+ t.Errorf("createGoogleUser did not return error when creating user that already exists")
+ }
+ if err := removeGoogleUser(testUser); err != nil {
+ t.Errorf("removeGoogleUser did not remove user")
+ }
+ if exist, err := userExists(testUser); err != nil && exist == true {
+ t.Errorf("test user should not exist")
+ }
+ if err := removeGoogleUser(testUser); err == nil {
+ t.Errorf("removeGoogleUser did not return error when removing user that doesn't exist")
+ }
+}
+
func TestGroupaddDuplicates(t *testing.T) {
cmd := exec.Command("groupadd", "integ-test-group")
ret := runCmdOutput(cmd)
@@ -19,3 +67,12 @@
t.Fatalf("got wrong exit code running \"groupadd integ-test-group\", expected 9 got %v\n", ret.ExitCode())
}
}
+
+func contains(target string, expected []string) bool {
+ for _, e := range expected {
+ if e == target {
+ return true
+ }
+ }
+ return false
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/guest-agent-20211019.00/google_guest_agent/windows_accounts_test.go new/guest-agent-20211116.00/google_guest_agent/windows_accounts_test.go
--- old/guest-agent-20211019.00/google_guest_agent/windows_accounts_test.go 1970-01-01 01:00:00.000000000 +0100
+++ new/guest-agent-20211116.00/google_guest_agent/windows_accounts_test.go 2021-11-11 20:48:43.000000000 +0100
@@ -0,0 +1,247 @@
+// Copyright 2017 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package main
+
+import (
+ "crypto/rand"
+ "crypto/rsa"
+ "crypto/sha1"
+ "crypto/sha256"
+ "crypto/sha512"
+ "encoding/base64"
+ "hash"
+ "math/big"
+ "reflect"
+ "testing"
+ "time"
+ "unicode"
+
+ "github.com/go-ini/ini"
+)
+
+func mkptr(b bool) *bool {
+ ret := b
+ return &ret
+}
+
+func TestExpired(t *testing.T) {
+ var tests = []struct {
+ sTime string
+ e bool
+ }{
+ {time.Now().Add(5 * time.Minute).Format(time.RFC3339), false},
+ {time.Now().Add(-5 * time.Minute).Format(time.RFC3339), true},
+ {"some bad time", true},
+ }
+
+ for _, tt := range tests {
+ k := windowsKey{ExpireOn: tt.sTime}
+ if tt.e != k.expired() {
+ t.Errorf("windowsKey.expired() with ExpiredOn %q should return %t", k.ExpireOn, tt.e)
+ }
+ }
+}
+
+func TestAccountsDisabled(t *testing.T) {
+ var tests = []struct {
+ name string
+ data []byte
+ md *metadata
+ want bool
+ }{
+ {"not explicitly disabled", []byte(""), &metadata{}, false},
+ {"enabled in cfg only", []byte("[accountManager]\ndisable=false"), &metadata{}, false},
+ {"disabled in cfg only", []byte("[accountManager]\ndisable=true"), &metadata{}, true},
+ {"disabled in cfg, enabled in instance metadata", []byte("[accountManager]\ndisable=true"), &metadata{Instance: instance{Attributes: attributes{DisableAccountManager: mkptr(false)}}}, true},
+ {"enabled in cfg, disabled in instance metadata", []byte("[accountManager]\ndisable=false"), &metadata{Instance: instance{Attributes: attributes{DisableAccountManager: mkptr(true)}}}, false},
+ {"enabled in instance metadata only", []byte(""), &metadata{Instance: instance{Attributes: attributes{DisableAccountManager: mkptr(false)}}}, false},
+ {"enabled in project metadata only", []byte(""), &metadata{Project: project{Attributes: attributes{DisableAccountManager: mkptr(false)}}}, false},
+ {"disabled in instance metadata only", []byte(""), &metadata{Instance: instance{Attributes: attributes{DisableAccountManager: mkptr(true)}}}, true},
+ {"enabled in instance metadata, disabled in project metadata", []byte(""), &metadata{Instance: instance{Attributes: attributes{DisableAccountManager: mkptr(false)}}, Project: project{Attributes: attributes{DisableAccountManager: mkptr(true)}}}, false},
+ {"disabled in project metadata only", []byte(""), &metadata{Project: project{Attributes: attributes{DisableAccountManager: mkptr(true)}}}, true},
+ }
+
+ for _, tt := range tests {
+ cfg, err := ini.InsensitiveLoad(tt.data)
+ if err != nil {
+ t.Errorf("test case %q: error parsing config: %v", tt.name, err)
+ continue
+ }
+ if cfg == nil {
+ cfg = &ini.File{}
+ }
+ newMetadata = tt.md
+ config = cfg
+ got := (&winAccountsMgr{}).disabled("windows")
+ if got != tt.want {
+ t.Errorf("test case %q, accounts.disabled() got: %t, want: %t", tt.name, got, tt.want)
+ }
+ }
+ got := (&winAccountsMgr{}).disabled("linux")
+ if got != true {
+ t.Errorf("winAccountsMgr.disabled(\"linux\") got: %t, want: true", got)
+ }
+}
+
+// rename this with leading disabled because this is a resource
+// intensive test. this test takes approx. 141 seconds to complete, next
+// longest test is 0.43 seconds.
+func disabledTestNewPwd(t *testing.T) {
+ minPasswordLength := 15
+ maxPasswordLength := 255
+ var tests = []struct {
+ name string
+ passwordLength int
+ wantPasswordLength int
+ }{
+ {"0 characters, default value", 0, minPasswordLength},
+ {"5 characters, below min", 5, minPasswordLength},
+ {"15 characters", 5, minPasswordLength},
+ {"30 characters", 30, 30},
+ {"127 characters", 127, 127},
+ {"254 characters", 254, 254},
+ {"256 characters", 256, maxPasswordLength},
+ }
+
+ for _, tt := range tests {
+ for i := 0; i < 100000; i++ {
+ pwd, err := newPwd(tt.passwordLength)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if len(pwd) != tt.wantPasswordLength {
+ t.Errorf("Password is not %d characters: len(%s)=%d", tt.wantPasswordLength, pwd, len(pwd))
+ }
+ var l, u, n, s int
+ for _, r := range pwd {
+ switch {
+ case unicode.IsLower(r):
+ l = 1
+ case unicode.IsUpper(r):
+ u = 1
+ case unicode.IsDigit(r):
+ n = 1
+ case unicode.IsPunct(r) || unicode.IsSymbol(r):
+ s = 1
+ }
+ }
+ if l+u+n+s < 3 {
+ t.Errorf("Password does not have at least one character from 3 categories: '%v'", pwd)
+ }
+ }
+ }
+}
+
+func TestCreatecredsJSON(t *testing.T) {
+ pwd := "password"
+ prv, err := rsa.GenerateKey(rand.Reader, 2048)
+ if err != nil {
+ t.Fatalf("error generating key: %v", err)
+ }
+ k := windowsKey{
+ Email: "email",
+ ExpireOn: "expire",
+ Exponent: base64.StdEncoding.EncodeToString(new(big.Int).SetInt64(int64(prv.PublicKey.E)).Bytes()),
+ Modulus: base64.StdEncoding.EncodeToString(prv.PublicKey.N.Bytes()),
+ UserName: "username",
+ }
+ for name, hashFunc := range map[string]hash.Hash{"": sha1.New(), "sha1": sha1.New(), "sha256": sha256.New(), "sha512": sha512.New()} {
+ k.HashFunction = name
+ c, err := createcredsJSON(k, pwd)
+ if err != nil {
+ t.Fatalf("error running createcredsJSON: %v", err)
+ }
+ if k.HashFunction == "" {
+ k.HashFunction = "sha1"
+ }
+
+ bPwd, err := base64.StdEncoding.DecodeString(c.EncryptedPassword)
+ if err != nil {
+ t.Fatalf("error base64 decoding encoded pwd: %v", err)
+ }
+ decPwd, err := rsa.DecryptOAEP(hashFunc, rand.Reader, prv, bPwd, nil)
+ if err != nil {
+ t.Fatalf("error decrypting password: %v", err)
+ }
+ if pwd != string(decPwd) {
+ t.Errorf("decrypted password does not match expected for hash func %q, got: %s, want: %s", name, string(decPwd), pwd)
+ }
+ if k.UserName != c.UserName {
+ t.Errorf("returned credsJSON UserName field unexpected, got: %s, want: %s", c.UserName, k.UserName)
+ }
+ if k.HashFunction != c.HashFunction {
+ t.Errorf("returned credsJSON HashFunction field unexpected, got: %s, want: %s", c.HashFunction, k.HashFunction)
+ }
+ if !c.PasswordFound {
+ t.Error("returned credsJSON PasswordFound field is not true")
+ }
+ }
+}
+
+func TestCompareAccounts(t *testing.T) {
+ var tests = []struct {
+ newKeys windowsKeys
+ oldStrKeys []string
+ wantAdd windowsKeys
+ }{
+ // These should return toAdd:
+ // In MD, not Reg
+ {windowsKeys{{UserName: "foo"}}, nil, windowsKeys{{UserName: "foo"}}},
+ {windowsKeys{{UserName: "foo"}}, []string{`{"UserName":"bar"}`}, windowsKeys{{UserName: "foo"}}},
+
+ // These should return nothing:
+ // In Reg and MD
+ {windowsKeys{{UserName: "foo"}}, []string{`{"UserName":"foo"}`}, nil},
+ // In Reg, not MD
+ {nil, []string{`{UserName":"foo"}`}, nil},
+ }
+
+ for _, tt := range tests {
+ toAdd := compareAccounts(tt.newKeys, tt.oldStrKeys)
+ if !reflect.DeepEqual(tt.wantAdd, toAdd) {
+ t.Errorf("toAdd does not match expected: newKeys: %v, oldStrKeys: %q, got: %v, want: %v", tt.newKeys, tt.oldStrKeys, toAdd, tt.wantAdd)
+ }
+ }
+}
+
+func TestRemoveExpiredKeys(t *testing.T) {
+ var tests = []struct {
+ key string
+ valid bool
+ }{
+ {`user:ssh-rsa [KEY] google-ssh {"userName":"user(a)email.com", "expireOn":"2028-11-08T19:30:47+0000"}`, true},
+ {`user:ssh-rsa [KEY] google-ssh {"userName":"user(a)email.com", "expireOn":"2028-11-08T19:30:47+0700"}`, true},
+ {`user:ssh-rsa [KEY] google-ssh {"userName":"user(a)email.com", "expireOn":"2028-11-08T19:30:47+0700", "futureField": "UNUSED_FIELDS_IGNORED"}`, true},
+ {`user:ssh-rsa [KEY] google-ssh {"userName":"user(a)email.com", "expireOn":"2018-11-08T19:30:46+0000"}`, false},
+ {`user:ssh-rsa [KEY] google-ssh {"userName":"user(a)email.com", "expireOn":"2018-11-08T19:30:46+0700"}`, false},
+ {`user:ssh-rsa [KEY] google-ssh {"userName":"user(a)email.com", "expireOn":"INVALID_TIMESTAMP"}`, false},
+ {`user:ssh-rsa [KEY] google-ssh`, false},
+ {`user:ssh-rsa [KEY] user`, true},
+ {`user:ssh-rsa [KEY]`, true},
+ {},
+ }
+
+ for _, tt := range tests {
+ ret := removeExpiredKeys([]string{tt.key})
+ if tt.valid {
+ if len(ret) == 0 || ret[0] != tt.key {
+ t.Errorf("valid key was removed: %q", tt.key)
+ }
+ }
+ if !tt.valid && len(ret) == 1 {
+ t.Errorf("invalid key was kept: %q", tt.key)
+ }
+ }
+}
++++++ vendor.tar.gz ++++++
1
0
02 Dec '21
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package golang-github-prometheus-node_exporter for openSUSE:Factory checked in at 2021-12-01 20:47:13
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/golang-github-prometheus-node_exporter (Old)
and /work/SRC/openSUSE:Factory/.golang-github-prometheus-node_exporter.new.31177 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "golang-github-prometheus-node_exporter"
Wed Dec 1 20:47:13 2021 rev:10 rq:934863 version:1.3.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/golang-github-prometheus-node_exporter/golang-github-prometheus-node_exporter.changes 2021-10-12 21:50:43.975990219 +0200
+++ /work/SRC/openSUSE:Factory/.golang-github-prometheus-node_exporter.new.31177/golang-github-prometheus-node_exporter.changes 2021-12-02 02:13:47.070931628 +0100
@@ -1,0 +2,29 @@
+Thu Nov 18 21:06:01 UTC 2021 - Michael Str��der <michael(a)stroeder.com>
+
+- Update to 1.3.0
+ * [CHANGE] Add path label to rapl collector #2146
+ * [CHANGE] Exclude filesystems under /run/credentials #2157
+ * [CHANGE] Add TCPTimeouts to netstat default filter #2189
+ * [FEATURE] Add lnstat collector for metrics from /proc/net/stat/ #1771
+ * [FEATURE] Add darwin powersupply collector #1777
+ * [FEATURE] Add support for monitoring GPUs on Linux #1998
+ * [FEATURE] Add Darwin thermal collector #2032
+ * [FEATURE] Add os release collector #2094
+ * [FEATURE] Add netdev.address-info collector #2105
+ * [FEATURE] Add clocksource metrics to time collector #2197
+ * [ENHANCEMENT] Support glob textfile collector directories #1985
+ * [ENHANCEMENT] ethtool: Expose node_ethtool_info metric #2080
+ * [ENHANCEMENT] Use include/exclude flags for ethtool filtering #2165
+ * [ENHANCEMENT] Add flag to disable guest CPU metrics #2123
+ * [ENHANCEMENT] Add DMI collector #2131
+ * [ENHANCEMENT] Add threads metrics to processes collector #2164
+ * [ENHANCMMENT] Reduce timer GC delays in the Linux filesystem collector #2169
+ * [ENHANCMMENT] Add TCPTimeouts to netstat default filter #2189
+ * [ENHANCMMENT] Use SysctlTimeval for boottime collector on BSD #2208
+ * [BUGFIX] ethtool: Sanitize metric names #2093
+ * [BUGFIX] Fix ethtool collector for multiple interfaces #2126
+ * [BUGFIX] Fix possible panic on macOS #2133
+ * [BUGFIX] Collect flag_info and bug_info only for one core #2156
+ * [BUGFIX] Prevent duplicate ethtool metric names #2187
+
+-------------------------------------------------------------------
Old:
----
node_exporter-1.2.2.obscpio
node_exporter-1.2.2.tar.gz
New:
----
node_exporter-1.3.0.obscpio
node_exporter-1.3.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ golang-github-prometheus-node_exporter.spec ++++++
--- /var/tmp/diff_new_pack.lVpWZ5/_old 2021-12-02 02:13:47.830929310 +0100
+++ /var/tmp/diff_new_pack.lVpWZ5/_new 2021-12-02 02:13:47.830929310 +0100
@@ -20,7 +20,7 @@
%{go_nostrip}
Name: golang-github-prometheus-node_exporter
-Version: 1.2.2
+Version: 1.3.0
Release: 0
Summary: Prometheus exporter for machine metrics
License: Apache-2.0
++++++ _service ++++++
--- /var/tmp/diff_new_pack.lVpWZ5/_old 2021-12-02 02:13:47.862929213 +0100
+++ /var/tmp/diff_new_pack.lVpWZ5/_new 2021-12-02 02:13:47.866929200 +0100
@@ -4,7 +4,7 @@
<param name="scm">git</param>
<param name="exclude">.git</param>
<param name="versionformat">@PARENT_TAG@</param>
- <param name="revision">v1.2.2</param>
+ <param name="revision">v1.3.0</param>
<param name="versionrewrite-pattern">v(.*)</param>
</service>
<service name="tar" mode="buildtime"/>
@@ -16,6 +16,6 @@
<param name="basename">node_exporter</param>
</service>
<service name="go_modules" mode="disabled">
- <param name="archive">node_exporter-1.2.2.tar.gz</param>
+ <param name="archive">node_exporter-1.3.0.tar.gz</param>
</service>
</services>
++++++ node_exporter-1.2.2.obscpio -> node_exporter-1.3.0.obscpio ++++++
++++ 9623 lines of diff (skipped)
++++++ node_exporter-1.2.2.tar.gz -> node_exporter-1.3.0.tar.gz ++++++
++++ 9623 lines of diff (skipped)
++++++ node_exporter.obsinfo ++++++
--- /var/tmp/diff_new_pack.lVpWZ5/_old 2021-12-02 02:13:48.198928188 +0100
+++ /var/tmp/diff_new_pack.lVpWZ5/_new 2021-12-02 02:13:48.202928175 +0100
@@ -1,5 +1,5 @@
name: node_exporter
-version: 1.2.2
-mtime: 1628257321
-commit: 26645363b486e12be40af7ce4fc91e731a33104e
+version: 1.3.0
+mtime: 1637248270
+commit: c65f870ef90a4088210af0319498b832360c3366
++++++ vendor.tar.gz ++++++
++++ 24622 lines of diff (skipped)
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package gnutls for openSUSE:Factory checked in at 2021-12-01 20:46:35
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gnutls (Old)
and /work/SRC/openSUSE:Factory/.gnutls.new.31177 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gnutls"
Wed Dec 1 20:46:35 2021 rev:132 rq:934095 version:3.7.2
Changes:
--------
--- /work/SRC/openSUSE:Factory/gnutls/gnutls.changes 2021-06-05 23:31:26.640428775 +0200
+++ /work/SRC/openSUSE:Factory/.gnutls.new.31177/gnutls.changes 2021-12-02 02:13:43.894941314 +0100
@@ -1,0 +2,8 @@
+Fri Nov 26 08:26:19 UTC 2021 - Dominique Leuenberger <dimstar(a)opensuse.org>
+
+- Drop bogus condition "> 1550": that would mean 'more recent than
+ Tumbleweed' which is technically impossible, as Tumbleweed is the
+ leading project (and the condition causes issues as Tumbleweed
+ needs to move away from 1550 due to CODE 15 SP5 plans).
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ gnutls.spec ++++++
--- /var/tmp/diff_new_pack.OOf45j/_old 2021-12-02 02:13:44.418939716 +0100
+++ /var/tmp/diff_new_pack.OOf45j/_new 2021-12-02 02:13:44.422939704 +0100
@@ -352,19 +352,8 @@
%if %{with guile}
%files guile
-%if 0%{?suse_version} > 1550
-%{_libdir}/guile/3.0/guile-gnutls*.so*
-%{_libdir}/guile/3.0/site-ccache
-%{_libdir}/guile/3.0/site-ccache/gnutls
-%{_libdir}/guile/3.0/site-ccache/gnutls.go
-%{_libdir}/guile/3.0/site-ccache/gnutls/extra.go
-%{_datadir}/guile/gnutls
-%{_datadir}/guile/gnutls.scm
-%{_datadir}/guile/gnutls/extra.scm
-%else
%{_libdir}/guile/*
%{_datadir}/guile/gnutls*
%endif
-%endif
%changelog
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package gnulib for openSUSE:Factory checked in at 2021-11-29 17:28:42
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gnulib (Old)
and /work/SRC/openSUSE:Factory/.gnulib.new.31177 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gnulib"
Mon Nov 29 17:28:42 2021 rev:4 rq:934556 version:git.20211127.db493d1ce
Changes:
--------
--- /work/SRC/openSUSE:Factory/gnulib/gnulib.changes 2020-09-25 16:35:34.060105164 +0200
+++ /work/SRC/openSUSE:Factory/.gnulib.new.31177/gnulib.changes 2021-12-02 02:13:40.222952513 +0100
@@ -1,0 +2,5 @@
+Mon Nov 29 08:29:59 UTC 2021 - mliska(a)suse.cz
+
+- Update to version git.20211127.db493d1ce: No changelog provided.
+
+-------------------------------------------------------------------
Old:
----
gnulib-git.20200809.d6dabe8ee.tar.xz
New:
----
gnulib-git.20211127.db493d1ce.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ gnulib.spec ++++++
--- /var/tmp/diff_new_pack.gcdPVa/_old 2021-12-02 02:13:40.754950891 +0100
+++ /var/tmp/diff_new_pack.gcdPVa/_new 2021-12-02 02:13:40.758950878 +0100
@@ -1,7 +1,7 @@
#
# spec file for package gnulib
#
-# Copyright (c) 2020 SUSE LLC
+# Copyright (c) 2021 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -19,10 +19,10 @@
%global module1 git-merge-changelog
Name: gnulib
-Version: git.20200809.d6dabe8ee
+Version: git.20211127.db493d1ce
Release: 0
Summary: GNU Portability Library
-License: SUSE-Public-Domain AND GPL-2.0-or-later AND GPL-3.0-only AND GPL-3.0-or-later AND LGPL-2.0-only AND LGPL-2.1-or-later AND LGPL-3.0-or-later
+License: GPL-2.0-or-later AND SUSE-Public-Domain AND GPL-3.0-only AND GPL-3.0-or-later AND LGPL-2.0-only AND LGPL-2.1-or-later AND LGPL-3.0-or-later
Group: Development/Languages/C and C++
URL: http://www.gnu.org/software/gnulib
Source: %{name}-%{version}.tar.xz
@@ -44,7 +44,7 @@
%package devel
Summary: Devel files of %{name}
-License: SUSE-Public-Domain AND GPL-2.0-or-later AND GPL-3.0-only AND GPL-3.0-or-later AND LGPL-2.0-only AND LGPL-2.1-or-later AND LGPL-3.0-or-later
+License: GPL-2.0-or-later AND SUSE-Public-Domain AND GPL-3.0-only AND GPL-3.0-or-later AND LGPL-2.0-only AND LGPL-2.1-or-later AND LGPL-3.0-or-later
Group: Development/Languages/C and C++
Requires: bison
Requires: coreutils
@@ -71,7 +71,7 @@
Group: Development/Languages/C and C++
Requires: %{name}-devel = %{version}-%{release}
Requires(post): info
-Requires(preun): info
+Requires(preun):info
BuildArch: noarch
%description docs
++++++ _service ++++++
--- /var/tmp/diff_new_pack.gcdPVa/_old 2021-12-02 02:13:40.782950805 +0100
+++ /var/tmp/diff_new_pack.gcdPVa/_new 2021-12-02 02:13:40.786950793 +0100
@@ -5,7 +5,7 @@
<param name="changesgenerate">enable</param>
<param name="filename">gnulib</param>
<param name="versionformat">git.%cd.%h</param>
- <param name="revision">d6dabe8eece3a9c1269dc1c084531ce447c7a42e</param>
+ <param name="revision">db493d1ce43fc39dd925699d840c80b3400f4313</param>
</service>
<service mode="disabled" name="recompress">
<param name="file">*.tar</param>
++++++ gnulib-git.20200809.d6dabe8ee.tar.xz -> gnulib-git.20211127.db493d1ce.tar.xz ++++++
++++ 242706 lines of diff (skipped)
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package gnu_parallel for openSUSE:Factory checked in at 2021-12-01 20:47:33
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gnu_parallel (Old)
and /work/SRC/openSUSE:Factory/.gnu_parallel.new.31177 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gnu_parallel"
Wed Dec 1 20:47:33 2021 rev:70 rq:935004 version:20211122
Changes:
--------
--- /work/SRC/openSUSE:Factory/gnu_parallel/gnu_parallel.changes 2021-10-11 15:32:01.402884034 +0200
+++ /work/SRC/openSUSE:Factory/.gnu_parallel.new.31177/gnu_parallel.changes 2021-12-02 02:13:37.610960479 +0100
@@ -1,0 +2,8 @@
+Sat Nov 27 12:51:44 UTC 2021 - Dirk M��ller <dmueller(a)suse.com>
+
+- update to 20211122:
+ * Bug fixes and man page updates.
+ * Don't postpone output until $jobslots jobs have been started.
+ * Bug fixes and man page updates.
+
+-------------------------------------------------------------------
Old:
----
parallel-20210922.tar.bz2
parallel-20210922.tar.bz2.sig
New:
----
parallel-20211122.tar.bz2
parallel-20211122.tar.bz2.sig
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ gnu_parallel.spec ++++++
--- /var/tmp/diff_new_pack.Tn8Yk7/_old 2021-12-02 02:13:38.210958649 +0100
+++ /var/tmp/diff_new_pack.Tn8Yk7/_new 2021-12-02 02:13:38.210958649 +0100
@@ -17,13 +17,12 @@
Name: gnu_parallel
-Version: 20210922
+Version: 20211122
Release: 0
Summary: Shell tool for executing jobs in parallel
License: GPL-3.0-or-later
Group: Productivity/File utilities
URL: https://www.gnu.org/software/parallel/
-#DL-URL: http://ftp.gnu.org/gnu/parallel/
Source: https://ftp.gnu.org/gnu/parallel/parallel-%version.tar.bz2
Source2: https://ftp.gnu.org/gnu/parallel/parallel-%version.tar.bz2.sig
Source3: %name.keyring
++++++ parallel-20210922.tar.bz2 -> parallel-20211122.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20210922/NEWS new/parallel-20211122/NEWS
--- old/parallel-20210922/NEWS 2021-09-22 23:04:25.000000000 +0200
+++ new/parallel-20211122/NEWS 2021-11-23 00:26:33.000000000 +0100
@@ -1,13 +1,45 @@
-20210922
+20211122
New in this release:
-
* Bug fixes and man page updates.
+News about GNU Parallel:
+
+* Otimizando o seu Hacking com o GNU Parallel - Mateus Buogo
+ https://www.youtube.com/watch?v=xIpPPZXDKGU
+
+* SMACK 12 - Do it faster! Simple ways to use all those cores (and
+ GPUs) efficiently. https://www.youtube.com/watch?v=lXDGY7NvOYk
+
+
+20211022
+
+New in this release:
+
+* Don't postpone output until $jobslots jobs have been started.
+
+* Bug fixes and man page updates.
News about GNU Parallel:
+* How to Install GNU Parallel using Anaconda | Linux
+ https://www.youtube.com/watch?v=UwDNVP-L0qA
+
+* Install GNU Parallel from source code | Linux
+ https://www.youtube.com/watch?v=PIyJH4ben5o
+
+* Compiling GNU Parallel on CentOS-7
+ https://thelinuxcluster.com/2021/10/19/compiling-gnu-parallel-on-centos-7/
+
+
+20210922
+
+New in this release:
+
+* Bug fixes and man page updates.
+
+News about GNU Parallel:
* 3 Programs that will Level Up your Bash Game
https://medium.com/codex/3-programs-that-will-level-up-your-bash-game-bf14e…
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20210922/README new/parallel-20211122/README
--- old/parallel-20210922/README 2021-09-22 23:17:48.000000000 +0200
+++ new/parallel-20211122/README 2021-11-23 00:35:26.000000000 +0100
@@ -57,11 +57,11 @@
Full installation of GNU Parallel is as simple as:
- wget https://ftpmirror.gnu.org/parallel/parallel-20210922.tar.bz2
- wget https://ftpmirror.gnu.org/parallel/parallel-20210922.tar.bz2.sig
- gpg parallel-20210922.tar.bz2.sig
- bzip2 -dc parallel-20210922.tar.bz2 | tar xvf -
- cd parallel-20210922
+ wget https://ftpmirror.gnu.org/parallel/parallel-20211122.tar.bz2
+ wget https://ftpmirror.gnu.org/parallel/parallel-20211122.tar.bz2.sig
+ gpg parallel-20211122.tar.bz2.sig
+ bzip2 -dc parallel-20211122.tar.bz2 | tar xvf -
+ cd parallel-20211122
./configure && make && sudo make install
@@ -70,11 +70,11 @@
If you are not root you can add ~/bin to your path and install in
~/bin and ~/share:
- wget https://ftpmirror.gnu.org/parallel/parallel-20210922.tar.bz2
- wget https://ftpmirror.gnu.org/parallel/parallel-20210922.tar.bz2.sig
- gpg parallel-20210922.tar.bz2.sig
- bzip2 -dc parallel-20210922.tar.bz2 | tar xvf -
- cd parallel-20210922
+ wget https://ftpmirror.gnu.org/parallel/parallel-20211122.tar.bz2
+ wget https://ftpmirror.gnu.org/parallel/parallel-20211122.tar.bz2.sig
+ gpg parallel-20211122.tar.bz2.sig
+ bzip2 -dc parallel-20211122.tar.bz2 | tar xvf -
+ cd parallel-20211122
./configure --prefix=$HOME && make && make install
Or if your system lacks 'make' you can simply copy src/parallel
@@ -122,8 +122,8 @@
When using programs that use GNU Parallel to process data for
publication please cite:
- Tange, O. (2021, September 22). GNU Parallel 20210922 ('Vindelev').
- Zenodo. https://doi.org/10.5281/zenodo.5523272
+ Tange, O. (2021, November 22). GNU Parallel 20211122 ('Peng Shuai').
+ Zenodo. https://doi.org/10.5281/zenodo.5719513
Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015,
2016, 2017, 2018, 2019, 2020, 2021 Ole Tange, http://ole.tange.dk and
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20210922/configure new/parallel-20211122/configure
--- old/parallel-20210922/configure 2021-09-22 23:18:57.000000000 +0200
+++ new/parallel-20211122/configure 2021-11-23 00:37:59.000000000 +0100
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for parallel 20210922.
+# Generated by GNU Autoconf 2.69 for parallel 20211122.
#
# Report bugs to <bug-parallel(a)gnu.org>.
#
@@ -579,8 +579,8 @@
# Identity of this package.
PACKAGE_NAME='parallel'
PACKAGE_TARNAME='parallel'
-PACKAGE_VERSION='20210922'
-PACKAGE_STRING='parallel 20210922'
+PACKAGE_VERSION='20211122'
+PACKAGE_STRING='parallel 20211122'
PACKAGE_BUGREPORT='bug-parallel(a)gnu.org'
PACKAGE_URL=''
@@ -1214,7 +1214,7 @@
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures parallel 20210922 to adapt to many kinds of systems.
+\`configure' configures parallel 20211122 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1281,7 +1281,7 @@
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of parallel 20210922:";;
+ short | recursive ) echo "Configuration of parallel 20211122:";;
esac
cat <<\_ACEOF
@@ -1357,7 +1357,7 @@
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-parallel configure 20210922
+parallel configure 20211122
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1374,7 +1374,7 @@
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by parallel $as_me 20210922, which was
+It was created by parallel $as_me 20211122, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -2237,7 +2237,7 @@
# Define the identity of the package.
PACKAGE='parallel'
- VERSION='20210922'
+ VERSION='20211122'
cat >>confdefs.h <<_ACEOF
@@ -2880,7 +2880,7 @@
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by parallel $as_me 20210922, which was
+This file was extended by parallel $as_me 20211122, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -2942,7 +2942,7 @@
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-parallel config.status 20210922
+parallel config.status 20211122
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20210922/configure.ac new/parallel-20211122/configure.ac
--- old/parallel-20210922/configure.ac 2021-09-22 23:17:48.000000000 +0200
+++ new/parallel-20211122/configure.ac 2021-11-23 00:35:26.000000000 +0100
@@ -1,4 +1,4 @@
-AC_INIT([parallel], [20210922], [bug-parallel(a)gnu.org]
+AC_INIT([parallel], [20211122], [bug-parallel(a)gnu.org]
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20210922/src/env_parallel.1 new/parallel-20211122/src/env_parallel.1
--- old/parallel-20210922/src/env_parallel.1 2021-09-22 23:19:00.000000000 +0200
+++ new/parallel-20211122/src/env_parallel.1 2021-11-23 00:38:02.000000000 +0100
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "ENV_PARALLEL 1"
-.TH ENV_PARALLEL 1 "2021-09-22" "20210922" "parallel"
+.TH ENV_PARALLEL 1 "2021-11-22" "20211122" "parallel"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20210922/src/env_parallel.ash new/parallel-20211122/src/env_parallel.ash
--- old/parallel-20210922/src/env_parallel.ash 2021-09-22 23:17:48.000000000 +0200
+++ new/parallel-20211122/src/env_parallel.ash 2021-11-23 00:35:26.000000000 +0100
@@ -385,7 +385,7 @@
return 255
fi
if [ "$_parset_NAME" = "--version" ] ; then
- echo "parset 20210922 (GNU parallel `parallel --minversion 1`)"
+ echo "parset 20211122 (GNU parallel `parallel --minversion 1`)"
echo "Copyright (C) 2007-2021 Ole Tange, http://ole.tange.dk and Free Software"
echo "Foundation, Inc."
echo "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20210922/src/env_parallel.bash new/parallel-20211122/src/env_parallel.bash
--- old/parallel-20210922/src/env_parallel.bash 2021-09-22 23:17:48.000000000 +0200
+++ new/parallel-20211122/src/env_parallel.bash 2021-11-23 00:35:26.000000000 +0100
@@ -384,7 +384,7 @@
return 255
fi
if [ "$_parset_NAME" = "--version" ] ; then
- echo "parset 20210922 (GNU parallel `parallel --minversion 1`)"
+ echo "parset 20211122 (GNU parallel `parallel --minversion 1`)"
echo "Copyright (C) 2007-2021 Ole Tange, http://ole.tange.dk and Free Software"
echo "Foundation, Inc."
echo "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20210922/src/env_parallel.dash new/parallel-20211122/src/env_parallel.dash
--- old/parallel-20210922/src/env_parallel.dash 2021-09-22 23:17:48.000000000 +0200
+++ new/parallel-20211122/src/env_parallel.dash 2021-11-23 00:35:26.000000000 +0100
@@ -385,7 +385,7 @@
return 255
fi
if [ "$_parset_NAME" = "--version" ] ; then
- echo "parset 20210922 (GNU parallel `parallel --minversion 1`)"
+ echo "parset 20211122 (GNU parallel `parallel --minversion 1`)"
echo "Copyright (C) 2007-2021 Ole Tange, http://ole.tange.dk and Free Software"
echo "Foundation, Inc."
echo "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20210922/src/env_parallel.ksh new/parallel-20211122/src/env_parallel.ksh
--- old/parallel-20210922/src/env_parallel.ksh 2021-09-22 23:17:48.000000000 +0200
+++ new/parallel-20211122/src/env_parallel.ksh 2021-11-23 00:35:26.000000000 +0100
@@ -363,7 +363,7 @@
return 255
fi
if [ "$_parset_NAME" = "--version" ] ; then
- echo "parset 20210922 (GNU parallel `parallel --minversion 1`)"
+ echo "parset 20211122 (GNU parallel `parallel --minversion 1`)"
echo "Copyright (C) 2007-2021 Ole Tange, http://ole.tange.dk and Free Software"
echo "Foundation, Inc."
echo "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20210922/src/env_parallel.mksh new/parallel-20211122/src/env_parallel.mksh
--- old/parallel-20210922/src/env_parallel.mksh 2021-09-22 23:17:48.000000000 +0200
+++ new/parallel-20211122/src/env_parallel.mksh 2021-11-23 00:35:26.000000000 +0100
@@ -365,7 +365,7 @@
return 255
fi
if [ "$_parset_NAME" = "--version" ] ; then
- echo "parset 20210922 (GNU parallel `parallel --minversion 1`)"
+ echo "parset 20211122 (GNU parallel `parallel --minversion 1`)"
echo "Copyright (C) 2007-2021 Ole Tange, http://ole.tange.dk and Free Software"
echo "Foundation, Inc."
echo "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20210922/src/env_parallel.sh new/parallel-20211122/src/env_parallel.sh
--- old/parallel-20210922/src/env_parallel.sh 2021-09-22 23:17:48.000000000 +0200
+++ new/parallel-20211122/src/env_parallel.sh 2021-11-23 00:35:26.000000000 +0100
@@ -390,7 +390,7 @@
return 255
fi
if [ "$_parset_NAME" = "--version" ] ; then
- echo "parset 20210922 (GNU parallel `parallel --minversion 1`)"
+ echo "parset 20211122 (GNU parallel `parallel --minversion 1`)"
echo "Copyright (C) 2007-2021 Ole Tange, http://ole.tange.dk and Free Software"
echo "Foundation, Inc."
echo "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20210922/src/env_parallel.zsh new/parallel-20211122/src/env_parallel.zsh
--- old/parallel-20210922/src/env_parallel.zsh 2021-09-22 23:17:48.000000000 +0200
+++ new/parallel-20211122/src/env_parallel.zsh 2021-11-23 00:35:26.000000000 +0100
@@ -355,7 +355,7 @@
return 255
fi
if [ "$_parset_NAME" = "--version" ] ; then
- echo "parset 20210922 (GNU parallel `parallel --minversion 1`)"
+ echo "parset 20211122 (GNU parallel `parallel --minversion 1`)"
echo "Copyright (C) 2007-2021 Ole Tange, http://ole.tange.dk and Free Software"
echo "Foundation, Inc."
echo "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20210922/src/niceload new/parallel-20211122/src/niceload
--- old/parallel-20210922/src/niceload 2021-09-22 23:17:48.000000000 +0200
+++ new/parallel-20211122/src/niceload 2021-11-23 00:35:26.000000000 +0100
@@ -26,7 +26,7 @@
use strict;
use Getopt::Long;
$Global::progname="niceload";
-$Global::version = 20210922;
+$Global::version = 20211122;
Getopt::Long::Configure("bundling","require_order");
get_options_from_array(\@ARGV) || die_usage();
if($opt::version) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20210922/src/parallel new/parallel-20211122/src/parallel
--- old/parallel-20210922/src/parallel 2021-09-22 23:17:48.000000000 +0200
+++ new/parallel-20211122/src/parallel 2021-11-23 00:35:26.000000000 +0100
@@ -566,14 +566,26 @@
"$file is not a seekable file.");
::wait_and_exit(255);
}
- my $header = find_header(\$buf,open_or_exit($file));
+
+ my $fh = open_or_exit($file);
+ my $firstlinelen = 0;
+ if($opt::skip_first_line) {
+ my $newline;
+ # Read a full line one byte at a time
+ while($firstlinelen += sysread($fh,$newline,1,0)) {
+ $newline eq "\n" and last;
+ }
+ }
+ my $header = find_header(\$buf,$fh);
# find positions
- my @pos = find_split_positions($file,int($Global::blocksize),$header);
+ my @pos = find_split_positions($file,int($Global::blocksize),
+ $header,$firstlinelen);
# Make @cat_prepends
my @cat_prepends = ();
for(my $i=0; $i<$#pos; $i++) {
push(@cat_prepends,
- cat_partial($file, 0, length($header), $pos[$i], $pos[$i+1]));
+ cat_partial($file, $firstlinelen, $firstlinelen+length($header),
+ $pos[$i], $pos[$i+1]));
}
return @cat_prepends;
}
@@ -618,8 +630,8 @@
# $opt::recend
# Returns:
# @positions of block start/end
- my($file, $block, $header) = @_;
- my $headerlen = length $header;
+ my($file, $block, $header, $firstlinelen) = @_;
+ my $skiplen = $firstlinelen + length $header;
my $size = -s $file;
if(-b $file) {
# $file is a blockdevice
@@ -627,7 +639,8 @@
}
$block = int $block;
if($opt::groupby) {
- return split_positions_for_group_by($file,$size,$block,$header);
+ return split_positions_for_group_by($file,$size,$block,
+ $header,$firstlinelen);
}
# The optimal dd blocksize for mint, redhat, solaris, openbsd = 2^17..2^20
# The optimal dd blocksize for freebsd = 2^15..2^17
@@ -637,8 +650,8 @@
my ($recstart,$recend) = recstartrecend();
my $recendrecstart = $recend.$recstart;
my $fh = ::open_or_exit($file);
- push(@pos,$headerlen);
- for(my $pos = $block+$headerlen; $pos < $size; $pos += $block) {
+ push(@pos,$skiplen);
+ for(my $pos = $block+$skiplen; $pos < $size; $pos += $block) {
my $buf;
if($recendrecstart eq "") {
# records ends anywhere
@@ -745,14 +758,14 @@
return($v,$vpos);
}
- my ($file,$size,$block,$header) = @_;
+ my ($file,$size,$block,$header,$firstlinelen) = @_;
my ($a,$b,$c,$apos,$bpos,$cpos);
my @pos;
$fh = open_or_exit($file);
# Set $Global::group_by_column $Global::group_by_perlexpr
group_by_loop($fh,$opt::recsep);
# $xpos = linestart, $x = value at $xpos, $apos < $bpos < $cpos
- $apos = length $header;
+ $apos = $firstlinelen + length $header;
for(($a,$apos) = value_at($apos); $apos < $size;) {
push @pos, $apos;
$bpos = $apos + $block;
@@ -967,6 +980,13 @@
my $in = *STDIN;
my $timeout = $Global::blocktimeout;
+ if($opt::skip_first_line) {
+ my $newline;
+ # Read a full line one byte at a time
+ while(sysread($in,$newline,1,0)) {
+ $newline eq "\n" and last;
+ }
+ }
my $header = find_header(\$buf,$in);
my $anything_written;
my $eof;
@@ -2244,7 +2264,7 @@
sub init_globals() {
# Defaults:
- $Global::version = 20210922;
+ $Global::version = 20211122;
$Global::progname = 'parallel';
$::name = "GNU Parallel";
$Global::infinity = 2**31;
@@ -2275,14 +2295,16 @@
# = {.}.{+.} = {+/}/{/.}.{+.}
# = {..}.{+..} = {+/}/{/..}.{+..}
# = {...}.{+...} = {+/}/{/...}.{+...}
- '{+/}' => 's:/[^/]*$::',
- '{+.}' => 's:.*\.::',
- '{+..}' => 's:.*\.([^.]*\.):$1:',
- '{+...}' => 's:.*\.([^.]*\.[^.]*\.):$1:',
- '{..}' => 's:\.[^/.]+$::; s:\.[^/.]+$::',
- '{...}' => 's:\.[^/.]+$::; s:\.[^/.]+$::; s:\.[^/.]+$::',
- '{/..}' => 's:.*/::; s:\.[^/.]+$::; s:\.[^/.]+$::',
- '{/...}' => 's:.*/::; s:\.[^/.]+$::; s:\.[^/.]+$::; s:\.[^/.]+$::',
+ '{+/}' => 's:/[^/]*$:: || s:.*$::',
+ # a.b => b; a => ''
+ '{+.}' => 's:.*\.:: || s:.*$::',
+ # a.b.c => b.c; a.b => ''; a => ''
+ '{+..}' => 's:.*\.([^/.]+\.[^/.]+)$:$1: || s:.*$::',
+ '{+...}' => 's:.*\.([^/.]+\.[^/.]+\.[^/.]+)$:$1: || s:.*$::',
+ '{..}' => 's:\.[^/.]+\.[^/.]+$::',
+ '{...}' => 's:\.[^/.]+\.[^/.]+\.[^/.]+$::',
+ '{/..}' => 's:.*/::; s:\.[^/.]+\.[^/.]+$::',
+ '{/...}' => 's:.*/::; s:\.[^/.]+\.[^/.]+\.[^/.]+$::',
# n choose k = Binomial coefficient
'{choose_k}' => 'for $t (2..$#arg){ if($arg[$t-1] ge $arg[$t]) { skip() } }',
# {##} = number of jobs
@@ -5055,8 +5077,8 @@
"If you use programs that use GNU Parallel to process data for an article in a",
"scientific publication, please cite:",
"",
- " Tange, O. (2021, September 22). GNU Parallel 20210922 ('Vindelev').",
- " Zenodo. https://doi.org/10.5281/zenodo.5523272",
+ " Tange, O. (2021, November 22). GNU Parallel 20211122 ('Peng Shuai').",
+ " Zenodo. https://doi.org/10.5281/zenodo.5719513",
"",
# Before changing these lines, please read
# https://www.gnu.org/software/parallel/parallel_design.html#Citation-notice
@@ -5088,8 +5110,8 @@
"If you use programs that use GNU Parallel to process data for an article in a",
"scientific publication, please cite:",
"",
- " Tange, O. (2021, September 22). GNU Parallel 20210922 ('Vindelev').",
- " Zenodo. https://doi.org/10.5281/zenodo.5523272",
+ " Tange, O. (2021, November 22). GNU Parallel 20211122 ('Peng Shuai').",
+ " Zenodo. https://doi.org/10.5281/zenodo.5719513",
"",
# Before changing these line, please read
# https://www.gnu.org/software/parallel/parallel_design.html#Citation-notice and
@@ -5214,20 +5236,20 @@
"If you use programs that use GNU Parallel to process data for an article in a",
"scientific publication, please cite:",
"",
- "\@software{tange_2021_5523272,",
+ "\@software{tange_2021_5719513,",
" author = {Tange, Ole},",
- " title = {GNU Parallel 20210922 ('Vindelev')},",
- " month = Sep,",
+ " title = {GNU Parallel 20211122 ('Peng Shuai')},",
+ " month = Nov,",
" year = 2021,",
" note = {{GNU Parallel is a general parallelizer to run",
" multiple serial command line programs in parallel",
" without changing them.}},",
" publisher = {Zenodo},",
- " doi = {10.5281/zenodo.5523272},",
- " url = {https://doi.org/10.5281/zenodo.5523272}",
+ " doi = {10.5281/zenodo.5719513},",
+ " url = {https://doi.org/10.5281/zenodo.5719513}",
"}",
"",
- "(Feel free to use \\nocite{tange_2021_5523272})",
+ "(Feel free to use \\nocite{tange_2021_5719513})",
"",
# Before changing these lines, please read
# https://www.gnu.org/software/parallel/parallel_design.html#Citation-notice and
@@ -7263,6 +7285,9 @@
$count_jobs_already_read = $Global::JobQueue->next_seq();
my $wait_time_for_getting_args = 0;
my $start_time = time;
+ if($wanted_processes < $Global::infinity) {
+ $Global::dummy_jobs = 1;
+ }
while(1) {
$system_limit >= $wanted_processes and last;
not $more_filehandles and last;
@@ -11263,7 +11288,8 @@
}
if($opt::sqlmaster) {
- # Insert the V1..Vn for this $seq in SQL table instead of generating one
+ # Insert the V1..Vn for this $seq in SQL table
+ # instead of generating one
$Global::sql->insert_records($self->seq(), $self->{'command'},
$self->{'arg_list_flat_orig'});
}
@@ -11282,12 +11308,16 @@
*Arg::arg = $self->{'arg_list_flat_orig'};
my $quote_arg = ($Global::quote_replace and not $Global::quoting);
+ my $col;
for my $perlexpr (keys %{$self->{'replacecount'}}) {
- if($perlexpr =~ /^(\d+) /) {
- # Positional
- defined($record->[$1-1]) or next;
- $self->{'len'}{$perlexpr} +=
- length $record->[$1-1]->replace($perlexpr,$quote_arg,$self);
+ if($perlexpr =~ /^(-?\d+)(?:\D.*|)$/) {
+ # Positional replacement string
+ # Deal with negative positional replacement string
+ $col = ($1 < 0) ? $1 : $1-1;
+ if(defined($record->[$col])) {
+ $self->{'len'}{$perlexpr} +=
+ length $record->[$col]->replace($perlexpr,$quote_arg,$self);
+ }
} else {
for my $arg (@$record) {
if(defined $arg) {
@@ -11577,7 +11607,6 @@
# Worst case is BASE64 encoding 3 bytes -> 4 bytes
$len = int($len*4/3);
}
-
return $len;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20210922/src/parallel.1 new/parallel-20211122/src/parallel.1
--- old/parallel-20210922/src/parallel.1 2021-09-21 22:36:45.000000000 +0200
+++ new/parallel-20211122/src/parallel.1 2021-11-07 22:53:23.000000000 +0100
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "PARALLEL 1"
-.TH PARALLEL 1 "2021-08-29" "20210822" "parallel"
+.TH PARALLEL 1 "2021-10-24" "20211022" "parallel"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -821,11 +821,11 @@
.Ve
.Sp
When used with \fB\-\-pipe\fR only pass full CSV-records.
-.IP "\fB\-\-ctag\fR \fIstr\fR (beta testing)" 4
-.IX Item "--ctag str (beta testing)"
+.IP "\fB\-\-ctag\fR \fIstr\fR" 4
+.IX Item "--ctag str"
Color tag. See \fB\-\-tag\fR.
-.IP "\fB\-\-ctagstring\fR \fIstr\fR (beta testing)" 4
-.IX Item "--ctagstring str (beta testing)"
+.IP "\fB\-\-ctagstring\fR \fIstr\fR" 4
+.IX Item "--ctagstring str"
Color tagstring. See \fB\-\-tagstring\fR.
.IP "\fB\-\-delay\fR \fImytime\fR" 4
.IX Item "--delay mytime"
@@ -1237,8 +1237,19 @@
.IX Item "-P N"
.PD
Number of jobslots on each machine. Run up to N jobs in parallel. 0
-means as many as possible. Default is 100% which will run one job per
-\&\s-1CPU\s0 on each machine.
+means as many as possible (this can take a while to
+determine). Default is 100% which will run one job per \s-1CPU\s0 on each
+machine.
+.Sp
+Due to a bug \fB\-j 0\fR will also evaluate replacement strings twice up
+to the number of joblots:
+.Sp
+.Vb 4
+\& # This will not count from 1 but from number\-of\-jobslots
+\& seq 10000 | parallel \-j0 echo \*(Aq{= $_ = $foo++; =}\*(Aq | head
+\& # This will count from 1
+\& seq 10000 | parallel \-j100 echo \*(Aq{= $_ = $foo++; =}\*(Aq | head
+.Ve
.Sp
If \fB\-\-semaphore\fR is set, the default is 1 thus making a mutex.
.IP "\fB\-\-jobs\fR \fI+N\fR" 4
@@ -2728,8 +2739,8 @@
the jobs (with \fB\-\-timeout\fR, \fB\-\-memfree\fR, or \fB\-\-halt\fR). This is due
to \s-1GNU\s0 \fBparallel\fR giving each child its own process group, which is
then killed. Process groups are dependant on the tty.
-.IP "\fB\-\-tag\fR (beta testing)" 4
-.IX Item "--tag (beta testing)"
+.IP "\fB\-\-tag\fR" 4
+.IX Item "--tag"
Tag lines with arguments. Each output line will be prepended with the
arguments and \s-1TAB\s0 (\et). When combined with \fB\-\-onall\fR or \fB\-\-nonall\fR
the lines will be prepended with the sshlogin instead.
@@ -2737,8 +2748,8 @@
\&\fB\-\-tag\fR is ignored when using \fB\-u\fR.
.Sp
\&\fB\-\-ctag\fR gives the tag a color.
-.IP "\fB\-\-tagstring\fR \fIstr\fR (beta testing)" 4
-.IX Item "--tagstring str (beta testing)"
+.IP "\fB\-\-tagstring\fR \fIstr\fR" 4
+.IX Item "--tagstring str"
Tag lines with a string. Each output line will be prepended with
\&\fIstr\fR and \s-1TAB\s0 (\et). \fIstr\fR can contain replacement strings such as
\&\fB{}\fR.
@@ -3323,7 +3334,7 @@
.Ve
.PP
If your environment (aliases, variables, and functions) is small you
-can copy the full environment without having to \fBexport \-f\fR
+can copy the full environment without having to \fBexport \-f \fR
anything. See \fBenv_parallel\fR.
.SS "\s-1EXAMPLE:\s0 Function tester"
.IX Subsection "EXAMPLE: Function tester"
@@ -5028,6 +5039,10 @@
\& true >jobqueue; tail \-n+0 \-f jobqueue | parallel \-S ..
.Ve
.PP
+Output only will be printed when reading the next input after a job
+has finished: So you need to submit a job after the first has finished
+to see the output from the first job.
+.PP
If you keep this running for a long time, jobqueue will grow. A way of
removing the jobs already run is by making \s-1GNU\s0 \fBparallel\fR stop when
it hits a special value and then restart. To use \fB\-\-eof\fR to make \s-1GNU\s0
@@ -5060,20 +5075,6 @@
.PP
\&\s-1GNU\s0 \fBparallel\fR discovers if \fBjobfile\fR or \fB~/.parallel/sshloginfile\fR
changes.
-.PP
-There is a a small issue when using \s-1GNU\s0 \fBparallel\fR as queue
-system/batch manager: You have to submit JobSlot number of jobs before
-they will start, and after that you can submit one at a time, and job
-will start immediately if free slots are available.
-.PP
-Output from the running or completed jobs are held back and will only
-be printed when the next job is started (unless you use \-\-ungroup or
-\&\-\-line\-buffer, in which case the output from the jobs are printed
-immediately).
-.PP
-E.g. if you have 10 jobslots then the output from the first completed
-job will only be printed when job 11 has started, and the output of
-second completed job will only be printed when job 12 has started.
.SS "\s-1EXAMPLE: GNU\s0 Parallel as dir processor"
.IX Subsection "EXAMPLE: GNU Parallel as dir processor"
If you have a dir in which users drop files that needs to be processed
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20210922/src/parallel.html new/parallel-20211122/src/parallel.html
--- old/parallel-20210922/src/parallel.html 2021-09-21 22:36:45.000000000 +0200
+++ new/parallel-20211122/src/parallel.html 2021-11-07 22:53:22.000000000 +0100
@@ -792,13 +792,13 @@
<p>When used with <b>--pipe</b> only pass full CSV-records.</p>
</dd>
-<dt id="ctag-str-beta-testing"><b>--ctag</b> <i>str</i> (beta testing)</dt>
+<dt id="ctag-str"><b>--ctag</b> <i>str</i></dt>
<dd>
<p>Color tag. See <b>--tag</b>.</p>
</dd>
-<dt id="ctagstring-str-beta-testing"><b>--ctagstring</b> <i>str</i> (beta testing)</dt>
+<dt id="ctagstring-str"><b>--ctagstring</b> <i>str</i></dt>
<dd>
<p>Color tagstring. See <b>--tagstring</b>.</p>
@@ -1247,7 +1247,14 @@
<dt id="P-N"><b>-P</b> <i>N</i></dt>
<dd>
-<p>Number of jobslots on each machine. Run up to N jobs in parallel. 0 means as many as possible. Default is 100% which will run one job per CPU on each machine.</p>
+<p>Number of jobslots on each machine. Run up to N jobs in parallel. 0 means as many as possible (this can take a while to determine). Default is 100% which will run one job per CPU on each machine.</p>
+
+<p>Due to a bug <b>-j 0</b> will also evaluate replacement strings twice up to the number of joblots:</p>
+
+<pre><code> # This will not count from 1 but from number-of-jobslots
+ seq 10000 | parallel -j0 echo '{= $_ = $foo++; =}' | head
+ # This will count from 1
+ seq 10000 | parallel -j100 echo '{= $_ = $foo++; =}' | head</code></pre>
<p>If <b>--semaphore</b> is set, the default is 1 thus making a mutex.</p>
@@ -2604,7 +2611,7 @@
<p>Using <b>--tty</b> unfortunately means that GNU <b>parallel</b> cannot kill the jobs (with <b>--timeout</b>, <b>--memfree</b>, or <b>--halt</b>). This is due to GNU <b>parallel</b> giving each child its own process group, which is then killed. Process groups are dependant on the tty.</p>
</dd>
-<dt id="tag-beta-testing"><b>--tag</b> (beta testing)</dt>
+<dt id="tag"><b>--tag</b></dt>
<dd>
<p>Tag lines with arguments. Each output line will be prepended with the arguments and TAB (\t). When combined with <b>--onall</b> or <b>--nonall</b> the lines will be prepended with the sshlogin instead.</p>
@@ -2614,7 +2621,7 @@
<p><b>--ctag</b> gives the tag a color.</p>
</dd>
-<dt id="tagstring-str-beta-testing"><b>--tagstring</b> <i>str</i> (beta testing)</dt>
+<dt id="tagstring-str"><b>--tagstring</b> <i>str</i></dt>
<dd>
<p>Tag lines with a string. Each output line will be prepended with <i>str</i> and TAB (\t). <i>str</i> can contain replacement strings such as <b>{}</b>.</p>
@@ -3127,7 +3134,7 @@
<pre><code> parallel --env doit -S server doit ::: 1 2 3
parallel --env doubleit -S server doubleit ::: 1 2 3 ::: a b</code></pre>
-<p>If your environment (aliases, variables, and functions) is small you can copy the full environment without having to <b>export -f</b> anything. See <b>env_parallel</b>.</p>
+<p>If your environment (aliases, variables, and functions) is small you can copy the full environment without having to <b>export -f </b> anything. See <b>env_parallel</b>.</p>
<h2 id="EXAMPLE:-Function-tester">EXAMPLE: Function tester</h2>
@@ -4352,6 +4359,8 @@
<pre><code> true >jobqueue; tail -n+0 -f jobqueue | parallel -S ..</code></pre>
+<p>Output only will be printed when reading the next input after a job has finished: So you need to submit a job after the first has finished to see the output from the first job.</p>
+
<p>If you keep this running for a long time, jobqueue will grow. A way of removing the jobs already run is by making GNU <b>parallel</b> stop when it hits a special value and then restart. To use <b>--eof</b> to make GNU <b>parallel</b> exit, <b>tail</b> also needs to be forced to exit:</p>
<pre><code> true >jobqueue;
@@ -4377,12 +4386,6 @@
<p>GNU <b>parallel</b> discovers if <b>jobfile</b> or <b>~/.parallel/sshloginfile</b> changes.</p>
-<p>There is a a small issue when using GNU <b>parallel</b> as queue system/batch manager: You have to submit JobSlot number of jobs before they will start, and after that you can submit one at a time, and job will start immediately if free slots are available.</p>
-
-<p>Output from the running or completed jobs are held back and will only be printed when the next job is started (unless you use --ungroup or --line-buffer, in which case the output from the jobs are printed immediately).</p>
-
-<p>E.g. if you have 10 jobslots then the output from the first completed job will only be printed when job 11 has started, and the output of second completed job will only be printed when job 12 has started.</p>
-
<h2 id="EXAMPLE:-GNU-Parallel-as-dir-processor">EXAMPLE: GNU Parallel as dir processor</h2>
<p>If you have a dir in which users drop files that needs to be processed you can do this on GNU/Linux (If you know what <b>inotifywait</b> is called on other platforms file a bug report):</p>
Binary files old/parallel-20210922/src/parallel.pdf and new/parallel-20211122/src/parallel.pdf differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20210922/src/parallel.pod new/parallel-20211122/src/parallel.pod
--- old/parallel-20210922/src/parallel.pod 2021-08-29 22:30:00.000000000 +0200
+++ new/parallel-20211122/src/parallel.pod 2021-10-24 20:39:11.000000000 +0200
@@ -743,12 +743,12 @@
When used with B<--pipe> only pass full CSV-records.
-=item B<--ctag> I<str> (beta testing)
+=item B<--ctag> I<str>
Color tag. See B<--tag>.
-=item B<--ctagstring> I<str> (beta testing)
+=item B<--ctagstring> I<str>
Color tagstring. See B<--tagstring>.
@@ -1197,8 +1197,17 @@
=item B<-P> I<N>
Number of jobslots on each machine. Run up to N jobs in parallel. 0
-means as many as possible. Default is 100% which will run one job per
-CPU on each machine.
+means as many as possible (this can take a while to
+determine). Default is 100% which will run one job per CPU on each
+machine.
+
+Due to a bug B<-j 0> will also evaluate replacement strings twice up
+to the number of joblots:
+
+ # This will not count from 1 but from number-of-jobslots
+ seq 10000 | parallel -j0 echo '{= $_ = $foo++; =}' | head
+ # This will count from 1
+ seq 10000 | parallel -j100 echo '{= $_ = $foo++; =}' | head
If B<--semaphore> is set, the default is 1 thus making a mutex.
@@ -2710,7 +2719,7 @@
then killed. Process groups are dependant on the tty.
-=item B<--tag> (beta testing)
+=item B<--tag>
Tag lines with arguments. Each output line will be prepended with the
arguments and TAB (\t). When combined with B<--onall> or B<--nonall>
@@ -2721,7 +2730,7 @@
B<--ctag> gives the tag a color.
-=item B<--tagstring> I<str> (beta testing)
+=item B<--tagstring> I<str>
Tag lines with a string. Each output line will be prepended with
I<str> and TAB (\t). I<str> can contain replacement strings such as
@@ -3284,7 +3293,7 @@
parallel --env doubleit -S server doubleit ::: 1 2 3 ::: a b
If your environment (aliases, variables, and functions) is small you
-can copy the full environment without having to B<export -f>
+can copy the full environment without having to B<export -f >
anything. See B<env_parallel>.
@@ -4773,6 +4782,10 @@
true >jobqueue; tail -n+0 -f jobqueue | parallel -S ..
+Output only will be printed when reading the next input after a job
+has finished: So you need to submit a job after the first has finished
+to see the output from the first job.
+
If you keep this running for a long time, jobqueue will grow. A way of
removing the jobs already run is by making GNU B<parallel> stop when
it hits a special value and then restart. To use B<--eof> to make GNU
@@ -4802,20 +4815,6 @@
GNU B<parallel> discovers if B<jobfile> or B<~/.parallel/sshloginfile>
changes.
-There is a a small issue when using GNU B<parallel> as queue
-system/batch manager: You have to submit JobSlot number of jobs before
-they will start, and after that you can submit one at a time, and job
-will start immediately if free slots are available.
-
-Output from the running or completed jobs are held back and will only
-be printed when the next job is started (unless you use --ungroup or
---line-buffer, in which case the output from the jobs are printed
-immediately).
-
-E.g. if you have 10 jobslots then the output from the first completed
-job will only be printed when job 11 has started, and the output of
-second completed job will only be printed when job 12 has started.
-
=head2 EXAMPLE: GNU Parallel as dir processor
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20210922/src/parallel.rst new/parallel-20211122/src/parallel.rst
--- old/parallel-20210922/src/parallel.rst 2021-08-30 00:00:54.000000000 +0200
+++ new/parallel-20211122/src/parallel.rst 2021-11-07 22:53:22.000000000 +0100
@@ -883,13 +883,13 @@
-- \ **--ctag**\ \ *str*\ (beta testing)
+- \ **--ctag**\ \ *str*\
Color tag. See \ **--tag**\ .
-- \ **--ctagstring**\ \ *str*\ (beta testing)
+- \ **--ctagstring**\ \ *str*\
Color tagstring. See \ **--tagstring**\ .
@@ -1452,8 +1452,21 @@
- \ **-P**\ \ *N*\
Number of jobslots on each machine. Run up to N jobs in parallel. 0
- means as many as possible. Default is 100% which will run one job per
- CPU on each machine.
+ means as many as possible (this can take a while to
+ determine). Default is 100% which will run one job per CPU on each
+ machine.
+
+ Due to a bug \ **-j 0**\ will also evaluate replacement strings twice up
+ to the number of joblots:
+
+
+ .. code-block:: perl
+
+ # This will not count from 1 but from number-of-jobslots
+ seq 10000 | parallel -j0 echo '{= $_ = $foo++; =}' | head
+ # This will count from 1
+ seq 10000 | parallel -j100 echo '{= $_ = $foo++; =}' | head
+
If \ **--semaphore**\ is set, the default is 1 thus making a mutex.
@@ -3309,7 +3322,7 @@
-- \ **--tag**\ (beta testing)
+- \ **--tag**\
Tag lines with arguments. Each output line will be prepended with the
arguments and TAB (\t). When combined with \ **--onall**\ or \ **--nonall**\
@@ -3321,7 +3334,7 @@
-- \ **--tagstring**\ \ *str*\ (beta testing)
+- \ **--tagstring**\ \ *str*\
Tag lines with a string. Each output line will be prepended with
\ *str*\ and TAB (\t). \ *str*\ can contain replacement strings such as
@@ -4114,7 +4127,7 @@
If your environment (aliases, variables, and functions) is small you
-can copy the full environment without having to \ **export -f**\
+can copy the full environment without having to \ **export -f **\
anything. See \ **env_parallel**\ .
@@ -6378,6 +6391,10 @@
true >jobqueue; tail -n+0 -f jobqueue | parallel -S ..
+Output only will be printed when reading the next input after a job
+has finished: So you need to submit a job after the first has finished
+to see the output from the first job.
+
If you keep this running for a long time, jobqueue will grow. A way of
removing the jobs already run is by making GNU \ **parallel**\ stop when
it hits a special value and then restart. To use \ **--eof**\ to make GNU
@@ -6415,20 +6432,6 @@
GNU \ **parallel**\ discovers if \ **jobfile**\ or \ **~/.parallel/sshloginfile**\
changes.
-There is a a small issue when using GNU \ **parallel**\ as queue
-system/batch manager: You have to submit JobSlot number of jobs before
-they will start, and after that you can submit one at a time, and job
-will start immediately if free slots are available.
-
-Output from the running or completed jobs are held back and will only
-be printed when the next job is started (unless you use --ungroup or
---line-buffer, in which case the output from the jobs are printed
-immediately).
-
-E.g. if you have 10 jobslots then the output from the first completed
-job will only be printed when job 11 has started, and the output of
-second completed job will only be printed when job 12 has started.
-
EXAMPLE: GNU Parallel as dir processor
======================================
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20210922/src/parallel.texi new/parallel-20211122/src/parallel.texi
--- old/parallel-20210922/src/parallel.texi 2021-09-21 22:36:47.000000000 +0200
+++ new/parallel-20211122/src/parallel.texi 2021-11-07 22:53:27.000000000 +0100
@@ -825,13 +825,13 @@
When used with @strong{--pipe} only pass full CSV-records.
-@item @strong{--ctag} @emph{str} (beta testing)
-@anchor{@strong{--ctag} @emph{str} (beta testing)}
+@item @strong{--ctag} @emph{str}
+@anchor{@strong{--ctag} @emph{str}}
Color tag. See @strong{--tag}.
-@item @strong{--ctagstring} @emph{str} (beta testing)
-@anchor{@strong{--ctagstring} @emph{str} (beta testing)}
+@item @strong{--ctagstring} @emph{str}
+@anchor{@strong{--ctagstring} @emph{str}}
Color tagstring. See @strong{--tagstring}.
@@ -1326,8 +1326,19 @@
@anchor{@strong{-P} @emph{N}}
Number of jobslots on each machine. Run up to N jobs in parallel. 0
-means as many as possible. Default is 100% which will run one job per
-CPU on each machine.
+means as many as possible (this can take a while to
+determine). Default is 100% which will run one job per CPU on each
+machine.
+
+Due to a bug @strong{-j 0} will also evaluate replacement strings twice up
+to the number of joblots:
+
+@verbatim
+ # This will not count from 1 but from number-of-jobslots
+ seq 10000 | parallel -j0 echo '{= $_ = $foo++; =}' | head
+ # This will count from 1
+ seq 10000 | parallel -j100 echo '{= $_ = $foo++; =}' | head
+@end verbatim
If @strong{--semaphore} is set, the default is 1 thus making a mutex.
@@ -2964,8 +2975,8 @@
to GNU @strong{parallel} giving each child its own process group, which is
then killed. Process groups are dependant on the tty.
-@item @strong{--tag} (beta testing)
-@anchor{@strong{--tag} (beta testing)}
+@item @strong{--tag}
+@anchor{@strong{--tag}}
Tag lines with arguments. Each output line will be prepended with the
arguments and TAB (\t). When combined with @strong{--onall} or @strong{--nonall}
@@ -2975,8 +2986,8 @@
@strong{--ctag} gives the tag a color.
-@item @strong{--tagstring} @emph{str} (beta testing)
-@anchor{@strong{--tagstring} @emph{str} (beta testing)}
+@item @strong{--tagstring} @emph{str}
+@anchor{@strong{--tagstring} @emph{str}}
Tag lines with a string. Each output line will be prepended with
@emph{str} and TAB (\t). @emph{str} can contain replacement strings such as
@@ -3706,7 +3717,7 @@
@end verbatim
If your environment (aliases, variables, and functions) is small you
-can copy the full environment without having to @strong{export -f}
+can copy the full environment without having to @strong{export -f }
anything. See @strong{env_parallel}.
@node EXAMPLE: Function tester
@@ -5535,6 +5546,10 @@
true >jobqueue; tail -n+0 -f jobqueue | parallel -S ..
@end verbatim
+Output only will be printed when reading the next input after a job
+has finished: So you need to submit a job after the first has finished
+to see the output from the first job.
+
If you keep this running for a long time, jobqueue will grow. A way of
removing the jobs already run is by making GNU @strong{parallel} stop when
it hits a special value and then restart. To use @strong{--eof} to make GNU
@@ -5568,20 +5583,6 @@
GNU @strong{parallel} discovers if @strong{jobfile} or @strong{~/.parallel/sshloginfile}
changes.
-There is a a small issue when using GNU @strong{parallel} as queue
-system/batch manager: You have to submit JobSlot number of jobs before
-they will start, and after that you can submit one at a time, and job
-will start immediately if free slots are available.
-
-Output from the running or completed jobs are held back and will only
-be printed when the next job is started (unless you use --ungroup or
---line-buffer, in which case the output from the jobs are printed
-immediately).
-
-E.g. if you have 10 jobslots then the output from the first completed
-job will only be printed when job 11 has started, and the output of
-second completed job will only be printed when job 12 has started.
-
@node EXAMPLE: GNU Parallel as dir processor
@section EXAMPLE: GNU Parallel as dir processor
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20210922/src/parallel_alternatives.7 new/parallel-20211122/src/parallel_alternatives.7
--- old/parallel-20210922/src/parallel_alternatives.7 2021-08-23 08:42:55.000000000 +0200
+++ new/parallel-20211122/src/parallel_alternatives.7 2021-10-21 21:20:32.000000000 +0200
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "PARALLEL_ALTERNATIVES 7"
-.TH PARALLEL_ALTERNATIVES 7 "2021-08-23" "20210822" "parallel"
+.TH PARALLEL_ALTERNATIVES 7 "2021-10-09" "20210922" "parallel"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20210922/src/parsort new/parallel-20211122/src/parsort
--- old/parallel-20210922/src/parsort 2021-09-22 23:17:48.000000000 +0200
+++ new/parallel-20211122/src/parsort 2021-11-23 00:35:26.000000000 +0100
@@ -122,9 +122,9 @@
"help" => \$opt::dummy,
) || exit(255);
$Global::progname = ($0 =~ m:(^|/)([^/]+)$:)[1];
-$Global::version = 20210922;
+$Global::version = 20211122;
if($opt::version) { version(); exit 0; }
-@Global::sortoptions =
+@Global::sortoptions = grep { ! /^-D$/ }
shell_quote(@ARGV_before[0..($#ARGV_before-$#ARGV-1)]);
#if($opt::zero_terminated) { $/ = "\0"; }
@@ -160,6 +160,7 @@
@Global::sortoptions, '::::', @files) || die;
my @cmd = merge(<$par>);
close $par;
+ debug(@cmd);
# The command uses <(...) so it is incompatible with /bin/sh
open(my $bash,"|-","bash") || die;
print $bash @cmd;
@@ -220,6 +221,13 @@
return $tmpfifo;
}
+sub debug {
+ # Returns: N/A
+ $opt::D or return;
+ @_ = grep { defined $_ ? $_ : "" } @_;
+ print STDERR @_[1..$#_];
+}
+
sub version() {
# Returns: N/A
print join
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20210922/src/parsort.1 new/parallel-20211122/src/parsort.1
--- old/parallel-20210922/src/parsort.1 2021-09-22 23:19:00.000000000 +0200
+++ new/parallel-20211122/src/parsort.1 2021-11-23 00:38:02.000000000 +0100
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "PARSORT 1"
-.TH PARSORT 1 "2021-09-22" "20210922" "parallel"
+.TH PARSORT 1 "2021-11-22" "20211122" "parallel"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20210922/src/sem new/parallel-20211122/src/sem
--- old/parallel-20210922/src/sem 2021-09-22 23:17:48.000000000 +0200
+++ new/parallel-20211122/src/sem 2021-11-23 00:35:26.000000000 +0100
@@ -566,14 +566,26 @@
"$file is not a seekable file.");
::wait_and_exit(255);
}
- my $header = find_header(\$buf,open_or_exit($file));
+
+ my $fh = open_or_exit($file);
+ my $firstlinelen = 0;
+ if($opt::skip_first_line) {
+ my $newline;
+ # Read a full line one byte at a time
+ while($firstlinelen += sysread($fh,$newline,1,0)) {
+ $newline eq "\n" and last;
+ }
+ }
+ my $header = find_header(\$buf,$fh);
# find positions
- my @pos = find_split_positions($file,int($Global::blocksize),$header);
+ my @pos = find_split_positions($file,int($Global::blocksize),
+ $header,$firstlinelen);
# Make @cat_prepends
my @cat_prepends = ();
for(my $i=0; $i<$#pos; $i++) {
push(@cat_prepends,
- cat_partial($file, 0, length($header), $pos[$i], $pos[$i+1]));
+ cat_partial($file, $firstlinelen, $firstlinelen+length($header),
+ $pos[$i], $pos[$i+1]));
}
return @cat_prepends;
}
@@ -618,8 +630,8 @@
# $opt::recend
# Returns:
# @positions of block start/end
- my($file, $block, $header) = @_;
- my $headerlen = length $header;
+ my($file, $block, $header, $firstlinelen) = @_;
+ my $skiplen = $firstlinelen + length $header;
my $size = -s $file;
if(-b $file) {
# $file is a blockdevice
@@ -627,7 +639,8 @@
}
$block = int $block;
if($opt::groupby) {
- return split_positions_for_group_by($file,$size,$block,$header);
+ return split_positions_for_group_by($file,$size,$block,
+ $header,$firstlinelen);
}
# The optimal dd blocksize for mint, redhat, solaris, openbsd = 2^17..2^20
# The optimal dd blocksize for freebsd = 2^15..2^17
@@ -637,8 +650,8 @@
my ($recstart,$recend) = recstartrecend();
my $recendrecstart = $recend.$recstart;
my $fh = ::open_or_exit($file);
- push(@pos,$headerlen);
- for(my $pos = $block+$headerlen; $pos < $size; $pos += $block) {
+ push(@pos,$skiplen);
+ for(my $pos = $block+$skiplen; $pos < $size; $pos += $block) {
my $buf;
if($recendrecstart eq "") {
# records ends anywhere
@@ -745,14 +758,14 @@
return($v,$vpos);
}
- my ($file,$size,$block,$header) = @_;
+ my ($file,$size,$block,$header,$firstlinelen) = @_;
my ($a,$b,$c,$apos,$bpos,$cpos);
my @pos;
$fh = open_or_exit($file);
# Set $Global::group_by_column $Global::group_by_perlexpr
group_by_loop($fh,$opt::recsep);
# $xpos = linestart, $x = value at $xpos, $apos < $bpos < $cpos
- $apos = length $header;
+ $apos = $firstlinelen + length $header;
for(($a,$apos) = value_at($apos); $apos < $size;) {
push @pos, $apos;
$bpos = $apos + $block;
@@ -967,6 +980,13 @@
my $in = *STDIN;
my $timeout = $Global::blocktimeout;
+ if($opt::skip_first_line) {
+ my $newline;
+ # Read a full line one byte at a time
+ while(sysread($in,$newline,1,0)) {
+ $newline eq "\n" and last;
+ }
+ }
my $header = find_header(\$buf,$in);
my $anything_written;
my $eof;
@@ -2244,7 +2264,7 @@
sub init_globals() {
# Defaults:
- $Global::version = 20210922;
+ $Global::version = 20211122;
$Global::progname = 'parallel';
$::name = "GNU Parallel";
$Global::infinity = 2**31;
@@ -2275,14 +2295,16 @@
# = {.}.{+.} = {+/}/{/.}.{+.}
# = {..}.{+..} = {+/}/{/..}.{+..}
# = {...}.{+...} = {+/}/{/...}.{+...}
- '{+/}' => 's:/[^/]*$::',
- '{+.}' => 's:.*\.::',
- '{+..}' => 's:.*\.([^.]*\.):$1:',
- '{+...}' => 's:.*\.([^.]*\.[^.]*\.):$1:',
- '{..}' => 's:\.[^/.]+$::; s:\.[^/.]+$::',
- '{...}' => 's:\.[^/.]+$::; s:\.[^/.]+$::; s:\.[^/.]+$::',
- '{/..}' => 's:.*/::; s:\.[^/.]+$::; s:\.[^/.]+$::',
- '{/...}' => 's:.*/::; s:\.[^/.]+$::; s:\.[^/.]+$::; s:\.[^/.]+$::',
+ '{+/}' => 's:/[^/]*$:: || s:.*$::',
+ # a.b => b; a => ''
+ '{+.}' => 's:.*\.:: || s:.*$::',
+ # a.b.c => b.c; a.b => ''; a => ''
+ '{+..}' => 's:.*\.([^/.]+\.[^/.]+)$:$1: || s:.*$::',
+ '{+...}' => 's:.*\.([^/.]+\.[^/.]+\.[^/.]+)$:$1: || s:.*$::',
+ '{..}' => 's:\.[^/.]+\.[^/.]+$::',
+ '{...}' => 's:\.[^/.]+\.[^/.]+\.[^/.]+$::',
+ '{/..}' => 's:.*/::; s:\.[^/.]+\.[^/.]+$::',
+ '{/...}' => 's:.*/::; s:\.[^/.]+\.[^/.]+\.[^/.]+$::',
# n choose k = Binomial coefficient
'{choose_k}' => 'for $t (2..$#arg){ if($arg[$t-1] ge $arg[$t]) { skip() } }',
# {##} = number of jobs
@@ -5055,8 +5077,8 @@
"If you use programs that use GNU Parallel to process data for an article in a",
"scientific publication, please cite:",
"",
- " Tange, O. (2021, September 22). GNU Parallel 20210922 ('Vindelev').",
- " Zenodo. https://doi.org/10.5281/zenodo.5523272",
+ " Tange, O. (2021, November 22). GNU Parallel 20211122 ('Peng Shuai').",
+ " Zenodo. https://doi.org/10.5281/zenodo.5719513",
"",
# Before changing these lines, please read
# https://www.gnu.org/software/parallel/parallel_design.html#Citation-notice
@@ -5088,8 +5110,8 @@
"If you use programs that use GNU Parallel to process data for an article in a",
"scientific publication, please cite:",
"",
- " Tange, O. (2021, September 22). GNU Parallel 20210922 ('Vindelev').",
- " Zenodo. https://doi.org/10.5281/zenodo.5523272",
+ " Tange, O. (2021, November 22). GNU Parallel 20211122 ('Peng Shuai').",
+ " Zenodo. https://doi.org/10.5281/zenodo.5719513",
"",
# Before changing these line, please read
# https://www.gnu.org/software/parallel/parallel_design.html#Citation-notice and
@@ -5214,20 +5236,20 @@
"If you use programs that use GNU Parallel to process data for an article in a",
"scientific publication, please cite:",
"",
- "\@software{tange_2021_5523272,",
+ "\@software{tange_2021_5719513,",
" author = {Tange, Ole},",
- " title = {GNU Parallel 20210922 ('Vindelev')},",
- " month = Sep,",
+ " title = {GNU Parallel 20211122 ('Peng Shuai')},",
+ " month = Nov,",
" year = 2021,",
" note = {{GNU Parallel is a general parallelizer to run",
" multiple serial command line programs in parallel",
" without changing them.}},",
" publisher = {Zenodo},",
- " doi = {10.5281/zenodo.5523272},",
- " url = {https://doi.org/10.5281/zenodo.5523272}",
+ " doi = {10.5281/zenodo.5719513},",
+ " url = {https://doi.org/10.5281/zenodo.5719513}",
"}",
"",
- "(Feel free to use \\nocite{tange_2021_5523272})",
+ "(Feel free to use \\nocite{tange_2021_5719513})",
"",
# Before changing these lines, please read
# https://www.gnu.org/software/parallel/parallel_design.html#Citation-notice and
@@ -7263,6 +7285,9 @@
$count_jobs_already_read = $Global::JobQueue->next_seq();
my $wait_time_for_getting_args = 0;
my $start_time = time;
+ if($wanted_processes < $Global::infinity) {
+ $Global::dummy_jobs = 1;
+ }
while(1) {
$system_limit >= $wanted_processes and last;
not $more_filehandles and last;
@@ -11263,7 +11288,8 @@
}
if($opt::sqlmaster) {
- # Insert the V1..Vn for this $seq in SQL table instead of generating one
+ # Insert the V1..Vn for this $seq in SQL table
+ # instead of generating one
$Global::sql->insert_records($self->seq(), $self->{'command'},
$self->{'arg_list_flat_orig'});
}
@@ -11282,12 +11308,16 @@
*Arg::arg = $self->{'arg_list_flat_orig'};
my $quote_arg = ($Global::quote_replace and not $Global::quoting);
+ my $col;
for my $perlexpr (keys %{$self->{'replacecount'}}) {
- if($perlexpr =~ /^(\d+) /) {
- # Positional
- defined($record->[$1-1]) or next;
- $self->{'len'}{$perlexpr} +=
- length $record->[$1-1]->replace($perlexpr,$quote_arg,$self);
+ if($perlexpr =~ /^(-?\d+)(?:\D.*|)$/) {
+ # Positional replacement string
+ # Deal with negative positional replacement string
+ $col = ($1 < 0) ? $1 : $1-1;
+ if(defined($record->[$col])) {
+ $self->{'len'}{$perlexpr} +=
+ length $record->[$col]->replace($perlexpr,$quote_arg,$self);
+ }
} else {
for my $arg (@$record) {
if(defined $arg) {
@@ -11577,7 +11607,6 @@
# Worst case is BASE64 encoding 3 bytes -> 4 bytes
$len = int($len*4/3);
}
-
return $len;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20210922/src/sql new/parallel-20211122/src/sql
--- old/parallel-20210922/src/sql 2021-09-22 23:17:48.000000000 +0200
+++ new/parallel-20211122/src/sql 2021-11-23 00:35:26.000000000 +0100
@@ -600,7 +600,7 @@
exit ($err);
sub parse_options {
- $Global::version = 20210922;
+ $Global::version = 20211122;
$Global::progname = 'sql';
# This must be done first as this may exec myself
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20210922/src/sql.1 new/parallel-20211122/src/sql.1
--- old/parallel-20210922/src/sql.1 2021-09-22 23:19:00.000000000 +0200
+++ new/parallel-20211122/src/sql.1 2021-11-23 00:38:02.000000000 +0100
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SQL 1"
-.TH SQL 1 "2021-09-22" "20210922" "parallel"
+.TH SQL 1 "2021-11-22" "20211122" "parallel"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
++++++ parallel-20210922.tar.bz2.sig -> parallel-20211122.tar.bz2.sig ++++++
--- /work/SRC/openSUSE:Factory/gnu_parallel/parallel-20210922.tar.bz2.sig 2021-10-11 15:32:01.494884182 +0200
+++ /work/SRC/openSUSE:Factory/.gnu_parallel.new.31177/parallel-20211122.tar.bz2.sig 2021-12-02 02:13:37.734960101 +0100
@@ -2,7 +2,7 @@
# To check the signature run:
# echo | gpg
-# gpg --auto-key-locate keyserver --keyserver-options auto-key-retrieve parallel-20210922.tar.bz2.sig
+# gpg --auto-key-locate keyserver --keyserver-options auto-key-retrieve parallel-20211122.tar.bz2.sig
echo | gpg 2>/dev/null
gpg --auto-key-locate keyserver --keyserver-options auto-key-retrieve $0
@@ -10,32 +10,32 @@
-----BEGIN PGP SIGNATURE-----
-iQUHBAABCgAdFiEEzaAaQgjE90UGEH570atFFoiIiIgFAmFLnfAACgkQ0atFFoiI
-iIiilCagkPmhpnXB9EzxNfdHD6nk1eMIiaS/KcJ4Gme2aoAFJI52+spOd2svwK4G
-YmLQJEDCsWEVNns7G9OBq12JWQA+QbJ+QEsJe5qnFf52qlPL7kppVDNHhcsgyboV
-9rJTdpmNczV3Ch//sYLye5cfovcccoZVzHJiouYXvrBHibPaMeGu5YWHRxEBRA5z
-lB9VZ+1KScB8DnazuZmkrgBaNUg34+xccnL0bcB7f0IdljZrrof0W+YjXkdHaNK6
-FYGy4APEgNTf9hjxPiLZB8+S7DHTi9lHaCvlBGdQWzjrcqRY50KP2WaM5SyLtlrG
-YHbnTgbAEb9OLGEwuqWDAsVn7cMARPQYqfortcDejzwcLbsOxhKlTlnb5RPXD09J
-Vb6++npFiWUGMp1Z+1Mhvm84pS19y3YCIaFMVhMroIni+5VCzEy0KblHv7AO9R2Y
-b3pI43mNIvd0gA0zBaOHD6XDHbfrpPJoGtMkFC2gHjHfE1M2OjDPEujkO3Fbt2kM
-OP3AH+vjbmMSyAeC9sVgYNXqkfURK0OShjAx+Cx74CBM6ATTnvQ1mdko8fn/Es5z
-8n6ZA1P6MfJgnFs0kRB3TZiPUFE80tFyxLSMxwtiWqrQ7hr5owJNXbvfV59b6tRt
-e1wSE9CSPPJnzvraI1aQWGh/9cJwFhKcaE1GfRbp6HUAgw22xuKEc9IEB0c3NN2j
-hC2iD+HgkYWaN//m2DrL+Ykr4cW+Qk+CMCbqUeHNqnEiE68lmfU1tSOdMxCo0DNU
-GC/6UjTGJHojIYMr/QdFFHls13aUkAKcAWnantgb/8a6S1jAYzy4XwaIPwlZHaJS
-7hhuNmP2AtSdS97i7OGOL+OoJSsUKfDS9NZp13qV9xDDD/X77dihsIWzi92N5giE
-qjzurfSmzpQAfEKSuYQcFQbrjuqYXPN6gH+WX2zFySaPgdbJ5fMeAe2kvDQfdIM1
-ulUgD7YWb7wpWfynI9PgehKMWXxMCbT0znrilknjPnml3T3PvFE1hknQaugRr7Tf
-8qyniZwv3ScCsNRYJg+xLen2pAkNKS1w0vRWxb1SoAar+Sn7q5BtLO7YvjiWMIWi
-qFSqPUTtsMdkM+dvrT0yH5v2yKc+oxARyOTEg5ddoZtnhWnxpHlk6IgAooGJAPbw
-AKtOMo4EqwSV74vvSLeI755DgJhZk2efcNnxNuDO4Rf562KyNRkbF8UntV87Gvy0
-82aeX2EC7xYB8kY1zC1TP5qYbU2tkTKc021Jab7QDmL006pvXp3mgdVIxK+XN+Lg
-o+4WjJ75Er5cQKIvn2V67C2o0SvGi37Uxj2TM53OudTIsju4uWs17fpiZC9prDsz
-t4GDu/IcjIUGZpj+9LAiZ/oqwDfcXPxeB14S1ESakFbZ2IL/bPXnuDp0rhF6ta7Y
-fZO2Sj3runfuBNV7upENHcu9GlugaCC9k4kmYtzjrH5FQYlcXYLcf3EYrI7Ukeck
-2cwwMDJM5QfKJ0I1+DcMcZXA8IZrmgPmMxr1rxK7oil/AF+humyfcX9iCrxHgMxu
-7WFDaW+a6owxDRjsXdkOJ3CMXGCHIAcSc4dMOT4T4vY0G94MEf0nq3m9GISxrSta
-UJmZqGaHFx3rRcWgb5lMzw3LCw7fpiEi+a+mEjX0UuvHmqIXUQHuyxoh
-=qmYO
+iQUHBAABCgAdFiEEzaAaQgjE90UGEH570atFFoiIiIgFAmGcKpQACgkQ0atFFoiI
+iIh85Caffd3Eds+Z5GZtLwo/nlNOCteLSCVe6rDJ8yCknUT36KCUTqd9Uxkx8lZa
+rIIXO6ABiX/AzY24SIPDjTc3VOzve0rACwj56hEpCRw7GMuWwa90iqmTFj5GyK2Z
+uf83zkVJ2HhPCk0V9rRb6HWvPIA1doKtaqPGt+al58T4TkVVUoYKPv+swvqxWPtL
+gfha1G2ldWy7SUozJZv6+EC5ciJ4D2z+7vFJ29VVniKTLQ564YiiClO5G5mvTtyu
+DAR6ZAMPhJZwUDhyykKeZCIzP110MK+69l0rJf1mKm8lwbFspdgH3Hi+QJ3cdFNF
+fKGr5AAf9pc02bTsCAmLwdZEv5A0u3z3KT5LWiKoJEAzh3vIOtUcX831BjrkfX+y
+PiMmiPs87TnvV51FaHh0ZcvzYHME9tM2ag21X+h7w2Y/0MwAuWzhnljDvMPPF3aN
+5fH3snjtqMXmn5XgHRL8zyGF9COI1VLKOSKFSK3YcLz4hH1+tY7n3I5NUyQqH14S
+7Pa5sdpxlzawUpm90PorszlKpmfDUH/DGTnaMA3zyy0znvir3/gZrnonrub5uPWe
+ytNeMPncXe8QTUe6vB3VTDBBZkdDc7dOWCybj4SP8ZlexAbG3ym3aiDTcIyKR9lI
+Gwhpvn4zy4hx7hwQrhi+UEKjTXYQDBYfRwI6+DO08RLDyyjfQ2x5fP7Qie+xXncX
+3Vt7CHzUyH9rweCa0c6ScKDozXtbYcv3m7bE64bPdFLXJAgr/HRKyW9veUyKDtI2
+WuS3uc/IdjV8kkgvE990PgDb84yTSS1nJ6vkvzyf4omkk265Uw+OXCqD5G05lcVA
++YTRYyU25PhufuTmkNVX10uO9ht6ENY1gBj4DJyLvEGcUAXekdDOuX5ziVo99EXu
+bF5/nV+hKcQBhcuf7FRl4z4qswMypzPcWWwiLN3Aqf6WXzUdz2vOTw79Ehm0Anc0
+qzIreQ3Uv1BIAGVzBvFXiKEOQECJofL9wegWJncTDttRzC7FYAhK7jsfrQFM8VCH
+W4wUdQqeXyQy0ou3xJZr0Ryau64c6joaciHJGEImK0N/HEzjSA/43xQcbonvfpRO
+a8YiIKvuM648PGlXofi3iP2qcpNKbQC+6kUirBCHn0s+2zq2d9cpXJK3O7qANSfU
+e/ZnD55SltMepOI3lRgKtJJjANnBQZLdMcNWFI/oR2IwYR8+kRvezMzQPjBZCfHv
+vRd15kUUDuVoc5U97r8fK3ynBsuiO3cmBNbgwq6+BVo622tSgfQwLbSbHSabYTbF
+hwPjrh/5pcpnHXzHaHQ2TUivmuK1VIGiCUllpyripF////AFf+YY6Ns+DcSPe/5O
+oLy8JKyNPzclRiKkerExSRQqeLg5uKyWIf/BwWuxvbZA/LgaQb6QtI0VryhxdGiz
+OvVBCvAkPknctApkj24qKJEDxHz6jbIEAz3TGnbgH0tW8QVHa1D9SG39/jR0HhRc
+Vg2coG8iZSrmSDZHHB+SCM+p7x51ha8ezaXME9SlDbZRLam4N4B1ZolnSlbng1un
+RF7Viu/R/92R91GBWE2gavDqzlIcwagJtm0TUCyUling+Quez8EbWwCs19b4w2D7
+YQEt+6PFCOZkLtj/iZAABCczmfWKw6PtxJdF+JTAG3PK2qZJHi0zBHyf
+=O68d
-----END PGP SIGNATURE-----
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package gnu-efi for openSUSE:Factory checked in at 2021-12-01 20:46:45
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gnu-efi (Old)
and /work/SRC/openSUSE:Factory/.gnu-efi.new.31177 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gnu-efi"
Wed Dec 1 20:46:45 2021 rev:34 rq:934424 version:3.0.14
Changes:
--------
--- /work/SRC/openSUSE:Factory/gnu-efi/gnu-efi.changes 2021-03-17 20:13:19.514773806 +0100
+++ /work/SRC/openSUSE:Factory/.gnu-efi.new.31177/gnu-efi.changes 2021-12-02 02:13:36.190964810 +0100
@@ -1,0 +2,31 @@
+Mon Oct 18 09:57:26 UTC 2021 - Andreas Schwab <schwab(a)suse.de>
+
+- Update to gnu-efi 3.0.14
+ * Add Device Path Utilities Protocol support
+ * Add EFI_SHELL_PROTOCOL definitions
+ * Move EFI_SHELL_PARAMETERS_PROTOCOL related definitions to efishell.h
+ * Add EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL definitions
+ * Undefined Status in LibGetVariableAndSize()
+ * Initial support for RISCV64
+ * lisb/str.c: simplify xtoi()
+ * lib/hand: missing va_end
+ * Fix dummy relocation block alignment
+ * Add EFI_LOADED_IMAGE_DEVICE_PATH_PROTOCOL_GUID.
+ * ARM: hide 'hidden' pragma for hosted build
+ * lib/hand: missing va_end() in LibReinstallProtocolInterfaces()
+ * lib/misc: avoid NULL dereference in LibInsertToTailOfBootOrder
+ * lib/str: simplify Atoi()
+ * efiapi.h: add RISC-V machine type definitions
+ * apps: simplify logical constraints
+ * riscv64: missing EFI_FUNCTION
+ * riscv64: provide efisetjmp_arch.h
+ * apps: define FrameBufferAddr for riscv64
+ * apps: memory leak in draw_boxes()
+ * Add definitions for the EFI device tree table
+ * Fix VS2019 Code Analysis warnings
+ * Set NumberOfSymbols to zero
+ * riscv64: finalize efibind.h
+- gnu-efi-bsc1182057-support-sbat-section.patch: Update context
+- Enable build on riscv64
+
+-------------------------------------------------------------------
Old:
----
gnu-efi-3.0.13.tar.bz2
New:
----
gnu-efi-3.0.14.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ gnu-efi.spec ++++++
--- /var/tmp/diff_new_pack.Uw1ZoB/_old 2021-12-02 02:13:36.586963602 +0100
+++ /var/tmp/diff_new_pack.Uw1ZoB/_new 2021-12-02 02:13:36.590963590 +0100
@@ -17,7 +17,7 @@
Name: gnu-efi
-Version: 3.0.13
+Version: 3.0.14
Release: 0
Summary: Library for EFI Applications
License: BSD-3-Clause AND GPL-2.0-or-later
@@ -27,7 +27,7 @@
Source1: %{name}-rpmlintrc
Patch1: gnu-efi-bsc1182057-support-sbat-section.patch
BuildRequires: kernel-source
-ExclusiveArch: ia64 %{ix86} x86_64 aarch64 %{arm}
+ExclusiveArch: ia64 %{ix86} x86_64 aarch64 %{arm} riscv64
%description
Library to develop EFI applications for IA-64 (IPF), IA-32 (x86), x86_64,
++++++ gnu-efi-3.0.13.tar.bz2 -> gnu-efi-3.0.14.tar.bz2 ++++++
++++ 1819 lines of diff (skipped)
++++++ gnu-efi-bsc1182057-support-sbat-section.patch ++++++
--- /var/tmp/diff_new_pack.Uw1ZoB/_old 2021-12-02 02:13:36.794962968 +0100
+++ /var/tmp/diff_new_pack.Uw1ZoB/_new 2021-12-02 02:13:36.798962955 +0100
@@ -98,7 +98,7 @@
+ .short 3 // nr_sections
.long 0 // TimeDateStamp
.long 0 // PointerToSymbolTable
- .long 1 // NumberOfSymbols
+ .long 0 // NumberOfSymbols
@@ -109,6 +109,18 @@ section_table:
.short 0 // NumberOfLineNumbers (0 for executables)
.long 0xc0000040 // Characteristics (section flags)
@@ -130,7 +130,7 @@
+ .short 3 // nr_sections
.long 0 // TimeDateStamp
.long 0 // PointerToSymbolTable
- .long 1 // NumberOfSymbols
+ .long 0 // NumberOfSymbols
@@ -122,6 +122,20 @@ section_table:
.short 0 // NumberOfLineNumbers (0 for executables)
.long 0xe0500020 // Characteristics (section flags)
1
0