openSUSE Commits
Threads by month
- ----- 2024 -----
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
September 2021
- 1 participants
- 2316 discussions
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package fpc for openSUSE:Factory checked in at 2021-09-29 20:19:15
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/fpc (Old)
and /work/SRC/openSUSE:Factory/.fpc.new.1899 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "fpc"
Wed Sep 29 20:19:15 2021 rev:11 rq:922199 version:3.2.2
Changes:
--------
--- /work/SRC/openSUSE:Factory/fpc/fpc.changes 2021-04-29 22:52:32.406124337 +0200
+++ /work/SRC/openSUSE:Factory/.fpc.new.1899/fpc.changes 2021-09-29 20:20:53.407160367 +0200
@@ -1,0 +2,15 @@
+Wed Sep 29 06:49:04 UTC 2021 - Luigi Baldoni <aloisio(a)gmx.com>
+
+- Update to version 3.2.2
+ * See https://wiki.freepascal.org/User_Changes_3.2.2 for
+ the changelog
+- Drop aarch64-fpc-compilation-fix.patch and
+ aarch64-fpu-initialization.patch (merged upstream)
+- Drop fpc-fix-library-paths-on-aarch64.patch (no longer
+ required)
+- Refresh fpc-fix-library-paths-on-ppc64.patch
+- Add fpc-3.2.0-glibc-2.34.patch (courtesy of Fedora)
+- Add source URLS
+- Add _constraints
+
+-------------------------------------------------------------------
Old:
----
aarch64-fpc-compilation-fix.patch
aarch64-fpu-initialization.patch
fpc-3.2.0-aarch64.zip
fpc-3.2.0-ppc.zip
fpc-3.2.0-ppc64.zip
fpc-3.2.0-ppc64le.zip
fpc-fix-library-paths-on-aarch64.patch
fpcbuild-3.2.0.tar.gz
New:
----
_constraints
fpc-3.2.0-glibc-2.34.patch
fpc-3.2.2.aarch64-linux.tar
fpc-3.2.2.powerpc-linux.tar
fpc-3.2.2.powerpc64-linux.tar
fpc-3.2.2.powerpc64le-linux.tar
fpcbuild-3.2.2.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ fpc.spec ++++++
--- /var/tmp/diff_new_pack.yDIUKx/_old 2021-09-29 20:21:01.143171585 +0200
+++ /var/tmp/diff_new_pack.yDIUKx/_new 2021-09-29 20:21:01.147171590 +0200
@@ -1,5 +1,5 @@
#
-# spec file for package fpc
+# spec file
#
# Copyright (c) 2021 SUSE LLC
#
@@ -64,7 +64,7 @@
%endif
Name: fpc%{?psuffix}
-Version: 3.2.0
+Version: 3.2.2
Release: 0
%if "%{flavor}" == ""
Summary: Free Pascal Compiler
@@ -76,30 +76,22 @@
Group: Documentation/Other
%endif
URL: https://www.freepascal.org/
-Source: fpcbuild-%{version}.tar.gz
-Source1: fpc-3.2.0-aarch64.zip
-Source2: fpc-3.2.0-ppc64le.zip
-Source3: fpc-3.2.0-ppc64.zip
-Source4: fpc-3.2.0-ppc.zip
+Source: https://mirror.freemirror.org/pub/fpc/dist/%{version}/source/fpcbuild-%{ver…
+Source1: https://mirror.freemirror.org/pub/fpc/dist/%{version}/aarch64-linux/fpc-%{v…
+Source2: https://mirror.freemirror.org/pub/fpc/dist/%{version}/powerpc64le-linux/fpc…
+Source3: https://mirror.freemirror.org/pub/fpc/dist/%{version}/powerpc64-linux/fpc-%…
+Source4: https://mirror.freemirror.org/pub/fpc/dist/%{version}/powerpc-linux/fpc-%{v…
Source90: fpc-rpmlintrc
-Patch0: fpc-fix-library-paths-on-aarch64.patch
Patch1: fpc-si_c-x86_64-plt.patch
-Patch2: aarch64-fpc-compilation-fix.patch
-# From https://github.com/graemeg/freepascal/commit/aad68409bec902e39f9292930238ed…
-Patch3: aarch64-fpu-initialization.patch
Patch4: fpc-fix-library-paths-on-ppc64.patch
+# PATCH-FIX-UPSTREAM fpc-3.2.0-glibc-2.34.patch -- aloisio(a)gmx.com not quite upstream but close enough
+Patch5: fpc-3.2.0-glibc-2.34.patch
BuildRequires: binutils
%if 0%{?suse_version}
BuildRequires: fdupes
%endif
-%if %{without bootstrap}
+%if %{without bootstrap} || "%{flavor}" == "doc"
BuildRequires: fpc
-%else
-%if "%{flavor}" == "doc"
-BuildRequires: fpc
-%else
-BuildRequires: unzip
-%endif
%endif
BuildRequires: glibc-devel
%if "%{flavor}" == "doc"
@@ -113,6 +105,7 @@
BuildRequires: tex(fancyhdr.sty)
BuildRequires: tex(float.sty)
BuildRequires: tex(hyperref.sty)
+BuildRequires: tex(imakeidx.sty)
BuildRequires: tex(listings.sty)
BuildRequires: tex(pcrr8t.tfm)
BuildRequires: tex(phvr8t.tfm)
@@ -120,6 +113,7 @@
BuildRequires: tex(syntax.sty)
BuildRequires: tex(tabularx.sty)
BuildRequires: tex(times.sty)
+BuildRequires: tex(upquote.sty)
%endif
Requires: binutils
ExclusiveArch: %ix86 x86_64 %arm aarch64 ppc ppc64 ppc64le
@@ -159,25 +153,41 @@
%prep
%setup -q -n fpcbuild-%{version}
-%patch0 -p1
%patch1 -p0
-%patch2 -p1
-%patch3 -p1
%patch4 -p1
+%if 0%{?suse_version} > 1500
+%patch5 -p1
+%endif
%if %{with bootstrap}
%if "%{flavor}" == ""
%ifarch aarch64
-unzip %{SOURCE1}
+mkdir %{name}-%{version}-aarch64
+tar xf %{SOURCE1}
+tar xf fpc-%{version}.aarch64-linux/binary.aarch64-linux.tar -C fpc-%{version}.aarch64-linux
+tar xf fpc-%{version}.aarch64-linux/base.aarch64-linux.tar.gz -C fpc-%{version}-aarch64
+rm -fr fpc-%{version}.aarch64-linux
%endif
%ifarch ppc64le
-unzip %{SOURCE2}
+mkdir %{name}-%{version}-ppc64le
+tar xf %{SOURCE2}
+tar xf fpc-%{version}.powerpc64-linux/binary.powerpc64-linux.tar -C fpc-%{version}.powerpc64-linux
+tar xf fpc-%{version}.powerpc64-linux/base.powerpc64-linux.tar.gz -C fpc-%{version}-ppc64le
+rm -fr fpc-%{version}.powerpc64-linux
%endif
%ifarch ppc64
-unzip %{SOURCE3}
+mkdir %{name}-%{version}-ppc64
+tar xf %{SOURCE3}
+tar xf fpc-%{version}.powerpc64-linux/binary.powerpc64-linux.tar -C fpc-%{version}.powerpc64-linux
+tar xf fpc-%{version}.powerpc64-linux/base.powerpc64-linux.tar.gz -C fpc-%{version}-ppc64
+rm -fr fpc-%{version}.powerpc64-linux/
%endif
%ifarch ppc
-unzip %{SOURCE4}
+mkdir %{name}-%{version}-ppc
+tar xf %{SOURCE4}
+tar xf fpc-%{version}.powerpc-linux/binary.powerpc-linux.tar -C fpc-%{version}.powerpc-linux
+tar xf fpc-%{version}.powerpc-linux/base.powerpc-linux.tar.gz -C fpc-%{version}-ppc
+rm -fr fpc-%{version}.powerpc-linux
%endif
%endif
%endif
@@ -199,7 +209,7 @@
%build
%if "%{flavor}" == ""
%if %{with bootstrap}
-STARTPP=$(pwd)/fpc-%{version}-%{_arch}/bin/%{ppcname}
+STARTPP=$(pwd)/fpc-%{version}-%{_arch}/lib/fpc/%{version}/%{ppcname}
%else
STARTPP=%{ppcname}
%endif
++++++ _constraints ++++++
<?xml version="1.0"?>
<constraints>
<overwrite>
<conditions>
<arch>ppc</arch>
<arch>ppc64</arch>
<arch>ppc64le</arch>
</conditions>
<hardware>
<disk>
<size unit="G">5</size>
</disk>
</hardware>
</overwrite>
<overwrite>
<conditions>
<arch>aarch64</arch>
</conditions>
<hardware>
<memory>
<size unit="G">4</size>
</memory>
</hardware>
</overwrite>
</constraints>
++++++ fpc-3.2.0-glibc-2.34.patch ++++++
From a6c82b6642871e1c68f3839e090b055bee4254b0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dan=20Hor=C3=A1k?= <dan(a)danny.cz>
Date: Tue, 21 Sep 2021 12:47:28 +0200
Subject: [PATCH] update startup data structs for glibc >= 2.34
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=2005910
Fixes: https://gitlab.com/freepascal.org/fpc/source/-/issues/39295
---
fpcsrc/rtl/linux/aarch64/cprt0.as | 6 ++----
fpcsrc/rtl/linux/i386/si_c21.inc | 7 +++----
fpcsrc/rtl/linux/powerpc64/cprt0.as | 4 ++--
fpcsrc/rtl/linux/powerpc64/gprt0.as | 4 ++--
fpcsrc/rtl/linux/powerpc64/si_c.inc | 7 ++-----
fpcsrc/rtl/linux/powerpc64/si_g.inc | 7 ++-----
fpcsrc/rtl/linux/powerpc/cprt0.as | 4 ++--
7 files changed, 15 insertions(+), 24 deletions(-)
Index: fpcbuild-3.2.2/fpcsrc/rtl/linux/aarch64/cprt0.as
===================================================================
--- fpcbuild-3.2.2.orig/fpcsrc/rtl/linux/aarch64/cprt0.as
+++ fpcbuild-3.2.2/fpcsrc/rtl/linux/aarch64/cprt0.as
@@ -41,10 +41,8 @@ _start:
init, fini, rtld_fini, stack_end) */
adrp x0,:got:PASCALMAIN
ldr x0,[x0,#:got_lo12:PASCALMAIN]
- adrp x3,:got:__libc_csu_init
- ldr x3,[x3,#:got_lo12:__libc_csu_init]
- adrp x4,:got:__libc_csu_fini
- ldr x4,[x4,#:got_lo12:__libc_csu_fini]
+ mov x3, #0 /* Used to be init. */
+ mov x4, #0 /* Used to be fini. */
bl __libc_start_main
/* This should never happen */
Index: fpcbuild-3.2.2/fpcsrc/rtl/linux/i386/si_c21.inc
===================================================================
--- fpcbuild-3.2.2.orig/fpcsrc/rtl/linux/i386/si_c21.inc
+++ fpcbuild-3.2.2/fpcsrc/rtl/linux/i386/si_c21.inc
@@ -35,8 +35,6 @@
{$asmmode att}
-procedure __libc_csu_init; cdecl; external;
-procedure __libc_csu_fini; cdecl; external;
procedure libc_start_main; external name '__libc_start_main';
procedure libc_exit(code: longint); cdecl; external name 'exit';
@@ -93,8 +91,9 @@ asm
pushl %esp { stack_end }
pushl %edx { function to be registered with
atexit(), passed by loader }
- pushl $__libc_csu_fini
- pushl $__libc_csu_init
+ { This used to be the addresses of .fini and .init. }
+ pushl $0
+ pushl $0
pushl %esi { Push second argument: argv. }
pushl %ecx { Push first argument: argc. }
Index: fpcbuild-3.2.2/fpcsrc/rtl/linux/powerpc64/cprt0.as
===================================================================
--- fpcbuild-3.2.2.orig/fpcsrc/rtl/linux/powerpc64/cprt0.as
+++ fpcbuild-3.2.2/fpcsrc/rtl/linux/powerpc64/cprt0.as
@@ -351,8 +351,8 @@ _restvr_31: addi r12,r0,-16
start_addresses:
.quad 0 /* was _SDA_BASE_ but not in 64-bit ABI*/
.quad main_stub
- .quad __libc_csu_init
- .quad __libc_csu_fini
+ .quad 0 /* Used to be init. */
+ .quad 0 /* Used to be fini. */
.size start_adresses, .-start_addresses
/*
Index: fpcbuild-3.2.2/fpcsrc/rtl/linux/powerpc64/gprt0.as
===================================================================
--- fpcbuild-3.2.2.orig/fpcsrc/rtl/linux/powerpc64/gprt0.as
+++ fpcbuild-3.2.2/fpcsrc/rtl/linux/powerpc64/gprt0.as
@@ -351,8 +351,8 @@ _restvr_31: addi r12,r0,-16
start_addresses:
.quad 0 /* was _SDA_BASE_ but not in 64-bit ABI*/
.quad main_stub
- .quad __libc_csu_init
- .quad __libc_csu_fini
+ .quad 0 /* Used to be init. */
+ .quad 0 /* Used to be fini. */
.size start_adresses, .-start_addresses
/*
Index: fpcbuild-3.2.2/fpcsrc/rtl/linux/powerpc64/si_c.inc
===================================================================
--- fpcbuild-3.2.2.orig/fpcsrc/rtl/linux/powerpc64/si_c.inc
+++ fpcbuild-3.2.2/fpcsrc/rtl/linux/powerpc64/si_c.inc
@@ -657,9 +657,6 @@ _restvr_31: addi r12,r0,-16
Process start/halt
******************************************************************************}
-procedure __libc_csu_init; cdecl; external;
-procedure __libc_csu_fini; cdecl; external;
-
procedure __libc_start_main(r3,r4,r5,r6,r7,r8,r9: pointer); cdecl; external;
var
@@ -724,8 +721,8 @@ const
end
= (sda_base: nil; {* was _SDA_BASE_ but not in 64-bit ABI }
main: @main_stub;
- libc_csu_init: @__libc_csu_init;
- libc_csu_fini: @__libc_csu_fini
+ libc_csu_init: nil;
+ libc_csu_fini: nil
);
Index: fpcbuild-3.2.2/fpcsrc/rtl/linux/powerpc64/si_g.inc
===================================================================
--- fpcbuild-3.2.2.orig/fpcsrc/rtl/linux/powerpc64/si_g.inc
+++ fpcbuild-3.2.2/fpcsrc/rtl/linux/powerpc64/si_g.inc
@@ -657,9 +657,6 @@ _restvr_31: addi r12,r0,-16
Process start/halt
******************************************************************************}
-procedure __libc_csu_init; cdecl; external;
-procedure __libc_csu_fini; cdecl; external;
-
procedure __libc_start_main(r3,r4,r5,r6,r7,r8,r9: pointer); cdecl; external;
type
@@ -745,8 +742,8 @@ const
end
= (sda_base: nil; {* was _SDA_BASE_ but not in 64-bit ABI }
main: @main_stub;
- libc_csu_init: @__libc_csu_init;
- libc_csu_fini: @__libc_csu_fini
+ libc_csu_init: nil;
+ libc_csu_fini: nil
);
procedure call_libc_start_main(r3,r4,r5,r6,r7,r8,r9: pointer); cdecl;
Index: fpcbuild-3.2.2/fpcsrc/rtl/linux/powerpc/cprt0.as
===================================================================
--- fpcbuild-3.2.2.orig/fpcsrc/rtl/linux/powerpc/cprt0.as
+++ fpcbuild-3.2.2/fpcsrc/rtl/linux/powerpc/cprt0.as
@@ -35,8 +35,8 @@
start_addresses:
.long _SDA_BASE_
.long main_stub
- .long __libc_csu_init
- .long __libc_csu_fini
+ .long 0 /* Used to be init. */
+ .long 0 /* Used to be fini. */
.size start_adresses, .-start_addresses
.section ".text"
++++++ fpc-fix-library-paths-on-ppc64.patch ++++++
--- /var/tmp/diff_new_pack.yDIUKx/_old 2021-09-29 20:21:01.211171683 +0200
+++ /var/tmp/diff_new_pack.yDIUKx/_new 2021-09-29 20:21:01.211171683 +0200
@@ -1,11 +1,13 @@
---- fpcbuild-3.2.0/fpcsrc/compiler/systems/t_linux.pas.orig 2020-09-25 07:43:31.880558566 +0000
-+++ fpcbuild-3.2.0/fpcsrc/compiler/systems/t_linux.pas 2020-09-25 07:55:16.789263339 +0000
+Index: fpcbuild-3.2.2/fpcsrc/compiler/systems/t_linux.pas
+===================================================================
+--- fpcbuild-3.2.2.orig/fpcsrc/compiler/systems/t_linux.pas
++++ fpcbuild-3.2.2/fpcsrc/compiler/systems/t_linux.pas
@@ -141,7 +141,7 @@ begin
if target_info.abi<>abi_powerpc_elfv2 then
LibrarySearchPath.AddLibraryPath(sysrootpath,'=/lib64;=/usr/lib64;=/usr/X11R6/lib64',true)
else
- LibrarySearchPath.AddLibraryPath(sysrootpath,'=/lib64;=/usr/lib/powerpc64le-linux-gnu;=/usr/X11R6/powerpc64le-linux-gnu',true);
+ LibrarySearchPath.AddLibraryPath(sysrootpath,'=/lib64;=/usr/lib64;=/usr/X11R6/lib64',true);
- {$else}
- {$ifdef aarch64}
- LibrarySearchPath.AddLibraryPath(sysrootpath,'=/usr/lib',true);
+ {$else powerpc64}
+ LibrarySearchPath.AddLibraryPath(sysrootpath,'=/lib;=/usr/lib;=/usr/X11R6/lib',true);
+ {$endif powerpc64}
++++++ fpcbuild-3.2.0.tar.gz -> fpcbuild-3.2.2.tar.gz ++++++
/work/SRC/openSUSE:Factory/fpc/fpcbuild-3.2.0.tar.gz /work/SRC/openSUSE:Factory/.fpc.new.1899/fpcbuild-3.2.2.tar.gz differ: char 13, line 1
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package rubygem-bundler for openSUSE:Factory checked in at 2021-09-29 20:19:15
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/rubygem-bundler (Old)
and /work/SRC/openSUSE:Factory/.rubygem-bundler.new.1899 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "rubygem-bundler"
Wed Sep 29 20:19:15 2021 rev:54 rq:922195 version:2.2.27
Changes:
--------
--- /work/SRC/openSUSE:Factory/rubygem-bundler/rubygem-bundler.changes 2021-08-27 21:43:46.293961289 +0200
+++ /work/SRC/openSUSE:Factory/.rubygem-bundler.new.1899/rubygem-bundler.changes 2021-09-29 20:20:46.835150836 +0200
@@ -1,0 +2,50 @@
+Tue Sep 21 06:41:25 UTC 2021 - Lars Vogdt <lars(a)linux-schulserver.de>
+
+- update to version 2.2.27
+ see installed CHANGELOG.md
+ ## Enhancements:
+ - Optimize some requires #4887
+ - Correctly redact credentials when using x-oauth-basic #4866
+ ## Bug fixes:
+ - Add missing key branches: to template for GitHub Actions #4883
+ - Fix bundle plugin install detection of already installed plugins #4869
+ - Make plugin installation idempotent #4864
+ - Fix bundle check showing duplicated gems when multiple platforms are locked #4854
+ - Fix bundle check incorrectly considering cached gems #4853
+
+ # 2.2.26 (August 17, 2021)
+ ## Enhancements:
+ - Remove RUBYGEMS_GEMDEPS warning #4827
+ - Better defaults for GitHub Actions template generated by bundle gem #4619
+ - Make bundle exec keep file descriptors by default #4812
+ - Exclude gemspec file itself from file list of gems generated by bundle gem #4650
+ - Fix a couple small typos in deprecation / error messages #4806
+ - Make script generated by bundle install --standalone resilient to
+ moving the application to a differently nested folder when path
+ sources are used #4792
+ - Exclude CI files and issue templates from file list of gems
+ generated by bundle gem #4033
+ ## Bug fixes:
+ - Respect BUNDLE_USER_HOME env when choosing config location #4828
+ - Fix bundle gem on path with spaces #4816
+ - Fix bundler hitting the network in some cases where not allowed #4805
+
+ # 2.2.25 (July 30, 2021)
+ ## Deprecations:
+ - Deprecate Gemfile without an explicit global source #4779
+ - Deprecate bundle cache --path #4496
+ ## Enhancements:
+ - Give better errors when materialization fails #4788
+ - Lazily load shellwords library #4786
+ - Show original error and backtrace directly on bundle install errors
+ instead of a more brittle gem install hint #4778
+ - Remove LoadError message in regards to requiring a relative file #4772
+ ## Bug fixes:
+ - Fix BUNDLE_USER_CONFIG no longer respected as config location #4797
+ - Fix --standalone installation of default gems #4782
+ - Fix --quiet flag not printing warnings #4781
+ - Fix bundler binstub version selection #4775
+ - Fix interrupt handling in Bundler workers #4767
+- allow ruby 2.7 on newer openSUSE versions
+
+-------------------------------------------------------------------
Old:
----
bundler-2.2.24.gem
New:
----
bundler-2.2.27.gem
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ rubygem-bundler.spec ++++++
--- /var/tmp/diff_new_pack.iWMK3L/_old 2021-09-29 20:20:47.471151759 +0200
+++ /var/tmp/diff_new_pack.iWMK3L/_new 2021-09-29 20:20:47.475151764 +0200
@@ -24,7 +24,7 @@
#
Name: rubygem-bundler
-Version: 2.2.24
+Version: 2.2.27
Release: 0
%define mod_name bundler
%define mod_full_name %{mod_name}-%{version}
++++++ bundler-2.2.24.gem -> bundler-2.2.27.gem ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CHANGELOG.md new/CHANGELOG.md
--- old/CHANGELOG.md 2021-07-15 17:00:51.000000000 +0200
+++ new/CHANGELOG.md 2021-09-03 10:27:42.000000000 +0200
@@ -1,3 +1,58 @@
+# 2.2.27 (September 3, 2021)
+
+## Enhancements:
+
+ - Optimize some requires [#4887](https://github.com/rubygems/rubygems/pull/4887)
+ - Correctly redact credentials when using x-oauth-basic [#4866](https://github.com/rubygems/rubygems/pull/4866)
+
+## Bug fixes:
+
+ - Add missing key `branches:` to template for GitHub Actions [#4883](https://github.com/rubygems/rubygems/pull/4883)
+ - Fix `bundle plugin install` detection of already installed plugins [#4869](https://github.com/rubygems/rubygems/pull/4869)
+ - Make plugin installation idempotent [#4864](https://github.com/rubygems/rubygems/pull/4864)
+ - Fix `bundle check` showing duplicated gems when multiple platforms are locked [#4854](https://github.com/rubygems/rubygems/pull/4854)
+ - Fix `bundle check` incorrectly considering cached gems [#4853](https://github.com/rubygems/rubygems/pull/4853)
+
+# 2.2.26 (August 17, 2021)
+
+## Enhancements:
+
+ - Remove `RUBYGEMS_GEMDEPS` warning [#4827](https://github.com/rubygems/rubygems/pull/4827)
+ - Better defaults for GitHub Actions template generated by `bundle gem` [#4619](https://github.com/rubygems/rubygems/pull/4619)
+ - Make `bundle exec` keep file descriptors by default [#4812](https://github.com/rubygems/rubygems/pull/4812)
+ - Exclude gemspec file itself from file list of gems generated by `bundle gem` [#4650](https://github.com/rubygems/rubygems/pull/4650)
+ - Fix a couple small typos in deprecation / error messages [#4806](https://github.com/rubygems/rubygems/pull/4806)
+ - Make script generated by `bundle install --standalone` resilient to moving the application to a differently nested folder when `path` sources are used [#4792](https://github.com/rubygems/rubygems/pull/4792)
+ - Exclude CI files and issue templates from file list of gems generated by `bundle gem` [#4033](https://github.com/rubygems/rubygems/pull/4033)
+
+## Bug fixes:
+
+ - Respect `BUNDLE_USER_HOME` env when choosing config location [#4828](https://github.com/rubygems/rubygems/pull/4828)
+ - Fix `bundle gem` on path with spaces [#4816](https://github.com/rubygems/rubygems/pull/4816)
+ - Fix bundler hitting the network in some cases where not allowed [#4805](https://github.com/rubygems/rubygems/pull/4805)
+
+# 2.2.25 (July 30, 2021)
+
+## Deprecations:
+
+ - Deprecate Gemfile without an explicit global source [#4779](https://github.com/rubygems/rubygems/pull/4779)
+ - Deprecate `bundle cache --path` [#4496](https://github.com/rubygems/rubygems/pull/4496)
+
+## Enhancements:
+
+ - Give better errors when materialization fails [#4788](https://github.com/rubygems/rubygems/pull/4788)
+ - Lazily load `shellwords` library [#4786](https://github.com/rubygems/rubygems/pull/4786)
+ - Show original error and backtrace directly on `bundle install` errors instead of a more brittle `gem install` hint [#4778](https://github.com/rubygems/rubygems/pull/4778)
+ - Remove LoadError message in regards to requiring a relative file [#4772](https://github.com/rubygems/rubygems/pull/4772)
+
+## Bug fixes:
+
+ - Fix `BUNDLE_USER_CONFIG` no longer respected as config location [#4797](https://github.com/rubygems/rubygems/pull/4797)
+ - Fix `--standalone` installation of default gems [#4782](https://github.com/rubygems/rubygems/pull/4782)
+ - Fix `--quiet` flag not printing warnings [#4781](https://github.com/rubygems/rubygems/pull/4781)
+ - Fix bundler binstub version selection [#4775](https://github.com/rubygems/rubygems/pull/4775)
+ - Fix interrupt handling in Bundler workers [#4767](https://github.com/rubygems/rubygems/pull/4767)
+
# 2.2.24 (July 15, 2021)
## Bug fixes:
Binary files old/checksums.yaml.gz and new/checksums.yaml.gz differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/bundler/build_metadata.rb new/lib/bundler/build_metadata.rb
--- old/lib/bundler/build_metadata.rb 2021-07-15 17:00:51.000000000 +0200
+++ new/lib/bundler/build_metadata.rb 2021-09-03 10:27:42.000000000 +0200
@@ -4,8 +4,8 @@
# Represents metadata from when the Bundler gem was built.
module BuildMetadata
# begin ivars
- @built_at = "2021-07-15".freeze
- @git_commit_sha = "d78b1ee235".freeze
+ @built_at = "2021-09-03".freeze
+ @git_commit_sha = "b737e1c930".freeze
@release = true
# end ivars
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/bundler/cli/cache.rb new/lib/bundler/cli/cache.rb
--- old/lib/bundler/cli/cache.rb 2021-07-15 17:00:51.000000000 +0200
+++ new/lib/bundler/cli/cache.rb 2021-09-03 10:27:42.000000000 +0200
@@ -9,7 +9,7 @@
end
def run
- Bundler.ui.level = "error" if options[:quiet]
+ Bundler.ui.level = "warn" if options[:quiet]
Bundler.settings.set_command_option_if_given :path, options[:path]
Bundler.settings.set_command_option_if_given :cache_path, options["cache-path"]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/bundler/cli/doctor.rb new/lib/bundler/cli/doctor.rb
--- old/lib/bundler/cli/doctor.rb 2021-07-15 17:00:51.000000000 +0200
+++ new/lib/bundler/cli/doctor.rb 2021-09-03 10:27:42.000000000 +0200
@@ -61,7 +61,7 @@
end
def run
- Bundler.ui.level = "error" if options[:quiet]
+ Bundler.ui.level = "warn" if options[:quiet]
Bundler.settings.validate!
check!
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/bundler/cli/exec.rb new/lib/bundler/cli/exec.rb
--- old/lib/bundler/cli/exec.rb 2021-07-15 17:00:51.000000000 +0200
+++ new/lib/bundler/cli/exec.rb 2021-09-03 10:27:42.000000000 +0200
@@ -12,12 +12,7 @@
@options = options
@cmd = args.shift
@args = args
-
- if !Bundler.current_ruby.jruby?
- @args << { :close_others => !options.keep_file_descriptors? }
- elsif options.keep_file_descriptors?
- Bundler.ui.warn "Ruby version #{RUBY_VERSION} defaults to keeping non-standard file descriptors on Kernel#exec."
- end
+ @args << { :close_others => !options.keep_file_descriptors? } unless Bundler.current_ruby.jruby?
end
def run
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/bundler/cli/gem.rb new/lib/bundler/cli/gem.rb
--- old/lib/bundler/cli/gem.rb 2021-07-15 17:00:51.000000000 +0200
+++ new/lib/bundler/cli/gem.rb 2021-09-03 10:27:42.000000000 +0200
@@ -184,14 +184,15 @@
)
end
- if File.exist?(target) && !File.directory?(target)
+ if target.exist? && !target.directory?
Bundler.ui.error "Couldn't create a new gem named `#{gem_name}` because there's an existing file named `#{gem_name}`."
exit Bundler::BundlerError.all_errors[Bundler::GenericSystemCallError]
end
if use_git
Bundler.ui.info "Initializing git repo in #{target}"
- `git init #{target}`
+ require "shellwords"
+ `git init #{target.to_s.shellescape}`
config[:git_default_branch] = File.read("#{target}/.git/HEAD").split("/").last.chomp
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/bundler/cli/install.rb new/lib/bundler/cli/install.rb
--- old/lib/bundler/cli/install.rb 2021-07-15 17:00:51.000000000 +0200
+++ new/lib/bundler/cli/install.rb 2021-09-03 10:27:42.000000000 +0200
@@ -8,7 +8,7 @@
end
def run
- Bundler.ui.level = "error" if options[:quiet]
+ Bundler.ui.level = "warn" if options[:quiet]
warn_if_root
@@ -60,7 +60,7 @@
installer = Installer.install(Bundler.root, definition, options)
Bundler.settings.temporary(:cache_all_platforms => options[:local] ? false : Bundler.settings[:cache_all_platforms]) do
- Bundler.load.cache if Bundler.app_cache.exist? && !options["no-cache"] && !Bundler.frozen_bundle?
+ Bundler.load.cache(nil, options[:local]) if Bundler.app_cache.exist? && !options["no-cache"] && !Bundler.frozen_bundle?
end
Bundler.ui.confirm "Bundle complete! #{dependencies_count_for(definition)}, #{gems_installed_for(definition)}."
@@ -83,22 +83,9 @@
end
Bundler::CLI::Common.output_fund_metadata_summary
- rescue GemNotFound, VersionConflict => e
- if options[:local] && Bundler.app_cache.exist?
- Bundler.ui.warn "Some gems seem to be missing from your #{Bundler.settings.app_cache_path} directory."
- end
-
- unless Bundler.definition.has_rubygems_remotes?
- Bundler.ui.warn <<-WARN, :wrap => true
- Your Gemfile has no gem server sources. If you need gems that are \
- not already on your machine, add a line like this to your Gemfile:
- source 'https://rubygems.org'
- WARN
- end
- raise e
- rescue Gem::InvalidSpecificationException => e
+ rescue Gem::InvalidSpecificationException
Bundler.ui.warn "You have one or more invalid gemspecs that need to be fixed."
- raise e
+ raise
end
private
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/bundler/cli/list.rb new/lib/bundler/cli/list.rb
--- old/lib/bundler/cli/list.rb 2021-07-15 17:00:51.000000000 +0200
+++ new/lib/bundler/cli/list.rb 2021-09-03 10:27:42.000000000 +0200
@@ -16,7 +16,13 @@
specs = if @only_group.any? || @without_group.any?
filtered_specs_by_groups
else
- Bundler.load.specs
+ begin
+ Bundler.load.specs
+ rescue GemNotFound => e
+ Bundler.ui.error e.message
+ Bundler.ui.warn "Install missing gems with `bundle install`."
+ exit 1
+ end
end.reject {|s| s.name == "bundler" }.sort_by(&:name)
return Bundler.ui.info "No gems in the Gemfile" if specs.empty?
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/bundler/cli/open.rb new/lib/bundler/cli/open.rb
--- old/lib/bundler/cli/open.rb 2021-07-15 17:00:51.000000000 +0200
+++ new/lib/bundler/cli/open.rb 2021-09-03 10:27:42.000000000 +0200
@@ -1,7 +1,5 @@
# frozen_string_literal: true
-require "shellwords"
-
module Bundler
class CLI::Open
attr_reader :options, :name
@@ -19,6 +17,7 @@
else
path = spec.full_gem_path
Dir.chdir(path) do
+ require "shellwords"
command = Shellwords.split(editor) + [path]
Bundler.with_original_env do
system(*command)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/bundler/cli/update.rb new/lib/bundler/cli/update.rb
--- old/lib/bundler/cli/update.rb 2021-07-15 17:00:51.000000000 +0200
+++ new/lib/bundler/cli/update.rb 2021-09-03 10:27:42.000000000 +0200
@@ -9,7 +9,7 @@
end
def run
- Bundler.ui.level = "error" if options[:quiet]
+ Bundler.ui.level = "warn" if options[:quiet]
Plugin.gemfile_install(Bundler.default_gemfile) if Bundler.feature_flag.plugins?
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/bundler/cli.rb new/lib/bundler/cli.rb
--- old/lib/bundler/cli.rb 2021-07-15 17:00:51.000000000 +0200
+++ new/lib/bundler/cli.rb 2021-09-03 10:27:42.000000000 +0200
@@ -73,14 +73,6 @@
Bundler.ui = UI::Shell.new(options)
Bundler.ui.level = "debug" if options["verbose"]
unprinted_warnings.each {|w| Bundler.ui.warn(w) }
-
- if ENV["RUBYGEMS_GEMDEPS"] && !ENV["RUBYGEMS_GEMDEPS"].empty?
- Bundler.ui.warn(
- "The RUBYGEMS_GEMDEPS environment variable is set. This enables RubyGems' " \
- "experimental Gemfile mode, which may conflict with Bundler and cause unexpected errors. " \
- "To remove this warning, unset RUBYGEMS_GEMDEPS.", :wrap => true
- )
- end
end
check_unknown_options!(:except => [:config, :exec])
@@ -456,6 +448,12 @@
"do in future versions. Instead please use `bundle config set cache_all true`, " \
"and stop using this flag" if ARGV.include?("--all")
+ SharedHelpers.major_deprecation 2,
+ "The `--path` flag is deprecated because its semantics are unclear. " \
+ "Use `bundle config cache_path` to configure the path of your cache of gems, " \
+ "and `bundle config path` to configure the path where your gems are installed, " \
+ "and stop using this flag" if ARGV.include?("--path")
+
require_relative "cli/cache"
Cache.new(options).run
end
@@ -463,7 +461,7 @@
map aliases_for("cache")
desc "exec [OPTIONS]", "Run the command in context of the bundle"
- method_option :keep_file_descriptors, :type => :boolean, :default => false
+ method_option :keep_file_descriptors, :type => :boolean, :default => true
method_option :gemfile, :type => :string, :required => false
long_desc <<-D
Exec runs a command, providing it access to the gems in the bundle. While using
@@ -471,6 +469,10 @@
into the system wide RubyGems repository.
D
def exec(*args)
+ if ARGV.include?("--no-keep-file-descriptors")
+ SharedHelpers.major_deprecation(2, "The `--no-keep-file-descriptors` has been deprecated. `bundle exec` no longer mess with your file descriptors. Close them in the exec'd script if you need to")
+ end
+
require_relative "cli/exec"
Exec.new(options, args).run
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/bundler/definition.rb new/lib/bundler/definition.rb
--- old/lib/bundler/definition.rb 2021-07-15 17:00:51.000000000 +0200
+++ new/lib/bundler/definition.rb 2021-09-03 10:27:42.000000000 +0200
@@ -133,7 +133,7 @@
@unlock[:gems] ||= @dependencies.map(&:name)
else
eager_unlock = expand_dependencies(@unlock[:gems] || [], true)
- @unlock[:gems] = @locked_specs.for(eager_unlock, false, false, false).map(&:name)
+ @unlock[:gems] = @locked_specs.for(eager_unlock, false, false).map(&:name)
end
@dependency_changes = converge_dependencies
@@ -185,15 +185,7 @@
#
# @return [Bundler::SpecSet]
def specs
- @specs ||= add_bundler_to(resolve.materialize(requested_dependencies))
- rescue GemNotFound => e # Handle yanked gem
- gem_name, gem_version = extract_gem_info(e)
- locked_gem = @locked_specs[gem_name].last
- raise if locked_gem.nil? || locked_gem.version.to_s != gem_version || !@remote
- raise GemNotFound, "Your bundle is locked to #{locked_gem} from #{locked_gem.source}, but that version can " \
- "no longer be found in that source. That means the author of #{locked_gem} has removed it. " \
- "You'll need to update your bundle to a version other than #{locked_gem} that hasn't been " \
- "removed in order to install."
+ @specs ||= materialize(requested_dependencies)
end
def new_specs
@@ -205,9 +197,7 @@
end
def missing_specs
- missing = []
- resolve.materialize(requested_dependencies, missing)
- missing
+ resolve.materialize(requested_dependencies).missing_specs
end
def missing_specs?
@@ -241,7 +231,7 @@
def specs_for(groups)
groups = requested_groups if groups.empty?
deps = dependencies_for(groups)
- add_bundler_to(resolve.materialize(expand_dependencies(deps)))
+ materialize(expand_dependencies(deps))
end
def dependencies_for(groups)
@@ -274,10 +264,6 @@
end
end
- def has_rubygems_remotes?
- sources.rubygems_sources.any? {|s| s.remotes.any? }
- end
-
def spec_git_paths
sources.git_sources.map {|s| File.realpath(s.path) if File.exist?(s.path) }.compact
end
@@ -493,7 +479,23 @@
private
- def add_bundler_to(specs)
+ def materialize(dependencies)
+ specs = resolve.materialize(dependencies)
+ missing_specs = specs.missing_specs
+
+ if missing_specs.any?
+ missing_specs.each do |s|
+ locked_gem = @locked_specs[s.name].last
+ next if locked_gem.nil? || locked_gem.version != s.version || !@remote
+ raise GemNotFound, "Your bundle is locked to #{locked_gem} from #{locked_gem.source}, but that version can " \
+ "no longer be found in that source. That means the author of #{locked_gem} has removed it. " \
+ "You'll need to update your bundle to a version other than #{locked_gem} that hasn't been " \
+ "removed in order to install."
+ end
+
+ raise GemNotFound, "Could not find #{missing_specs.map(&:full_name).join(", ")} in any of the sources"
+ end
+
unless specs["bundler"].any?
bundler = sources.metadata_source.specs.search(Gem::Dependency.new("bundler", VERSION)).last
specs["bundler"] = bundler
@@ -503,7 +505,7 @@
end
def precompute_source_requirements_for_indirect_dependencies?
- sources.non_global_rubygems_sources.all?(&:dependency_api_available?) && !sources.aggregate_global_source?
+ @remote && sources.non_global_rubygems_sources.all?(&:dependency_api_available?) && !sources.aggregate_global_source?
end
def current_ruby_platform_locked?
@@ -712,7 +714,7 @@
@locked_specs.each do |s|
# Replace the locked dependency's source with the equivalent source from the Gemfile
dep = @dependencies.find {|d| s.satisfies?(d) }
- s.source = (dep && dep.source) || sources.get(s.source)
+ s.source = (dep && dep.source) || sources.get(s.source) unless multisource_allowed?
# Don't add a spec to the list if its source is expired. For example,
# if you change a Git gem to RubyGems.
@@ -730,7 +732,7 @@
# if we won't need the source (according to the lockfile),
# don't error if the path/git source isn't available
next if @locked_specs.
- for(requested_dependencies, false, true, false).
+ for(requested_dependencies, false, true).
none? {|locked_spec| locked_spec.source == s.source }
raise
@@ -750,7 +752,7 @@
resolve = SpecSet.new(converged)
@locked_specs_incomplete_for_platform = !resolve.for(expand_dependencies(requested_dependencies & deps), true, true)
- resolve = SpecSet.new(resolve.for(expand_dependencies(deps, true), false, false, false).reject{|s| @unlock[:gems].include?(s.name) })
+ resolve = SpecSet.new(resolve.for(expand_dependencies(deps, true), false, false).reject{|s| @unlock[:gems].include?(s.name) })
diff = nil
# Now, we unlock any sources that do not have anymore gems pinned to it
@@ -854,12 +856,6 @@
current == proposed
end
- def extract_gem_info(error)
- # This method will extract the error message like "Could not find foo-1.2.3 in any of the sources"
- # to an array. The first element will be the gem name (e.g. foo), the second will be the version number.
- error.message.scan(/Could not find (\w+)-(\d+(?:\.\d+)+)/).flatten
- end
-
def compute_requires
dependencies.reduce({}) do |requires, dep|
next requires unless dep.should_include?
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/bundler/dsl.rb new/lib/bundler/dsl.rb
--- old/lib/bundler/dsl.rb 2021-07-15 17:00:51.000000000 +0200
+++ new/lib/bundler/dsl.rb 2021-09-03 10:27:42.000000000 +0200
@@ -447,8 +447,21 @@
end
def check_rubygems_source_safety
- return unless @sources.aggregate_global_source?
+ if @sources.implicit_global_source?
+ implicit_global_source_warning
+ elsif @sources.aggregate_global_source?
+ multiple_global_source_warning
+ end
+ end
+
+ def implicit_global_source_warning
+ Bundler::SharedHelpers.major_deprecation 2, "This Gemfile does not include an explicit global source. " \
+ "Not using an explicit global source may result in a different lockfile being generated depending on " \
+ "the gems you have installed locally before bundler is run. " \
+ "Instead, define a global source in your Gemfile like this: source \"https://rubygems.org\"."
+ end
+ def multiple_global_source_warning
if Bundler.feature_flag.bundler_3_mode?
msg = "This Gemfile contains multiple primary sources. " \
"Each source after the first must include a block to indicate which gems " \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/bundler/errors.rb new/lib/bundler/errors.rb
--- old/lib/bundler/errors.rb 2021-07-15 17:00:51.000000000 +0200
+++ new/lib/bundler/errors.rb 2021-09-03 10:27:42.000000000 +0200
@@ -122,7 +122,7 @@
class VirtualProtocolError < BundlerError
def message
- "There was an error relating to virtualization and file access." \
+ "There was an error relating to virtualization and file access. " \
"It is likely that you need to grant access to or mount some file system correctly."
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/bundler/installer/gem_installer.rb new/lib/bundler/installer/gem_installer.rb
--- old/lib/bundler/installer/gem_installer.rb 2021-07-15 17:00:51.000000000 +0200
+++ new/lib/bundler/installer/gem_installer.rb 2021-09-03 10:27:42.000000000 +0200
@@ -1,7 +1,5 @@
# frozen_string_literal: true
-require "shellwords"
-
module Bundler
class GemInstaller
attr_reader :spec, :standalone, :worker, :force, :installer
@@ -31,34 +29,23 @@
def specific_failure_message(e)
message = "#{e.class}: #{e.message}\n"
- message += " " + e.backtrace.join("\n ") + "\n\n" if Bundler.ui.debug?
+ message += " " + e.backtrace.join("\n ") + "\n\n"
message = message.lines.first + Bundler.ui.add_color(message.lines.drop(1).join, :clear)
message + Bundler.ui.add_color(failure_message, :red)
end
def failure_message
- return install_error_message if spec.source.options["git"]
- "#{install_error_message}\n#{gem_install_message}"
+ install_error_message
end
def install_error_message
"An error occurred while installing #{spec.name} (#{spec.version}), and Bundler cannot continue."
end
- def gem_install_message
- source = spec.source
- return unless source.respond_to?(:remotes)
-
- if source.remotes.size == 1
- "Make sure that `gem install #{spec.name} -v '#{spec.version}' --source '#{source.remotes.first}'` succeeds before bundling."
- else
- "Make sure that `gem install #{spec.name} -v '#{spec.version}'` succeeds before bundling."
- end
- end
-
def spec_settings
# Fetch the build settings, if there are any
if settings = Bundler.settings["build.#{spec.name}"]
+ require "shellwords"
Shellwords.shellsplit(settings)
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/bundler/installer/standalone.rb new/lib/bundler/installer/standalone.rb
--- old/lib/bundler/installer/standalone.rb 2021-07-15 17:00:51.000000000 +0200
+++ new/lib/bundler/installer/standalone.rb 2021-09-03 10:27:42.000000000 +0200
@@ -12,12 +12,13 @@
end
File.open File.join(bundler_path, "setup.rb"), "w" do |file|
file.puts "require 'rbconfig'"
- file.puts "ruby_engine = RUBY_ENGINE"
- file.puts "ruby_version = RbConfig::CONFIG[\"ruby_version\"]"
- file.puts "path = File.expand_path('..', __FILE__)"
file.puts reverse_rubygems_kernel_mixin
paths.each do |path|
- file.puts %($:.unshift File.expand_path("\#{path}/#{path}"))
+ if Pathname.new(path).absolute?
+ file.puts %($:.unshift "#{path}")
+ else
+ file.puts %($:.unshift File.expand_path("\#{__dir__}/#{path}"))
+ end
end
end
end
@@ -28,14 +29,14 @@
@specs.map do |spec|
next if spec.name == "bundler"
Array(spec.require_paths).map do |path|
- gem_path(path, spec).sub(version_dir, '#{ruby_engine}/#{ruby_version}')
+ gem_path(path, spec).sub(version_dir, '#{RUBY_ENGINE}/#{RbConfig::CONFIG["ruby_version"]}')
# This is a static string intentionally. It's interpolated at a later time.
end
- end.flatten
+ end.flatten.compact
end
def version_dir
- "#{Bundler::RubyVersion.system.engine}/#{RbConfig::CONFIG["ruby_version"]}"
+ "#{RUBY_ENGINE}/#{RbConfig::CONFIG["ruby_version"]}"
end
def bundler_path
@@ -44,7 +45,11 @@
def gem_path(path, spec)
full_path = Pathname.new(path).absolute? ? path : File.join(spec.full_gem_path, path)
- Pathname.new(full_path).relative_path_from(Bundler.root.join(bundler_path)).to_s
+ if spec.source.instance_of?(Source::Path)
+ full_path
+ else
+ Pathname.new(full_path).relative_path_from(Bundler.root.join(bundler_path)).to_s
+ end
rescue TypeError
error_message = "#{spec.name} #{spec.version} has an invalid gemspec"
raise Gem::InvalidSpecificationException.new(error_message)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/bundler/installer.rb new/lib/bundler/installer.rb
--- old/lib/bundler/installer.rb 2021-07-15 17:00:51.000000000 +0200
+++ new/lib/bundler/installer.rb 2021-09-03 10:27:42.000000000 +0200
@@ -1,6 +1,5 @@
# frozen_string_literal: true
-require "rubygems/dependency_installer"
require_relative "worker"
require_relative "installer/parallel_installer"
require_relative "installer/standalone"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/bundler/lockfile_parser.rb new/lib/bundler/lockfile_parser.rb
--- old/lib/bundler/lockfile_parser.rb 2021-07-15 17:00:51.000000000 +0200
+++ new/lib/bundler/lockfile_parser.rb 2021-09-03 10:27:42.000000000 +0200
@@ -195,6 +195,7 @@
platform = platform ? Gem::Platform.new(platform) : Gem::Platform::RUBY
@current_spec = LazySpecification.new(name, version, platform)
@current_spec.source = @current_source
+ @current_source.add_dependency_names(name)
@specs[@current_spec.identifier] = @current_spec
elsif spaces.size == 6
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/bundler/plugin/installer.rb new/lib/bundler/plugin/installer.rb
--- old/lib/bundler/plugin/installer.rb 2021-07-15 17:00:51.000000000 +0200
+++ new/lib/bundler/plugin/installer.rb 2021-09-03 10:27:42.000000000 +0200
@@ -81,6 +81,8 @@
deps = names.map {|name| Dependency.new name, version }
+ Bundler.configure_gem_home_and_path(Plugin.root)
+
definition = Definition.new(nil, deps, source_list, true)
install_definition(definition)
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/bundler/plugin.rb new/lib/bundler/plugin.rb
--- old/lib/bundler/plugin.rb 2021-07-15 17:00:51.000000000 +0200
+++ new/lib/bundler/plugin.rb 2021-09-03 10:27:42.000000000 +0200
@@ -13,6 +13,7 @@
class MalformattedPlugin < PluginError; end
class UndefinedCommandError < PluginError; end
class UnknownSourceError < PluginError; end
+ class PluginInstallError < PluginError; end
PLUGIN_FILE_NAME = "plugins.rb".freeze
@@ -38,12 +39,11 @@
specs = Installer.new.install(names, options)
save_plugins names, specs
- rescue PluginError => e
+ rescue PluginError
specs_to_delete = specs.select {|k, _v| names.include?(k) && !index.commands.values.include?(k) }
specs_to_delete.each_value {|spec| Bundler.rm_rf(spec.full_gem_path) }
- names_list = names.map {|name| "`#{name}`" }.join(", ")
- Bundler.ui.error "Failed to install the following plugins: #{names_list}. The underlying error was: #{e.message}.\n #{e.backtrace.join("\n ")}"
+ raise
end
# Uninstalls plugins by the given names
@@ -245,10 +245,11 @@
# @param [Array<String>] names of inferred source plugins that can be ignored
def save_plugins(plugins, specs, optional_plugins = [])
plugins.each do |name|
+ next if index.installed?(name)
+
spec = specs[name]
- validate_plugin! Pathname.new(spec.full_gem_path)
- installed = register_plugin(name, spec, optional_plugins.include?(name))
- Bundler.ui.info "Installed plugin #{name}" if installed
+
+ save_plugin(name, spec, optional_plugins.include?(name))
end
end
@@ -263,6 +264,22 @@
raise MalformattedPlugin, "#{PLUGIN_FILE_NAME} was not found in the plugin." unless plugin_file.file?
end
+ # Validates and registers a plugin.
+ #
+ # @param [String] name the name of the plugin
+ # @param [Specification] spec of installed plugin
+ # @param [Boolean] optional_plugin, removed if there is conflict with any
+ # other plugin (used for default source plugins)
+ #
+ # @raise [PluginInstallError] if validation or registration raises any error
+ def save_plugin(name, spec, optional_plugin = false)
+ validate_plugin! Pathname.new(spec.full_gem_path)
+ installed = register_plugin(name, spec, optional_plugin)
+ Bundler.ui.info "Installed plugin #{name}" if installed
+ rescue PluginError => e
+ raise PluginInstallError, "Failed to install plugin `#{spec.name}`, due to #{e.class} (#{e.message})"
+ end
+
# Runs the plugins.rb file in an isolated namespace, records the plugin
# actions it registers for and then passes the data to index to be stored.
#
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/bundler/resolver.rb new/lib/bundler/resolver.rb
--- old/lib/bundler/resolver.rb 2021-07-15 17:00:51.000000000 +0200
+++ new/lib/bundler/resolver.rb 2021-09-03 10:27:42.000000000 +0200
@@ -255,12 +255,6 @@
next if name == "bundler"
next unless search_for(requirement).empty?
- cache_message = begin
- " or in gems cached in #{Bundler.settings.app_cache_path}" if Bundler.app_cache.exist?
- rescue GemfileNotFound
- nil
- end
-
if (base = @base[name]) && !base.empty?
version = base.first.version
message = "You have requested:\n" \
@@ -269,18 +263,17 @@
"Try running `bundle update #{name}`\n\n" \
"If you are updating multiple gems in your Gemfile at once,\n" \
"try passing them all to `bundle update`"
- elsif source = @source_requirements[name]
+ else
+ source = source_for(name)
specs = source.specs.search(name)
versions_with_platforms = specs.map {|s| [s.version, s.platform] }
- message = String.new("Could not find gem '#{SharedHelpers.pretty_dependency(requirement)}' in #{source}#{cache_message}.\n")
- message << if versions_with_platforms.any?
- "The source contains the following versions of '#{name}': #{formatted_versions_with_platforms(versions_with_platforms)}"
- else
- "The source does not contain any versions of '#{name}'"
- end
- else
- message = "Could not find gem '#{SharedHelpers.pretty_dependency(requirement)}' in any of the gem sources " \
- "listed in your Gemfile#{cache_message}."
+ cache_message = begin
+ " or in gems cached in #{Bundler.settings.app_cache_path}" if Bundler.app_cache.exist?
+ rescue GemfileNotFound
+ nil
+ end
+ message = String.new("Could not find gem '#{SharedHelpers.pretty_dependency(requirement)}' in #{source.to_err}#{cache_message}.\n")
+ message << "The source contains the following versions of '#{name}': #{formatted_versions_with_platforms(versions_with_platforms)}" if versions_with_platforms.any?
end
raise GemNotFound, message
end
@@ -378,7 +371,7 @@
o << if metadata_requirement
"is not available in #{relevant_source}"
else
- "in #{relevant_source}.\n"
+ "in #{relevant_source.to_err}.\n"
end
end
end,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/bundler/rubygems_gem_installer.rb new/lib/bundler/rubygems_gem_installer.rb
--- old/lib/bundler/rubygems_gem_installer.rb 2021-07-15 17:00:51.000000000 +0200
+++ new/lib/bundler/rubygems_gem_installer.rb 2021-09-03 10:27:42.000000000 +0200
@@ -61,7 +61,10 @@
def build_extensions
extension_cache_path = options[:bundler_extension_cache_path]
- return super unless extension_cache_path && extension_dir = spec.extension_dir
+ unless extension_cache_path && extension_dir = spec.extension_dir
+ require "shellwords" # compensate missing require in rubygems before version 3.2.25
+ return super
+ end
extension_dir = Pathname.new(extension_dir)
build_complete = SharedHelpers.filesystem_access(extension_cache_path.join("gem.build_complete"), :read, &:file?)
@@ -71,6 +74,7 @@
FileUtils.cp_r extension_cache_path, spec.extension_dir
end
else
+ require "shellwords" # compensate missing require in rubygems before version 3.2.25
super
if extension_dir.directory? # not made for gems without extensions
SharedHelpers.filesystem_access(extension_cache_path.parent, &:mkpath)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/bundler/rubygems_integration.rb new/lib/bundler/rubygems_integration.rb
--- old/lib/bundler/rubygems_integration.rb 2021-07-15 17:00:51.000000000 +0200
+++ new/lib/bundler/rubygems_integration.rb 2021-09-03 10:27:42.000000000 +0200
@@ -34,10 +34,12 @@
end
def build_args
+ require "rubygems/command"
Gem::Command.build_args
end
def build_args=(args)
+ require "rubygems/command"
Gem::Command.build_args = args
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/bundler/runtime.rb new/lib/bundler/runtime.rb
--- old/lib/bundler/runtime.rb 2021-07-15 17:00:51.000000000 +0200
+++ new/lib/bundler/runtime.rb 2021-09-03 10:27:42.000000000 +0200
@@ -22,10 +22,6 @@
# Activate the specs
load_paths = specs.map do |spec|
- unless spec.loaded_from
- raise GemNotFound, "#{spec.full_name} is missing. Run `bundle install` to get it."
- end
-
check_for_activated_spec!(spec)
Bundler.rubygems.mark_loaded(spec)
@@ -104,7 +100,7 @@
alias_method :gems, :specs
- def cache(custom_path = nil)
+ def cache(custom_path = nil, local = false)
cache_path = Bundler.app_cache(custom_path)
SharedHelpers.filesystem_access(cache_path) do |p|
FileUtils.mkdir_p(p)
@@ -112,7 +108,20 @@
Bundler.ui.info "Updating files in #{Bundler.settings.app_cache_path}"
- specs_to_cache = Bundler.settings[:cache_all_platforms] ? @definition.resolve.materialized_for_all_platforms : specs
+ specs_to_cache = if Bundler.settings[:cache_all_platforms]
+ @definition.resolve.materialized_for_all_platforms
+ else
+ begin
+ specs
+ rescue GemNotFound
+ if local
+ Bundler.ui.warn "Some gems seem to be missing from your #{Bundler.settings.app_cache_path} directory."
+ end
+
+ raise
+ end
+ end
+
specs_to_cache.each do |spec|
next if spec.name == "bundler"
next if spec.source.is_a?(Source::Gemspec)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/bundler/settings.rb new/lib/bundler/settings.rb
--- old/lib/bundler/settings.rb 2021-07-15 17:00:51.000000000 +0200
+++ new/lib/bundler/settings.rb 2021-09-03 10:27:42.000000000 +0200
@@ -419,7 +419,15 @@
elsif is_credential(key)
"[REDACTED]"
elsif is_userinfo(converted)
- converted.gsub(/:.*$/, ":[REDACTED]")
+ username, pass = converted.split(":", 2)
+
+ if pass == "x-oauth-basic"
+ username = "[REDACTED]"
+ else
+ pass = "[REDACTED]"
+ end
+
+ [username, pass].join(":")
else
converted
end
@@ -428,6 +436,10 @@
def global_config_file
if ENV["BUNDLE_CONFIG"] && !ENV["BUNDLE_CONFIG"].empty?
Pathname.new(ENV["BUNDLE_CONFIG"])
+ elsif ENV["BUNDLE_USER_CONFIG"] && !ENV["BUNDLE_USER_CONFIG"].empty?
+ Pathname.new(ENV["BUNDLE_USER_CONFIG"])
+ elsif ENV["BUNDLE_USER_HOME"] && !ENV["BUNDLE_USER_HOME"].empty?
+ Pathname.new(ENV["BUNDLE_USER_HOME"]).join("config")
elsif Bundler.rubygems.user_home && !Bundler.rubygems.user_home.empty?
Pathname.new(Bundler.rubygems.user_home).join(".bundle/config")
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/bundler/setup.rb new/lib/bundler/setup.rb
--- old/lib/bundler/setup.rb 2021-07-15 17:00:51.000000000 +0200
+++ new/lib/bundler/setup.rb 2021-09-03 10:27:42.000000000 +0200
@@ -9,10 +9,10 @@
begin
Bundler.ui.silence { Bundler.setup }
rescue Bundler::BundlerError => e
- Bundler.ui.warn "\e[31m#{e.message}\e[0m"
+ Bundler.ui.error e.message
Bundler.ui.warn e.backtrace.join("\n") if ENV["DEBUG"]
if e.is_a?(Bundler::GemNotFound)
- Bundler.ui.warn "\e[33mRun `bundle install` to install missing gems.\e[0m"
+ Bundler.ui.warn "Run `bundle install` to install missing gems."
end
exit e.status_code
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/bundler/shared_helpers.rb new/lib/bundler/shared_helpers.rb
--- old/lib/bundler/shared_helpers.rb 2021-07-15 17:00:51.000000000 +0200
+++ new/lib/bundler/shared_helpers.rb 2021-09-03 10:27:42.000000000 +0200
@@ -152,13 +152,6 @@
Bundler.ui.warn message
end
- def trap(signal, override = false, &block)
- prior = Signal.trap(signal) do
- block.call
- prior.call unless override
- end
- end
-
def ensure_same_dependencies(spec, old_deps, new_deps)
new_deps = new_deps.reject {|d| d.type == :development }
old_deps = old_deps.reject {|d| d.type == :development }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/bundler/source/git/git_proxy.rb new/lib/bundler/source/git/git_proxy.rb
--- old/lib/bundler/source/git/git_proxy.rb 2021-07-15 17:00:51.000000000 +0200
+++ new/lib/bundler/source/git/git_proxy.rb 2021-09-03 10:27:42.000000000 +0200
@@ -1,7 +1,5 @@
# frozen_string_literal: true
-require "shellwords"
-
module Bundler
class Source
class Git
@@ -224,6 +222,7 @@
end
def check_allowed(command)
+ require "shellwords"
command_with_no_credentials = URICredentialsFilter.credential_filtered_string("git #{command.shelljoin}", uri)
raise GitNotAllowedError.new(command_with_no_credentials) unless allow?
command_with_no_credentials
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/bundler/source/rubygems.rb new/lib/bundler/source/rubygems.rb
--- old/lib/bundler/source/rubygems.rb 2021-07-15 17:00:51.000000000 +0200
+++ new/lib/bundler/source/rubygems.rb 2021-09-03 10:27:42.000000000 +0200
@@ -29,6 +29,7 @@
def local_only!
@specs = nil
@allow_local = true
+ @allow_cached = false
@allow_remote = false
end
@@ -50,6 +51,7 @@
return if @allow_cached
@specs = nil
+ @allow_local = true
@allow_cached = true
end
@@ -71,6 +73,10 @@
@remotes.size > 1
end
+ def no_remotes?
+ @remotes.size == 0
+ end
+
def can_lock?(spec)
return super unless multiple_remotes?
include?(spec.source)
@@ -92,11 +98,22 @@
out << " specs:\n"
end
+ def to_err
+ if remotes.empty?
+ "locally installed gems"
+ elsif @allow_remote
+ "rubygems repository #{remote_names} or installed locally"
+ elsif @allow_cached
+ "cached gems from rubygems repository #{remote_names} or installed locally"
+ else
+ "locally installed gems"
+ end
+ end
+
def to_s
if remotes.empty?
"locally installed gems"
else
- remote_names = remotes.map(&:to_s).join(", ")
"rubygems repository #{remote_names} or installed locally"
end
end
@@ -127,7 +144,7 @@
end
end
- if (installed?(spec) || Plugin.installed?(spec.name)) && !force
+ if installed?(spec) && !force
print_using_message "Using #{version_message(spec)}"
return nil # no post-install message
end
@@ -315,6 +332,10 @@
protected
+ def remote_names
+ remotes.map(&:to_s).join(", ")
+ end
+
def credless_remotes
remotes.map(&method(:suppress_configured_credentials))
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/bundler/source/rubygems_aggregate.rb new/lib/bundler/source/rubygems_aggregate.rb
--- old/lib/bundler/source/rubygems_aggregate.rb 2021-07-15 17:00:51.000000000 +0200
+++ new/lib/bundler/source/rubygems_aggregate.rb 2021-09-03 10:27:42.000000000 +0200
@@ -16,6 +16,10 @@
@index
end
+ def to_err
+ to_s
+ end
+
def to_s
"any of the sources"
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/bundler/source.rb new/lib/bundler/source.rb
--- old/lib/bundler/source.rb 2021-07-15 17:00:51.000000000 +0200
+++ new/lib/bundler/source.rb 2021-09-03 10:27:42.000000000 +0200
@@ -67,6 +67,10 @@
"#<#{self.class}:0x#{object_id} #{self}>"
end
+ def to_err
+ to_s
+ end
+
def path?
instance_of?(Bundler::Source::Path)
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/bundler/source_list.rb new/lib/bundler/source_list.rb
--- old/lib/bundler/source_list.rb 2021-07-15 17:00:51.000000000 +0200
+++ new/lib/bundler/source_list.rb 2021-09-03 10:27:42.000000000 +0200
@@ -37,6 +37,10 @@
global_rubygems_source.multiple_remotes?
end
+ def implicit_global_source?
+ global_rubygems_source.no_remotes?
+ end
+
def add_path_source(options = {})
if options["gemspec"]
add_source_to_list Source::Gemspec.new(options), path_sources
@@ -117,7 +121,8 @@
def replace_sources!(replacement_sources)
return false if replacement_sources.empty?
- @path_sources, @git_sources, @plugin_sources = map_sources(replacement_sources)
+ @rubygems_sources, @path_sources, @git_sources, @plugin_sources = map_sources(replacement_sources)
+ @global_rubygems_source = global_replacement_source(replacement_sources)
different_sources?(lock_sources, replacement_sources)
end
@@ -152,13 +157,21 @@
end
def map_sources(replacement_sources)
- [path_sources, git_sources, plugin_sources].map do |sources|
+ [@rubygems_sources, @path_sources, @git_sources, @plugin_sources].map do |sources|
sources.map do |source|
replacement_sources.find {|s| s == source } || source
end
end
end
+ def global_replacement_source(replacement_sources)
+ replacement_source = replacement_sources.find {|s| s == global_rubygems_source }
+ return global_rubygems_source unless replacement_source
+
+ replacement_source.local!
+ replacement_source
+ end
+
def different_sources?(lock_sources, replacement_sources)
!equal_sources?(lock_sources, replacement_sources) && !equivalent_sources?(lock_sources, replacement_sources)
end
@@ -202,7 +215,7 @@
end
def equal_source?(source, other_source)
- return source.include?(other_source) if source.is_a?(Source::Rubygems) && other_source.is_a?(Source::Rubygems) && !merged_gem_lockfile_sections?
+ return source.include?(other_source) if source.is_a?(Source::Rubygems) && other_source.is_a?(Source::Rubygems)
source == other_source
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/bundler/spec_set.rb new/lib/bundler/spec_set.rb
--- old/lib/bundler/spec_set.rb 2021-07-15 17:00:51.000000000 +0200
+++ new/lib/bundler/spec_set.rb 2021-09-03 10:27:42.000000000 +0200
@@ -11,7 +11,7 @@
@specs = specs
end
- def for(dependencies, check = false, match_current_platform = false, raise_on_missing = true)
+ def for(dependencies, check = false, match_current_platform = false)
handled = []
deps = dependencies.dup
specs = []
@@ -24,7 +24,7 @@
specs_for_dep = spec_for_dependency(dep, match_current_platform)
if specs_for_dep.any?
- specs += specs_for_dep
+ match_current_platform ? specs += specs_for_dep : specs |= specs_for_dep
specs_for_dep.first.dependencies.each do |d|
next if d.type == :development
@@ -33,11 +33,6 @@
end
elsif check
return false
- elsif raise_on_missing
- others = lookup[dep.name] if match_current_platform
- message = "Unable to find a spec satisfying #{dep} in the set. Perhaps the lockfile is corrupted?"
- message += " Found #{others.join(", ")} that did not match the current platform." if others && !others.empty?
- raise GemNotFound, message
end
end
@@ -71,52 +66,35 @@
lookup.dup
end
- def materialize(deps, missing_specs = nil)
- materialized = self.for(deps, false, true, !missing_specs)
-
- materialized.group_by(&:source).each do |source, specs|
- next unless specs.any?{|s| s.is_a?(LazySpecification) }
-
- source.local!
- names = -> { specs.map(&:name).uniq }
- source.double_check_for(names)
- end
+ def materialize(deps)
+ materialized = self.for(deps, false, true)
materialized.map! do |s|
next s unless s.is_a?(LazySpecification)
- spec = s.__materialize__
- unless spec
- unless missing_specs
- raise GemNotFound, "Could not find #{s.full_name} in any of the sources"
- end
- missing_specs << s
- end
- spec
+ s.source.local!
+ s.__materialize__ || s
end
- SpecSet.new(missing_specs ? materialized.compact : materialized)
+ SpecSet.new(materialized)
end
# Materialize for all the specs in the spec set, regardless of what platform they're for
# This is in contrast to how for does platform filtering (and specifically different from how `materialize` calls `for` only for the current platform)
# @return [Array<Gem::Specification>]
def materialized_for_all_platforms
- @specs.group_by(&:source).each do |source, specs|
- next unless specs.any?{|s| s.is_a?(LazySpecification) }
-
- source.local!
- source.remote!
- names = -> { specs.map(&:name).uniq }
- source.double_check_for(names)
- end
-
@specs.map do |s|
next s unless s.is_a?(LazySpecification)
+ s.source.local!
+ s.source.remote!
spec = s.__materialize__
raise GemNotFound, "Could not find #{s.full_name} in any of the sources" unless spec
spec
end
end
+ def missing_specs
+ @specs.select {|s| s.is_a?(LazySpecification) }
+ end
+
def merge(set)
arr = sorted.dup
set.each do |set_spec|
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/bundler/templates/Executable.bundler new/lib/bundler/templates/Executable.bundler
--- old/lib/bundler/templates/Executable.bundler 2021-07-15 17:00:51.000000000 +0200
+++ new/lib/bundler/templates/Executable.bundler 2021-09-03 10:27:42.000000000 +0200
@@ -60,16 +60,16 @@
Regexp.last_match(1)
end
- def bundler_version
- @bundler_version ||=
+ def bundler_requirement
+ @bundler_requirement ||=
env_var_version || cli_arg_version ||
- lockfile_version
+ bundler_requirement_for(lockfile_version)
end
- def bundler_requirement
- return "#{Gem::Requirement.default}.a" unless bundler_version
+ def bundler_requirement_for(version)
+ return "#{Gem::Requirement.default}.a" unless version
- bundler_gem_version = Gem::Version.new(bundler_version)
+ bundler_gem_version = Gem::Version.new(version)
requirement = bundler_gem_version.approximate_recommendation
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/bundler/templates/newgem/github/workflows/main.yml.tt new/lib/bundler/templates/newgem/github/workflows/main.yml.tt
--- old/lib/bundler/templates/newgem/github/workflows/main.yml.tt 2021-07-15 17:00:51.000000000 +0200
+++ new/lib/bundler/templates/newgem/github/workflows/main.yml.tt 2021-09-03 10:27:42.000000000 +0200
@@ -1,16 +1,27 @@
name: Ruby
-on: [push,pull_request]
+on:
+ push:
+ branches:
+ - <%= config[:git_default_branch] %>
+
+ pull_request:
jobs:
build:
runs-on: ubuntu-latest
+
+ strategy:
+ matrix:
+ ruby:
+ - <%= RUBY_VERSION %>
+
steps:
- uses: actions/checkout@v2
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
- ruby-version: <%= RUBY_VERSION %>
+ ruby-version: ${{ matrix.ruby }}
bundler-cache: true
- name: Run the default task
run: bundle exec rake
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/bundler/templates/newgem/newgem.gemspec.tt new/lib/bundler/templates/newgem/newgem.gemspec.tt
--- old/lib/bundler/templates/newgem/newgem.gemspec.tt 2021-07-15 17:00:51.000000000 +0200
+++ new/lib/bundler/templates/newgem/newgem.gemspec.tt 2021-09-03 10:27:42.000000000 +0200
@@ -25,7 +25,9 @@
# Specify which files should be added to the gem when it is released.
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
spec.files = Dir.chdir(File.expand_path(__dir__)) do
- `git ls-files -z`.split("\x0").reject { |f| f.match(%r{\A(?:test|spec|features)/}) }
+ `git ls-files -z`.split("\x0").reject do |f|
+ (f == __FILE__) || f.match(%r{\A(?:(?:test|spec|features)/|\.(?:git|travis|circleci)|appveyor)})
+ end
end
spec.bindir = "exe"
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/bundler/version.rb new/lib/bundler/version.rb
--- old/lib/bundler/version.rb 2021-07-15 17:00:51.000000000 +0200
+++ new/lib/bundler/version.rb 2021-09-03 10:27:42.000000000 +0200
@@ -1,7 +1,7 @@
# frozen_string_literal: false
module Bundler
- VERSION = "2.2.24".freeze
+ VERSION = "2.2.27".freeze
def self.bundler_major_version
@bundler_major_version ||= VERSION.split(".").first.to_i
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/bundler/worker.rb new/lib/bundler/worker.rb
--- old/lib/bundler/worker.rb 2021-07-15 17:00:51.000000000 +0200
+++ new/lib/bundler/worker.rb 2021-09-03 10:27:42.000000000 +0200
@@ -26,7 +26,7 @@
@func = func
@size = size
@threads = nil
- SharedHelpers.trap("INT") { abort_threads }
+ @previous_interrupt_handler = nil
end
# Enqueue a request to be executed in the worker pool
@@ -68,13 +68,16 @@
# so as worker threads after retrieving it, shut themselves down
def stop_threads
return unless @threads
+
@threads.each { @request_queue.enq POISON }
@threads.each(&:join)
+
+ remove_interrupt_handler
+
@threads = nil
end
def abort_threads
- return unless @threads
Bundler.ui.debug("\n#{caller.join("\n")}")
@threads.each(&:exit)
exit 1
@@ -94,11 +97,23 @@
end
end.compact
+ add_interrupt_handler unless @threads.empty?
+
return if creation_errors.empty?
message = "Failed to create threads for the #{name} worker: #{creation_errors.map(&:to_s).uniq.join(", ")}"
raise ThreadCreationError, message if @threads.empty?
Bundler.ui.info message
end
+
+ def add_interrupt_handler
+ @previous_interrupt_handler = trap("INT") { abort_threads }
+ end
+
+ def remove_interrupt_handler
+ return unless @previous_interrupt_handler
+
+ trap "INT", @previous_interrupt_handler
+ end
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/bundler.rb new/lib/bundler.rb
--- old/lib/bundler.rb 2021-07-15 17:00:51.000000000 +0200
+++ new/lib/bundler.rb 2021-09-03 10:27:42.000000000 +0200
@@ -636,6 +636,12 @@
@rubygems = nil
end
+ def configure_gem_home_and_path(path = bundle_path)
+ configure_gem_path
+ configure_gem_home(path)
+ Bundler.rubygems.clear_paths
+ end
+
private
def eval_yaml_gemspec(path, contents)
@@ -653,36 +659,20 @@
rescue ScriptError, StandardError => e
msg = "There was an error while loading `#{path.basename}`: #{e.message}"
- if e.is_a?(LoadError)
- msg += "\nDoes it try to require a relative path? That's been removed in Ruby 1.9"
- end
-
raise GemspecError, Dsl::DSLError.new(msg, path, e.backtrace, contents)
end
- def configure_gem_home_and_path
- configure_gem_path
- configure_gem_home
- bundle_path
- end
-
- def configure_gem_path(env = ENV)
- blank_home = env["GEM_HOME"].nil? || env["GEM_HOME"].empty?
- if !use_system_gems?
+ def configure_gem_path
+ unless use_system_gems?
# this needs to be empty string to cause
# PathSupport.split_gem_path to only load up the
# Bundler --path setting as the GEM_PATH.
- env["GEM_PATH"] = ""
- elsif blank_home
- possibles = [Bundler.rubygems.gem_dir, Bundler.rubygems.gem_path]
- paths = possibles.flatten.compact.uniq.reject(&:empty?)
- env["GEM_PATH"] = paths.join(File::PATH_SEPARATOR)
+ Bundler::SharedHelpers.set_env "GEM_PATH", ""
end
end
- def configure_gem_home
- Bundler::SharedHelpers.set_env "GEM_HOME", File.expand_path(bundle_path, root)
- Bundler.rubygems.clear_paths
+ def configure_gem_home(path)
+ Bundler::SharedHelpers.set_env "GEM_HOME", path.to_s
end
def tmp_home_path
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/metadata new/metadata
--- old/metadata 2021-07-15 17:00:51.000000000 +0200
+++ new/metadata 2021-09-03 10:27:42.000000000 +0200
@@ -1,7 +1,7 @@
--- !ruby/object:Gem::Specification
name: bundler
version: !ruby/object:Gem::Version
- version: 2.2.24
+ version: 2.2.27
platform: ruby
authors:
- Andr�� Arko
@@ -22,7 +22,7 @@
autorequire:
bindir: exe
cert_chain: []
-date: 2021-07-15 00:00:00.000000000 Z
+date: 2021-09-03 00:00:00.000000000 Z
dependencies: []
description: Bundler manages an application's dependencies through its entire life,
across many machines, systematically and repeatably
@@ -354,7 +354,7 @@
- !ruby/object:Gem::Version
version: 2.5.2
requirements: []
-rubygems_version: 3.2.24
+rubygems_version: 3.2.27
signing_key:
specification_version: 4
summary: The best way to manage your application's dependencies
++++++ gem2rpm.yml ++++++
--- /var/tmp/diff_new_pack.iWMK3L/_old 2021-09-29 20:20:47.683152066 +0200
+++ /var/tmp/diff_new_pack.iWMK3L/_new 2021-09-29 20:20:47.687152072 +0200
@@ -70,3 +70,8 @@
# gemspec_remove_pem.patch: -p1
:sources:
- series
+:preamble: |-
+ %if ! 0%{?suse_version} >= 1550
+ %define rb_build_versions ruby26 ruby27
+ %define rb_build_ruby_abis ruby:2.6.0 ruby:2.7.0
+ %endif
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package moreutils for openSUSE:Factory checked in at 2021-09-29 20:19:14
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/moreutils (Old)
and /work/SRC/openSUSE:Factory/.moreutils.new.1899 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "moreutils"
Wed Sep 29 20:19:14 2021 rev:9 rq:922183 version:0.66
Changes:
--------
--- /work/SRC/openSUSE:Factory/moreutils/moreutils.changes 2021-02-09 21:17:26.722854944 +0100
+++ /work/SRC/openSUSE:Factory/.moreutils.new.1899/moreutils.changes 2021-09-29 20:20:46.019149653 +0200
@@ -1,0 +2,9 @@
+Wed Sep 29 12:35:05 UTC 2021 - Paolo Stivanin <info(a)paolostivanin.com>
+
+- update to 0.66:
+ * vipe: When no output is piped into vipe, and stdin is connected to
+ the terminal, don't read from stdin before opening the editor.
+ This allows eg: vipe | command
+ * chronic: With -v, flush stdout after printing "STDERR" header.
+
+-------------------------------------------------------------------
Old:
----
moreutils-0.65.tar.gz
New:
----
moreutils-0.66.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ moreutils.spec ++++++
--- /var/tmp/diff_new_pack.v3QLOP/_old 2021-09-29 20:20:46.615150517 +0200
+++ /var/tmp/diff_new_pack.v3QLOP/_new 2021-09-29 20:20:46.619150523 +0200
@@ -17,10 +17,10 @@
Name: moreutils
-Version: 0.65
+Version: 0.66
Release: 0
Summary: Additional Unix Utilities
-License: GPL-2.0-or-later AND GPL-2.0-only AND MIT
+License: GPL-2.0-only AND GPL-2.0-or-later AND MIT
Group: Productivity/File utilities
URL: https://joeyh.name/code/moreutils/
Source: https://git.joeyh.name/index.cgi/moreutils.git/snapshot/%{name}-%{version}.…
++++++ moreutils-0.65.tar.gz -> moreutils-0.66.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/moreutils-0.65/Makefile new/moreutils-0.66/Makefile
--- old/moreutils-0.65/Makefile 2021-01-02 17:25:26.000000000 +0100
+++ new/moreutils-0.66/Makefile 2021-09-16 15:13:01.000000000 +0200
@@ -31,6 +31,10 @@
mkdir -p $(DESTDIR)$(PREFIX)/share/man/man1
install $(MANS) $(DESTDIR)$(PREFIX)/share/man/man1
+uninstall:
+ for i in $(BINS) $(PERLSCRIPTS); do rm -f $(DESTDIR)$(PREFIX)/bin/$$i; done
+ for i in $(MANS); do rm -f $(DESTDIR)$(PREFIX)/share/man/man1/$$i; done
+
check: isutf8
./is_utf8/test.sh
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/moreutils-0.65/chronic new/moreutils-0.66/chronic
--- old/moreutils-0.65/chronic 2021-01-02 17:25:26.000000000 +0100
+++ new/moreutils-0.66/chronic 2021-09-16 15:13:01.000000000 +0200
@@ -89,8 +89,8 @@
sub showout {
print "STDOUT:\n" if $opt_v;
print STDOUT $out;
- STDOUT->flush();
print "\nSTDERR:\n" if $opt_v;
+ STDOUT->flush();
print STDERR $err;
STDERR->flush();
print "\nRETVAL: ".($ret >> 8)."\n" if $opt_v;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/moreutils-0.65/debian/changelog new/moreutils-0.66/debian/changelog
--- old/moreutils-0.65/debian/changelog 2021-01-02 17:25:26.000000000 +0100
+++ new/moreutils-0.66/debian/changelog 2021-09-16 15:13:01.000000000 +0200
@@ -1,3 +1,14 @@
+moreutils (0.66) unstable; urgency=medium
+
+ * vipe: When no output is piped into vipe, and stdin is connected to
+ the terminal, don't read from stdin before opening the editor.
+ This allows eg: vipe | command
+ Thanks, Florian Pensec
+ * chronic: With -v, flush stdout after printing "STDERR" header.
+ Thanks, Adam Sj��gren
+
+ -- Joey Hess <id(a)joeyh.name> Thu, 16 Sep 2021 09:12:42 -0400
+
moreutils (0.65) unstable; urgency=medium
* vipe: Added --suffix option.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/moreutils-0.65/vipe new/moreutils-0.66/vipe
--- old/moreutils-0.65/vipe 2021-01-02 17:25:26.000000000 +0100
+++ new/moreutils-0.66/vipe 2021-09-16 15:13:01.000000000 +0200
@@ -64,7 +64,9 @@
my ($fh, $tmp)=tempfile(UNLINK => 1, SUFFIX => $suffix);
die "cannot create tempfile" unless $fh;
-print ($fh <STDIN>) || die "write temp: $!";
+if (! -t STDIN) {
+ print ($fh <STDIN>) || die "write temp: $!";
+}
close $fh;
close STDIN;
open(STDIN, "</dev/tty") || die "reopen stdin: $!";
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-feedgenerator for openSUSE:Factory checked in at 2021-09-29 20:19:14
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-feedgenerator (Old)
and /work/SRC/openSUSE:Factory/.python-feedgenerator.new.1899 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-feedgenerator"
Wed Sep 29 20:19:14 2021 rev:6 rq:922186 version:2.0.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-feedgenerator/python-feedgenerator.changes 2021-08-20 16:57:50.402876704 +0200
+++ /work/SRC/openSUSE:Factory/.python-feedgenerator.new.1899/python-feedgenerator.changes 2021-09-29 20:20:45.199148464 +0200
@@ -1,0 +2,13 @@
+Tue Sep 28 20:24:30 UTC 2021 - Beno��t Monin <benoit.monin(a)gmx.fr>
+
+- udpate to version 2.0.0:
+ * Add preliminary support for adding images to feeds
+ * Update code for Python 3.6+
+ * Drop support for Python 2.7
+ * Fix double subtitles if both description & subtitle are
+ provided
+- skip python2 build: support dropped from upstream
+- add pytest to the BuildRequires: needed for the tests now
+- run the tests with pytest but skip coverage generation
+
+-------------------------------------------------------------------
Old:
----
feedgenerator-1.9.2.tar.gz
New:
----
feedgenerator-2.0.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-feedgenerator.spec ++++++
--- /var/tmp/diff_new_pack.yZRKw0/_old 2021-09-29 20:20:45.775149299 +0200
+++ /var/tmp/diff_new_pack.yZRKw0/_new 2021-09-29 20:20:45.779149305 +0200
@@ -16,15 +16,17 @@
#
+%define skip_python2 1
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-feedgenerator
-Version: 1.9.2
+Version: 2.0.0
Release: 0
Summary: Standalone version of django.utilsfeedgenerator, compatible with Py3k
License: BSD-3-Clause
Group: Development/Languages/Python
URL: https://github.com/getpelican/feedgenerator
Source: https://files.pythonhosted.org/packages/source/f/feedgenerator/feedgenerato…
+BuildRequires: %{python_module pytest}
BuildRequires: %{python_module pytz}
BuildRequires: %{python_module setuptools}
BuildRequires: %{python_module six}
@@ -51,7 +53,8 @@
%check
export LC_ALL=en_US.utf8
-%pyunittest discover -v
+# skip coverage by using an empty configuration file
+%pytest -c /dev/null
%files %{python_files}
%license LICENSE
++++++ feedgenerator-1.9.2.tar.gz -> feedgenerator-2.0.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/feedgenerator-1.9.2/PKG-INFO new/feedgenerator-2.0.0/PKG-INFO
--- old/feedgenerator-1.9.2/PKG-INFO 2021-08-18 10:57:37.331096400 +0200
+++ new/feedgenerator-2.0.0/PKG-INFO 2021-09-28 13:39:38.640296000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: feedgenerator
-Version: 1.9.2
+Version: 2.0.0
Summary: Standalone version of django.utils.feedgenerator
Home-page: https://github.com/getpelican/feedgenerator
Author: Django Software Foundation
@@ -24,6 +24,7 @@
Classifier: Topic :: Internet :: WWW/HTTP
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
Classifier: Topic :: Software Development :: Libraries :: Python Modules
+Requires-Python: >=3.6
License-File: LICENSE
FeedGenerator
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/feedgenerator-1.9.2/feedgenerator/django/utils/encoding.py new/feedgenerator-2.0.0/feedgenerator/django/utils/encoding.py
--- old/feedgenerator-1.9.2/feedgenerator/django/utils/encoding.py 2020-02-09 09:40:59.000000000 +0100
+++ new/feedgenerator-2.0.0/feedgenerator/django/utils/encoding.py 2021-09-28 13:03:34.000000000 +0200
@@ -1,17 +1,10 @@
-from __future__ import unicode_literals
-
import codecs
import datetime
from decimal import Decimal
import locale
-try:
- from urllib.parse import quote
-except ImportError: # Python 2
- from urllib import quote
-import warnings
+from urllib.parse import quote
from .functional import Promise
-from . import six
class DjangoUnicodeDecodeError(UnicodeDecodeError):
def __init__(self, obj, *args):
@@ -20,45 +13,9 @@
def __str__(self):
original = UnicodeDecodeError.__str__(self)
- return '%s. You passed in %r (%s)' % (original, self.obj,
+ return '{}. You passed in {!r} ({})'.format(original, self.obj,
type(self.obj))
-class StrAndUnicode(object):
- """
- A class that derives __str__ from __unicode__.
-
- On Python 2, __str__ returns the output of __unicode__ encoded as a UTF-8
- bytestring. On Python 3, __str__ returns the output of __unicode__.
-
- Useful as a mix-in. If you support Python 2 and 3 with a single code base,
- you can inherit this mix-in and just define __unicode__.
- """
- def __init__(self, *args, **kwargs):
- warnings.warn("StrAndUnicode is deprecated. Define a __str__ method "
- "and apply the @python_2_unicode_compatible decorator "
- "instead.", PendingDeprecationWarning, stacklevel=2)
- super(StrAndUnicode, self).__init__(*args, **kwargs)
-
- if six.PY3:
- def __str__(self):
- return self.__unicode__()
- else:
- def __str__(self):
- return self.__unicode__().encode('utf-8')
-
-def python_2_unicode_compatible(klass):
- """
- A decorator that defines __unicode__ and __str__ methods under Python 2.
- Under Python 3 it does nothing.
-
- To support Python 2 and 3 with a single code base, define a __str__ method
- returning text and apply this decorator to the class.
- """
- if not six.PY3:
- klass.__unicode__ = klass.__str__
- klass.__str__ = lambda self: self.__unicode__().encode('utf-8')
- return klass
-
def smart_text(s, encoding='utf-8', strings_only=False, errors='strict'):
"""
Returns a text object representing 's' -- unicode on Python 2 and str on
@@ -77,7 +34,7 @@
Objects of protected types are preserved as-is when passed to
force_text(strings_only=True).
"""
- return isinstance(obj, six.integer_types + (type(None), float, Decimal,
+ return isinstance(obj, (int, ) + (type(None), float, Decimal,
datetime.datetime, datetime.date, datetime.time))
def force_text(s, encoding='utf-8', strings_only=False, errors='strict'):
@@ -87,25 +44,22 @@
If strings_only is True, don't convert (some) non-string-like objects.
"""
- # Handle the common case first, saves 30-40% when s is an instance of
- # six.text_type. This function gets called often in that setting.
- if isinstance(s, six.text_type):
+ # Handle the common case first, saves 30-40% when s is an instance
+ # of str. This function gets called often in that setting.
+ if isinstance(s, str):
return s
if strings_only and is_protected_type(s):
return s
try:
- if not isinstance(s, six.string_types):
+ if not isinstance(s, str):
if hasattr(s, '__unicode__'):
s = s.__unicode__()
else:
try:
- if six.PY3:
- if isinstance(s, bytes):
- s = six.text_type(s, encoding, errors)
- else:
- s = six.text_type(s)
+ if isinstance(s, bytes):
+ s = str(s, encoding, errors)
else:
- s = six.text_type(bytes(s), encoding, errors)
+ s = str(s)
except UnicodeEncodeError:
if not isinstance(s, Exception):
raise
@@ -118,7 +72,7 @@
s = ' '.join([force_text(arg, encoding, strings_only,
errors) for arg in s])
else:
- # Note: We use .decode() here, instead of six.text_type(s, encoding,
+ # Note: We use .decode() here, instead of str(s, encoding,
# errors), so that if s is a SafeBytes, it ends up being a
# SafeText at the end.
s = s.decode(encoding, errors)
@@ -162,13 +116,10 @@
if strings_only and (s is None or isinstance(s, int)):
return s
if isinstance(s, Promise):
- return six.text_type(s).encode(encoding, errors)
- if not isinstance(s, six.string_types):
+ return str.encode(encoding, errors)
+ if not isinstance(s, str):
try:
- if six.PY3:
- return six.text_type(s).encode(encoding)
- else:
- return bytes(s)
+ return str(s).encode(encoding)
except UnicodeEncodeError:
if isinstance(s, Exception):
# An Exception subclass containing non-ASCII data that doesn't
@@ -176,19 +127,13 @@
# further exception.
return ' '.join([smart_bytes(arg, encoding, strings_only,
errors) for arg in s])
- return six.text_type(s).encode(encoding, errors)
+ return str(s).encode(encoding, errors)
else:
return s.encode(encoding, errors)
-if six.PY3:
- smart_str = smart_text
- force_str = force_text
-else:
- smart_str = smart_bytes
- force_str = force_bytes
- # backwards compatibility for Python 2
- smart_unicode = smart_text
- force_unicode = force_text
+
+smart_str = smart_text
+force_str = force_text
smart_str.__doc__ = """\
Apply smart_text in Python 3 and smart_bytes in Python 2.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/feedgenerator-1.9.2/feedgenerator/django/utils/feedgenerator.py new/feedgenerator-2.0.0/feedgenerator/django/utils/feedgenerator.py
--- old/feedgenerator-1.9.2/feedgenerator/django/utils/feedgenerator.py 2021-08-18 10:07:21.000000000 +0200
+++ new/feedgenerator-2.0.0/feedgenerator/django/utils/feedgenerator.py 2021-09-28 13:09:39.000000000 +0200
@@ -21,18 +21,12 @@
For definitions of the different versions of RSS, see:
http://web.archive.org/web/20110718035220/http://diveintomark.org/archives/…
"""
-from __future__ import unicode_literals
-
import datetime
-try:
- from urllib.parse import urlparse
-except ImportError: # Python 2
- from urlparse import urlparse
+from urllib.parse import urlparse
from .xmlutils import SimplerXMLGenerator
from .encoding import force_text, iri_to_uri
from . import datetime_safe
-from . import six
-from .six import StringIO
+from io import StringIO
from .timezone import is_aware
def rfc2822_date(date):
@@ -45,9 +39,7 @@
# We do this ourselves to be timezone aware, email.Utils is not tz aware.
dow = days[date.weekday()]
month = months[date.month - 1]
- time_str = date.strftime('%s, %%d %s %%Y %%H:%%M:%%S ' % (dow, month))
- if not six.PY3: # strftime returns a byte string in Python 2
- time_str = time_str.decode('utf-8')
+ time_str = date.strftime(f'{dow}, %d {month} %Y %H:%M:%S ')
if is_aware(date):
offset = date.tzinfo.utcoffset(date)
timezone = (offset.days * 24 * 60) + (offset.seconds // 60)
@@ -60,8 +52,6 @@
# Support datetime objects older than 1900
date = datetime_safe.new_datetime(date)
time_str = date.strftime('%Y-%m-%dT%H:%M:%S')
- if not six.PY3: # strftime returns a byte string in Python 2
- time_str = time_str.decode('utf-8')
if is_aware(date):
offset = date.tzinfo.utcoffset(date)
timezone = (offset.days * 24 * 60) + (offset.seconds // 60)
@@ -83,13 +73,13 @@
fragment = ''
if bits.fragment != '':
fragment = '/%s' % (bits.fragment)
- return 'tag:%s%s:%s%s' % (bits.hostname, d, bits.path, fragment)
+ return f'tag:{bits.hostname}{d}:{bits.path}{fragment}'
-class SyndicationFeed(object):
+class SyndicationFeed:
"Base class for all syndication feeds. Subclasses should provide write()"
def __init__(self, title, link, description, language=None, author_email=None,
author_name=None, author_link=None, subtitle=None, categories=None,
- feed_url=None, feed_copyright=None, feed_guid=None, ttl=None, **kwargs):
+ feed_url=None, feed_copyright=None, image=None, feed_guid=None, ttl=None, **kwargs):
to_unicode = lambda s: force_text(s, strings_only=True)
if categories:
categories = [force_text(c) for c in categories]
@@ -108,6 +98,7 @@
'categories': categories or (),
'feed_url': iri_to_uri(feed_url),
'feed_copyright': to_unicode(feed_copyright),
+ 'image': iri_to_uri(image),
'id': feed_guid or link,
'ttl': ttl,
}
@@ -206,7 +197,7 @@
else:
return datetime.datetime.now()
-class Enclosure(object):
+class Enclosure:
"Represents an RSS enclosure"
def __init__(self, url, length, mime_type):
"All args are expected to be Python Unicode objects"
@@ -238,6 +229,12 @@
# Required Elements as per the specification
handler.addQuickElement("title", self.feed['title'])
handler.addQuickElement("link", self.feed['link'])
+ if self.feed['image'] is not None:
+ handler.startElement('image', {})
+ handler.addQuickElement("url", self.feed['link']+self.feed['image'])
+ handler.addQuickElement("title", self.feed['title'])
+ handler.addQuickElement("link", self.feed['link'])
+ handler.endElement('image')
handler.addQuickElement("description", self.feed['description'])
# Optional Channel Elements
@@ -335,10 +332,10 @@
handler.endElement("author")
# try to use description or subtitle if provided, subtitle has
# precedence above description
- if self.feed['description'] is not None:
- handler.addQuickElement("subtitle", self.feed['description'])
- if self.feed['subtitle'] is not None:
+ if self.feed['subtitle']:
handler.addQuickElement("subtitle", self.feed['subtitle'])
+ elif self.feed['description']:
+ handler.addQuickElement("subtitle", self.feed['description'])
for cat in self.feed['categories']:
handler.addQuickElement("category", "", {"term": cat})
if self.feed['feed_copyright'] is not None:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/feedgenerator-1.9.2/feedgenerator/django/utils/functional.py new/feedgenerator-2.0.0/feedgenerator/django/utils/functional.py
--- old/feedgenerator-1.9.2/feedgenerator/django/utils/functional.py 2020-02-09 09:40:59.000000000 +0100
+++ new/feedgenerator-2.0.0/feedgenerator/django/utils/functional.py 2021-09-28 13:03:34.000000000 +0200
@@ -3,8 +3,6 @@
from functools import wraps, update_wrapper
import sys
-from . import six
-
# You can't trivially replace this `functools.partial` because this binds to
# classes and returns bound instances, whereas functools.partial (on CPython)
# is a type and its instances don't bind.
@@ -31,7 +29,7 @@
return result
return wrapper
-class cached_property(object):
+class cached_property:
"""
Decorator that creates converts a method with a single
self argument into a property cached on the instance.
@@ -43,7 +41,7 @@
res = instance.__dict__[self.func.__name__] = self.func(instance)
return res
-class Promise(object):
+class Promise:
"""
This is just a base class for the proxy class created in
the closure of the lazy function. It can be used to recognize
@@ -94,18 +92,12 @@
continue
setattr(cls, k, meth)
cls._delegate_bytes = bytes in resultclasses
- cls._delegate_text = six.text_type in resultclasses
+ cls._delegate_text = str in resultclasses
assert not (cls._delegate_bytes and cls._delegate_text), "Cannot call lazy() with both bytes and text return types."
if cls._delegate_text:
- if six.PY3:
- cls.__str__ = cls.__text_cast
- else:
- cls.__unicode__ = cls.__text_cast
+ cls.__str__ = cls.__text_cast
elif cls._delegate_bytes:
- if six.PY3:
- cls.__bytes__ = cls.__bytes_cast
- else:
- cls.__str__ = cls.__bytes_cast
+ cls.__bytes__ = cls.__bytes_cast
__prepare_class__ = classmethod(__prepare_class__)
def __promise__(cls, klass, funcname, method):
@@ -153,10 +145,8 @@
__hash__ = object.__hash__
def __mod__(self, rhs):
- if self._delegate_bytes and not six.PY3:
- return bytes(self) % rhs
- elif self._delegate_text:
- return six.text_type(self) % rhs
+ if self._delegate_text:
+ return str(self) % rhs
else:
raise AssertionError('__mod__ not supported for non-string types')
@@ -186,7 +176,7 @@
"""
@wraps(func)
def wrapper(*args, **kwargs):
- for arg in list(args) + list(six.itervalues(kwargs)):
+ for arg in list(args) + list(kwargs.values()):
if isinstance(arg, Promise):
break
else:
@@ -202,7 +192,7 @@
return func(self._wrapped, *args)
return inner
-class LazyObject(object):
+class LazyObject:
"""
A wrapper for another class that can be used to delay instantiation of the
wrapped class.
@@ -266,12 +256,8 @@
def _setup(self):
self._wrapped = self._setupfunc()
- if six.PY3:
- __bytes__ = new_method_proxy(bytes)
- __str__ = new_method_proxy(str)
- else:
- __str__ = new_method_proxy(str)
- __unicode__ = new_method_proxy(unicode)
+ __bytes__ = new_method_proxy(bytes)
+ __str__ = new_method_proxy(str)
def __deepcopy__(self, memo):
if self._wrapped is empty:
@@ -335,36 +321,4 @@
results[predicate(item)].append(item)
return results
-if sys.version_info >= (2,7,2):
- from functools import total_ordering
-else:
- # For Python < 2.7.2. Python 2.6 does not have total_ordering, and
- # total_ordering in 2.7 versions prior to 2.7.2 is buggy. See
- # http://bugs.python.org/issue10042 for details. For these versions use
- # code borrowed from Python 2.7.3.
- def total_ordering(cls):
- """Class decorator that fills in missing ordering methods"""
- convert = {
- '__lt__': [('__gt__', lambda self, other: not (self < other or self == other)),
- ('__le__', lambda self, other: self < other or self == other),
- ('__ge__', lambda self, other: not self < other)],
- '__le__': [('__ge__', lambda self, other: not self <= other or self == other),
- ('__lt__', lambda self, other: self <= other and not self == other),
- ('__gt__', lambda self, other: not self <= other)],
- '__gt__': [('__lt__', lambda self, other: not (self > other or self == other)),
- ('__ge__', lambda self, other: self > other or self == other),
- ('__le__', lambda self, other: not self > other)],
- '__ge__': [('__le__', lambda self, other: (not self >= other) or self == other),
- ('__gt__', lambda self, other: self >= other and not self == other),
- ('__lt__', lambda self, other: not self >= other)]
- }
- roots = set(dir(cls)) & set(convert)
- if not roots:
- raise ValueError('must define at least one ordering operation: < > <= >=')
- root = max(roots) # prefer __lt__ to __le__ to __gt__ to __ge__
- for opname, opfunc in convert[root]:
- if opname not in roots:
- opfunc.__name__ = opname
- opfunc.__doc__ = getattr(int, opname).__doc__
- setattr(cls, opname, opfunc)
- return cls
+from functools import total_ordering
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/feedgenerator-1.9.2/feedgenerator/django/utils/six.py new/feedgenerator-2.0.0/feedgenerator/django/utils/six.py
--- old/feedgenerator-1.9.2/feedgenerator/django/utils/six.py 2020-02-09 09:40:59.000000000 +0100
+++ new/feedgenerator-2.0.0/feedgenerator/django/utils/six.py 1970-01-01 01:00:00.000000000 +0100
@@ -1,370 +0,0 @@
-"""Utilities for writing code that runs on Python 2 and 3"""
-
-import operator
-import sys
-import types
-
-__author__ = "Benjamin Peterson <benjamin(a)python.org>"
-__version__ = "1.1.0"
-
-
-# True if we are running on Python 3.
-PY3 = sys.version_info[0] == 3
-
-if PY3:
- string_types = str,
- integer_types = int,
- class_types = type,
- text_type = str
- binary_type = bytes
-
- MAXSIZE = sys.maxsize
-else:
- string_types = basestring,
- integer_types = (int, long)
- class_types = (type, types.ClassType)
- text_type = unicode
- binary_type = str
-
- # It's possible to have sizeof(long) != sizeof(Py_ssize_t).
- class X(object):
- def __len__(self):
- return 1 << 31
- try:
- len(X())
- except OverflowError:
- # 32-bit
- MAXSIZE = int((1 << 31) - 1)
- else:
- # 64-bit
- MAXSIZE = int((1 << 63) - 1)
- del X
-
-
-def _add_doc(func, doc):
- """Add documentation to a function."""
- func.__doc__ = doc
-
-
-def _import_module(name):
- """Import module, returning the module after the last dot."""
- __import__(name)
- return sys.modules[name]
-
-
-class _LazyDescr(object):
-
- def __init__(self, name):
- self.name = name
-
- def __get__(self, obj, tp):
- result = self._resolve()
- setattr(obj, self.name, result)
- # This is a bit ugly, but it avoids running this again.
- delattr(tp, self.name)
- return result
-
-
-class MovedModule(_LazyDescr):
-
- def __init__(self, name, old, new=None):
- super(MovedModule, self).__init__(name)
- if PY3:
- if new is None:
- new = name
- self.mod = new
- else:
- self.mod = old
-
- def _resolve(self):
- return _import_module(self.mod)
-
-
-class MovedAttribute(_LazyDescr):
-
- def __init__(self, name, old_mod, new_mod, old_attr=None, new_attr=None):
- super(MovedAttribute, self).__init__(name)
- if PY3:
- if new_mod is None:
- new_mod = name
- self.mod = new_mod
- if new_attr is None:
- if old_attr is None:
- new_attr = name
- else:
- new_attr = old_attr
- self.attr = new_attr
- else:
- self.mod = old_mod
- if old_attr is None:
- old_attr = name
- self.attr = old_attr
-
- def _resolve(self):
- module = _import_module(self.mod)
- return getattr(module, self.attr)
-
-
-
-class _MovedItems(types.ModuleType):
- """Lazy loading of moved objects"""
-
-
-_moved_attributes = [
- MovedAttribute("cStringIO", "cStringIO", "io", "StringIO"),
- MovedAttribute("filter", "itertools", "builtins", "ifilter", "filter"),
- MovedAttribute("input", "__builtin__", "builtins", "raw_input", "input"),
- MovedAttribute("map", "itertools", "builtins", "imap", "map"),
- MovedAttribute("reload_module", "__builtin__", "imp", "reload"),
- MovedAttribute("reduce", "__builtin__", "functools"),
- MovedAttribute("StringIO", "StringIO", "io"),
- MovedAttribute("xrange", "__builtin__", "builtins", "xrange", "range"),
- MovedAttribute("zip", "itertools", "builtins", "izip", "zip"),
-
- MovedModule("builtins", "__builtin__"),
- MovedModule("configparser", "ConfigParser"),
- MovedModule("copyreg", "copy_reg"),
- MovedModule("http_cookiejar", "cookielib", "http.cookiejar"),
- MovedModule("http_cookies", "Cookie", "http.cookies"),
- MovedModule("html_entities", "htmlentitydefs", "html.entities"),
- MovedModule("html_parser", "HTMLParser", "html.parser"),
- MovedModule("http_client", "httplib", "http.client"),
- MovedModule("BaseHTTPServer", "BaseHTTPServer", "http.server"),
- MovedModule("CGIHTTPServer", "CGIHTTPServer", "http.server"),
- MovedModule("SimpleHTTPServer", "SimpleHTTPServer", "http.server"),
- MovedModule("cPickle", "cPickle", "pickle"),
- MovedModule("queue", "Queue"),
- MovedModule("reprlib", "repr"),
- MovedModule("socketserver", "SocketServer"),
- MovedModule("tkinter", "Tkinter"),
- MovedModule("tkinter_dialog", "Dialog", "tkinter.dialog"),
- MovedModule("tkinter_filedialog", "FileDialog", "tkinter.filedialog"),
- MovedModule("tkinter_scrolledtext", "ScrolledText", "tkinter.scrolledtext"),
- MovedModule("tkinter_simpledialog", "SimpleDialog", "tkinter.simpledialog"),
- MovedModule("tkinter_tix", "Tix", "tkinter.tix"),
- MovedModule("tkinter_constants", "Tkconstants", "tkinter.constants"),
- MovedModule("tkinter_dnd", "Tkdnd", "tkinter.dnd"),
- MovedModule("tkinter_colorchooser", "tkColorChooser",
- "tkinter.colorchooser"),
- MovedModule("tkinter_commondialog", "tkCommonDialog",
- "tkinter.commondialog"),
- MovedModule("tkinter_tkfiledialog", "tkFileDialog", "tkinter.filedialog"),
- MovedModule("tkinter_font", "tkFont", "tkinter.font"),
- MovedModule("tkinter_messagebox", "tkMessageBox", "tkinter.messagebox"),
- MovedModule("tkinter_tksimpledialog", "tkSimpleDialog",
- "tkinter.simpledialog"),
- MovedModule("urllib_robotparser", "robotparser", "urllib.robotparser"),
- MovedModule("winreg", "_winreg"),
-]
-for attr in _moved_attributes:
- setattr(_MovedItems, attr.name, attr)
-del attr
-
-moves = sys.modules["django.utils.six.moves"] = _MovedItems("moves")
-
-
-def add_move(move):
- """Add an item to six.moves."""
- setattr(_MovedItems, move.name, move)
-
-
-def remove_move(name):
- """Remove item from six.moves."""
- try:
- delattr(_MovedItems, name)
- except AttributeError:
- try:
- del moves.__dict__[name]
- except KeyError:
- raise AttributeError("no such move, %r" % (name,))
-
-
-if PY3:
- _meth_func = "__func__"
- _meth_self = "__self__"
-
- _func_code = "__code__"
- _func_defaults = "__defaults__"
-
- _iterkeys = "keys"
- _itervalues = "values"
- _iteritems = "items"
-else:
- _meth_func = "im_func"
- _meth_self = "im_self"
-
- _func_code = "func_code"
- _func_defaults = "func_defaults"
-
- _iterkeys = "iterkeys"
- _itervalues = "itervalues"
- _iteritems = "iteritems"
-
-
-if PY3:
- def get_unbound_function(unbound):
- return unbound
-
-
- advance_iterator = next
-
- def callable(obj):
- return any("__call__" in klass.__dict__ for klass in type(obj).__mro__)
-else:
- def get_unbound_function(unbound):
- return unbound.im_func
-
-
- def advance_iterator(it):
- return it.next()
-
- callable = callable
-_add_doc(get_unbound_function,
- """Get the function out of a possibly unbound function""")
-
-
-get_method_function = operator.attrgetter(_meth_func)
-get_method_self = operator.attrgetter(_meth_self)
-get_function_code = operator.attrgetter(_func_code)
-get_function_defaults = operator.attrgetter(_func_defaults)
-
-
-def iterkeys(d):
- """Return an iterator over the keys of a dictionary."""
- return getattr(d, _iterkeys)()
-
-def itervalues(d):
- """Return an iterator over the values of a dictionary."""
- return getattr(d, _itervalues)()
-
-def iteritems(d):
- """Return an iterator over the (key, value) pairs of a dictionary."""
- return getattr(d, _iteritems)()
-
-
-if PY3:
- def b(s):
- return s.encode("latin-1")
- def u(s):
- return s
- if sys.version_info[1] <= 1:
- def int2byte(i):
- return bytes((i,))
- else:
- # This is about 2x faster than the implementation above on 3.2+
- int2byte = operator.methodcaller("to_bytes", 1, "big")
- import io
- StringIO = io.StringIO
- BytesIO = io.BytesIO
-else:
- def b(s):
- return s
- def u(s):
- return unicode(s, "unicode_escape")
- int2byte = chr
- import StringIO
- StringIO = BytesIO = StringIO.StringIO
-_add_doc(b, """Byte literal""")
-_add_doc(u, """Text literal""")
-
-
-if PY3:
- import builtins
- exec_ = getattr(builtins, "exec")
-
-
- def reraise(tp, value, tb=None):
- if value.__traceback__ is not tb:
- raise value.with_traceback(tb)
- raise value
-
-
- print_ = getattr(builtins, "print")
- del builtins
-
-else:
- def exec_(code, globs=None, locs=None):
- """Execute code in a namespace."""
- if globs is None:
- frame = sys._getframe(1)
- globs = frame.f_globals
- if locs is None:
- locs = frame.f_locals
- del frame
- elif locs is None:
- locs = globs
- exec("""exec code in globs, locs""")
-
-
- exec_("""def reraise(tp, value, tb=None):
- raise tp, value, tb
-""")
-
-
- def print_(*args, **kwargs):
- """The new-style print function."""
- fp = kwargs.pop("file", sys.stdout)
- if fp is None:
- return
- def write(data):
- if not isinstance(data, basestring):
- data = str(data)
- fp.write(data)
- want_unicode = False
- sep = kwargs.pop("sep", None)
- if sep is not None:
- if isinstance(sep, unicode):
- want_unicode = True
- elif not isinstance(sep, str):
- raise TypeError("sep must be None or a string")
- end = kwargs.pop("end", None)
- if end is not None:
- if isinstance(end, unicode):
- want_unicode = True
- elif not isinstance(end, str):
- raise TypeError("end must be None or a string")
- if kwargs:
- raise TypeError("invalid keyword arguments to print()")
- if not want_unicode:
- for arg in args:
- if isinstance(arg, unicode):
- want_unicode = True
- break
- if want_unicode:
- newline = unicode("\n")
- space = unicode(" ")
- else:
- newline = "\n"
- space = " "
- if sep is None:
- sep = space
- if end is None:
- end = newline
- for i, arg in enumerate(args):
- if i:
- write(sep)
- write(arg)
- write(end)
-
-_add_doc(reraise, """Reraise an exception.""")
-
-
-def with_metaclass(meta, base=object):
- """Create a base class with a metaclass."""
- return meta("NewBase", (base,), {})
-
-
-### Additional customizations for Django ###
-
-if PY3:
- _iterlists = "lists"
-else:
- _iterlists = "iterlists"
-
-def iterlists(d):
- """Return an iterator over the values of a MultiValueDict."""
- return getattr(d, _iterlists)()
-
-
-add_move(MovedModule("_dummy_thread", "dummy_thread"))
-add_move(MovedModule("_thread", "thread"))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/feedgenerator-1.9.2/feedgenerator/django/utils/timezone.py new/feedgenerator-2.0.0/feedgenerator/django/utils/timezone.py
--- old/feedgenerator-1.9.2/feedgenerator/django/utils/timezone.py 2020-02-09 09:40:59.000000000 +0100
+++ new/feedgenerator-2.0.0/feedgenerator/django/utils/timezone.py 2021-09-28 13:03:34.000000000 +0200
@@ -13,8 +13,6 @@
pytz = None
# ### from django.conf import settings
-from . import six
-
__all__ = [
'utc', 'get_default_timezone', 'get_current_timezone',
'activate', 'deactivate', 'override',
@@ -97,18 +95,18 @@
# ### # In order to avoid accessing the settings at compile time,
# ### # wrap the expression in a function and cache the result.
# ### _localtime = None
-# ###
+# ###
# ### def get_default_timezone():
# ### """
# ### Returns the default time zone as a tzinfo instance.
-# ###
+# ###
# ### This is the time zone defined by settings.TIME_ZONE.
-# ###
+# ###
# ### See also :func:`get_current_timezone`.
# ### """
# ### global _localtime
# ### if _localtime is None:
-# ### if isinstance(settings.TIME_ZONE, six.string_types) and pytz is not None:
+# ### if isinstance(settings.TIME_ZONE, str) and pytz is not None:
# ### _localtime = pytz.timezone(settings.TIME_ZONE)
# ### else:
# ### _localtime = LocalTimezone()
@@ -161,7 +159,7 @@
"""
if isinstance(timezone, tzinfo):
_active.value = timezone
- elif isinstance(timezone, six.string_types) and pytz is not None:
+ elif isinstance(timezone, (str, )) and pytz is not None:
_active.value = pytz.timezone(timezone)
else:
raise ValueError("Invalid timezone: %r" % timezone)
@@ -175,7 +173,7 @@
if hasattr(_active, "value"):
del _active.value
-class override(object):
+class override:
"""
Temporarily set the time zone for the current thread.
@@ -205,14 +203,14 @@
# ### # Templates
-# ###
+# ###
# ### def template_localtime(value, use_tz=None):
# ### """
# ### Checks if value is a datetime and converts it to local time if necessary.
-# ###
+# ###
# ### If use_tz is provided and is not None, that will force the value to
# ### be converted (or not), overriding the value of settings.USE_TZ.
-# ###
+# ###
# ### This function is designed for use by the template engine.
# ### """
# ### should_convert = (isinstance(value, datetime)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/feedgenerator-1.9.2/feedgenerator/django/utils/xmlutils.py new/feedgenerator-2.0.0/feedgenerator/django/utils/xmlutils.py
--- old/feedgenerator-1.9.2/feedgenerator/django/utils/xmlutils.py 2020-02-09 09:40:59.000000000 +0100
+++ new/feedgenerator-2.0.0/feedgenerator/django/utils/xmlutils.py 2021-09-28 13:03:34.000000000 +0200
@@ -2,8 +2,6 @@
Utilities for XML generation/parsing.
"""
-import six
-
from xml.sax.saxutils import XMLGenerator, quoteattr
class SimplerXMLGenerator(XMLGenerator):
@@ -19,5 +17,5 @@
self._write('<' + name)
# sort attributes for consistent output
for (name, value) in sorted(attrs.items()):
- self._write(' %s=%s' % (name, quoteattr(value)))
- self._write(six.u('>'))
+ self._write(f' {name}={quoteattr(value)}')
+ self._write('>')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/feedgenerator-1.9.2/feedgenerator.egg-info/PKG-INFO new/feedgenerator-2.0.0/feedgenerator.egg-info/PKG-INFO
--- old/feedgenerator-1.9.2/feedgenerator.egg-info/PKG-INFO 2021-08-18 10:57:37.000000000 +0200
+++ new/feedgenerator-2.0.0/feedgenerator.egg-info/PKG-INFO 2021-09-28 13:39:38.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: feedgenerator
-Version: 1.9.2
+Version: 2.0.0
Summary: Standalone version of django.utils.feedgenerator
Home-page: https://github.com/getpelican/feedgenerator
Author: Django Software Foundation
@@ -24,6 +24,7 @@
Classifier: Topic :: Internet :: WWW/HTTP
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
Classifier: Topic :: Software Development :: Libraries :: Python Modules
+Requires-Python: >=3.6
License-File: LICENSE
FeedGenerator
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/feedgenerator-1.9.2/feedgenerator.egg-info/SOURCES.txt new/feedgenerator-2.0.0/feedgenerator.egg-info/SOURCES.txt
--- old/feedgenerator-1.9.2/feedgenerator.egg-info/SOURCES.txt 2021-08-18 10:57:37.000000000 +0200
+++ new/feedgenerator-2.0.0/feedgenerator.egg-info/SOURCES.txt 2021-09-28 13:39:38.000000000 +0200
@@ -17,24 +17,12 @@
feedgenerator/django/utils/encoding.py
feedgenerator/django/utils/feedgenerator.py
feedgenerator/django/utils/functional.py
-feedgenerator/django/utils/six.py
feedgenerator/django/utils/timezone.py
feedgenerator/django/utils/xmlutils.py
tests_feedgenerator/__init__.py
tests_feedgenerator/test_feedgenerator.py
tests_feedgenerator/test_stringio.py
tests_feedgenerator/usage_example.py
-tests_feedgenerator/__pycache__/__init__.cpython-36.pyc
-tests_feedgenerator/__pycache__/__init__.cpython-37.pyc
-tests_feedgenerator/__pycache__/__init__.cpython-38.pyc
tests_feedgenerator/__pycache__/__init__.cpython-39.pyc
-tests_feedgenerator/__pycache__/test_feedgenerator.cpython-36-pytest-6.2.4.pyc
-tests_feedgenerator/__pycache__/test_feedgenerator.cpython-37-pytest-6.2.4.pyc
-tests_feedgenerator/__pycache__/test_feedgenerator.cpython-38-pytest-6.2.2.pyc
-tests_feedgenerator/__pycache__/test_feedgenerator.cpython-38-pytest-6.2.4.pyc
-tests_feedgenerator/__pycache__/test_feedgenerator.cpython-39-pytest-6.2.4.pyc
-tests_feedgenerator/__pycache__/test_stringio.cpython-36-pytest-6.2.4.pyc
-tests_feedgenerator/__pycache__/test_stringio.cpython-37-pytest-6.2.4.pyc
-tests_feedgenerator/__pycache__/test_stringio.cpython-38-pytest-6.2.2.pyc
-tests_feedgenerator/__pycache__/test_stringio.cpython-38-pytest-6.2.4.pyc
-tests_feedgenerator/__pycache__/test_stringio.cpython-39-pytest-6.2.4.pyc
\ No newline at end of file
+tests_feedgenerator/__pycache__/test_feedgenerator.cpython-39-pytest-6.2.5.pyc
+tests_feedgenerator/__pycache__/test_stringio.cpython-39-pytest-6.2.5.pyc
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/feedgenerator-1.9.2/feedgenerator.egg-info/requires.txt new/feedgenerator-2.0.0/feedgenerator.egg-info/requires.txt
--- old/feedgenerator-1.9.2/feedgenerator.egg-info/requires.txt 2021-08-18 10:57:37.000000000 +0200
+++ new/feedgenerator-2.0.0/feedgenerator.egg-info/requires.txt 2021-09-28 13:39:38.000000000 +0200
@@ -1,2 +1 @@
pytz>=0a
-six
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/feedgenerator-1.9.2/setup.cfg new/feedgenerator-2.0.0/setup.cfg
--- old/feedgenerator-1.9.2/setup.cfg 2021-08-18 10:57:37.332267000 +0200
+++ new/feedgenerator-2.0.0/setup.cfg 2021-09-28 13:39:38.641083200 +0200
@@ -1,6 +1,13 @@
[sdist]
force_manifest = 1
+[tool:pytest]
+addopts =
+ --cov=feedgenerator
+ --cov=tests_feedgenerator
+ --cov-report=html
+ --cov-report=term-missing:skip-covered
+
[egg_info]
tag_build =
tag_date = 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/feedgenerator-1.9.2/setup.py new/feedgenerator-2.0.0/setup.py
--- old/feedgenerator-1.9.2/setup.py 2021-08-18 10:46:33.000000000 +0200
+++ new/feedgenerator-2.0.0/setup.py 2021-09-28 13:34:59.000000000 +0200
@@ -1,6 +1,5 @@
#!/usr/bin/env python
-from io import open
# Using setuptools rather than distutils to get the `develop` command
from setuptools import setup
@@ -35,11 +34,11 @@
MAINTAINER = 'Pelican Dev Team'
MAINTAINER_EMAIL = 'authors(a)getpelican.com'
KEYWORDS = "feed atom rss".split(' ')
-VERSION = '1.9.2'
+VERSION = '2.0.0'
TEST_SUITE = 'tests_feedgenerator'
-REQUIRES = ['pytz >= 0a', 'six']
+REQUIRES = ['pytz >= 0a']
setup(
name=NAME,
@@ -47,6 +46,7 @@
packages=PACKAGES,
test_suite=TEST_SUITE,
install_requires=REQUIRES,
+ python_requires='>=3.6',
# metadata for upload to PyPI
author=AUTHOR,
author_email=AUTHOR_EMAIL,
Binary files old/feedgenerator-1.9.2/tests_feedgenerator/__pycache__/__init__.cpython-36.pyc and new/feedgenerator-2.0.0/tests_feedgenerator/__pycache__/__init__.cpython-36.pyc differ
Binary files old/feedgenerator-1.9.2/tests_feedgenerator/__pycache__/__init__.cpython-37.pyc and new/feedgenerator-2.0.0/tests_feedgenerator/__pycache__/__init__.cpython-37.pyc differ
Binary files old/feedgenerator-1.9.2/tests_feedgenerator/__pycache__/__init__.cpython-38.pyc and new/feedgenerator-2.0.0/tests_feedgenerator/__pycache__/__init__.cpython-38.pyc differ
Binary files old/feedgenerator-1.9.2/tests_feedgenerator/__pycache__/test_feedgenerator.cpython-36-pytest-6.2.4.pyc and new/feedgenerator-2.0.0/tests_feedgenerator/__pycache__/test_feedgenerator.cpython-36-pytest-6.2.4.pyc differ
Binary files old/feedgenerator-1.9.2/tests_feedgenerator/__pycache__/test_feedgenerator.cpython-37-pytest-6.2.4.pyc and new/feedgenerator-2.0.0/tests_feedgenerator/__pycache__/test_feedgenerator.cpython-37-pytest-6.2.4.pyc differ
Binary files old/feedgenerator-1.9.2/tests_feedgenerator/__pycache__/test_feedgenerator.cpython-38-pytest-6.2.2.pyc and new/feedgenerator-2.0.0/tests_feedgenerator/__pycache__/test_feedgenerator.cpython-38-pytest-6.2.2.pyc differ
Binary files old/feedgenerator-1.9.2/tests_feedgenerator/__pycache__/test_feedgenerator.cpython-38-pytest-6.2.4.pyc and new/feedgenerator-2.0.0/tests_feedgenerator/__pycache__/test_feedgenerator.cpython-38-pytest-6.2.4.pyc differ
Binary files old/feedgenerator-1.9.2/tests_feedgenerator/__pycache__/test_feedgenerator.cpython-39-pytest-6.2.4.pyc and new/feedgenerator-2.0.0/tests_feedgenerator/__pycache__/test_feedgenerator.cpython-39-pytest-6.2.4.pyc differ
Binary files old/feedgenerator-1.9.2/tests_feedgenerator/__pycache__/test_feedgenerator.cpython-39-pytest-6.2.5.pyc and new/feedgenerator-2.0.0/tests_feedgenerator/__pycache__/test_feedgenerator.cpython-39-pytest-6.2.5.pyc differ
Binary files old/feedgenerator-1.9.2/tests_feedgenerator/__pycache__/test_stringio.cpython-36-pytest-6.2.4.pyc and new/feedgenerator-2.0.0/tests_feedgenerator/__pycache__/test_stringio.cpython-36-pytest-6.2.4.pyc differ
Binary files old/feedgenerator-1.9.2/tests_feedgenerator/__pycache__/test_stringio.cpython-37-pytest-6.2.4.pyc and new/feedgenerator-2.0.0/tests_feedgenerator/__pycache__/test_stringio.cpython-37-pytest-6.2.4.pyc differ
Binary files old/feedgenerator-1.9.2/tests_feedgenerator/__pycache__/test_stringio.cpython-38-pytest-6.2.2.pyc and new/feedgenerator-2.0.0/tests_feedgenerator/__pycache__/test_stringio.cpython-38-pytest-6.2.2.pyc differ
Binary files old/feedgenerator-1.9.2/tests_feedgenerator/__pycache__/test_stringio.cpython-38-pytest-6.2.4.pyc and new/feedgenerator-2.0.0/tests_feedgenerator/__pycache__/test_stringio.cpython-38-pytest-6.2.4.pyc differ
Binary files old/feedgenerator-1.9.2/tests_feedgenerator/__pycache__/test_stringio.cpython-39-pytest-6.2.4.pyc and new/feedgenerator-2.0.0/tests_feedgenerator/__pycache__/test_stringio.cpython-39-pytest-6.2.4.pyc differ
Binary files old/feedgenerator-1.9.2/tests_feedgenerator/__pycache__/test_stringio.cpython-39-pytest-6.2.5.pyc and new/feedgenerator-2.0.0/tests_feedgenerator/__pycache__/test_stringio.cpython-39-pytest-6.2.5.pyc differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/feedgenerator-1.9.2/tests_feedgenerator/test_feedgenerator.py new/feedgenerator-2.0.0/tests_feedgenerator/test_feedgenerator.py
--- old/feedgenerator-1.9.2/tests_feedgenerator/test_feedgenerator.py 2021-08-18 10:07:21.000000000 +0200
+++ new/feedgenerator-2.0.0/tests_feedgenerator/test_feedgenerator.py 2021-09-28 13:03:34.000000000 +0200
@@ -1,17 +1,11 @@
-# -*- encoding: utf-8 -*-
+import unittest
-from __future__ import unicode_literals
-
-try:
- import unittest2 as unittest
-except ImportError:
- import unittest
-
-import six
import datetime
import feedgenerator
+import pytest
+
FIXT_FEED = dict(
title="Poynter E-Media Tidbits",
link="http://www.poynter.org/column.asp?id=31",
@@ -73,7 +67,7 @@
self.maxDiff = None
def test_000_types(self):
- ty = six.text_type
+ ty = str
for k, v in FIXT_FEED.items():
self.assertEqual(type(v), ty)
for k, v in FIXT_ITEM.items():
@@ -88,21 +82,9 @@
feed = feedgenerator.Rss201rev2Feed(**FIXT_FEED)
feed.add_item(**FIXT_ITEM)
result = feed.writeString(ENCODING)
- if six.PY3:
- # On Python 3, result of feedgenerator is a unicode string!
- # So do not encode our expected_result.
- expected_result = build_expected_rss_result(feed, EXPECTED_RESULT_RSS, None)
- else:
- # On Python 2, result of feedgenerator is a str string!
- # Expected_result must therefore encoded likewise.
- expected_result = build_expected_rss_result(feed, EXPECTED_RESULT_RSS, ENCODING)
- # The different result types of Python 2 (str=bytes) and Python 3
- # (str=text=unicode) stems from a different implementation of StringIO.
- # As I understand it, getvalue() in Python 2 returns the type you
- # originally wrote into the buffer. In Python 3 getvalue() always
- # returns a str (=text=unicode).
- # See other test: test_stringio.py
- #print type(result), type(expected_result)
+ # On Python 3, result of feedgenerator is a unicode string!
+ # So do not encode our expected_result.
+ expected_result = build_expected_rss_result(feed, EXPECTED_RESULT_RSS, None)
self.assertEqual(type(result), type(expected_result))
self.assertEqual(result, expected_result)
@@ -111,20 +93,48 @@
feed = feedgenerator.Atom1Feed(**FIXT_FEED)
feed.add_item(**FIXT_ITEM)
result = feed.writeString(ENCODING)
- if six.PY3:
- # On Python 3, result of feedgenerator is a unicode string!
- # So do not encode our expected_result.
- expected_result = build_expected_atom_result(feed, EXPECTED_RESULT_ATOM, None)
- else:
- # On Python 2, result of feedgenerator is a str string!
- # Expected_result must therefore encoded likewise.
- expected_result = build_expected_atom_result(feed, EXPECTED_RESULT_ATOM, ENCODING)
- # The different result types of Python 2 (str=bytes) and Python 3
- # (str=text=unicode) stems from a different implementation of StringIO.
- # As I understand it, getvalue() in Python 2 returns the type you
- # originally wrote into the buffer. In Python 3 getvalue() always
- # returns a str (=text=unicode).
- # See other test: test_stringio.py
- #print type(result), type(expected_result)
+ # On Python 3, result of feedgenerator is a unicode string!
+ # So do not encode our expected_result.
+ expected_result = build_expected_atom_result(feed, EXPECTED_RESULT_ATOM, None)
self.assertEqual(type(result), type(expected_result))
self.assertEqual(result, expected_result)
+
+
+(a)pytest.mark.parametrize("description, subtitle, fragment, nonfragment", [
+ # Neither description nor subtitle are provided
+ (None, None, None, "<subtitle></subtitle>"),
+ ("", "", None, "<subtitle></subtitle>"),
+ # Description is provided
+ ("description", None, "<subtitle>description</subtitle>", None),
+ ("description", "", "<subtitle>description</subtitle>", None),
+ # Subtitle is provided
+ (None, "subtitle", "<subtitle>subtitle</subtitle>", None),
+ ("", "subtitle", "<subtitle>subtitle</subtitle>", None),
+ # Both description & subtitle are provided; subtitle takes precedence
+ ("description", "subtitle", "<subtitle>subtitle</subtitle>", "<subtitle>description</subtitle>"),
+])
+def test_subtitle(description, subtitle, fragment, nonfragment):
+ """Test regression for https://github.com/getpelican/feedgenerator/issues/30.
+
+ We test against all four possible combinations of description x
+ subtitle parameters and additionally for None and "".
+
+ description, subtitle are the values for the respective
+ feed-parameters.
+
+ fragment and nonfragment are text fragments that should be in the
+ expected result or not.
+
+ """
+ FIXT_FEED = dict(
+ title="title",
+ link="https://example.com",
+ description=description,
+ subtitle=subtitle,
+ )
+ feed = feedgenerator.Atom1Feed(**FIXT_FEED)
+ result = feed.writeString(ENCODING)
+ if fragment:
+ assert fragment in result
+ if nonfragment:
+ assert nonfragment not in result
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/feedgenerator-1.9.2/tests_feedgenerator/test_stringio.py new/feedgenerator-2.0.0/tests_feedgenerator/test_stringio.py
--- old/feedgenerator-1.9.2/tests_feedgenerator/test_stringio.py 2020-02-09 09:40:59.000000000 +0100
+++ new/feedgenerator-2.0.0/tests_feedgenerator/test_stringio.py 2021-09-28 13:03:34.000000000 +0200
@@ -1,14 +1,6 @@
-# -*- encoding: utf-8 -*-
+import unittest
-from __future__ import unicode_literals, print_function
-
-try:
- import unittest2 as unittest
-except ImportError:
- import unittest
-
-import six
-from six import StringIO
+from io import StringIO
ENCODING = 'utf-8'
@@ -22,62 +14,51 @@
def test_001_text(self):
# If we throw unicode into the StringIO buffer, we'll
# get unicode out of it.
- # Thank god this is the same in Python 2 and 3.
- self.assertEqual(type(S0), six.text_type)
+ self.assertEqual(type(S0), str)
buf = StringIO()
print(S0, file=buf, end="")
s1 = buf.getvalue()
self.assertEqual(type(S0), type(s1))
self.assertEqual(S0, s1)
- self.assertEqual(type(s1), six.text_type)
+ self.assertEqual(type(s1), str)
def test_002_bytes(self):
buf = StringIO()
print(S0_BYTES, file=buf, end="")
s1 = buf.getvalue()
-
- if six.PY3:
- # In Python 3 StringIO *ALWAYS* returns str (=text=unicode) !
- # Even if we originally write bytes into the buffer, the value
- # we get out of it has type str!
-
- # Input is bytes
- self.assertEqual(type(S0_BYTES), bytes)
- # Output is NOT bytes...
- self.assertNotEqual(type(S0_BYTES), type(s1))
- self.assertNotEqual(type(s1), bytes)
- # ...but str!
- self.assertEqual(type(s1), str)
- # So the contents are not equal!
- self.assertNotEqual(S0_BYTES, s1)
- # StringIO coerced bytes into str:
- # b'xyz' ---> "b'xyz'"
- self.assertEqual(str(S0_BYTES), s1)
- # See, the type info is literally present in the output str!
- self.assertEqual("b'" + str(S0_BYTES, encoding=ENCODING) + "'", s1)
- # Coercion is NOT decoding!
- self.assertNotEqual(S0_BYTES.decode(ENCODING), s1)
- self.assertNotEqual(str(S0_BYTES, encoding=ENCODING), s1)
- # These are the same
- self.assertEqual(S0_BYTES.decode(ENCODING),
- str(S0_BYTES, encoding=ENCODING))
- # Additional note:
- # If we do not specify an encoding when we create a StringIO
- # buffer, Python 3 automatically uses the locale's preferred
- # encoding: locale.getpreferredencoding()
- # Cf. http://docs.python.org/release/3.0.1/library/io.html#io.TextIOWrapper
- # In my case this is the same encoding as the encoding of this source file,
- # namely UTF-8. If on your system both encodings are different, you may
- # encounter other results than the above.
- #
- # In Python 3.2 the signature of StringIO() has changed. It is no more
- # possible to specify an encoding here.
- else:
- # In Python 2 StringIO returns the type that we originally
- # wrote into the buffer.
- # Here we see that if we write bytes into the buffer, we'll get
- # bytes out of it.
- self.assertEqual(type(S0_BYTES), str)
- self.assertEqual(type(S0_BYTES), type(s1))
- self.assertEqual(type(s1), str)
- self.assertEqual(S0_BYTES, s1)
+
+ # In Python 3 StringIO *ALWAYS* returns str (=text=unicode) !
+ # Even if we originally write bytes into the buffer, the value
+ # we get out of it has type str!
+
+ # Input is bytes
+ self.assertEqual(type(S0_BYTES), bytes)
+ # Output is NOT bytes...
+ self.assertNotEqual(type(S0_BYTES), type(s1))
+ self.assertNotEqual(type(s1), bytes)
+ # ...but str!
+ self.assertEqual(type(s1), str)
+ # So the contents are not equal!
+ self.assertNotEqual(S0_BYTES, s1)
+ # StringIO coerced bytes into str:
+ # b'xyz' ---> "b'xyz'"
+ self.assertEqual(str(S0_BYTES), s1)
+ # See, the type info is literally present in the output str!
+ self.assertEqual("b'" + str(S0_BYTES, encoding=ENCODING) + "'", s1)
+ # Coercion is NOT decoding!
+ self.assertNotEqual(S0_BYTES.decode(ENCODING), s1)
+ self.assertNotEqual(str(S0_BYTES, encoding=ENCODING), s1)
+ # These are the same
+ self.assertEqual(S0_BYTES.decode(ENCODING),
+ str(S0_BYTES, encoding=ENCODING))
+ # Additional note:
+ # If we do not specify an encoding when we create a StringIO
+ # buffer, Python 3 automatically uses the locale's preferred
+ # encoding: locale.getpreferredencoding()
+ # Cf. http://docs.python.org/release/3.0.1/library/io.html#io.TextIOWrapper
+ # In my case this is the same encoding as the encoding of this source file,
+ # namely UTF-8. If on your system both encodings are different, you may
+ # encounter other results than the above.
+ #
+ # In Python 3.2 the signature of StringIO() has changed. It is no more
+ # possible to specify an encoding here.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/feedgenerator-1.9.2/tests_feedgenerator/usage_example.py new/feedgenerator-2.0.0/tests_feedgenerator/usage_example.py
--- old/feedgenerator-1.9.2/tests_feedgenerator/usage_example.py 2020-02-09 09:40:59.000000000 +0100
+++ new/feedgenerator-2.0.0/tests_feedgenerator/usage_example.py 2021-09-28 13:03:34.000000000 +0200
@@ -1,10 +1,5 @@
-# -*- encoding: utf-8 -*-
-
-from __future__ import unicode_literals
-
import os
import tempfile
-import six
import feedgenerator
feed = feedgenerator.Rss201rev2Feed(
@@ -23,10 +18,7 @@
description="Testing."
)
-if six.PY3:
- FN_PREFIX = 'feed_py3-'
-else:
- FN_PREFIX = 'feed_py2-'
+FN_PREFIX = 'feed_py3-'
# Usage example in feedgenerator docs opens the file in text mode, not binary.
# So we do this here likewise.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/feedgenerator-1.9.2/tox.ini new/feedgenerator-2.0.0/tox.ini
--- old/feedgenerator-1.9.2/tox.ini 2021-08-18 10:31:05.000000000 +0200
+++ new/feedgenerator-2.0.0/tox.ini 2021-09-28 13:03:34.000000000 +0200
@@ -12,3 +12,4 @@
pytest
deps =
pytest
+ pytest-cov
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package tomoyo-tools for openSUSE:Factory checked in at 2021-09-29 20:19:13
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/tomoyo-tools (Old)
and /work/SRC/openSUSE:Factory/.tomoyo-tools.new.1899 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "tomoyo-tools"
Wed Sep 29 20:19:13 2021 rev:18 rq:922163 version:2.6.1.20210910
Changes:
--------
--- /work/SRC/openSUSE:Factory/tomoyo-tools/tomoyo-tools.changes 2015-06-09 12:24:47.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.tomoyo-tools.new.1899/tomoyo-tools.changes 2021-09-29 20:20:44.339147217 +0200
@@ -1,0 +2,12 @@
+Wed Sep 29 11:23:05 UTC 2021 - Marcus Meissner <meissner(a)suse.com>
+
+- updated to 2.6.1-20210910
+ - Add -DNCURSES_WIDECHAR=0 to programs using ncurses library.
+ - Loosen pathname/domainname validation.
+ - Limit wildcard recursion depth.
+ - Remove "socket:[family=\\$:type=\\$:protocol=\\$]" from ANY_PATHNAME group.
+ - Adjust to TOMOYO 2.6.
+ - Rebase to ccs-tools 1.8.5-2.
+- moved /sbin/tomoyo-init binary to /usr/sbin/tomoyo-init (bsc#1191101)
+
+-------------------------------------------------------------------
Old:
----
tomoyo-tools-2.5.0-20140601.tar.gz
tomoyo-tools-2.5.0-20140601.tar.gz.asc
New:
----
tomoyo-tools-2.6.1-20210910.tar.gz
tomoyo-tools-2.6.1-20210910.tar.gz.asc
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ tomoyo-tools.spec ++++++
--- /var/tmp/diff_new_pack.Otxnvt/_old 2021-09-29 20:20:44.931148076 +0200
+++ /var/tmp/diff_new_pack.Otxnvt/_new 2021-09-29 20:20:44.931148076 +0200
@@ -1,7 +1,7 @@
#
# spec file for package tomoyo-tools
#
-# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
+# 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
@@ -12,20 +12,20 @@
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
-# Please submit bugfixes or comments via http://bugs.opensuse.org/
+# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
-%define downloadver 2.5.0-20140601
+%define downloadver 2.6.1-20210910
Name: tomoyo-tools
-Version: 2.5.0.20140601
+Version: 2.6.1.20210910
Release: 0
Summary: Userspace tools for TOMOYO Linux 2.4.x
-License: GPL-2.0
+License: GPL-2.0-only
Group: Development/Tools/Other
-Url: http://sourceforge.jp/projects/tomoyo/
-Source0: http://osdn.dl.sourceforge.jp/tomoyo/53357/tomoyo-tools-%{downloadver}.tar.…
-Source1: http://osdn.dl.sourceforge.jp/tomoyo/53357/tomoyo-tools-%{downloadver}.tar.…
+URL: http://sourceforge.jp/projects/tomoyo/
+Source0: http://osdn.dl.sourceforge.jp/tomoyo/70710/tomoyo-tools-%{downloadver}.tar.…
+Source1: http://osdn.dl.sourceforge.jp/tomoyo/70710/tomoyo-tools-%{downloadver}.tar.…
# http://i-love.sakura.ne.jp/kumaneko-key
Source2: %name.keyring
BuildRequires: ncurses-devel
@@ -42,7 +42,7 @@
make %{?_smp_mflags} USRLIBDIR=%{_libdir} CFLAGS="-Wall %{optflags}"
%install
-make INSTALLDIR=%{buildroot} USRLIBDIR=%{_libdir} install
+make INSTALLDIR=%{buildroot} USRLIBDIR=%{_libdir} SBINDIR=%{_sbindir} install
%post -p /sbin/ldconfig
@@ -51,7 +51,7 @@
%files
%defattr(-, root, root)
%doc COPYING.tomoyo README.tomoyo
-%attr(700,root,root) /sbin/tomoyo-init
+%attr(700,root,root) %_sbindir/tomoyo-init
%{_libdir}/lib*.so*
%dir %{_libdir}/tomoyo
%{_libdir}/tomoyo/*
++++++ tomoyo-tools-2.5.0-20140601.tar.gz -> tomoyo-tools-2.6.1-20210910.tar.gz ++++++
++++ 10888 lines of diff (skipped)
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package prometheus-blackbox_exporter for openSUSE:Factory checked in at 2021-09-29 20:19:12
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/prometheus-blackbox_exporter (Old)
and /work/SRC/openSUSE:Factory/.prometheus-blackbox_exporter.new.1899 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "prometheus-blackbox_exporter"
Wed Sep 29 20:19:12 2021 rev:2 rq:922156 version:0.19.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/prometheus-blackbox_exporter/prometheus-blackbox_exporter.changes 2021-09-21 21:14:17.234716299 +0200
+++ /work/SRC/openSUSE:Factory/.prometheus-blackbox_exporter.new.1899/prometheus-blackbox_exporter.changes 2021-09-29 20:20:43.623146179 +0200
@@ -1,0 +2,5 @@
+Tue Sep 21 13:17:32 UTC 2021 - Witek Bedyk <witold.bedyk(a)suse.com>
+
+- Remove BuildRoot:
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ prometheus-blackbox_exporter.spec ++++++
--- /var/tmp/diff_new_pack.fLLjv7/_old 2021-09-29 20:20:44.163146962 +0200
+++ /var/tmp/diff_new_pack.fLLjv7/_new 2021-09-29 20:20:44.163146962 +0200
@@ -32,7 +32,6 @@
BuildRequires: golang(API) >= 1.14
%{go_nostrip}
%{?systemd_ordering}
-BuildRoot: %{_tmppath}/%{name}-%{version}-build
Requires(pre): user(prometheus)
Requires(pre): group(prometheus)
1
0
29 Sep '21
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package golang-github-prometheus-alertmanager for openSUSE:Factory checked in at 2021-09-29 20:19:11
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/golang-github-prometheus-alertmanager (Old)
and /work/SRC/openSUSE:Factory/.golang-github-prometheus-alertmanager.new.1899 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "golang-github-prometheus-alertmanager"
Wed Sep 29 20:19:11 2021 rev:9 rq:922154 version:0.21.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/golang-github-prometheus-alertmanager/golang-github-prometheus-alertmanager.changes 2020-12-08 13:25:38.466716279 +0100
+++ /work/SRC/openSUSE:Factory/.golang-github-prometheus-alertmanager.new.1899/golang-github-prometheus-alertmanager.changes 2021-09-29 20:20:42.859145070 +0200
@@ -1,0 +2,6 @@
+Mon Sep 20 14:08:14 UTC 2021 - Johannes Segitz <jsegitz(a)suse.com>
+
+- Added hardening to systemd service(s) (bsc#1181400). Modified:
+ * prometheus-alertmanager.service
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ prometheus-alertmanager.service ++++++
--- /var/tmp/diff_new_pack.ElfCGE/_old 2021-09-29 20:20:43.511146016 +0200
+++ /var/tmp/diff_new_pack.ElfCGE/_new 2021-09-29 20:20:43.511146016 +0200
@@ -5,6 +5,19 @@
After=network-online.target
[Service]
+# added automatically, for details please see
+# https://en.opensuse.org/openSUSE:Security_Features#Systemd_hardening_effort
+ProtectSystem=full
+ProtectHome=true
+PrivateDevices=true
+ProtectHostname=true
+ProtectClock=true
+ProtectKernelTunables=true
+ProtectKernelModules=true
+ProtectKernelLogs=true
+ProtectControlGroups=true
+RestrictRealtime=true
+# end of automatic additions
Restart=always
User=prometheus
EnvironmentFile=-/etc/sysconfig/prometheus-alertmanager
1
0
29 Sep '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-09-29 20:19:11
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/golang-github-prometheus-node_exporter (Old)
and /work/SRC/openSUSE:Factory/.golang-github-prometheus-node_exporter.new.1899 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "golang-github-prometheus-node_exporter"
Wed Sep 29 20:19:11 2021 rev:8 rq:922151 version:1.1.2
Changes:
--------
--- /work/SRC/openSUSE:Factory/golang-github-prometheus-node_exporter/golang-github-prometheus-node_exporter.changes 2021-03-28 11:56:50.168249128 +0200
+++ /work/SRC/openSUSE:Factory/.golang-github-prometheus-node_exporter.new.1899/golang-github-prometheus-node_exporter.changes 2021-09-29 20:20:41.923143713 +0200
@@ -1,0 +2,7 @@
+Thu Sep 23 09:43:19 UTC 2021 - Patrick Seidensal <pseidensal(a)suse.com>
+
+- Apply patch to capture permission denied error for "energy_uj" file (bsc#1190535)
+ * Adds patch capture-permission-denied-error-energy_uj.patch
+ from https://github.com/prometheus/node_exporter/pull/2092
+
+-------------------------------------------------------------------
New:
----
capture-permission-denied-error-energy_uj.patch
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ golang-github-prometheus-node_exporter.spec ++++++
--- /var/tmp/diff_new_pack.wzZiWc/_old 2021-09-29 20:20:42.607144705 +0200
+++ /var/tmp/diff_new_pack.wzZiWc/_new 2021-09-29 20:20:42.611144711 +0200
@@ -30,6 +30,7 @@
Source1: vendor.tar.gz
Source2: prometheus-node_exporter.service
Source4: prometheus-node_exporter.sysconfig
+Patch0: capture-permission-denied-error-energy_uj.patch
BuildRequires: fdupes
BuildRequires: golang-packaging
BuildRequires: golang(API) = 1.14
@@ -71,6 +72,7 @@
%post
%service_add_post prometheus-node_exporter.service
%fillup_only -n prometheus-node_exporter
+
%preun
%service_del_preun prometheus-node_exporter.service
++++++ capture-permission-denied-error-energy_uj.patch ++++++
From 502f287c960f910eb4cc019ff6b8a877cfa15f5d Mon Sep 17 00:00:00 2001
From: Ben Kochie <superq(a)gmail.com>
Date: Wed, 21 Jul 2021 19:28:54 +0200
Subject: [PATCH] Fix rapl collector log noise
References: https://github.com/prometheus/node_exporter/pull/2092 (bsc#1190535)
Upstream: submitted
Capture permission denied error for "energy_uj" file.
Fixes: https://github.com/prometheus/node_exporter/issues/1892
Signed-off-by: Ben Kochie <superq(a)gmail.com>
---
collector/rapl_linux.go | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/collector/rapl_linux.go b/collector/rapl_linux.go
index a0f90119b..b73c0dd83 100644
--- a/collector/rapl_linux.go
+++ b/collector/rapl_linux.go
@@ -70,6 +70,10 @@ func (c *raplCollector) Update(ch chan<- prometheus.Metric) error {
for _, rz := range zones {
newMicrojoules, err := rz.GetEnergyMicrojoules()
if err != nil {
+ if errors.Is(err, os.ErrPermission) {
+ level.Debug(c.logger).Log("msg", "Can't access energy_uj file", "zone", rz, "err", err)
+ return ErrNoData
+ }
return err
}
index := strconv.Itoa(rz.Index)
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package live-net-installer for openSUSE:Factory checked in at 2021-09-29 20:19:09
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/live-net-installer (Old)
and /work/SRC/openSUSE:Factory/.live-net-installer.new.1899 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "live-net-installer"
Wed Sep 29 20:19:09 2021 rev:20 rq:922139 version:1.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/live-net-installer/live-net-installer.changes 2021-08-30 13:55:33.361849183 +0200
+++ /work/SRC/openSUSE:Factory/.live-net-installer.new.1899/live-net-installer.changes 2021-09-29 20:20:39.799140634 +0200
@@ -1,0 +2,5 @@
+Tue Sep 28 14:52:36 UTC 2021 - Fabian Vogt <fvogt(a)suse.com>
+
+- Install to /usr/bin/ on usrmerged systems
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ live-net-installer.spec ++++++
--- /var/tmp/diff_new_pack.F9gqKA/_old 2021-09-29 20:20:40.271141318 +0200
+++ /var/tmp/diff_new_pack.F9gqKA/_new 2021-09-29 20:20:40.271141318 +0200
@@ -97,11 +97,20 @@
install -Dm 755 %{SOURCE1} %{buildroot}%{_sbindir}/start-install.sh
install -Dm 644 %{SOURCE2} %{buildroot}%{_datadir}/applications/installation.desktop
install -Dm 644 %{SOURCE5} %{buildroot}%{_datadir}/applications/upgrade.desktop
+# YaST hardcodes "/bin/extend". On usrmerged systems, we can install to /usr/bin/ anyway.
+%if 0%{?suse_version} > 1500
+install -Dm 755 %{SOURCE4} %{buildroot}%{_bindir}/extend
+%else
install -Dm 755 %{SOURCE4} %{buildroot}/bin/extend
+%endif
%files
%license COPYING
+%if 0%{?suse_version} > 1500
+%{_bindir}/extend
+%else
/bin/extend
+%endif
%{_sbindir}/start-install.sh
%{_datadir}/applications/installation.desktop
%{_datadir}/applications/upgrade.desktop
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package libmfx-gen for openSUSE:Factory checked in at 2021-09-29 20:19:08
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libmfx-gen (Old)
and /work/SRC/openSUSE:Factory/.libmfx-gen.new.1899 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libmfx-gen"
Wed Sep 29 20:19:08 2021 rev:2 rq:922202 version:21.3.4
Changes:
--------
--- /work/SRC/openSUSE:Factory/libmfx-gen/libmfx-gen.changes 2021-09-23 23:04:26.312340241 +0200
+++ /work/SRC/openSUSE:Factory/.libmfx-gen.new.1899/libmfx-gen.changes 2021-09-29 20:20:38.407138615 +0200
@@ -1,0 +2,45 @@
+Wed Sep 29 09:07:33 UTC 2021 - Stefan Dirsch <sndirsch(a)suse.com>
+
+- Update to version 21.3.4
+ * [vp9d] fix unsigned qindex issue for vp9 segmentation case (#569)
+ * [EncTools] Add closed GOP support for LPLA (#585)
+ * [Jpegd] Modify the resolution judgment condition of the current jpeg (#522)
+ * [LPLA] Zero sao_enabled flag for LPLA (#538)
+ * [AVCe] Fix typos in NumRefActive (#595)
+ * Refactor cmake (#466)
+ * Refactor root cmake (#467)
+ * cm: set correct timeout (#604)
+ * [EncTools] Make IDRDist U32 (#596)
+ * Refine for commit 2bc6fab
+ * Revert "[Jpegd] Modify the resolution judgment condition of the current jpeg (#522)" (#619)
+ * Revert "Fix vpp_reset and mfxvideovpp_query beh test (#573)" (#620)
+ * [Jpegd] modify the resolution judgment condition of the current jpeg (#623)
+ * Fix exception handling issue (#581)
+ * [VPP] Enabled Denoise2(as known as HVS) on Linux (#592)
+ * core: removed VPL / MSDK1.x RT switch (#603)
+ * umc allocator adapter: decoders will not accept locked surface (#629)
+ * [MPEG2d] fix bug when the bitstream end with slice start code (#598)
+ * [VPP] Fix increasing num of input channels doesn't work (#647)
+ * CM: refactored CM integration (#413)
+ * Refine for commit 8221d4a
+ * [UMC] remove vm_shared_object file (#492)
+ * Revert "CM: refactored CM integration" (#654)
+ * Revert "umc allocator adapter: decoders will not accept locked surface (#629)" (#655)
+ * umc allocator adapter: decoders will not accept locked surface (#3114) (#657)
+ * [Jpeg]modify color range on Linux (#653)
+ * Fixes. Code review 1 (#640)
+ * Revert "[Jpegd] modify the resolution judgment condition of the current jpeg (#623)" (#663)
+ * [Encode] MFX_EXT_BRC_ENABLE rename to MFX_ENABLE_EXT_BRC (#627)
+ * vaapi core: clean up unused interface (#667)
+ * [VPP] Add surface support(in CPU memory) for HVS denoise (#601)
+ * [SCD] Fix sys mem allocate issue (#690)
+ * Disable SCD (#708)
+ * [core] Move CloneSession to RT (#695)
+ * [Encode] Support main10 still picture profile (#713)
+ * Refine for commit 0a3c8e7
+ * [Decode]Enable AVC CSC via sfc pipeline (#712)
+ * [Decode]Enable VP9 CSC via sfc pipeline (#722)
+ * Removed multiple calls vaGetConfigAttributes (#716)
+ * Remove assert in ConvertRateControlMFX2VAAPI (#717)
+
+-------------------------------------------------------------------
Old:
----
intel-onevpl-21.3.3.tar.gz
New:
----
intel-onevpl-21.3.4.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ libmfx-gen.spec ++++++
--- /var/tmp/diff_new_pack.R81An7/_old 2021-09-29 20:20:38.883139305 +0200
+++ /var/tmp/diff_new_pack.R81An7/_new 2021-09-29 20:20:38.887139311 +0200
@@ -19,7 +19,7 @@
%global sover 1_2
Name: libmfx-gen
%define lname libmfx-gen%{sover}
-Version: 21.3.3
+Version: 21.3.4
Release: 0
Summary: Intel oneVPL GPU Runtime
License: MIT
++++++ intel-onevpl-21.3.3.tar.gz -> intel-onevpl-21.3.4.tar.gz ++++++
++++ 3014 lines of diff (skipped)
1
0