openSUSE Commits
Threads by month
- ----- 2024 -----
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
July 2024
- 1 participants
- 1521 discussions
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package blueman for openSUSE:Factory checked in at 2024-07-22 17:18:00
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/blueman (Old)
and /work/SRC/openSUSE:Factory/.blueman.new.17339 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "blueman"
Mon Jul 22 17:18:00 2024 rev:18 rq:1188840 version:2.4.2
Changes:
--------
--- /work/SRC/openSUSE:Factory/blueman/blueman.changes 2023-02-11 21:57:33.191708378 +0100
+++ /work/SRC/openSUSE:Factory/.blueman.new.17339/blueman.changes 2024-07-22 17:19:44.649461170 +0200
@@ -1,0 +2,62 @@
+Thu Jul 18 08:35:39 UTC 2024 - Jan Kužílek <jan.kuzilek(a)suse.com>
+
+- Update to version 2.4.2:
+ * Broken audio profile applet menu items
+ * Missing manager window title
+ * Teardown of DBus mock server in tests
+ * Only a single battery notification
+ * Renamed recent connections header in applet menu
+ * Translation updates
+ * An option to toggle the manager window with the tray icon (the 2.3 behavior
+ useful when there are no window decorations for closing it)
+- Update to version 2.4.1:
+ * Fallback for missing icons
+ * Correct Bluetooth state tracking in manager window
+ * Sporadic error on battery data (Note that there was a regression
+ in Linux 6.8.2, 6.7.11 and 6.6.23 that causes it and lots of other trouble)
+ * Active state on tray icon
+ * Broken markup in tray menu
+ * Translation updates
+ * Handle incompabilities with kded6 running on desktops without
+ StatusNotifierItem support
+- Update to version 2.4:
+ * Fix device-selected handlers
+ * Fix deprecations in tests
+ * Fix showing -1 seconds when discovering @kuraga
+ * Tray: Let dbus call end and reply to caller
+ * Get the image-missing icon if lookup failed to avoid crash
+ * Raise minimum Python version to 3.8
+ * Raise minumum Gtk+ version to 3.24
+ * Hide recent connections associated with unavailable adapters
+ * Store network configuration in GSettings instead of
+ /var/lib/blueman/network.state.
+ * Replace custom MessageArea widget with regular Gtk.InfoBar
+ * Drop auto-power feature. BlueZ now has the AutoEnable setting for even
+ better auto-powering.
+ * Do not use pointless link quality value
+ * Recent connections in toplevel applet menu
+ * Never hide keyboard and combos, see #1954 for more info
+ * Do not close blueman-manager from applet
+ * Add Switch to blueman-manager to set bluetooth on/off
+ * Remove broken check for bluetooth status
+ * PluginDialog: Replace custom list with Gtk.ListBox
+ * Ignore double-click for connect when unpowered
+ * Drop homgeneous from statusbar
+ * PulseAudioUtils: Use python enums in several places
+ * Use operator convenience functions
+ * Cleanup PluginDialog UI
+ * Show HCI device in blueman-adapers tabs
+ * Show different icon for the active audio profile @localevil
+ * Make blueman-services a notebook
+ * Use the TypedDict as constructor
+ * Audio profile switcher in applet menu (@abhijeetviswa)
+ * Set router address as DNS server instead of loopback addresses
+ * Enable dnsmasq DNS service if possible and add DNS servers otherwise
+ * Reconfigure DHCP service on local nameserver changes
+ * Support for systemd-resolved for getting nameservers for NAP clients
+ * List connected devices in status icon tooltip
+ * Support for nautilus 43 and later
+ * Copy bleutooth address to clipboard in devicelist
+ * Add battery levels to status icon tooltip
+
+-------------------------------------------------------------------
Old:
----
blueman-2.3.5.tar.xz
New:
----
blueman-2.4.2.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ blueman.spec ++++++
--- /var/tmp/diff_new_pack.6PnB1L/_old 2024-07-22 17:19:45.225484329 +0200
+++ /var/tmp/diff_new_pack.6PnB1L/_new 2024-07-22 17:19:45.225484329 +0200
@@ -1,7 +1,7 @@
#
# spec file for package blueman
#
-# Copyright (c) 2023 SUSE LLC
+# Copyright (c) 2024 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -27,7 +27,7 @@
%bcond_with nemo
%endif
Name: blueman
-Version: 2.3.5
+Version: 2.4.2
Release: 0
Summary: GTK Bluetooth Manager
License: GPL-3.0-only
@@ -49,11 +49,11 @@
BuildRequires: update-desktop-files
BuildRequires: pkgconfig(bluez) >= 5.48
BuildRequires: pkgconfig(glib-2.0)
-BuildRequires: pkgconfig(gtk+-3.0) >= 3.22
+BuildRequires: pkgconfig(gtk+-3.0) >= 3.24
BuildRequires: pkgconfig(libnotify)
BuildRequires: pkgconfig(polkit-agent-1)
BuildRequires: pkgconfig(pygobject-3.0) >= 3.27.2
-BuildRequires: pkgconfig(python3)
+BuildRequires: pkgconfig(python3) >= 3.8
Requires: bluez >= 5.48
Requires: dbus-1-python3
Requires: gdk-pixbuf-loader-rsvg
++++++ blueman-2.3.5.tar.xz -> blueman-2.4.2.tar.xz ++++++
++++ 209983 lines of diff (skipped)
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package pidgin for openSUSE:Factory checked in at 2024-07-22 17:17:58
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/pidgin (Old)
and /work/SRC/openSUSE:Factory/.pidgin.new.17339 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "pidgin"
Mon Jul 22 17:17:58 2024 rev:148 rq:1188827 version:2.14.13
Changes:
--------
--- /work/SRC/openSUSE:Factory/pidgin/pidgin.changes 2023-11-28 22:21:04.057460850 +0100
+++ /work/SRC/openSUSE:Factory/.pidgin.new.17339/pidgin.changes 2024-07-22 17:19:42.357369016 +0200
@@ -1,0 +2,13 @@
+Wed Jul 10 14:33:46 UTC 2024 - Bjørn Lie <bjorn.lie(a)gmail.com>
+
+- Update to version 2.14.13:
+ * Fix compile warning (Wcast-function-type).
+ * Fix memory leak originating in purple_prefs_connect_callback.
+ * Don’t use the Real name as a candidate for the SASL username in
+ IRC.
+ * Don’t link with libgadu unnecessarily.
+ * Make collapsed groups searchable in the buddy list.
+ * Fix incompatible type conversion errors.
+ * Stop removing -Wall from CFLAGS.
+
+-------------------------------------------------------------------
Old:
----
pidgin-2.14.12.tar.bz2
pidgin-2.14.12.tar.bz2.asc
New:
----
pidgin-2.14.13.tar.bz2
pidgin-2.14.13.tar.bz2.asc
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ pidgin.spec ++++++
--- /var/tmp/diff_new_pack.Ytr5Z8/_old 2024-07-22 17:19:43.389410509 +0200
+++ /var/tmp/diff_new_pack.Ytr5Z8/_new 2024-07-22 17:19:43.393410670 +0200
@@ -1,7 +1,7 @@
#
# spec file for package pidgin
#
-# Copyright (c) 2023 SUSE LLC
+# Copyright (c) 2024 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -19,7 +19,7 @@
%define _name Pidgin
%define sover 0
Name: pidgin
-Version: 2.14.12
+Version: 2.14.13
Release: 0
Summary: Multiprotocol Instant Messaging Client
License: GPL-2.0-only
++++++ pidgin-2.14.12.tar.bz2 -> pidgin-2.14.13.tar.bz2 ++++++
/work/SRC/openSUSE:Factory/pidgin/pidgin-2.14.12.tar.bz2 /work/SRC/openSUSE:Factory/.pidgin.new.17339/pidgin-2.14.13.tar.bz2 differ: char 11, line 1
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-healpy for openSUSE:Factory checked in at 2024-07-22 17:17:56
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-healpy (Old)
and /work/SRC/openSUSE:Factory/.python-healpy.new.17339 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-healpy"
Mon Jul 22 17:17:56 2024 rev:9 rq:1188826 version:1.16.6
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-healpy/python-healpy.changes 2023-10-06 21:16:45.844885912 +0200
+++ /work/SRC/openSUSE:Factory/.python-healpy.new.17339/python-healpy.changes 2024-07-22 17:19:40.949312405 +0200
@@ -1,0 +2,9 @@
+Sat Jul 20 10:19:17 UTC 2024 - Atri Bhattacharya <badshah400(a)gmail.com>
+
+- Add python-healpy-scipy-1_14-compat.patch: Account for the
+ renaming of trapz to trapezoid in scipy 1.14.
+- Add python-healpy-matplotlib-1_9-compat.patch: Fix compatibility
+ with matplotlib >= 3.9; upstream commit 0b1f498 rebased for
+ current version.
+
+-------------------------------------------------------------------
New:
----
python-healpy-matplotlib-1_9-compat.patch
python-healpy-scipy-1_14-compat.patch
BETA DEBUG BEGIN:
New: renaming of trapz to trapezoid in scipy 1.14.
- Add python-healpy-matplotlib-1_9-compat.patch: Fix compatibility
with matplotlib >= 3.9; upstream commit 0b1f498 rebased for
New:
- Add python-healpy-scipy-1_14-compat.patch: Account for the
renaming of trapz to trapezoid in scipy 1.14.
BETA DEBUG END:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-healpy.spec ++++++
--- /var/tmp/diff_new_pack.DfaOkK/_old 2024-07-22 17:19:41.825347625 +0200
+++ /var/tmp/diff_new_pack.DfaOkK/_new 2024-07-22 17:19:41.825347625 +0200
@@ -1,7 +1,7 @@
#
# spec file for package python-healpy
#
-# Copyright (c) 2023 SUSE LLC
+# Copyright (c) 2024 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -24,6 +24,10 @@
License: GPL-2.0-only
URL: https://github.com/healpy/healpy
Source: https://files.pythonhosted.org/packages/source/h/healpy/healpy-%{version}.t…
+# PATCH-FIX-UPSTREAM python-healpy-scipy-1_14-compat.patch badshah400(a)gmail.com -- Account for renaming of integrate.trapz to integrate.trapezoidal in scipy 1.14
+Patch0: python-healpy-scipy-1_14-compat.patch
+# PATCH-FIX-UPSTREAM python-healpy-matplotlib-1_9-compat.patch badshah400(a)gmail.com -- Compatibility with matplotlib 3.9 via upstream commit 0b1f498 rebased for current version
+Patch1: python-healpy-matplotlib-1_9-compat.patch
BuildRequires: %{python_module Cython}
BuildRequires: %{python_module devel}
BuildRequires: %{python_module numpy-devel >= 1.13}
++++++ python-healpy-matplotlib-1_9-compat.patch ++++++
From 7a68c6d83a78961027601025fc6553a67f6a44a6 Mon Sep 17 00:00:00 2001
From: Elliott Sales de Andrade <quantum.analyst(a)gmail.com>
Date: Mon, 29 Apr 2024 16:15:05 -0400
Subject: [PATCH] Fix errors with Matplotlib 3.9
The `matplotlib.cm.get_cmap` API was deprecated in 3.7, and removed in
3.9, but `matplotlib.pyplot.get_cmap` remains.
---
projaxes.py | 4 ++--
src/_line_integral_convolution.pyx | 4 ++--
test/test_visufunc.py | 4 ++--
3 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/healpy/projaxes.py b/healpy/projaxes.py
index 8c301647..dc6fcef9 100644
--- a/healpy/projaxes.py
+++ b/healpy/projaxes.py
@@ -948,14 +948,14 @@ def create_colormap(cmap, badcolor="gray", bgcolor="white"):
cmap_path = os.path.join(datapath, f"{cmap}_cmap.dat")
cmap0 = matplotlib.colors.ListedColormap(np.loadtxt(cmap_path) / 255.0, cmap)
else:
- cmap0 = matplotlib.cm.get_cmap(cmap)
+ cmap0 = plt.get_cmap(cmap)
elif type(cmap) in [
matplotlib.colors.LinearSegmentedColormap,
matplotlib.colors.ListedColormap,
]:
cmap0 = cmap
else:
- cmap0 = matplotlib.cm.get_cmap(matplotlib.rcParams["image.cmap"])
+ cmap0 = plt.get_cmap(matplotlib.rcParams["image.cmap"])
if hasattr(cmap0, "_segmentdata"):
newcm = matplotlib.colors.LinearSegmentedColormap(
"newcm", cmap0._segmentdata, cmap0.N
diff --git a/healpy/src/_line_integral_convolution.pyx b/healpy/src/_line_integral_convolution.pyx
index 1b3b6c8f..48af98dd 100644
--- a/healpy/src/_line_integral_convolution.pyx
+++ b/healpy/src/_line_integral_convolution.pyx
@@ -78,12 +78,12 @@ def line_integral_convolution(
-------
>>> import healpy as hp
>>> import numpy as np
- >>> import matplotlib.cm
>>> import matplotlib.colors
+ >>> import matplotlib.pyplot as plt
>>> I, Q, U = hp.read_map('iqu_map.fits', (0, 1, 2))
>>> lic = hp.line_integral_convolution(Q, U)
>>> hp.mollview(I)
- >>> cmap_colors = matplotlib.cm.get_cmap('binary', 256)(np.linspace(0, 1, 256))
+ >>> cmap_colors = plt.get_cmap('binary', 256)(np.linspace(0, 1, 256))
>>> cmap_colors[..., 3] = 0.5 # Make colormap partially transparent
>>> cmap = matplotlib.colors.ListedColormap(cmap_colors)
>>> hp.mollview(lic, cmap=cmap, cbar=False, reuse_axes=True)
diff --git a/healpy/test/test_visufunc.py b/healpy/test/test_visufunc.py
index e4d85906..ae3bb0c4 100644
--- a/healpy/test/test_visufunc.py
+++ b/healpy/test/test_visufunc.py
@@ -1,8 +1,8 @@
import matplotlib
-import matplotlib.cm
matplotlib.use("agg")
import unittest
+import matplotlib.pyplot as plt
import numpy as np
import copy
@@ -93,7 +93,7 @@ def test_azeqview_ma_nocrash(self):
def test_cmap_colors(self):
# Get a built-in colormap
name = 'viridis'
- cmap = copy.copy(matplotlib.cm.get_cmap(name))
+ cmap = copy.copy(plt.get_cmap(name))
# Set outlier colors
color = (0.25,0.75,0.95,1.0)
++++++ python-healpy-scipy-1_14-compat.patch ++++++
---
healpy/sphtfunc.py | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
Index: healpy-1.16.6/healpy/sphtfunc.py
===================================================================
--- healpy-1.16.6.orig/healpy/sphtfunc.py
+++ healpy-1.16.6/healpy/sphtfunc.py
@@ -24,7 +24,10 @@ import numpy as np
import astropy.io.fits as pf
from .utils.deprecation import deprecated_renamed_argument
-from scipy.integrate import trapz
+try:
+ from scipy.integrate import trapezoid as trapz
+except ImportError:
+ from scipy.integrate import trapz
from astropy.utils import data
DATAURL = "https://healpy.github.io/healpy-data/"
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-django-haystack for openSUSE:Factory checked in at 2024-07-22 17:17:55
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-django-haystack (Old)
and /work/SRC/openSUSE:Factory/.python-django-haystack.new.17339 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-django-haystack"
Mon Jul 22 17:17:55 2024 rev:12 rq:1188824 version:3.3.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-django-haystack/python-django-haystack.changes 2024-03-28 14:29:11.154234000 +0100
+++ /work/SRC/openSUSE:Factory/.python-django-haystack.new.17339/python-django-haystack.changes 2024-07-22 17:19:39.537255632 +0200
@@ -1,0 +2,11 @@
+Fri Jul 19 13:00:55 UTC 2024 - Markéta Machová <mmachova(a)suse.com>
+
+- Update to 3.3.0
+ * Django versions 3-5 are supported, running on Python 3.8-3.12.
+ * Releases are now created in GitHub Actions and published directly
+ to PyPI, improving visibility into the build process.
+- Drop upstreamed patches:
+ * gh-pr-1935_importlib.patch
+ * unittest312.patch
+
+-------------------------------------------------------------------
Old:
----
django-haystack-3.2.1.tar.gz
gh-pr-1935_importlib.patch
unittest312.patch
New:
----
django_haystack-3.3.0.tar.gz
BETA DEBUG BEGIN:
Old:- Drop upstreamed patches:
* gh-pr-1935_importlib.patch
* unittest312.patch
Old: * gh-pr-1935_importlib.patch
* unittest312.patch
BETA DEBUG END:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-django-haystack.spec ++++++
--- /var/tmp/diff_new_pack.qUkzjC/_old 2024-07-22 17:19:40.805306615 +0200
+++ /var/tmp/diff_new_pack.qUkzjC/_new 2024-07-22 17:19:40.805306615 +0200
@@ -18,19 +18,16 @@
%{?sle15_python_module_pythons}
Name: python-django-haystack
-Version: 3.2.1
+Version: 3.3.0
Release: 0
Summary: Pluggable search for Django
License: BSD-3-Clause
URL: https://github.com/django-haystack/django-haystack
-Source: https://files.pythonhosted.org/packages/source/d/django-haystack/django-hay…
-# pkg_resources is broken since the flufl.lock update in Factory
-# https://github.com/django-haystack/django-haystack/pull/1935
-Patch1: gh-pr-1935_importlib.patch
-# PATCH-FIX-UPSTREAM https://github.com/django-haystack/django-haystack/commit/3a566a50e4963bed4… Fix unittest assert calls for Python 3.12
-Patch2: unittest312.patch
+Source: https://files.pythonhosted.org/packages/source/d/django-haystack/django_hay…
+BuildRequires: %{python_module pip}
BuildRequires: %{python_module setuptools_scm}
BuildRequires: %{python_module setuptools}
+BuildRequires: %{python_module wheel}
BuildRequires: fdupes
BuildRequires: python-rpm-macros
Requires: python-Django >= 2.2
@@ -57,18 +54,17 @@
Pluggable search for Django.
%prep
-%autosetup -n django-haystack-%{version} -p1
-sed -i 's:==:>=:' setup.py
+%autosetup -n django_haystack-%{version} -p1
# This causes errors with pytest
sed -i '/django.setup()/d' test_haystack/__init__.py
echo 'import django; django.setup()' > conftest.py
%build
-%python_build
+%pyproject_wheel
%install
-%python_install
+%pyproject_install
%python_expand %fdupes %{buildroot}%{$python_sitelib}
%check
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-pywinrm for openSUSE:Factory checked in at 2024-07-22 17:17:53
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-pywinrm (Old)
and /work/SRC/openSUSE:Factory/.python-pywinrm.new.17339 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-pywinrm"
Mon Jul 22 17:17:53 2024 rev:9 rq:1188825 version:0.5.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-pywinrm/python-pywinrm.changes 2023-05-10 16:18:38.823018206 +0200
+++ /work/SRC/openSUSE:Factory/.python-pywinrm.new.17339/python-pywinrm.changes 2024-07-22 17:19:37.205161869 +0200
@@ -1,0 +2,13 @@
+Sat Jul 20 10:29:56 UTC 2024 - Martin Hauke <mardnh(a)gmx.de>
+
+- Update to version 0.5.0
+ What's Changed
+ * Migrate to PEP 517 compliant build.
+ * Added ignore revs file for tracking commits with bulk sanity
+ changes.
+ * Add type annotations.
+ * Add WSManFaultError.
+ * Add new public APIs for header and command output.
+ * Fix up subpackages in dist.
+
+-------------------------------------------------------------------
Old:
----
pywinrm-0.4.3.tar.gz
New:
----
pywinrm-0.5.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-pywinrm.spec ++++++
--- /var/tmp/diff_new_pack.DU3jl4/_old 2024-07-22 17:19:38.553216068 +0200
+++ /var/tmp/diff_new_pack.DU3jl4/_new 2024-07-22 17:19:38.561216390 +0200
@@ -1,7 +1,7 @@
#
# spec file for package python-pywinrm
#
-# Copyright (c) 2023 SUSE LLC
+# Copyright (c) 2024 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
%{?sle15_python_module_pythons}
Name: python-pywinrm
-Version: 0.4.3
+Version: 0.5.0
Release: 0
Summary: Python library for Windows Remote Management
License: MIT
@@ -26,17 +26,17 @@
URL: https://github.com/diyan/pywinrm/
Source: https://github.com/diyan/pywinrm/archive/refs/tags/v%{version}.tar.gz#/pywi…
BuildRequires: %{python_module kerberos}
+BuildRequires: %{python_module pip}
BuildRequires: %{python_module pytest}
BuildRequires: %{python_module requests >= 2.9.1}
-BuildRequires: %{python_module requests_ntlm >= 0.3.0}
-BuildRequires: %{python_module setuptools}
+BuildRequires: %{python_module requests_ntlm >= 1.1.0}
BuildRequires: %{python_module six}
+BuildRequires: %{python_module wheel}
BuildRequires: %{python_module xmltodict}
BuildRequires: fdupes
BuildRequires: python-rpm-macros
Requires: python-requests >= 2.9.1
-Requires: python-requests_ntlm >= 0.3.0
-Requires: python-six
+Requires: python-requests_ntlm >= 1.1.0
Requires: python-xmltodict
Suggests: python-requests-credssp >= 0.0.1
Suggests: python-requests-kerberos >= 0.10.0
@@ -57,11 +57,12 @@
%setup -q -n pywinrm-%{version}
%build
-%python_build
+%pyproject_wheel
%install
-%python_install
+%pyproject_install
%python_expand %fdupes %{buildroot}%{$python_sitelib}
+%python_expand rm -Rv %{buildroot}%{$python_sitelib}/winrm/tests
%check
# https://github.com/diyan/pywinrm/issues/345
@@ -71,5 +72,6 @@
%files %{python_files}
%license LICENSE
%doc README.md
-%{python_sitelib}/*
+%{python_sitelib}/winrm
+%{python_sitelib}/pywinrm-%{version}.dist-info
++++++ pywinrm-0.4.3.tar.gz -> pywinrm-0.5.0.tar.gz ++++++
++++ 3836 lines of diff (skipped)
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-yt for openSUSE:Factory checked in at 2024-07-22 17:17:51
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-yt (Old)
and /work/SRC/openSUSE:Factory/.python-yt.new.17339 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-yt"
Mon Jul 22 17:17:51 2024 rev:13 rq:1188820 version:4.3.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-yt/python-yt.changes 2024-07-18 19:16:13.730846953 +0200
+++ /work/SRC/openSUSE:Factory/.python-yt.new.17339/python-yt.changes 2024-07-22 17:19:34.073035941 +0200
@@ -1,0 +2,5 @@
+Thu Jul 18 17:12:30 UTC 2024 - Ben Greiner <code(a)bnavigator.de>
+
+- Revert restriction. Numpy 2 is supported since 4.3.1
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-yt.spec ++++++
--- /var/tmp/diff_new_pack.0t4nrx/_old 2024-07-22 17:19:36.517134207 +0200
+++ /var/tmp/diff_new_pack.0t4nrx/_new 2024-07-22 17:19:36.533134850 +0200
@@ -39,27 +39,29 @@
Source100: python-yt-rpmlintrc
# PATCH-FIX-OPENSUSE yt-ignore-pytestdepr.patch code(a)bnavigator.de -- ignore a pytest deprecation warning. Upstream is still working on the nose ot pytest transition
Patch1: yt-ignore-pytestdepr.patch
-BuildRequires: %{python_module Cython > 3 with %python-Cython < 3.1}
BuildRequires: %{python_module base >= 3.9}
+BuildRequires: python-rpm-macros
+%if !%{with test}
+BuildRequires: %{python_module Cython > 3 with %python-Cython < 3.1}
BuildRequires: %{python_module ewah-bool-utils-devel >= 1.0.2}
-BuildRequires: %{python_module numpy-devel >= 1.25 with %python-numpy-devel < 2}
+BuildRequires: %{python_module numpy-devel >= 1.25}
BuildRequires: %{python_module pip}
BuildRequires: %{python_module setuptools}
BuildRequires: %{python_module wheel}
BuildRequires: fdupes
BuildRequires: gcc-c++
-BuildRequires: python-rpm-macros
+%endif
Requires: python-Pillow >= 8
Requires: python-cmyt >= 1.1.2
Requires: python-ewah-bool-utils >= 1.0.2
Requires: python-ipywidgets >= 8.0.0
Requires: python-matplotlib >= 3.5
Requires: python-more-itertools >= 8.4
+Requires: python-numpy >= 1.19.3
Requires: python-packaging >= 20.9
Requires: python-tomli-w >= 0.4.0
Requires: python-tqdm >= 3.4.0
Requires: python-unyt >= 2.9.2
-Requires: (python-numpy >= 1.19.3 with python-numpy < 2)
Requires: (python-tomli >= 1.2.3 if python-base < 3.11)
Requires: (python-typing-extensions >= 4.4.0 if python-base < 3.12)
Requires(post): update-alternatives
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-django-timezone-field for openSUSE:Factory checked in at 2024-07-22 17:17:49
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-django-timezone-field (Old)
and /work/SRC/openSUSE:Factory/.python-django-timezone-field.new.17339 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-django-timezone-field"
Mon Jul 22 17:17:49 2024 rev:6 rq:1188822 version:7.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-django-timezone-field/python-django-timezone-field.changes 2023-12-06 23:48:25.971718622 +0100
+++ /work/SRC/openSUSE:Factory/.python-django-timezone-field.new.17339/python-django-timezone-field.changes 2024-07-22 17:19:32.304964855 +0200
@@ -1,0 +2,11 @@
+Fri Jul 19 11:38:11 UTC 2024 - Markéta Machová <mmachova(a)suse.com>
+
+- Update to 7.0
+ * Better default sorting of choices
+ * Convert string value to timezone object immediately on creation/assignment
+ * Add support for django 5.1
+ * Drop support for django 3.2, 4.0, 4.1
+ * Change base class of TimeZoneSerializerField from DJRF's Field to CharField
+- Add missing test requirement and recommend pytz
+
+-------------------------------------------------------------------
Old:
----
django-timezone-field-6.1.0.tar.gz
New:
----
django-timezone-field-7.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-django-timezone-field.spec ++++++
--- /var/tmp/diff_new_pack.cvSHqt/_old 2024-07-22 17:19:32.836986245 +0200
+++ /var/tmp/diff_new_pack.cvSHqt/_new 2024-07-22 17:19:32.840986406 +0200
@@ -1,7 +1,7 @@
#
# spec file for package python-django-timezone-field
#
-# Copyright (c) 2023 SUSE LLC
+# Copyright (c) 2024 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
%{?sle15_python_module_pythons}
Name: python-django-timezone-field
-Version: 6.1.0
+Version: 7.0
Release: 0
Summary: Django app providing database and form fields for pytz timezone objects
License: BSD-2-Clause
@@ -32,6 +32,7 @@
BuildRequires: fdupes
BuildRequires: python-rpm-macros
Requires: python-Django >= 2.3
+Recommends: python-pytz
BuildArch: noarch
# SECTION test requirements
BuildRequires: %{python_module Django >= 2.3}
@@ -39,6 +40,7 @@
BuildRequires: %{python_module pytest-django}
BuildRequires: %{python_module pytest-lazy-fixture}
BuildRequires: %{python_module pytest}
+BuildRequires: %{python_module pytz}
# /SECTION
%python_subpackages
++++++ django-timezone-field-6.1.0.tar.gz -> django-timezone-field-7.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-timezone-field-6.1.0/.github/workflows/ci.yml new/django-timezone-field-7.0/.github/workflows/ci.yml
--- old/django-timezone-field-6.1.0/.github/workflows/ci.yml 2023-11-26 00:24:33.000000000 +0100
+++ new/django-timezone-field-7.0/.github/workflows/ci.yml 2024-07-07 20:27:23.000000000 +0200
@@ -11,10 +11,10 @@
steps:
- name: Git checkout
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
- name: Set up Python
- uses: actions/setup-python@v3
+ uses: actions/setup-python@v5
with:
python-version: "3.12"
@@ -26,7 +26,7 @@
- name: Load cached venv
id: cached-poetry-dependencies
- uses: actions/cache@v3
+ uses: actions/cache@v4
with:
path: .venv
key: venv-py3.12-${{ hashFiles('poetry.lock') }}
@@ -54,29 +54,23 @@
strategy:
fail-fast: false
matrix:
- # https://docs.djangoproject.com/en/4.1/faq/install/#what-python-version-can-…
+ # https://docs.djangoproject.com/en/5.1/faq/install/#what-python-version-can-…
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
- django-version: ["3.2", "4.0", "4.1", "4.2", "5.0rc1"]
+ django-version: ["4.2", "5.0", "5.1b1"]
db-engine: [sqlite, postgres]
tz-engine: [pytz, zoneinfo]
exclude:
- - django-version: "3.2"
- python-version: "3.11"
- - django-version: "3.2"
- python-version: "3.12"
- - django-version: "3.2"
- tz-engine: zoneinfo
- - django-version: "4.0"
- python-version: "3.11"
- - django-version: "4.0"
- python-version: "3.12"
- - django-version: "4.1"
- python-version: "3.12"
- - django-version: "5.0rc1"
+ - django-version: "5.0"
python-version: "3.8"
- - django-version: "5.0rc1"
+ - django-version: "5.0"
python-version: "3.9"
- - django-version: "5.0rc1"
+ - django-version: "5.0"
+ tz-engine: pytz
+ - django-version: "5.1b1"
+ python-version: "3.8"
+ - django-version: "5.1b1"
+ python-version: "3.9"
+ - django-version: "5.1b1"
tz-engine: pytz
env:
@@ -100,10 +94,10 @@
steps:
- name: Git checkout
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
- uses: actions/setup-python@v3
+ uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
@@ -115,7 +109,7 @@
- name: Load cached venv
id: cached-poetry-dependencies
- uses: actions/cache@v3
+ uses: actions/cache@v4
with:
path: .venv
key: venv-py${{ matrix.python-version}}-dj${{ matrix.django-version }}-${{ matrix.tz-engine }}-${{ hashFiles('poetry.lock') }}
@@ -149,24 +143,15 @@
POSTGRES_DB: postgres
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
- run: poetry run pytest --cov=timezone_field --ignore=tests/test_serializer_field.py
-
- - name: Test serializer fiels with coverage
- if: matrix.tz-engine == 'pytz'
- env:
- POSTGRES_HOST: localhost
- POSTGRES_PORT: 5432
- POSTGRES_DB: postgres
- POSTGRES_USER: postgres
- POSTGRES_PASSWORD: postgres
- run: poetry run pytest --cov=timezone_field tests/test_serializer_field.py
+ run: poetry run pytest --cov=timezone_field
- name: Generate coverage report
run: poetry run coverage xml
- name: Upload coverage report to codecov
- uses: codecov/codecov-action@v3
+ uses: codecov/codecov-action@v4
with:
+ token: ${{ secrets.CODECOV_TOKEN }}
env_vars: PYTHON_VERSION,DJANGO_VERSION,DB_ENGINE
fail_ci_if_error: true
@@ -176,10 +161,10 @@
steps:
- name: Git checkout
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
- name: Set up Python
- uses: actions/setup-python@v3
+ uses: actions/setup-python@v5
with:
python-version: "3.12"
@@ -191,7 +176,7 @@
- name: Load cached venv
id: cached-poetry-dependencies
- uses: actions/cache@v3
+ uses: actions/cache@v4
with:
path: .venv
key: venv-py3.12-${{ hashFiles('poetry.lock') }}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-timezone-field-6.1.0/README.md new/django-timezone-field-7.0/README.md
--- old/django-timezone-field-6.1.0/README.md 2023-11-26 00:24:33.000000000 +0100
+++ new/django-timezone-field-7.0/README.md 2024-07-07 20:27:23.000000000 +0200
@@ -21,9 +21,9 @@
- Django == 4.X: `use_pytz` defaults to the value of
[`django.conf.settings.USE_DEPRECATED_PYTZ`](https://docs.djangoproject.com/en/4.0/ref/settings/#use-deprecated-pytz),
which itself defaults to `False`
-- Django >= 5.X: django plans to
- [drop support for `pytz` altogether](https://docs.djangoproject.com/en/4.0/releases/4.0/#zoneinfo-de…,
- and this app will likely do the same.
+- Django >= 5.X:
+ [drops support for `pytz` altogether](https://docs.djangoproject.com/en/5.0/releases/5.0/#features-re…,
+ and this app has done the same.
Note that this app does _not_ declare `pytz` to be a dependency, so if you're using this app with `use_pytz=True`, you'll need
to ensure `pytz` is included in the environment yourself.
@@ -71,6 +71,10 @@
my_model.save() # values stored in DB as strings
my_model.tz3 # value returned as pytz timezone: <DstTzInfo 'America/Vancouver' LMT-1 day, 15:48:00 STD>
my_model.tz4 # value returned as zoneinfo: zoneinfo.ZoneInfo(key='America/Vancouver')
+
+my_model.tz1 = "UTC" # assignment of a string, immediately converted to timezone object
+my_model.tz1 # zoneinfo.ZoneInfo(key='UTC') or pytz.utc, depending on use_pytz default
+my_model.tz2 = "Invalid/Not_A_Zone" # immediately raises ValidationError
```
### Form Field
@@ -134,6 +138,18 @@
## Changelog
+#### 7.0 (2024-07-07)
+
+- Better default sorting of `choices` ([#116](https://github.com/mfogel/django-timezone-field/issues/116)), ([#123](https://github.com/mfogel/django-timezone-field/issues/123))
+- Convert string value to timezone object immediately on creation/assignment.
+ Accessing a TimeZoneField will _always_ return a timezone or None (never a string).
+ (Potentially BREAKING: Unknown timezone names now raise `ValidationError` at time of assignment.
+ Previously, conversion was delayed until model `full_clean` or `save`.)
+ ([#57](https://github.com/mfogel/django-timezone-field/issues/57))
+- Add support for django 5.1
+- Drop support for django 3.2, 4.0, 4.1
+- Change base class of `TimeZoneSerializerField` from DJRF's `Field` to `CharField` ([#137](https://github.com/mfogel/django-timezone-field/issues/137))
+
#### 6.1.0 (2023-11-25)
- Add support for django 5.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-timezone-field-6.1.0/poetry.lock new/django-timezone-field-7.0/poetry.lock
--- old/django-timezone-field-6.1.0/poetry.lock 2023-11-26 00:24:33.000000000 +0100
+++ new/django-timezone-field-7.0/poetry.lock 2024-07-07 20:27:23.000000000 +0200
@@ -2,13 +2,13 @@
[[package]]
name = "asgiref"
-version = "3.7.2"
+version = "3.8.1"
description = "ASGI specs, helper code, and adapters"
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "asgiref-3.7.2-py3-none-any.whl", hash = "sha256:89b2ef2247e3b562a16eef663bc0e2e703ec6468e2fa8a5cd61cd449786d4f6e"},
- {file = "asgiref-3.7.2.tar.gz", hash = "sha256:9e0ce3aa93a819ba5b45120216b23878cf6e8525eb3848653452b4192b92afed"},
+ {file = "asgiref-3.8.1-py3-none-any.whl", hash = "sha256:3e1e3ecc849832fe52ccf2cb6686b7a55f82bb1d6aee72a58826471390335e47"},
+ {file = "asgiref-3.8.1.tar.gz", hash = "sha256:c343bd80a0bec947a9860adb4c432ffa7db769836c64238fc34bdc3fec84d590"},
]
[package.dependencies]
@@ -48,21 +48,22 @@
[[package]]
name = "attrs"
-version = "23.1.0"
+version = "23.2.0"
description = "Classes Without Boilerplate"
optional = false
python-versions = ">=3.7"
files = [
- {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"},
- {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"},
+ {file = "attrs-23.2.0-py3-none-any.whl", hash = "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1"},
+ {file = "attrs-23.2.0.tar.gz", hash = "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30"},
]
[package.extras]
cov = ["attrs[tests]", "coverage[toml] (>=5.3)"]
-dev = ["attrs[docs,tests]", "pre-commit"]
+dev = ["attrs[tests]", "pre-commit"]
docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"]
tests = ["attrs[tests-no-zope]", "zope-interface"]
-tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"]
+tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"]
+tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"]
[[package]]
name = "backports-zoneinfo"
@@ -94,29 +95,33 @@
[[package]]
name = "black"
-version = "23.11.0"
+version = "24.4.2"
description = "The uncompromising code formatter."
optional = false
python-versions = ">=3.8"
files = [
- {file = "black-23.11.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dbea0bb8575c6b6303cc65017b46351dc5953eea5c0a59d7b7e3a2d2f433a911"},
- {file = "black-23.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:412f56bab20ac85927f3a959230331de5614aecda1ede14b373083f62ec24e6f"},
- {file = "black-23.11.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d136ef5b418c81660ad847efe0e55c58c8208b77a57a28a503a5f345ccf01394"},
- {file = "black-23.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:6c1cac07e64433f646a9a838cdc00c9768b3c362805afc3fce341af0e6a9ae9f"},
- {file = "black-23.11.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cf57719e581cfd48c4efe28543fea3d139c6b6f1238b3f0102a9c73992cbb479"},
- {file = "black-23.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:698c1e0d5c43354ec5d6f4d914d0d553a9ada56c85415700b81dc90125aac244"},
- {file = "black-23.11.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:760415ccc20f9e8747084169110ef75d545f3b0932ee21368f63ac0fee86b221"},
- {file = "black-23.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:58e5f4d08a205b11800332920e285bd25e1a75c54953e05502052738fe16b3b5"},
- {file = "black-23.11.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:45aa1d4675964946e53ab81aeec7a37613c1cb71647b5394779e6efb79d6d187"},
- {file = "black-23.11.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4c44b7211a3a0570cc097e81135faa5f261264f4dfaa22bd5ee2875a4e773bd6"},
- {file = "black-23.11.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a9acad1451632021ee0d146c8765782a0c3846e0e0ea46659d7c4f89d9b212b"},
- {file = "black-23.11.0-cp38-cp38-win_amd64.whl", hash = "sha256:fc7f6a44d52747e65a02558e1d807c82df1d66ffa80a601862040a43ec2e3142"},
- {file = "black-23.11.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7f622b6822f02bfaf2a5cd31fdb7cd86fcf33dab6ced5185c35f5db98260b055"},
- {file = "black-23.11.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:250d7e60f323fcfc8ea6c800d5eba12f7967400eb6c2d21ae85ad31c204fb1f4"},
- {file = "black-23.11.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5133f5507007ba08d8b7b263c7aa0f931af5ba88a29beacc4b2dc23fcefe9c06"},
- {file = "black-23.11.0-cp39-cp39-win_amd64.whl", hash = "sha256:421f3e44aa67138ab1b9bfbc22ee3780b22fa5b291e4db8ab7eee95200726b07"},
- {file = "black-23.11.0-py3-none-any.whl", hash = "sha256:54caaa703227c6e0c87b76326d0862184729a69b73d3b7305b6288e1d830067e"},
- {file = "black-23.11.0.tar.gz", hash = "sha256:4c68855825ff432d197229846f971bc4d6666ce90492e5b02013bcaca4d9ab05"},
+ {file = "black-24.4.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dd1b5a14e417189db4c7b64a6540f31730713d173f0b63e55fabd52d61d8fdce"},
+ {file = "black-24.4.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e537d281831ad0e71007dcdcbe50a71470b978c453fa41ce77186bbe0ed6021"},
+ {file = "black-24.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eaea3008c281f1038edb473c1aa8ed8143a5535ff18f978a318f10302b254063"},
+ {file = "black-24.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:7768a0dbf16a39aa5e9a3ded568bb545c8c2727396d063bbaf847df05b08cd96"},
+ {file = "black-24.4.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:257d724c2c9b1660f353b36c802ccece186a30accc7742c176d29c146df6e474"},
+ {file = "black-24.4.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bdde6f877a18f24844e381d45e9947a49e97933573ac9d4345399be37621e26c"},
+ {file = "black-24.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e151054aa00bad1f4e1f04919542885f89f5f7d086b8a59e5000e6c616896ffb"},
+ {file = "black-24.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:7e122b1c4fb252fd85df3ca93578732b4749d9be076593076ef4d07a0233c3e1"},
+ {file = "black-24.4.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:accf49e151c8ed2c0cdc528691838afd217c50412534e876a19270fea1e28e2d"},
+ {file = "black-24.4.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:88c57dc656038f1ab9f92b3eb5335ee9b021412feaa46330d5eba4e51fe49b04"},
+ {file = "black-24.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be8bef99eb46d5021bf053114442914baeb3649a89dc5f3a555c88737e5e98fc"},
+ {file = "black-24.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:415e686e87dbbe6f4cd5ef0fbf764af7b89f9057b97c908742b6008cc554b9c0"},
+ {file = "black-24.4.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bf10f7310db693bb62692609b397e8d67257c55f949abde4c67f9cc574492cc7"},
+ {file = "black-24.4.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:98e123f1d5cfd42f886624d84464f7756f60ff6eab89ae845210631714f6db94"},
+ {file = "black-24.4.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48a85f2cb5e6799a9ef05347b476cce6c182d6c71ee36925a6c194d074336ef8"},
+ {file = "black-24.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:b1530ae42e9d6d5b670a34db49a94115a64596bc77710b1d05e9801e62ca0a7c"},
+ {file = "black-24.4.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:37aae07b029fa0174d39daf02748b379399b909652a806e5708199bd93899da1"},
+ {file = "black-24.4.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:da33a1a5e49c4122ccdfd56cd021ff1ebc4a1ec4e2d01594fef9b6f267a9e741"},
+ {file = "black-24.4.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef703f83fc32e131e9bcc0a5094cfe85599e7109f896fe8bc96cc402f3eb4b6e"},
+ {file = "black-24.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:b9176b9832e84308818a99a561e90aa479e73c523b3f77afd07913380ae2eab7"},
+ {file = "black-24.4.2-py3-none-any.whl", hash = "sha256:d36ed1124bb81b32f8614555b34cc4259c3fbc7eec17870e8ff8ded335b58d8c"},
+ {file = "black-24.4.2.tar.gz", hash = "sha256:c872b53057f000085da66a19c55d68f6f8ddcac2642392ad3a355878406fbd4d"},
]
[package.dependencies]
@@ -130,7 +135,7 @@
[package.extras]
colorama = ["colorama (>=0.4.3)"]
-d = ["aiohttp (>=3.7.4)"]
+d = ["aiohttp (>=3.7.4)", "aiohttp (>=3.7.4,!=3.9.0)"]
jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"]
uvloop = ["uvloop (>=0.15.2)"]
@@ -226,27 +231,28 @@
[[package]]
name = "dill"
-version = "0.3.7"
+version = "0.3.8"
description = "serialize all of Python"
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "dill-0.3.7-py3-none-any.whl", hash = "sha256:76b122c08ef4ce2eedcd4d1abd8e641114bfc6c2867f49f3c41facf65bf19f5e"},
- {file = "dill-0.3.7.tar.gz", hash = "sha256:cc1c8b182eb3013e24bd475ff2e9295af86c1a38eb1aff128dac8962a9ce3c03"},
+ {file = "dill-0.3.8-py3-none-any.whl", hash = "sha256:c36ca9ffb54365bdd2f8eb3eff7d2a21237f8452b57ace88b1ac615b7e815bd7"},
+ {file = "dill-0.3.8.tar.gz", hash = "sha256:3ebe3c479ad625c4553aca177444d89b486b1d84982eeacded644afc0cf797ca"},
]
[package.extras]
graph = ["objgraph (>=1.7.2)"]
+profile = ["gprof2dot (>=2022.7.29)"]
[[package]]
name = "django"
-version = "4.2.7"
+version = "4.2.13"
description = "A high-level Python web framework that encourages rapid development and clean, pragmatic design."
optional = false
python-versions = ">=3.8"
files = [
- {file = "Django-4.2.7-py3-none-any.whl", hash = "sha256:e1d37c51ad26186de355cbcec16613ebdabfa9689bbade9c538835205a8abbe9"},
- {file = "Django-4.2.7.tar.gz", hash = "sha256:8e0f1c2c2786b5c0e39fe1afce24c926040fad47c8ea8ad30aaf1188df29fc41"},
+ {file = "Django-4.2.13-py3-none-any.whl", hash = "sha256:a17fcba2aad3fc7d46fdb23215095dbbd64e6174bf4589171e732b18b07e426a"},
+ {file = "Django-4.2.13.tar.gz", hash = "sha256:837e3cf1f6c31347a1396a3f6b65688f2b4bb4a11c580dcb628b5afe527b68a5"},
]
[package.dependencies]
@@ -261,18 +267,18 @@
[[package]]
name = "djangorestframework"
-version = "3.14.0"
+version = "3.15.2"
description = "Web APIs for Django, made easy."
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.8"
files = [
- {file = "djangorestframework-3.14.0-py3-none-any.whl", hash = "sha256:eb63f58c9f218e1a7d064d17a70751f528ed4e1d35547fdade9aaf4cd103fd08"},
- {file = "djangorestframework-3.14.0.tar.gz", hash = "sha256:579a333e6256b09489cbe0a067e66abe55c6595d8926be6b99423786334350c8"},
+ {file = "djangorestframework-3.15.2-py3-none-any.whl", hash = "sha256:2b8871b062ba1aefc2de01f773875441a961fefbf79f5eed1e32b2f096944b20"},
+ {file = "djangorestframework-3.15.2.tar.gz", hash = "sha256:36fe88cd2d6c6bec23dca9804bab2ba5517a8bb9d8f47ebc68981b56840107ad"},
]
[package.dependencies]
-django = ">=3.0"
-pytz = "*"
+"backports.zoneinfo" = {version = "*", markers = "python_version < \"3.9\""}
+django = ">=4.2"
[[package]]
name = "flake8"
@@ -303,64 +309,62 @@
[[package]]
name = "isort"
-version = "5.12.0"
+version = "5.13.2"
description = "A Python utility / library to sort Python imports."
optional = false
python-versions = ">=3.8.0"
files = [
- {file = "isort-5.12.0-py3-none-any.whl", hash = "sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6"},
- {file = "isort-5.12.0.tar.gz", hash = "sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504"},
+ {file = "isort-5.13.2-py3-none-any.whl", hash = "sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6"},
+ {file = "isort-5.13.2.tar.gz", hash = "sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109"},
]
[package.extras]
-colors = ["colorama (>=0.4.3)"]
-pipfile-deprecated-finder = ["pip-shims (>=0.5.2)", "pipreqs", "requirementslib"]
-plugins = ["setuptools"]
-requirements-deprecated-finder = ["pip-api", "pipreqs"]
+colors = ["colorama (>=0.4.6)"]
[[package]]
name = "lazy-object-proxy"
-version = "1.9.0"
+version = "1.10.0"
description = "A fast and thorough lazy object proxy."
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "lazy-object-proxy-1.9.0.tar.gz", hash = "sha256:659fb5809fa4629b8a1ac5106f669cfc7bef26fbb389dda53b3e010d1ac4ebae"},
- {file = "lazy_object_proxy-1.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b40387277b0ed2d0602b8293b94d7257e17d1479e257b4de114ea11a8cb7f2d7"},
- {file = "lazy_object_proxy-1.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8c6cfb338b133fbdbc5cfaa10fe3c6aeea827db80c978dbd13bc9dd8526b7d4"},
- {file = "lazy_object_proxy-1.9.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:721532711daa7db0d8b779b0bb0318fa87af1c10d7fe5e52ef30f8eff254d0cd"},
- {file = "lazy_object_proxy-1.9.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:66a3de4a3ec06cd8af3f61b8e1ec67614fbb7c995d02fa224813cb7afefee701"},
- {file = "lazy_object_proxy-1.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1aa3de4088c89a1b69f8ec0dcc169aa725b0ff017899ac568fe44ddc1396df46"},
- {file = "lazy_object_proxy-1.9.0-cp310-cp310-win32.whl", hash = "sha256:f0705c376533ed2a9e5e97aacdbfe04cecd71e0aa84c7c0595d02ef93b6e4455"},
- {file = "lazy_object_proxy-1.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:ea806fd4c37bf7e7ad82537b0757999264d5f70c45468447bb2b91afdbe73a6e"},
- {file = "lazy_object_proxy-1.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:946d27deaff6cf8452ed0dba83ba38839a87f4f7a9732e8f9fd4107b21e6ff07"},
- {file = "lazy_object_proxy-1.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79a31b086e7e68b24b99b23d57723ef7e2c6d81ed21007b6281ebcd1688acb0a"},
- {file = "lazy_object_proxy-1.9.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f699ac1c768270c9e384e4cbd268d6e67aebcfae6cd623b4d7c3bfde5a35db59"},
- {file = "lazy_object_proxy-1.9.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bfb38f9ffb53b942f2b5954e0f610f1e721ccebe9cce9025a38c8ccf4a5183a4"},
- {file = "lazy_object_proxy-1.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:189bbd5d41ae7a498397287c408617fe5c48633e7755287b21d741f7db2706a9"},
- {file = "lazy_object_proxy-1.9.0-cp311-cp311-win32.whl", hash = "sha256:81fc4d08b062b535d95c9ea70dbe8a335c45c04029878e62d744bdced5141586"},
- {file = "lazy_object_proxy-1.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:f2457189d8257dd41ae9b434ba33298aec198e30adf2dcdaaa3a28b9994f6adb"},
- {file = "lazy_object_proxy-1.9.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d9e25ef10a39e8afe59a5c348a4dbf29b4868ab76269f81ce1674494e2565a6e"},
- {file = "lazy_object_proxy-1.9.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cbf9b082426036e19c6924a9ce90c740a9861e2bdc27a4834fd0a910742ac1e8"},
- {file = "lazy_object_proxy-1.9.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f5fa4a61ce2438267163891961cfd5e32ec97a2c444e5b842d574251ade27d2"},
- {file = "lazy_object_proxy-1.9.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:8fa02eaab317b1e9e03f69aab1f91e120e7899b392c4fc19807a8278a07a97e8"},
- {file = "lazy_object_proxy-1.9.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e7c21c95cae3c05c14aafffe2865bbd5e377cfc1348c4f7751d9dc9a48ca4bda"},
- {file = "lazy_object_proxy-1.9.0-cp37-cp37m-win32.whl", hash = "sha256:f12ad7126ae0c98d601a7ee504c1122bcef553d1d5e0c3bfa77b16b3968d2734"},
- {file = "lazy_object_proxy-1.9.0-cp37-cp37m-win_amd64.whl", hash = "sha256:edd20c5a55acb67c7ed471fa2b5fb66cb17f61430b7a6b9c3b4a1e40293b1671"},
- {file = "lazy_object_proxy-1.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2d0daa332786cf3bb49e10dc6a17a52f6a8f9601b4cf5c295a4f85854d61de63"},
- {file = "lazy_object_proxy-1.9.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cd077f3d04a58e83d04b20e334f678c2b0ff9879b9375ed107d5d07ff160171"},
- {file = "lazy_object_proxy-1.9.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:660c94ea760b3ce47d1855a30984c78327500493d396eac4dfd8bd82041b22be"},
- {file = "lazy_object_proxy-1.9.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:212774e4dfa851e74d393a2370871e174d7ff0ebc980907723bb67d25c8a7c30"},
- {file = "lazy_object_proxy-1.9.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f0117049dd1d5635bbff65444496c90e0baa48ea405125c088e93d9cf4525b11"},
- {file = "lazy_object_proxy-1.9.0-cp38-cp38-win32.whl", hash = "sha256:0a891e4e41b54fd5b8313b96399f8b0e173bbbfc03c7631f01efbe29bb0bcf82"},
- {file = "lazy_object_proxy-1.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:9990d8e71b9f6488e91ad25f322898c136b008d87bf852ff65391b004da5e17b"},
- {file = "lazy_object_proxy-1.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9e7551208b2aded9c1447453ee366f1c4070602b3d932ace044715d89666899b"},
- {file = "lazy_object_proxy-1.9.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f83ac4d83ef0ab017683d715ed356e30dd48a93746309c8f3517e1287523ef4"},
- {file = "lazy_object_proxy-1.9.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7322c3d6f1766d4ef1e51a465f47955f1e8123caee67dd641e67d539a534d006"},
- {file = "lazy_object_proxy-1.9.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:18b78ec83edbbeb69efdc0e9c1cb41a3b1b1ed11ddd8ded602464c3fc6020494"},
- {file = "lazy_object_proxy-1.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:09763491ce220c0299688940f8dc2c5d05fd1f45af1e42e636b2e8b2303e4382"},
- {file = "lazy_object_proxy-1.9.0-cp39-cp39-win32.whl", hash = "sha256:9090d8e53235aa280fc9239a86ae3ea8ac58eff66a705fa6aa2ec4968b95c821"},
- {file = "lazy_object_proxy-1.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:db1c1722726f47e10e0b5fdbf15ac3b8adb58c091d12b3ab713965795036985f"},
+ {file = "lazy-object-proxy-1.10.0.tar.gz", hash = "sha256:78247b6d45f43a52ef35c25b5581459e85117225408a4128a3daf8bf9648ac69"},
+ {file = "lazy_object_proxy-1.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:855e068b0358ab916454464a884779c7ffa312b8925c6f7401e952dcf3b89977"},
+ {file = "lazy_object_proxy-1.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab7004cf2e59f7c2e4345604a3e6ea0d92ac44e1c2375527d56492014e690c3"},
+ {file = "lazy_object_proxy-1.10.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc0d2fc424e54c70c4bc06787e4072c4f3b1aa2f897dfdc34ce1013cf3ceef05"},
+ {file = "lazy_object_proxy-1.10.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e2adb09778797da09d2b5ebdbceebf7dd32e2c96f79da9052b2e87b6ea495895"},
+ {file = "lazy_object_proxy-1.10.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b1f711e2c6dcd4edd372cf5dec5c5a30d23bba06ee012093267b3376c079ec83"},
+ {file = "lazy_object_proxy-1.10.0-cp310-cp310-win32.whl", hash = "sha256:76a095cfe6045c7d0ca77db9934e8f7b71b14645f0094ffcd842349ada5c5fb9"},
+ {file = "lazy_object_proxy-1.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:b4f87d4ed9064b2628da63830986c3d2dca7501e6018347798313fcf028e2fd4"},
+ {file = "lazy_object_proxy-1.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fec03caabbc6b59ea4a638bee5fce7117be8e99a4103d9d5ad77f15d6f81020c"},
+ {file = "lazy_object_proxy-1.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02c83f957782cbbe8136bee26416686a6ae998c7b6191711a04da776dc9e47d4"},
+ {file = "lazy_object_proxy-1.10.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:009e6bb1f1935a62889ddc8541514b6a9e1fcf302667dcb049a0be5c8f613e56"},
+ {file = "lazy_object_proxy-1.10.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:75fc59fc450050b1b3c203c35020bc41bd2695ed692a392924c6ce180c6f1dc9"},
+ {file = "lazy_object_proxy-1.10.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:782e2c9b2aab1708ffb07d4bf377d12901d7a1d99e5e410d648d892f8967ab1f"},
+ {file = "lazy_object_proxy-1.10.0-cp311-cp311-win32.whl", hash = "sha256:edb45bb8278574710e68a6b021599a10ce730d156e5b254941754a9cc0b17d03"},
+ {file = "lazy_object_proxy-1.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:e271058822765ad5e3bca7f05f2ace0de58a3f4e62045a8c90a0dfd2f8ad8cc6"},
+ {file = "lazy_object_proxy-1.10.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e98c8af98d5707dcdecc9ab0863c0ea6e88545d42ca7c3feffb6b4d1e370c7ba"},
+ {file = "lazy_object_proxy-1.10.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:952c81d415b9b80ea261d2372d2a4a2332a3890c2b83e0535f263ddfe43f0d43"},
+ {file = "lazy_object_proxy-1.10.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80b39d3a151309efc8cc48675918891b865bdf742a8616a337cb0090791a0de9"},
+ {file = "lazy_object_proxy-1.10.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:e221060b701e2aa2ea991542900dd13907a5c90fa80e199dbf5a03359019e7a3"},
+ {file = "lazy_object_proxy-1.10.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:92f09ff65ecff3108e56526f9e2481b8116c0b9e1425325e13245abfd79bdb1b"},
+ {file = "lazy_object_proxy-1.10.0-cp312-cp312-win32.whl", hash = "sha256:3ad54b9ddbe20ae9f7c1b29e52f123120772b06dbb18ec6be9101369d63a4074"},
+ {file = "lazy_object_proxy-1.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:127a789c75151db6af398b8972178afe6bda7d6f68730c057fbbc2e96b08d282"},
+ {file = "lazy_object_proxy-1.10.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9e4ed0518a14dd26092614412936920ad081a424bdcb54cc13349a8e2c6d106a"},
+ {file = "lazy_object_proxy-1.10.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ad9e6ed739285919aa9661a5bbed0aaf410aa60231373c5579c6b4801bd883c"},
+ {file = "lazy_object_proxy-1.10.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fc0a92c02fa1ca1e84fc60fa258458e5bf89d90a1ddaeb8ed9cc3147f417255"},
+ {file = "lazy_object_proxy-1.10.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0aefc7591920bbd360d57ea03c995cebc204b424524a5bd78406f6e1b8b2a5d8"},
+ {file = "lazy_object_proxy-1.10.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5faf03a7d8942bb4476e3b62fd0f4cf94eaf4618e304a19865abf89a35c0bbee"},
+ {file = "lazy_object_proxy-1.10.0-cp38-cp38-win32.whl", hash = "sha256:e333e2324307a7b5d86adfa835bb500ee70bfcd1447384a822e96495796b0ca4"},
+ {file = "lazy_object_proxy-1.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:cb73507defd385b7705c599a94474b1d5222a508e502553ef94114a143ec6696"},
+ {file = "lazy_object_proxy-1.10.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:366c32fe5355ef5fc8a232c5436f4cc66e9d3e8967c01fb2e6302fd6627e3d94"},
+ {file = "lazy_object_proxy-1.10.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2297f08f08a2bb0d32a4265e98a006643cd7233fb7983032bd61ac7a02956b3b"},
+ {file = "lazy_object_proxy-1.10.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18dd842b49456aaa9a7cf535b04ca4571a302ff72ed8740d06b5adcd41fe0757"},
+ {file = "lazy_object_proxy-1.10.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:217138197c170a2a74ca0e05bddcd5f1796c735c37d0eee33e43259b192aa424"},
+ {file = "lazy_object_proxy-1.10.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9a3a87cf1e133e5b1994144c12ca4aa3d9698517fe1e2ca82977781b16955658"},
+ {file = "lazy_object_proxy-1.10.0-cp39-cp39-win32.whl", hash = "sha256:30b339b2a743c5288405aa79a69e706a06e02958eab31859f7f3c04980853b70"},
+ {file = "lazy_object_proxy-1.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:a899b10e17743683b293a729d3a11f2f399e8a90c73b089e29f5d0fe3509f0dd"},
+ {file = "lazy_object_proxy-1.10.0-pp310.pp311.pp312.pp38.pp39-none-any.whl", hash = "sha256:80fa48bd89c8f2f456fc0765c11c23bf5af827febacd2f523ca5bc1893fcc09d"},
]
[[package]]
@@ -387,50 +391,51 @@
[[package]]
name = "packaging"
-version = "23.2"
+version = "24.1"
description = "Core utilities for Python packages"
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"},
- {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"},
+ {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"},
+ {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"},
]
[[package]]
name = "pathspec"
-version = "0.11.2"
+version = "0.12.1"
description = "Utility library for gitignore style pattern matching of file paths."
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"},
- {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"},
+ {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"},
+ {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"},
]
[[package]]
name = "platformdirs"
-version = "4.0.0"
-description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
+version = "4.2.2"
+description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`."
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "platformdirs-4.0.0-py3-none-any.whl", hash = "sha256:118c954d7e949b35437270383a3f2531e99dd93cf7ce4dc8340d3356d30f173b"},
- {file = "platformdirs-4.0.0.tar.gz", hash = "sha256:cb633b2bcf10c51af60beb0ab06d2f1d69064b43abf4c185ca6b28865f3f9731"},
+ {file = "platformdirs-4.2.2-py3-none-any.whl", hash = "sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee"},
+ {file = "platformdirs-4.2.2.tar.gz", hash = "sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3"},
]
[package.extras]
-docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"]
-test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"]
+docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"]
+test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"]
+type = ["mypy (>=1.8)"]
[[package]]
name = "pluggy"
-version = "1.3.0"
+version = "1.5.0"
description = "plugin and hook calling mechanisms for python"
optional = false
python-versions = ">=3.8"
files = [
- {file = "pluggy-1.3.0-py3-none-any.whl", hash = "sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7"},
- {file = "pluggy-1.3.0.tar.gz", hash = "sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12"},
+ {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"},
+ {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"},
]
[package.extras]
@@ -670,30 +675,29 @@
[[package]]
name = "pytz"
-version = "2023.3.post1"
+version = "2024.1"
description = "World timezone definitions, modern and historical"
optional = false
python-versions = "*"
files = [
- {file = "pytz-2023.3.post1-py2.py3-none-any.whl", hash = "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7"},
- {file = "pytz-2023.3.post1.tar.gz", hash = "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b"},
+ {file = "pytz-2024.1-py2.py3-none-any.whl", hash = "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319"},
+ {file = "pytz-2024.1.tar.gz", hash = "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812"},
]
[[package]]
name = "sqlparse"
-version = "0.4.4"
+version = "0.5.0"
description = "A non-validating SQL parser."
optional = false
-python-versions = ">=3.5"
+python-versions = ">=3.8"
files = [
- {file = "sqlparse-0.4.4-py3-none-any.whl", hash = "sha256:5430a4fe2ac7d0f93e66f1efc6e1338a41884b7ddf2a350cedd20ccc4d9d28f3"},
- {file = "sqlparse-0.4.4.tar.gz", hash = "sha256:d446183e84b8349fa3061f0fe7f06ca94ba65b426946ffebe6e3e8295332420c"},
+ {file = "sqlparse-0.5.0-py3-none-any.whl", hash = "sha256:c204494cd97479d0e39f28c93d46c0b2d5959c7b9ab904762ea6c7af211c8663"},
+ {file = "sqlparse-0.5.0.tar.gz", hash = "sha256:714d0a4932c059d16189f58ef5411ec2287a4360f17cdd0edd2d09d4c5087c93"},
]
[package.extras]
-dev = ["build", "flake8"]
+dev = ["build", "hatch"]
doc = ["sphinx"]
-test = ["pytest", "pytest-cov"]
[[package]]
name = "toml"
@@ -719,35 +723,35 @@
[[package]]
name = "tomlkit"
-version = "0.12.3"
+version = "0.12.5"
description = "Style preserving TOML library"
optional = false
python-versions = ">=3.7"
files = [
- {file = "tomlkit-0.12.3-py3-none-any.whl", hash = "sha256:b0a645a9156dc7cb5d3a1f0d4bab66db287fcb8e0430bdd4664a095ea16414ba"},
- {file = "tomlkit-0.12.3.tar.gz", hash = "sha256:75baf5012d06501f07bee5bf8e801b9f343e7aac5a92581f20f80ce632e6b5a4"},
+ {file = "tomlkit-0.12.5-py3-none-any.whl", hash = "sha256:af914f5a9c59ed9d0762c7b64d3b5d5df007448eb9cd2edc8a46b1eafead172f"},
+ {file = "tomlkit-0.12.5.tar.gz", hash = "sha256:eef34fba39834d4d6b73c9ba7f3e4d1c417a4e56f89a7e96e090dd0d24b8fb3c"},
]
[[package]]
name = "typing-extensions"
-version = "4.8.0"
+version = "4.12.2"
description = "Backported and Experimental Type Hints for Python 3.8+"
optional = false
python-versions = ">=3.8"
files = [
- {file = "typing_extensions-4.8.0-py3-none-any.whl", hash = "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0"},
- {file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"},
+ {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"},
+ {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"},
]
[[package]]
name = "tzdata"
-version = "2023.3"
+version = "2023.4"
description = "Provider of IANA time zone data"
optional = false
python-versions = ">=2"
files = [
- {file = "tzdata-2023.3-py2.py3-none-any.whl", hash = "sha256:7e65763eef3120314099b6939b5546db7adce1e7d6f2e179e3df563c70511eda"},
- {file = "tzdata-2023.3.tar.gz", hash = "sha256:11ef1e08e54acb0d4f95bdb1be05da659673de4acbd21bf9c69e94cc5e907a3a"},
+ {file = "tzdata-2023.4-py2.py3-none-any.whl", hash = "sha256:aa3ace4329eeacda5b7beb7ea08ece826c28d761cda36e747cfbf97996d39bf3"},
+ {file = "tzdata-2023.4.tar.gz", hash = "sha256:dd54c94f294765522c77399649b4fefd95522479a664a0cec87f41bebc6148c9"},
]
[[package]]
@@ -832,4 +836,4 @@
[metadata]
lock-version = "2.0"
python-versions = "^3.8"
-content-hash = "30436b1c225fd7570ea535458ea6f4c02328a0592b543c6751a34f2598035649"
+content-hash = "e7c575a30807c6f6c2f3e79f6315a193af37420091df6c06de7c5e0c0d1778f0"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-timezone-field-6.1.0/pyproject.toml new/django-timezone-field-7.0/pyproject.toml
--- old/django-timezone-field-6.1.0/pyproject.toml 2023-11-26 00:24:33.000000000 +0100
+++ new/django-timezone-field-7.0/pyproject.toml 2024-07-07 20:27:23.000000000 +0200
@@ -14,7 +14,7 @@
[tool.poetry]
name = "django-timezone-field"
-version = "6.1.0"
+version = "7.0"
description = "A Django app providing DB, form, and REST framework fields for zoneinfo and pytz timezone objects."
license = "BSD-2-Clause"
authors = ["Mike Fogel <mike(a)fogel.ca>"]
@@ -24,11 +24,9 @@
"Development Status :: 4 - Beta",
"Environment :: Web Environment",
"Framework :: Django",
- "Framework :: Django :: 3.2",
- "Framework :: Django :: 4.0",
- "Framework :: Django :: 4.1",
"Framework :: Django :: 4.2",
"Framework :: Django :: 5.0",
+ "Framework :: Django :: 5.1",
"Intended Audience :: Developers",
"Operating System :: OS Independent",
"Topic :: Utilities",
@@ -44,7 +42,7 @@
[tool.poetry.dev-dependencies]
coverage = {extras = ["toml"], version = "^6.2"}
-djangorestframework = "^3.13.1"
+djangorestframework = "^3.15.2"
flake8 = "^5.0.4"
psycopg2-binary = "^2.9.3"
pytest = "^6.2.5"
@@ -52,7 +50,8 @@
pytest-pythonpath = "^0.7.3"
pytest-lazy-fixture = "^0.6.3"
pytest-cov = "^3.0.0"
-black = "^23.3.0"
+pytz = "^2024.1"
+black = "^24.4.2"
isort = "^5.11.5"
pylint = "^2.13.9"
tzdata = "^2023.3"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-timezone-field-6.1.0/tests/test_choices.py new/django-timezone-field-7.0/tests/test_choices.py
--- old/django-timezone-field-6.1.0/tests/test_choices.py 2023-11-26 00:24:33.000000000 +0100
+++ new/django-timezone-field-7.0/tests/test_choices.py 2024-07-07 20:27:23.000000000 +0200
@@ -38,11 +38,20 @@
@pytest.fixture
+def tzs3_names_sorted():
+ yield [
+ "America/Argentina/Buenos_Aires",
+ "America/Los_Angeles",
+ "Europe/London",
+ ]
+
+
+(a)pytest.fixture
def tzs3_standard_displays():
yield [
+ "America/Argentina/Buenos Aires",
"America/Los Angeles",
"Europe/London",
- "America/Argentina/Buenos Aires",
]
@@ -104,10 +113,11 @@
assert with_gmt_offset(tz_names, now=after, use_pytz=use_pytz) == [("Europe/London", "GMT+00:00 Europe/London")]
-def test_standard_using_timezone_names(tzs3_names, tzs3_standard_displays):
- assert standard(tzs3_names) == list(zip(tzs3_names, tzs3_standard_displays))
+def test_standard_using_timezone_names(tzs3_names, tzs3_names_sorted, tzs3_standard_displays):
+ assert standard(tzs3_names) == list(zip(tzs3_names_sorted, tzs3_standard_displays))
-def test_standard_using_timezone_objects(tzs3_names, tzs3_standard_displays, to_tzobj):
+def test_standard_using_timezone_objects(tzs3_names, tzs3_names_sorted, tzs3_standard_displays, to_tzobj):
tzs3_objects = [to_tzobj(tz) for tz in tzs3_names]
- assert standard(tzs3_objects) == list(zip(tzs3_objects, tzs3_standard_displays))
+ tzs3_objects_sorted = [to_tzobj(tz) for tz in tzs3_names_sorted]
+ assert standard(tzs3_objects) == list(zip(tzs3_objects_sorted, tzs3_standard_displays))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-timezone-field-6.1.0/tests/test_choices_display_option.py new/django-timezone-field-7.0/tests/test_choices_display_option.py
--- old/django-timezone-field-6.1.0/tests/test_choices_display_option.py 2023-11-26 00:24:33.000000000 +0100
+++ new/django-timezone-field-7.0/tests/test_choices_display_option.py 2024-07-07 20:27:23.000000000 +0200
@@ -1,3 +1,5 @@
+from collections import Counter
+
import pytest
from django import forms
from django.db import models
@@ -104,7 +106,7 @@
def test_form_field_none(ChoicesDisplayForm, base_tzstrs):
form = ChoicesDisplayForm()
values, displays = zip(*form.fields["tz_none"].choices)
- assert values == tuple(base_tzstrs)
+ assert sorted(values) == sorted(base_tzstrs)
assert displays[values.index("America/Los_Angeles")] == "America/Los Angeles"
assert displays[values.index("Asia/Kolkata")] == "Asia/Kolkata"
@@ -136,10 +138,10 @@
def test_form_field_limited_standard(ChoicesDisplayForm):
form = ChoicesDisplayForm()
assert form.fields["tz_limited_standard"].choices == [
- ("Asia/Tokyo", "Asia/Tokyo"),
- ("Asia/Dubai", "Asia/Dubai"),
- ("America/Argentina/Buenos_Aires", "America/Argentina/Buenos Aires"),
("Africa/Nairobi", "Africa/Nairobi"),
+ ("America/Argentina/Buenos_Aires", "America/Argentina/Buenos Aires"),
+ ("Asia/Dubai", "Asia/Dubai"),
+ ("Asia/Tokyo", "Asia/Tokyo"),
]
@@ -156,7 +158,7 @@
def test_model_form_field_none(ChoicesDisplayModelForm, to_tzobj, base_tzobjs):
form = ChoicesDisplayModelForm()
values, displays = zip(*form.fields["tz_none"].choices)
- assert values == ("",) + tuple(base_tzobjs)
+ assert Counter(values) == Counter(("",) + tuple(base_tzobjs))
assert displays[values.index(to_tzobj("America/Los_Angeles"))] == "America/Los Angeles"
assert displays[values.index(to_tzobj("Asia/Kolkata"))] == "Asia/Kolkata"
@@ -192,10 +194,10 @@
form = ChoicesDisplayModelForm()
assert form.fields["tz_limited_standard"].choices == [
("", "---------"),
- (to_tzobj("Asia/Tokyo"), "Asia/Tokyo"),
- (to_tzobj("Asia/Dubai"), "Asia/Dubai"),
- (to_tzobj("America/Argentina/Buenos_Aires"), "America/Argentina/Buenos Aires"),
(to_tzobj("Africa/Nairobi"), "Africa/Nairobi"),
+ (to_tzobj("America/Argentina/Buenos_Aires"), "America/Argentina/Buenos Aires"),
+ (to_tzobj("Asia/Dubai"), "Asia/Dubai"),
+ (to_tzobj("Asia/Tokyo"), "Asia/Tokyo"),
]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-timezone-field-6.1.0/tests/test_deconstruct.py new/django-timezone-field-7.0/tests/test_deconstruct.py
--- old/django-timezone-field-6.1.0/tests/test_deconstruct.py 2023-11-26 00:24:33.000000000 +0100
+++ new/django-timezone-field-7.0/tests/test_deconstruct.py 2024-07-07 20:27:23.000000000 +0200
@@ -2,6 +2,7 @@
from django.db.migrations.writer import MigrationWriter
from timezone_field import TimeZoneField
+from timezone_field.choices import standard
@pytest.fixture(
@@ -16,13 +17,21 @@
]
)
def field(request, to_tzobj, use_pytz):
- yield TimeZoneField(use_pytz=use_pytz) if request.param == "use_pytz_1" else TimeZoneField(
- choices=[
- (to_tzobj("US/Pacific"), "US/Pacific"),
- (to_tzobj("US/Eastern"), "US/Eastern"),
- ],
- use_pytz=use_pytz,
- ) if request.param == "use_pytz_2" else request.param
+ yield (
+ TimeZoneField(use_pytz=use_pytz)
+ if request.param == "use_pytz_1"
+ else (
+ TimeZoneField(
+ choices=[
+ (to_tzobj("US/Pacific"), "US/Pacific"),
+ (to_tzobj("US/Eastern"), "US/Eastern"),
+ ],
+ use_pytz=use_pytz,
+ )
+ if request.param == "use_pytz_2"
+ else request.param
+ )
+ )
def test_deconstruct(field):
@@ -62,7 +71,7 @@
assert "max_length" not in kwargs
-def test_specifying_defaults_not_frozen(use_pytz, to_tzobj, base_tzstrs):
+def test_specifying_defaults_not_frozen(use_pytz, base_tzstrs):
"""
If someone's matched the default values with their kwarg args, we
shouldn't bothering freezing those
@@ -72,7 +81,7 @@
_name, _path, _args, kwargs = field.deconstruct()
assert "max_length" not in kwargs
- choices = [(to_tzobj(tz), tz.replace("_", " ")) for tz in base_tzstrs]
+ choices = standard(base_tzstrs)
field = TimeZoneField(choices=choices, use_pytz=use_pytz)
_name, _path, _args, kwargs = field.deconstruct()
assert "choices" not in kwargs
@@ -85,10 +94,14 @@
]
)
def choices(request, to_tzobj):
- yield request.param if request.param is not None else [
- (to_tzobj("US/Pacific"), "US/Pacific"),
- (to_tzobj("US/Eastern"), "US/Eastern"),
- ]
+ yield (
+ request.param
+ if request.param is not None
+ else [
+ (to_tzobj("US/Pacific"), "US/Pacific"),
+ (to_tzobj("US/Eastern"), "US/Eastern"),
+ ]
+ )
def test_deconstruct_when_using_choices(choices, use_pytz):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-timezone-field-6.1.0/tests/test_field.py new/django-timezone-field-7.0/tests/test_field.py
--- old/django-timezone-field-6.1.0/tests/test_field.py 2023-11-26 00:24:33.000000000 +0100
+++ new/django-timezone-field-7.0/tests/test_field.py 2024-07-07 20:27:23.000000000 +0200
@@ -61,11 +61,30 @@
assert qs.count() == 1
+(a)pytest.mark.parametrize(
+ "input_tz, output_tz",
+ [
+ [lazy_fixture("pst"), lazy_fixture("pst_tz")],
+ [lazy_fixture("pst_tz"), lazy_fixture("pst_tz")],
+ ["", None],
+ [None, None],
+ ],
+)
+def test_string_value_assignment_without_save(Model, utc, input_tz, output_tz):
+ m = Model(tz=utc, tz_opt=utc)
+ m.tz_opt = input_tz
+ assert m.tz_opt == output_tz
+
+
@pytest.mark.parametrize("tz", [None, "", "not-a-tz", 4, object()])
def test_invalid_input(Model, tz):
- m = Model(tz=tz)
with pytest.raises(ValidationError):
- m.full_clean()
+ # Most invalid values are detected at creation/assignment.
+ # Invalid blank values aren't detected until clean/save.
+ m = Model(tz=tz)
+ if tz is None or tz == "":
+ assert m.tz is None
+ m.full_clean()
def test_three_positional_args_does_not_throw():
@@ -92,8 +111,8 @@
@pytest.mark.parametrize("kwargs", [{"tz_superset": "not a tz"}, {"tz_subset": "Europe/Brussels"}])
def test_with_limited_choices_invalid_choice(ModelChoice, kwargs):
- m = ModelChoice(**kwargs)
with pytest.raises(ValidationError):
+ m = ModelChoice(**kwargs)
m.full_clean()
@@ -107,6 +126,6 @@
@pytest.mark.parametrize("kwargs", [{"tz_superset": "not a tz"}, {"tz_subset": "Europe/Brussels"}])
def test_with_limited_choices_old_format_invalid_choice(ModelOldChoiceFormat, kwargs):
- m = ModelOldChoiceFormat(**kwargs)
with pytest.raises(ValidationError):
+ m = ModelOldChoiceFormat(**kwargs)
m.full_clean()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-timezone-field-6.1.0/tests/test_serializer_field.py new/django-timezone-field-7.0/tests/test_serializer_field.py
--- old/django-timezone-field-6.1.0/tests/test_serializer_field.py 2023-11-26 00:24:33.000000000 +0100
+++ new/django-timezone-field-7.0/tests/test_serializer_field.py 2024-07-07 20:27:23.000000000 +0200
@@ -13,6 +13,17 @@
yield _TimeZoneSerializer
+(a)pytest.fixture
+def TimeZoneSerializerEmpties(use_pytz):
+ class _TimeZoneSerializer(serializers.Serializer):
+ # pylint: disable=abstract-method
+ tz_allow_null = TimeZoneSerializerField(use_pytz=use_pytz, allow_null=True)
+ tz_allow_blank = TimeZoneSerializerField(use_pytz=use_pytz, allow_blank=True)
+ tz_not_required = TimeZoneSerializerField(use_pytz=use_pytz, required=False)
+
+ yield _TimeZoneSerializer
+
+
def test_invalid_str(TimeZoneSerializer, invalid_tz):
serializer = TimeZoneSerializer(data={"tz": invalid_tz})
assert not serializer.is_valid()
@@ -22,6 +33,15 @@
def test_empty_str(TimeZoneSerializer):
serializer = TimeZoneSerializer(data={"tz": ""})
assert not serializer.is_valid()
+ assert serializer.data == {"tz": ""}
+ assert serializer.validated_data == {}
+
+
+def test_none(TimeZoneSerializer):
+ serializer = TimeZoneSerializer(data={"tz": None})
+ assert not serializer.is_valid()
+ assert serializer.data == {"tz": None}
+ assert serializer.validated_data == {}
def test_valid(TimeZoneSerializer, pst, pst_tz):
@@ -41,3 +61,23 @@
assert serializer.is_valid()
assert serializer.data["tz"] == pst
assert serializer.validated_data["tz"] == pst_tz
+
+
+def test_valid_empties(TimeZoneSerializerEmpties):
+ serializer = TimeZoneSerializerEmpties(data={"tz_allow_null": None, "tz_allow_blank": ""})
+ assert serializer.is_valid()
+ assert serializer.data == {"tz_allow_null": None, "tz_allow_blank": ""}
+ assert serializer.validated_data == {"tz_allow_null": None, "tz_allow_blank": ""}
+
+
+def test_invalid_empties(TimeZoneSerializerEmpties):
+ serializer = TimeZoneSerializerEmpties(
+ data={
+ "tz_allow_null": "",
+ "tz_allow_blank": None,
+ "tz_not_required": None,
+ }
+ )
+ assert not serializer.is_valid()
+ assert serializer.data == {"tz_allow_null": "", "tz_allow_blank": None, "tz_not_required": None}
+ assert serializer.validated_data == {}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-timezone-field-6.1.0/timezone_field/__init__.py new/django-timezone-field-7.0/timezone_field/__init__.py
--- old/django-timezone-field-6.1.0/timezone_field/__init__.py 2023-11-26 00:24:33.000000000 +0100
+++ new/django-timezone-field-7.0/timezone_field/__init__.py 2024-07-07 20:27:23.000000000 +0200
@@ -1,5 +1,5 @@
from timezone_field.fields import TimeZoneField
from timezone_field.forms import TimeZoneFormField
-__version__ = "6.1.0"
+__version__ = "7.0"
__all__ = ["TimeZoneField", "TimeZoneFormField"]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-timezone-field-6.1.0/timezone_field/choices.py new/django-timezone-field-7.0/timezone_field/choices.py
--- old/django-timezone-field-6.1.0/timezone_field/choices.py 2023-11-26 00:24:33.000000000 +0100
+++ new/django-timezone-field-7.0/timezone_field/choices.py 2024-07-07 20:27:23.000000000 +0200
@@ -3,6 +3,28 @@
from timezone_field.backends import get_tz_backend
+def normalize_standard(tztuple):
+ """Normalize timezone names by replacing special characters with space.
+
+ For proper sorting, using spaces makes comparisons more consistent.
+
+ :param str tztuple: tuple of timezone and representation
+ """
+ return tztuple[1].translate(str.maketrans({"-": " ", "_": " "}))
+
+
+def normalize_gmt(tztuple):
+ """Normalize timezone GMT names for sorting.
+
+ For proper sorting, using GMT values as a positive or negative number.
+
+ :param str tztuple: tuple of timezone and representation
+ """
+ gmt = tztuple[1].split()[0]
+ cmp = gmt.replace("GMT", "").replace(":", "")
+ return int(cmp)
+
+
def standard(timezones):
"""
Given a list of timezones (either strings of timezone objects),
@@ -14,7 +36,7 @@
for tz in timezones:
tz_str = str(tz)
choices.append((tz, tz_str.replace("_", " ")))
- return choices
+ return sorted(choices, key=normalize_standard)
def with_gmt_offset(timezones, now=None, use_pytz=None):
@@ -41,4 +63,4 @@
_choices.append((delta, tz, display))
_choices.sort(key=lambda x: x[0])
choices = [(one, two) for zero, one, two in _choices]
- return choices
+ return sorted(choices, key=normalize_gmt)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-timezone-field-6.1.0/timezone_field/fields.py new/django-timezone-field-7.0/timezone_field/fields.py
--- old/django-timezone-field-6.1.0/timezone_field/fields.py 2023-11-26 00:24:33.000000000 +0100
+++ new/django-timezone-field-7.0/timezone_field/fields.py 2024-07-07 20:27:23.000000000 +0200
@@ -4,6 +4,7 @@
from timezone_field.backends import TimeZoneNotFoundError, get_tz_backend
from timezone_field.choices import standard, with_gmt_offset
+from timezone_field.utils import AutoDeserializedAttribute
class TimeZoneField(models.Field):
@@ -35,6 +36,8 @@
stored as [<timezone object>, <str>].
"""
+ descriptor_class = AutoDeserializedAttribute
+
description = "A timezone object"
# NOTE: these defaults are excluded from migrations. If these are changed,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-timezone-field-6.1.0/timezone_field/rest_framework.py new/django-timezone-field-7.0/timezone_field/rest_framework.py
--- old/django-timezone-field-6.1.0/timezone_field/rest_framework.py 2023-11-26 00:24:33.000000000 +0100
+++ new/django-timezone-field-7.0/timezone_field/rest_framework.py 2024-07-07 20:27:23.000000000 +0200
@@ -1,11 +1,11 @@
from django.utils.encoding import force_str
from django.utils.translation import gettext_lazy as _
-from rest_framework.fields import Field
+from rest_framework.fields import CharField
from timezone_field.backends import TimeZoneNotFoundError, get_tz_backend
-class TimeZoneSerializerField(Field):
+class TimeZoneSerializerField(CharField):
default_error_messages = {
"invalid": _("A valid timezone is required."),
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-timezone-field-6.1.0/timezone_field/utils.py new/django-timezone-field-7.0/timezone_field/utils.py
--- old/django-timezone-field-6.1.0/timezone_field/utils.py 1970-01-01 01:00:00.000000000 +0100
+++ new/django-timezone-field-7.0/timezone_field/utils.py 2024-07-07 20:27:23.000000000 +0200
@@ -0,0 +1,19 @@
+from django.db.models.query_utils import DeferredAttribute
+
+
+class AutoDeserializedAttribute(DeferredAttribute):
+ """
+ Use as the descriptor_class for a Django custom field.
+ Allows setting the field to a serialized (typically string) value,
+ and immediately reflecting that as the deserialized `to_python` value.
+
+ (This requires that the field's `to_python` returns the same thing
+ whether called with a serialized or deserialized value.)
+ """
+
+ # (Adapted from django.db.models.fields.subclassing.Creator,
+ # which was included in Django 1.8 and earlier.)
+
+ def __set__(self, instance, value):
+ value = self.field.to_python(value)
+ instance.__dict__[self.field.attname] = value
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package fzf for openSUSE:Factory checked in at 2024-07-22 17:17:48
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/fzf (Old)
and /work/SRC/openSUSE:Factory/.fzf.new.17339 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "fzf"
Mon Jul 22 17:17:48 2024 rev:55 rq:1188813 version:0.54.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/fzf/fzf.changes 2024-07-08 19:09:46.538065309 +0200
+++ /work/SRC/openSUSE:Factory/.fzf.new.17339/fzf.changes 2024-07-22 17:19:30.884907761 +0200
@@ -1,0 +2,10 @@
+Sat Jul 20 14:14:23 UTC 2024 - Joshua Smith <smolsheep(a)opensuse.org>
+
+- Update to 0.54.1:
+ * fastwalk: add optional sorting and improve documentation
+ * Reverted ALT-C binding of fish to use cd instead of builtin
+ cd. builtin cd was introduced to work around a bug of cd coming
+ from zoxide init --cmd cd fish where it cannot handle --
+ argument.
+
+-------------------------------------------------------------------
Old:
----
fzf-0.54.0.tar.gz
New:
----
fzf-0.54.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ fzf.spec ++++++
--- /var/tmp/diff_new_pack.Lkkspo/_old 2024-07-22 17:19:31.564935102 +0200
+++ /var/tmp/diff_new_pack.Lkkspo/_new 2024-07-22 17:19:31.568935262 +0200
@@ -18,7 +18,7 @@
%global _lto_cflags %{nil}
Name: fzf
-Version: 0.54.0
+Version: 0.54.1
Release: 0
Summary: A command-line fuzzy finder
License: MIT
++++++ fzf-0.54.0.tar.gz -> fzf-0.54.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fzf-0.54.0/.github/workflows/winget.yml new/fzf-0.54.1/.github/workflows/winget.yml
--- old/fzf-0.54.0/.github/workflows/winget.yml 2024-07-08 15:51:48.000000000 +0200
+++ new/fzf-0.54.1/.github/workflows/winget.yml 2024-07-19 10:10:49.000000000 +0200
@@ -10,6 +10,5 @@
- uses: vedantmgoyal2009/winget-releaser@v2
with:
identifier: junegunn.fzf
- version: ${{ github.event.release.tag_name }}
installers-regex: '-windows_(armv7|arm64|amd64)\.zip$'
token: ${{ secrets.WINGET_TOKEN }}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fzf-0.54.0/CHANGELOG.md new/fzf-0.54.1/CHANGELOG.md
--- old/fzf-0.54.0/CHANGELOG.md 2024-07-08 15:51:48.000000000 +0200
+++ new/fzf-0.54.1/CHANGELOG.md 2024-07-19 10:10:49.000000000 +0200
@@ -1,6 +1,17 @@
CHANGELOG
=========
+0.54.1
+------
+- Updated [fastwalk](https://github.com/charlievieth/fastwalk) dependency for built-in directory walker
+ - [fastwalk: add optional sorting and improve documentation](https://github.com/charlievieth/fastwalk/pull/27)
+ - [fastwalk: only check if MSYSTEM is set during MSYS/MSYS2](https://github.com/charlievieth/fastwalk/pull/28)
+ - Thanks to @charlievieth
+- Reverted ALT-C binding of fish to use `cd` instead of `builtin cd`
+ - `builtin cd` was introduced to work around a bug of `cd` coming from `zoxide init --cmd cd fish` where it cannot handle `--` argument.
+ - However, the default `cd` of fish is actually a wrapper function for supporting `cd -`, so we want to use it instead.
+ - See [#3928](https://github.com/junegunn/fzf/pull/3928) for more information and consider helping zoxide fix the bug.
+
0.54.0
------
_Release highlights: https://junegunn.github.io/fzf/releases/0.54.0/_
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fzf-0.54.0/README.md new/fzf-0.54.1/README.md
--- old/fzf-0.54.0/README.md 2024-07-08 15:51:48.000000000 +0200
+++ new/fzf-0.54.1/README.md 2024-07-19 10:10:49.000000000 +0200
@@ -44,7 +44,7 @@
If you'd like to sponsor this project, please visit https://github.com/sponsors/junegunn.
-<!-- sponsors --><a href="https://github.com/miyanokomiya"><img src="https://github.com/miyanokomiya.png" width="60px" alt="miyanokomiya" /></a><a href="https://github.com/jonhoo"><img src="https://github.com/jonhoo.png" width="60px" alt="Jon Gjengset" /></a><a href="https://github.com/AceofSpades5757"><img src="https://github.com/AceofSpades5757.png" width="60px" alt="Kyle L. Davis" /></a><a href="https://github.com/Frederick888"><img src="https://github.com/Frederick888.png" width="60px" alt="Frederick Zhang" /></a><a href="https://github.com/moritzdietz"><img src="https://github.com/moritzdietz.png" width="60px" alt="Moritz Dietz" /></a><a href="https://github.com/mikker"><img src="https://github.com/mikker.png" width="60px" alt="Mikkel Malmberg" /></a><a href="https://github.com/pldubouilh"><img src="https://github.com/pldubouilh.png" width="60px" alt="Pierre Dubouilh" /></a><a href="https://github.com/rcorre"><img src="https://github.com/rcorre.png" width="60px" alt="Ryan Roden
-Corrent" /></a><a href="https://github.com/blissdev"><img src="https://github.com/blissdev.png" width="60px" alt="Jordan Arentsen" /></a><a href="https://github.com/mislav"><img src="https://github.com/mislav.png" width="60px" alt="Mislav Marohnić" /></a><a href="https://github.com/aexvir"><img src="https://github.com/aexvir.png" width="60px" alt="Alex Viscreanu" /></a><a href="https://github.com/sbryngelson"><img src="https://github.com/sbryngelson.png" width="60px" alt="Spencer Bryngelson" /></a><a href="https://github.com/dbalatero"><img src="https://github.com/dbalatero.png" width="60px" alt="David Balatero" /></a><a href="https://github.com/comatory"><img src="https://github.com/comatory.png" width="60px" alt="Ondrej Synacek" /></a><a href="https://github.com/moobar"><img src="https://github.com/moobar.png" width="60px" alt="" /></a><a href="https://github.com/majjoha"><img src="https://github.com/majjoha.png" width="60px" alt="Mathias Jean Johansen" /></a><a href="https://gi
thub.com/benelan"><img src="https://github.com/benelan.png" width="60px" alt="Ben Elan" /></a><a href="https://github.com/pawelduda"><img src="https://github.com/pawelduda.png" width="60px" alt="Paweł Duda" /></a><a href="https://github.com/slezica"><img src="https://github.com/slezica.png" width="60px" alt="Santiago Lezica" /></a><a href="https://github.com/pbwn"><img src="https://github.com/pbwn.png" width="60px" alt="" /></a><a href="https://github.com/timgluz"><img src="https://github.com/timgluz.png" width="60px" alt="Timo Sulg" /></a><a href="https://github.com/pyrho"><img src="https://github.com/pyrho.png" width="60px" alt="Damien Rajon" /></a><a href="https://github.com/ArtBIT"><img src="https://github.com/ArtBIT.png" width="60px" alt="ArtBIT" /></a><a href="https://github.com/da-moon"><img src="https://github.com/da-moon.png" width="60px" alt="" /></a><a href="https://github.com/hovissimo"><img src="https://github.com/hovissimo.png" width="60px" alt="Hovis" /></a><a href="
https://github.com/dariusjonda"><img src="https://github.com/dariusjonda.png" width="60px" alt="Darius Jonda" /></a><a href="https://github.com/cristiand391"><img src="https://github.com/cristiand391.png" width="60px" alt="Cristian Dominguez" /></a><a href="https://github.com/eliangcs"><img src="https://github.com/eliangcs.png" width="60px" alt="Chang-Hung Liang" /></a><a href="https://github.com/asphaltbuffet"><img src="https://github.com/asphaltbuffet.png" width="60px" alt="Ben Lechlitner" /></a><a href="https://github.com/yash1th"><img src="https://github.com/yash1th.png" width="60px" alt="yash" /></a><a href="https://github.com/looshch"><img src="https://github.com/looshch.png" width="60px" alt="george looshch" /></a><a href="https://github.com/kg8m"><img src="https://github.com/kg8m.png" width="60px" alt="Takumi KAGIYAMA" /></a><a href="https://github.com/polm"><img src="https://github.com/polm.png" width="60px" alt="Paul O'Leary McCann" /></a><a href="https://github.com/rbeege
r"><img src="https://github.com/rbeeger.png" width="60px" alt="Robert Beeger" /></a><a href="https://github.com/veebch"><img src="https://github.com/veebch.png" width="60px" alt="VEEB Projects" /></a><a href="https://github.com/yowayb"><img src="https://github.com/yowayb.png" width="60px" alt="Yoway Buorn" /></a><a href="https://github.com/scalisi"><img src="https://github.com/scalisi.png" width="60px" alt="Josh Scalisi" /></a><a href="https://github.com/alecbcs"><img src="https://github.com/alecbcs.png" width="60px" alt="Alec Scott" /></a><a href="https://github.com/thnxdev"><img src="https://github.com/thnxdev.png" width="60px" alt="thanks.dev" /></a><a href="https://github.com/artursapek"><img src="https://github.com/artursapek.png" width="60px" alt="Artur Sapek" /></a><a href="https://github.com/ramnes"><img src="https://github.com/ramnes.png" width="60px" alt="Guillaume Gelin" /></a><a href="https://github.com/jyc"><img src="https://github.com/jyc.png" width="60px" alt="" /></a
><a href="https://github.com/mrcnski"><img src="https://github.com/mrcnski.png" width="60px" alt="Marcin S." /></a><a href="https://github.com/roblevy"><img src="https://github.com/roblevy.png" width="60px" alt="Rob Levy" /></a><a href="https://github.com/glozow"><img src="https://github.com/glozow.png" width="60px" alt="Gloria Zhao" /></a><a href="https://github.com/wjt"><img src="https://github.com/wjt.png" width="60px" alt="Will Thompson" /></a><a href="https://github.com/toupeira"><img src="https://github.com/toupeira.png" width="60px" alt="Markus Koller" /></a><a href="https://github.com/rkpatel33"><img src="https://github.com/rkpatel33.png" width="60px" alt="" /></a><a href="https://github.com/jamesob"><img src="https://github.com/jamesob.png" width="60px" alt="James O'Beirne" /></a><a href="https://github.com/jlebray"><img src="https://github.com/jlebray.png" width="60px" alt="Johan Le Bray" /></a><a href="https://github.com/panosl1"><img src="https://github.com/panosl1.png"
width="60px" alt="Panos Lampropoulos" /></a><a href="https://github.com/bespinian"><img src="https://github.com/bespinian.png" width="60px" alt="bespinian" /></a><a href="https://github.com/mirzahilmi"><img src="https://github.com/mirzahilmi.png" width="60px" alt="Mirza Hilmi Shodiq" /></a><!-- sponsors -->
+<!-- sponsors --><a href="https://github.com/miyanokomiya"><img src="https://github.com/miyanokomiya.png" width="60px" alt="miyanokomiya" /></a><a href="https://github.com/jonhoo"><img src="https://github.com/jonhoo.png" width="60px" alt="Jon Gjengset" /></a><a href="https://github.com/AceofSpades5757"><img src="https://github.com/AceofSpades5757.png" width="60px" alt="Kyle L. Davis" /></a><a href="https://github.com/Frederick888"><img src="https://github.com/Frederick888.png" width="60px" alt="Frederick Zhang" /></a><a href="https://github.com/moritzdietz"><img src="https://github.com/moritzdietz.png" width="60px" alt="Moritz Dietz" /></a><a href="https://github.com/mikker"><img src="https://github.com/mikker.png" width="60px" alt="Mikkel Malmberg" /></a><a href="https://github.com/pldubouilh"><img src="https://github.com/pldubouilh.png" width="60px" alt="Pierre Dubouilh" /></a><a href="https://github.com/rcorre"><img src="https://github.com/rcorre.png" width="60px" alt="Ryan Roden
-Corrent" /></a><a href="https://github.com/blissdev"><img src="https://github.com/blissdev.png" width="60px" alt="Jordan Arentsen" /></a><a href="https://github.com/mislav"><img src="https://github.com/mislav.png" width="60px" alt="Mislav Marohnić" /></a><a href="https://github.com/aexvir"><img src="https://github.com/aexvir.png" width="60px" alt="Alex Viscreanu" /></a><a href="https://github.com/dbalatero"><img src="https://github.com/dbalatero.png" width="60px" alt="David Balatero" /></a><a href="https://github.com/comatory"><img src="https://github.com/comatory.png" width="60px" alt="Ondrej Synacek" /></a><a href="https://github.com/moobar"><img src="https://github.com/moobar.png" width="60px" alt="" /></a><a href="https://github.com/majjoha"><img src="https://github.com/majjoha.png" width="60px" alt="Mathias Jean Johansen" /></a><a href="https://github.com/benelan"><img src="https://github.com/benelan.png" width="60px" alt="Ben Elan" /></a><a href="https://github.com/pawelduda
"><img src="https://github.com/pawelduda.png" width="60px" alt="Paweł Duda" /></a><a href="https://github.com/slezica"><img src="https://github.com/slezica.png" width="60px" alt="Santiago Lezica" /></a><a href="https://github.com/pbwn"><img src="https://github.com/pbwn.png" width="60px" alt="" /></a><a href="https://github.com/timgluz"><img src="https://github.com/timgluz.png" width="60px" alt="Timo Sulg" /></a><a href="https://github.com/pyrho"><img src="https://github.com/pyrho.png" width="60px" alt="Damien Rajon" /></a><a href="https://github.com/ArtBIT"><img src="https://github.com/ArtBIT.png" width="60px" alt="ArtBIT" /></a><a href="https://github.com/da-moon"><img src="https://github.com/da-moon.png" width="60px" alt="" /></a><a href="https://github.com/hovissimo"><img src="https://github.com/hovissimo.png" width="60px" alt="Hovis" /></a><a href="https://github.com/dariusjonda"><img src="https://github.com/dariusjonda.png" width="60px" alt="Darius Jonda" /></a><a href="https:
//github.com/cristiand391"><img src="https://github.com/cristiand391.png" width="60px" alt="Cristian Dominguez" /></a><a href="https://github.com/eliangcs"><img src="https://github.com/eliangcs.png" width="60px" alt="Chang-Hung Liang" /></a><a href="https://github.com/asphaltbuffet"><img src="https://github.com/asphaltbuffet.png" width="60px" alt="Ben Lechlitner" /></a><a href="https://github.com/yash1th"><img src="https://github.com/yash1th.png" width="60px" alt="yash" /></a><a href="https://github.com/looshch"><img src="https://github.com/looshch.png" width="60px" alt="george looshch" /></a><a href="https://github.com/kg8m"><img src="https://github.com/kg8m.png" width="60px" alt="Takumi KAGIYAMA" /></a><a href="https://github.com/polm"><img src="https://github.com/polm.png" width="60px" alt="Paul O'Leary McCann" /></a><a href="https://github.com/rbeeger"><img src="https://github.com/rbeeger.png" width="60px" alt="Robert Beeger" /></a><a href="https://github.com/veebch"><img src="h
ttps://github.com/veebch.png" width="60px" alt="VEEB Projects" /></a><a href="https://github.com/yowayb"><img src="https://github.com/yowayb.png" width="60px" alt="Yoway Buorn" /></a><a href="https://github.com/scalisi"><img src="https://github.com/scalisi.png" width="60px" alt="Josh Scalisi" /></a><a href="https://github.com/alecbcs"><img src="https://github.com/alecbcs.png" width="60px" alt="Alec Scott" /></a><a href="https://github.com/thnxdev"><img src="https://github.com/thnxdev.png" width="60px" alt="thanks.dev" /></a><a href="https://github.com/artursapek"><img src="https://github.com/artursapek.png" width="60px" alt="Artur Sapek" /></a><a href="https://github.com/ramnes"><img src="https://github.com/ramnes.png" width="60px" alt="Guillaume Gelin" /></a><a href="https://github.com/jyc"><img src="https://github.com/jyc.png" width="60px" alt="" /></a><a href="https://github.com/mrcnski"><img src="https://github.com/mrcnski.png" width="60px" alt="Marcin S." /></a><a href="https:/
/github.com/roblevy"><img src="https://github.com/roblevy.png" width="60px" alt="Rob Levy" /></a><a href="https://github.com/glozow"><img src="https://github.com/glozow.png" width="60px" alt="Gloria Zhao" /></a><a href="https://github.com/wjt"><img src="https://github.com/wjt.png" width="60px" alt="Will Thompson" /></a><a href="https://github.com/toupeira"><img src="https://github.com/toupeira.png" width="60px" alt="Markus Koller" /></a><a href="https://github.com/rkpatel33"><img src="https://github.com/rkpatel33.png" width="60px" alt="" /></a><a href="https://github.com/jamesob"><img src="https://github.com/jamesob.png" width="60px" alt="James O'Beirne" /></a><a href="https://github.com/jlebray"><img src="https://github.com/jlebray.png" width="60px" alt="Johan Le Bray" /></a><a href="https://github.com/panosl1"><img src="https://github.com/panosl1.png" width="60px" alt="Panos Lampropoulos" /></a><a href="https://github.com/bespinian"><img src="https://github.com/bespinian.png" widt
h="60px" alt="bespinian" /></a><a href="https://github.com/mirzahilmi"><img src="https://github.com/mirzahilmi.png" width="60px" alt="Mirza Hilmi Shodiq" /></a><!-- sponsors -->
Table of Contents
-----------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fzf-0.54.0/go.mod new/fzf-0.54.1/go.mod
--- old/fzf-0.54.0/go.mod 2024-07-08 15:51:48.000000000 +0200
+++ new/fzf-0.54.1/go.mod 2024-07-19 10:10:49.000000000 +0200
@@ -1,7 +1,7 @@
module github.com/junegunn/fzf
require (
- github.com/charlievieth/fastwalk v1.0.7-0.20240703190418-87029d931815
+ github.com/charlievieth/fastwalk v1.0.8
github.com/gdamore/tcell/v2 v2.7.4
github.com/mattn/go-isatty v0.0.20
github.com/mattn/go-shellwords v1.0.12
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fzf-0.54.0/go.sum new/fzf-0.54.1/go.sum
--- old/fzf-0.54.0/go.sum 2024-07-08 15:51:48.000000000 +0200
+++ new/fzf-0.54.1/go.sum 2024-07-19 10:10:49.000000000 +0200
@@ -1,5 +1,5 @@
-github.com/charlievieth/fastwalk v1.0.7-0.20240703190418-87029d931815 h1:4PRbYm9OMgH0bcdZZqMXA/AoOvpGy4l0H6g9Au/kgGA=
-github.com/charlievieth/fastwalk v1.0.7-0.20240703190418-87029d931815/go.mod h1:rV19+IF9Y2TYQNy4MqEk5M/spNHjKsA0i71yrsv2p4E=
+github.com/charlievieth/fastwalk v1.0.8 h1:uaoH6cAKSk73aK7aKXqs0+bL+J3Txzd3NGH8tRXgHko=
+github.com/charlievieth/fastwalk v1.0.8/go.mod h1:yGy1zbxog41ZVMcKA/i8ojXLFsuayX5VvwhQVoj9PBI=
github.com/gdamore/encoding v1.0.0 h1:+7OoQ1Bc6eTm5niUzBa0Ctsh6JbMW6Ra+YNuAtDBdko=
github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg=
github.com/gdamore/tcell/v2 v2.7.4 h1:sg6/UnTM9jGpZU+oFYAsDahfchWAFW8Xx2yFinNSAYU=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fzf-0.54.0/install new/fzf-0.54.1/install
--- old/fzf-0.54.0/install 2024-07-08 15:51:48.000000000 +0200
+++ new/fzf-0.54.1/install 2024-07-19 10:10:49.000000000 +0200
@@ -2,7 +2,7 @@
set -u
-version=0.54.0
+version=0.54.1
auto_completion=
key_bindings=
update_config=2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fzf-0.54.0/install.ps1 new/fzf-0.54.1/install.ps1
--- old/fzf-0.54.0/install.ps1 2024-07-08 15:51:48.000000000 +0200
+++ new/fzf-0.54.1/install.ps1 2024-07-19 10:10:49.000000000 +0200
@@ -1,4 +1,4 @@
-$version="0.54.0"
+$version="0.54.1"
$fzf_base=Split-Path -Parent $MyInvocation.MyCommand.Definition
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fzf-0.54.0/man/man1/fzf-tmux.1 new/fzf-0.54.1/man/man1/fzf-tmux.1
--- old/fzf-0.54.0/man/man1/fzf-tmux.1 2024-07-08 15:51:48.000000000 +0200
+++ new/fzf-0.54.1/man/man1/fzf-tmux.1 2024-07-19 10:10:49.000000000 +0200
@@ -21,7 +21,7 @@
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
..
-.TH fzf\-tmux 1 "Jul 2024" "fzf 0.54.0" "fzf\-tmux - open fzf in tmux split pane"
+.TH fzf\-tmux 1 "Jul 2024" "fzf 0.54.1" "fzf\-tmux - open fzf in tmux split pane"
.SH NAME
fzf\-tmux - open fzf in tmux split pane
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fzf-0.54.0/man/man1/fzf.1 new/fzf-0.54.1/man/man1/fzf.1
--- old/fzf-0.54.0/man/man1/fzf.1 2024-07-08 15:51:48.000000000 +0200
+++ new/fzf-0.54.1/man/man1/fzf.1 2024-07-19 10:10:49.000000000 +0200
@@ -21,7 +21,7 @@
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
..
-.TH fzf 1 "Jul 2024" "fzf 0.54.0" "fzf - a command-line fuzzy finder"
+.TH fzf 1 "Jul 2024" "fzf 0.54.1" "fzf - a command-line fuzzy finder"
.SH NAME
fzf - a command-line fuzzy finder
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fzf-0.54.0/shell/key-bindings.fish new/fzf-0.54.1/shell/key-bindings.fish
--- old/fzf-0.54.0/shell/key-bindings.fish 2024-07-08 15:51:48.000000000 +0200
+++ new/fzf-0.54.1/shell/key-bindings.fish 2024-07-19 10:10:49.000000000 +0200
@@ -104,7 +104,7 @@
eval (__fzfcmd)' +m --query "'$fzf_query'"' | read -l result
if [ -n "$result" ]
- builtin cd -- $result
+ cd -- $result
# Remove last token from commandline.
commandline -t ""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fzf-0.54.0/src/reader.go new/fzf-0.54.1/src/reader.go
--- old/fzf-0.54.0/src/reader.go 2024-07-08 15:51:48.000000000 +0200
+++ new/fzf-0.54.1/src/reader.go 2024-07-19 10:10:49.000000000 +0200
@@ -253,6 +253,7 @@
Follow: opts.follow,
// Use forward slashes when running a Windows binary under WSL or MSYS
ToSlash: fastwalk.DefaultToSlash(),
+ Sort: fastwalk.SortFilesFirst,
}
fn := func(path string, de os.DirEntry, err error) error {
if err != nil {
++++++ vendor.tar.zst ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/charlievieth/fastwalk/Makefile new/vendor/github.com/charlievieth/fastwalk/Makefile
--- old/vendor/github.com/charlievieth/fastwalk/Makefile 2024-07-08 16:14:30.000000000 +0200
+++ new/vendor/github.com/charlievieth/fastwalk/Makefile 2024-07-20 16:16:46.000000000 +0200
@@ -47,7 +47,9 @@
.PHONY: test_build_wasip1_wasm
test_build_wasip1_wasm:
- GOOS=wasip1 GOARCH=wasm go test -c -o /dev/null
+ @# Ignore versions before 1.21
+ go version | grep -qE 'go1\.(20|1[0-9])' || \
+ GOOS=wasip1 GOARCH=wasm go test -c -o /dev/null
.PHONY: test_build_aix_ppc64
test_build_aix_ppc64:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/charlievieth/fastwalk/adapters.go new/vendor/github.com/charlievieth/fastwalk/adapters.go
--- old/vendor/github.com/charlievieth/fastwalk/adapters.go 2024-07-08 16:14:30.000000000 +0200
+++ new/vendor/github.com/charlievieth/fastwalk/adapters.go 2024-07-20 16:16:46.000000000 +0200
@@ -18,18 +18,17 @@
return false
}
-// IgnoreDuplicateDirs wraps fs.WalkDirFunc walkFn to make it follow symbolic
+// IgnoreDuplicateDirs wraps [fs.WalkDirFunc] walkFn to make it follow symbolic
// links and ignore duplicate directories (if a symlink points to a directory
// that has already been traversed it is skipped). The walkFn is called for
// for skipped directories, but the directory is not traversed (this is
// required for error handling).
//
-// The Config.Follow setting has no effect on the behavior of Walk when
+// The Follow [Config] setting has no effect on the behavior of Walk when
// this wrapper is used.
//
-// In most use cases, the returned fs.WalkDirFunc should not be reused between
-// in another call to Walk. If it is reused, any previously visited file will
-// be skipped.
+// In most use cases, the returned [fs.WalkDirFunc] should not be reused.
+// If it is reused, any previously visited file will be skipped.
//
// NOTE: The order of traversal is undefined. Given an "example" directory
// like the one below where "dir" is a directory and "smydir1" and "smydir2"
@@ -68,9 +67,8 @@
// files are ignored. If a symlink resolves to a file that has already been
// visited it will be skipped.
//
-// In most use cases, the returned fs.WalkDirFunc should not be reused between
-// in another call to Walk. If it is reused, any previously visited file will
-// be skipped.
+// In most use cases, the returned [fs.WalkDirFunc] should not be reused.
+// If it is reused, any previously visited file will be skipped.
//
// This can significantly slow Walk as os.Stat() is called for each path
// (on Windows, os.Stat() is only needed for symlinks).
@@ -92,8 +90,8 @@
}
}
-// IgnorePermissionErrors wraps walkFn so that permission errors are ignored.
-// The returned fs.WalkDirFunc may be reused.
+// IgnorePermissionErrors wraps walkFn so that [fs.ErrPermission] permission
+// errors are ignored. The returned [fs.WalkDirFunc] may be reused.
func IgnorePermissionErrors(walkFn fs.WalkDirFunc) fs.WalkDirFunc {
return func(path string, d fs.DirEntry, err error) error {
if err != nil && os.IsPermission(err) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/charlievieth/fastwalk/dirent.go new/vendor/github.com/charlievieth/fastwalk/dirent.go
--- old/vendor/github.com/charlievieth/fastwalk/dirent.go 2024-07-08 16:14:30.000000000 +0200
+++ new/vendor/github.com/charlievieth/fastwalk/dirent.go 2024-07-20 16:16:46.000000000 +0200
@@ -31,11 +31,16 @@
return fi
}
-// StatDirEntry returns the fs.FileInfo for the file or subdirectory described
-// by the entry. If the entry is a symbolic link, StatDirEntry returns the
-// fs.FileInfo for the file the line references (os.Stat).
-// If fs.DirEntry de is a fastwalk.DirEntry it's Stat() method is used and the
-// returned fs.FileInfo may be a previously cached result.
+// StatDirEntry returns a [fs.FileInfo] describing the named file ([os.Stat]).
+// If de is a [fastwalk.DirEntry] its Stat method is used and the returned
+// FileInfo may be cached from a prior call to Stat. If a cached result is not
+// desired, users should just call [os.Stat] directly.
+//
+// This is a helper function for calling Stat on the DirEntry passed to the
+// walkFn argument to [Walk].
+//
+// The path argument is only used if de is not of type [fastwalk.DirEntry].
+// Therefore, de should be the DirEntry describing path.
func StatDirEntry(path string, de fs.DirEntry) (fs.FileInfo, error) {
if de == nil {
return nil, &os.PathError{Op: "stat", Path: path, Err: syscall.EINVAL}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/charlievieth/fastwalk/dirent_portable.go new/vendor/github.com/charlievieth/fastwalk/dirent_portable.go
--- old/vendor/github.com/charlievieth/fastwalk/dirent_portable.go 2024-07-08 16:14:30.000000000 +0200
+++ new/vendor/github.com/charlievieth/fastwalk/dirent_portable.go 2024-07-20 16:16:46.000000000 +0200
@@ -1,37 +1,128 @@
//go:build !darwin && !(aix || dragonfly || freebsd || (js && wasm) || linux || netbsd || openbsd || solaris)
+// TODO: add a "portable_dirent" build tag so that we can test this
+// on non-Windows platforms
+
package fastwalk
import (
"io/fs"
"os"
+ "sort"
+ "sync"
+
+ "github.com/charlievieth/fastwalk/internal/fmtdirent"
)
+var _ DirEntry = (*portableDirent)(nil)
+
type portableDirent struct {
fs.DirEntry
- path string
- stat *fileInfo
+ parent string
+ stat *fileInfo
+}
+
+func (d *portableDirent) String() string {
+ return fmtdirent.FormatDirEntry(d)
}
-// TODO: cache the result of Stat
func (d *portableDirent) Stat() (fs.FileInfo, error) {
if d.DirEntry.Type()&os.ModeSymlink == 0 {
return d.DirEntry.Info()
}
stat := loadFileInfo(&d.stat)
stat.once.Do(func() {
- stat.FileInfo, stat.err = os.Stat(d.path)
+ stat.FileInfo, stat.err = os.Stat(d.parent + string(os.PathSeparator) + d.Name())
})
return stat.FileInfo, stat.err
}
-func newDirEntry(dirName string, info fs.DirEntry) fs.DirEntry {
+func newDirEntry(dirName string, info fs.DirEntry) DirEntry {
return &portableDirent{
DirEntry: info,
- path: dirName + string(os.PathSeparator) + info.Name(),
+ parent: dirName,
}
}
-func fileInfoToDirEntry(dirname string, fi fs.FileInfo) fs.DirEntry {
+func fileInfoToDirEntry(dirname string, fi fs.FileInfo) DirEntry {
return newDirEntry(dirname, fs.FileInfoToDirEntry(fi))
}
+
+var direntSlicePool = sync.Pool{
+ New: func() any {
+ a := make([]DirEntry, 0, 32)
+ return &a
+ },
+}
+
+func putDirentSlice(p *[]DirEntry) {
+ // max is half as many as Unix because twice the size
+ if p != nil && cap(*p) <= 16*1024 {
+ a := *p
+ for i := range a {
+ a[i] = nil
+ }
+ *p = a[:0]
+ direntSlicePool.Put(p)
+ }
+}
+
+func sortDirents(mode SortMode, dents []DirEntry) {
+ if len(dents) <= 1 {
+ return
+ }
+ switch mode {
+ case SortLexical:
+ sort.Slice(dents, func(i, j int) bool {
+ return dents[i].Name() < dents[j].Name()
+ })
+ case SortFilesFirst:
+ sort.Slice(dents, func(i, j int) bool {
+ d1 := dents[i]
+ d2 := dents[j]
+ r1 := d1.Type().IsRegular()
+ r2 := d2.Type().IsRegular()
+ switch {
+ case r1 && !r2:
+ return true
+ case !r1 && r2:
+ return false
+ case !r1 && !r2:
+ // Both are not regular files: sort directories last
+ dd1 := d1.Type().IsDir()
+ dd2 := d2.Type().IsDir()
+ switch {
+ case !dd1 && dd2:
+ return true
+ case dd1 && !dd2:
+ return false
+ }
+ }
+ return d1.Name() < d2.Name()
+ })
+ case SortDirsFirst:
+ sort.Slice(dents, func(i, j int) bool {
+ d1 := dents[i]
+ d2 := dents[j]
+ dd1 := d1.Type().IsDir()
+ dd2 := d2.Type().IsDir()
+ switch {
+ case dd1 && !dd2:
+ return true
+ case !dd1 && dd2:
+ return false
+ case !dd1 && !dd2:
+ // Both are not directories: sort regular files first
+ r1 := d1.Type().IsRegular()
+ r2 := d2.Type().IsRegular()
+ switch {
+ case r1 && !r2:
+ return true
+ case !r1 && r2:
+ return false
+ }
+ }
+ return d1.Name() < d2.Name()
+ })
+ }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/charlievieth/fastwalk/dirent_unix.go new/vendor/github.com/charlievieth/fastwalk/dirent_unix.go
--- old/vendor/github.com/charlievieth/fastwalk/dirent_unix.go 2024-07-08 16:14:30.000000000 +0200
+++ new/vendor/github.com/charlievieth/fastwalk/dirent_unix.go 2024-07-20 16:16:46.000000000 +0200
@@ -5,19 +5,24 @@
import (
"io/fs"
"os"
+ "sort"
+ "sync"
+
+ "github.com/charlievieth/fastwalk/internal/fmtdirent"
)
type unixDirent struct {
parent string
name string
- typ os.FileMode
+ typ fs.FileMode
info *fileInfo
stat *fileInfo
}
func (d *unixDirent) Name() string { return d.name }
func (d *unixDirent) IsDir() bool { return d.typ.IsDir() }
-func (d *unixDirent) Type() os.FileMode { return d.typ }
+func (d *unixDirent) Type() fs.FileMode { return d.typ }
+func (d *unixDirent) String() string { return fmtdirent.FormatDirEntry(d) }
func (d *unixDirent) Info() (fs.FileInfo, error) {
info := loadFileInfo(&d.info)
@@ -38,7 +43,7 @@
return stat.FileInfo, stat.err
}
-func newUnixDirent(parent, name string, typ os.FileMode) *unixDirent {
+func newUnixDirent(parent, name string, typ fs.FileMode) *unixDirent {
return &unixDirent{
parent: parent,
name: name,
@@ -46,7 +51,7 @@
}
}
-func fileInfoToDirEntry(dirname string, fi fs.FileInfo) fs.DirEntry {
+func fileInfoToDirEntry(dirname string, fi fs.FileInfo) DirEntry {
info := &fileInfo{
FileInfo: fi,
}
@@ -58,3 +63,81 @@
info: info,
}
}
+
+var direntSlicePool = sync.Pool{
+ New: func() any {
+ a := make([]*unixDirent, 0, 32)
+ return &a
+ },
+}
+
+func putDirentSlice(p *[]*unixDirent) {
+ if p != nil && cap(*p) <= 32*1024 /* 256Kb */ {
+ a := *p
+ for i := range a {
+ a[i] = nil
+ }
+ *p = a[:0]
+ direntSlicePool.Put(p)
+ }
+}
+
+func sortDirents(mode SortMode, dents []*unixDirent) {
+ if len(dents) <= 1 {
+ return
+ }
+ switch mode {
+ case SortLexical:
+ sort.Slice(dents, func(i, j int) bool {
+ return dents[i].name < dents[j].name
+ })
+ case SortFilesFirst:
+ sort.Slice(dents, func(i, j int) bool {
+ d1 := dents[i]
+ d2 := dents[j]
+ r1 := d1.typ.IsRegular()
+ r2 := d2.typ.IsRegular()
+ switch {
+ case r1 && !r2:
+ return true
+ case !r1 && r2:
+ return false
+ case !r1 && !r2:
+ // Both are not regular files: sort directories last
+ dd1 := d1.typ.IsDir()
+ dd2 := d2.typ.IsDir()
+ switch {
+ case !dd1 && dd2:
+ return true
+ case dd1 && !dd2:
+ return false
+ }
+ }
+ return d1.name < d2.name
+ })
+ case SortDirsFirst:
+ sort.Slice(dents, func(i, j int) bool {
+ d1 := dents[i]
+ d2 := dents[j]
+ dd1 := d1.typ.IsDir()
+ dd2 := d2.typ.IsDir()
+ switch {
+ case dd1 && !dd2:
+ return true
+ case !dd1 && dd2:
+ return false
+ case !dd1 && !dd2:
+ // Both are not directories: sort regular files first
+ r1 := d1.typ.IsRegular()
+ r2 := d2.typ.IsRegular()
+ switch {
+ case r1 && !r2:
+ return true
+ case !r1 && r2:
+ return false
+ }
+ }
+ return d1.name < d2.name
+ })
+ }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/charlievieth/fastwalk/entry_filter_unix.go new/vendor/github.com/charlievieth/fastwalk/entry_filter_unix.go
--- old/vendor/github.com/charlievieth/fastwalk/entry_filter_unix.go 2024-07-08 16:14:30.000000000 +0200
+++ new/vendor/github.com/charlievieth/fastwalk/entry_filter_unix.go 2024-07-20 16:16:46.000000000 +0200
@@ -48,7 +48,7 @@
// TODO: this name is confusing and should be fixed
-// Entry returns if path and fs.DirEntry have been seen before.
+// Entry returns if path and [fs.DirEntry] have been seen before.
func (e *EntryFilter) Entry(path string, de fs.DirEntry) (seen bool) {
fi, err := StatDirEntry(path, de)
if err != nil {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/charlievieth/fastwalk/fastwalk.go new/vendor/github.com/charlievieth/fastwalk/fastwalk.go
--- old/vendor/github.com/charlievieth/fastwalk/fastwalk.go 2024-07-08 16:14:30.000000000 +0200
+++ new/vendor/github.com/charlievieth/fastwalk/fastwalk.go 2024-07-20 16:16:46.000000000 +0200
@@ -1,5 +1,5 @@
-// Package fastwalk provides a faster version of filepath.Walk for file system
-// scanning tools.
+// Package fastwalk provides a faster version of [filepath.WalkDir] for file
+// system scanning tools.
package fastwalk
/*
@@ -45,8 +45,9 @@
"sync"
)
-// ErrTraverseLink is used as a return value from WalkFuncs to indicate that the
-// symlink named in the call may be traversed.
+// ErrTraverseLink is used as a return value from WalkDirFuncs to indicate that
+// the symlink named in the call may be traversed. This error is ignored if
+// the Follow [Config] option is true.
var ErrTraverseLink = errors.New("fastwalk: traverse symlink, assuming target is a directory")
// ErrSkipFiles is a used as a return value from WalkFuncs to indicate that the
@@ -59,8 +60,10 @@
// as an error by any function.
var SkipDir = fs.SkipDir
+// TODO: add fs.SkipAll
+
// DefaultNumWorkers returns the default number of worker goroutines to use in
-// [fastwalk.Walk] and is the value of [runtime.GOMAXPROCS](-1) clamped to a range
+// [Walk] and is the value of [runtime.GOMAXPROCS](-1) clamped to a range
// of 4 to 32 except on Darwin where it is either 4 (8 cores or less) or 6
// (more than 8 cores). This is because Walk / IO performance on Darwin
// degrades with more concurrency.
@@ -88,44 +91,163 @@
}
// DefaultToSlash returns true if this is a Go program compiled for Windows
-// running in an environment ([WSL] or [MSYS/MSYS2]) that uses forward slashes
-// as the path separator instead of the native backslash.
-// On all other platforms this is a no-op and returns false since the native
-// path separator is a forward slash and does not need to be converted.
-//
-// This check does not apply to programs compiled in [WSL] [MSYS/MSYS2] or for
-// Linux (GOOS=linux). It only applies to Go programs compiled for Windows
-// (GOOS=windows) that are executed from [WSL] or [MSYS/MSYS2].
+// running in an environment ([MSYS/MSYS2] or [Git for Windows]) that uses
+// forward slashes as the path separator instead of the native backslash.
//
-// To detect if we're running in [MSYS/MSYS2] we check that "MSYSTEM" environment
-// variable is either "MINGW64", "MINGW32", or "MSYS".
+// On non-Windows OSes this is a no-op and always returns false.
//
-// The following heuristics are used to detect if we're running in [WSL]:
+// To detect if we're running in [MSYS/MSYS2] we check if the "MSYSTEM"
+// environment variable exists.
//
-// - Existence of "/proc/sys/fs/binfmt_misc/WSLInterop".
-// - If the "WSL_DISTRO_NAME" environment variable is set.
-// - If "/proc/version" contains either "Microsoft" or "microsoft".
+// DefaultToSlash does not detect if this is a Windows executable running in [WSL].
+// Instead, users should (ideally) use programs compiled for Linux in WSL.
//
-// The result of the WSL check is cached for performance reasons.
+// See: [github.com/junegunn/fzf/issues/3859]
//
-// See: https://github.com/junegunn/fzf/issues/3859
+// NOTE: The reason that we do not check if we're running in WSL is that the
+// test was inconsistent since it depended on the working directory (it seems
+// that "/proc" cannot be accessed when programs are ran from a mounted Windows
+// directory) and what environment variables are shared between WSL and Win32
+// (this requires explicit [configuration]).
//
-// [WSL]: https://learn.microsoft.com/en-us/windows/wsl/about
// [MSYS/MSYS2]: https://www.msys2.org/
+// [WSL]: https://learn.microsoft.com/en-us/windows/wsl/about
+// [Git for Windows]: https://gitforwindows.org/
+// [github.com/junegunn/fzf/issues/3859] https://github.com/junegunn/fzf/issues/3859
+// [configuration]: https://devblogs.microsoft.com/commandline/share-environment-vars-between-w…
func DefaultToSlash() bool {
if runtime.GOOS != "windows" {
return false
}
- return useForwardSlash()
+ // Previously this function attempted to determine if this is a Windows exe
+ // running in WSL. The check was:
+ //
+ // * File /proc/sys/fs/binfmt_misc/WSLInterop exist
+ // * Env var "WSL_DISTRO_NAME" exits
+ // * /proc/version contains "Microsoft" or "microsoft"
+ //
+ // Below are my notes explaining why that check was flaky:
+ //
+ // NOTE: This appears to fail when ran from WSL when the current working
+ // directory is a Windows directory that is mounted ("/mnt/c/...") since
+ // "/proc" is not accessible. It works if ran from a directory that is not
+ // mounted. Additionally, the "WSL_DISTRO_NAME" environment variable is not
+ // set when ran from WSL.
+ //
+ // I'm not sure what causes this, but it would be great to find a solution.
+ // My guess is that when ran from a Windows directory it uses the native
+ // Windows path syscalls (for example os.Getwd reports the canonical Windows
+ // path when a Go exe is ran from a mounted directory in WSL, but reports the
+ // WSL path when ran from outside a mounted Windows directory).
+ //
+ // That said, the real solution here is to use programs compiled for Linux
+ // when running in WSL.
+ _, ok := os.LookupEnv("MSYSTEM")
+ return ok
+}
+
+// SortMode determines the order that a directory's entries are visited by
+// [Walk]. Sorting applies only at the directory level and since we process
+// directories in parallel the order in which all files are visited is still
+// non-deterministic.
+//
+// Sorting is mostly useful for programs that print the output of Walk since
+// it makes it slightly more ordered compared to the default directory order.
+// Sorting may also help some programs that wish to change the order in which
+// a directory is processed by either processing all files first or enqueuing
+// all directories before processing files.
+//
+// All lexical sorting is case-sensitive.
+//
+// The overhead of sorting is minimal compared to the syscalls needed to
+// walk directories. The impact on performance due to changing the order
+// in which directory entries are processed will be dependent on the workload
+// and the structure of the file tree being visited (it might also have no
+// impact).
+type SortMode uint32
+
+const (
+ // Perform no sorting. Files will be visited in directory order.
+ // This is the default.
+ SortNone SortMode = iota
+
+ // Directory entries are sorted by name before being visited.
+ SortLexical
+
+ // Sort the directory entries so that regular files and non-directories
+ // (e.g. symbolic links) are visited before directories. Within each
+ // group (regular files, other files, directories) the entries are sorted
+ // by name.
+ //
+ // This is likely the mode that programs that print the output of Walk
+ // want to use. Since by processing all files before enqueuing
+ // sub-directories the output is slightly more grouped.
+ //
+ // Example order:
+ // - file: "a.txt"
+ // - file: "b.txt"
+ // - link: "a.link"
+ // - link: "b.link"
+ // - dir: "d1/"
+ // - dir: "d2/"
+ //
+ SortFilesFirst
+
+ // Sort the directory entries so that directories are visited first, then
+ // regular files are visited, and finally everything else is visited
+ // (e.g. symbolic links). Within each group (directories, regular files,
+ // other files) the entries are sorted by name.
+ //
+ // This mode is might be useful at preventing other walk goroutines from
+ // stalling due to lack of work since it immediately enqueues all of a
+ // directory's sub-directories for processing. The impact on performance
+ // will be dependent on the workload and the structure of the file tree
+ // being visited - it might also have no (or even a negative) impact on
+ // performance so testing/benchmarking is recommend.
+ //
+ // An example workload that might cause this is: processing one directory
+ // takes a long time, that directory has sub-directories we want to walk,
+ // while processing that directory all other Walk goroutines have finished
+ // processing their directories, those goroutines are now stalled waiting
+ // for more work (waiting on the one running goroutine to enqueue its
+ // sub-directories for processing).
+ //
+ // This might also be beneficial if processing files is expensive.
+ //
+ // Example order:
+ // - dir: "d1/"
+ // - dir: "d2/"
+ // - file: "a.txt"
+ // - file: "b.txt"
+ // - link: "a.link"
+ // - link: "b.link"
+ //
+ SortDirsFirst
+)
+
+var sortModeStrs = [...]string{
+ SortNone: "None",
+ SortLexical: "Lexical",
+ SortDirsFirst: "DirsFirst",
+ SortFilesFirst: "FilesFirst",
+}
+
+func (s SortMode) String() string {
+ if 0 <= int(s) && int(s) < len(sortModeStrs) {
+ return sortModeStrs[s]
+ }
+ return "SortMode(" + itoa(uint64(s)) + ")"
}
-// DefaultConfig is the default Config used when none is supplied.
+// DefaultConfig is the default [Config] used when none is supplied.
var DefaultConfig = Config{
Follow: false,
ToSlash: DefaultToSlash(),
NumWorkers: DefaultNumWorkers(),
+ Sort: SortNone,
}
+// A Config controls the behavior of [Walk].
type Config struct {
// TODO: do we want to pass a sentinel error to WalkFunc if
// a symlink loop is detected?
@@ -154,56 +276,105 @@
// See FZF issue: https://github.com/junegunn/fzf/issues/3859
ToSlash bool
+ // Sort a directory's entries by SortMode before visiting them.
+ // The order that files are visited is deterministic only at the directory
+ // level, but not generally deterministic because we process directories
+ // in parallel. The performance impact of sorting entries is generally
+ // negligible compared to the syscalls required to read directories.
+ //
+ // This option mostly exists for programs that print the output of Walk
+ // (like FZF) since it provides some order and thus makes the output much
+ // nicer compared to the default directory order, which is basically random.
+ Sort SortMode
+
// Number of parallel workers to use. If NumWorkers if ≤ 0 then
- // [DefaultNumWorkers] is used.
+ // DefaultNumWorkers is used.
NumWorkers int
}
-// A DirEntry extends the fs.DirEntry interface to add a Stat() method
-// that returns the result of calling os.Stat() on the underlying file.
+// Copy returns a copy of c. If c is nil an empty [Config] is returned.
+func (c *Config) Copy() *Config {
+ dupe := new(Config)
+ if c != nil {
+ *dupe = *c
+ }
+ return dupe
+}
+
+// A DirEntry extends the [fs.DirEntry] interface to add a Stat() method
+// that returns the result of calling [os.Stat] on the underlying file.
// The results of Info() and Stat() are cached.
//
-// The fs.DirEntry argument passed to the fs.WalkDirFunc by Walk is
-// always a DirEntry. The only exception is the root directory with
-// with Walk is called.
+// The [fs.DirEntry] argument passed to the [fs.WalkDirFunc] by [Walk] is
+// always a DirEntry.
type DirEntry interface {
fs.DirEntry
- // Stat returns the FileInfo for the file or subdirectory described
+ // Stat returns the fs.FileInfo for the file or subdirectory described
// by the entry. The returned FileInfo may be from the time of the
- // original directory read or from the time of the call to Stat.
+ // original directory read or from the time of the call to os.Stat.
// If the entry denotes a symbolic link, Stat reports the information
// about the target itself, not the link.
Stat() (fs.FileInfo, error)
}
-// Walk is a faster implementation of filepath.Walk.
-//
-// filepath.Walk's design necessarily calls os.Lstat on each file, even if
-// the caller needs less info. Many tools need only the type of each file.
-// On some platforms, this information is provided directly by the readdir
-// system call, avoiding the need to stat each file individually.
-// fastwalk_unix.go contains a fork of the syscall routines.
+// Walk is a faster implementation of [filepath.WalkDir] that walks the file
+// tree rooted at root in parallel, calling walkFn for each file or directory
+// in the tree, including root.
+//
+// All errors that arise visiting files and directories are filtered by walkFn
+// see the [fs.WalkDirFunc] documentation for details.
+// The [IgnorePermissionErrors] adapter is provided to handle to common case of
+// ignoring [fs.ErrPermission] errors.
+//
+// By default files are walked in directory order, which makes the output
+// non-deterministic. The Sort [Config] option can be used to control the order
+// in which directory entries are visited, but since we walk the file tree in
+// parallel the output is still non-deterministic (it's just slightly more
+// sorted).
+//
+// When a symbolic link is encountered, by default Walk will not follow it
+// unless walkFn returns [ErrTraverseLink] or the Follow [Config] setting is
+// true. See below for a more detailed explanation.
+//
+// Walk calls walkFn with paths that use the separator character appropriate
+// for the operating system unless the ToSlash [Config] setting is true which
+// will cause all paths to be joined with a forward slash.
+//
+// If walkFn returns the [SkipDir] sentinel error, the directory is skipped.
+// If walkFn returns the [ErrSkipFiles] sentinel error, the callback will not
+// be called for any other files in the current directory.
//
-// See golang.org/issue/16399
+// Unlike [filepath.WalkDir]:
//
-// Walk walks the file tree rooted at root, calling walkFn for each file or
-// directory in the tree, including root.
+// - Multiple goroutines stat the filesystem concurrently. The provided
+// walkFn must be safe for concurrent use.
//
-// If walkFn returns filepath.SkipDir, the directory is skipped.
+// - The order that directories are visited is non-deterministic.
//
-// Unlike filepath.WalkDir:
// - File stat calls must be done by the user and should be done via
-// the DirEntry argument to walkFn since it caches the results of
-// Stat and Lstat.
-// - The fs.DirEntry argument is always a fastwalk.DirEntry, which has
-// a Stat() method that returns the result of calling os.Stat() on the
-// file. The result of Stat() may be cached.
-// - Multiple goroutines stat the filesystem concurrently. The provided
-// walkFn must be safe for concurrent use.
-// - Walk can follow symlinks if walkFn returns the ErrTraverseLink
-// sentinel error. It is the walkFn's responsibility to prevent
-// Walk from going into symlink cycles.
+// the [DirEntry] argument to walkFn. The [DirEntry] caches the result
+// of both Info() and Stat(). The Stat() method is a fastwalk specific
+// extension and can be called by casting the [fs.DirEntry] to a
+// [fastwalk.DirEntry] or via the [StatDirEntry] helper. The [fs.DirEntry]
+// argument to walkFn will always be convertible to a [fastwalk.DirEntry].
+//
+// - The [fs.DirEntry] argument is always a [fastwalk.DirEntry], which has
+// a Stat() method that returns the result of calling [os.Stat] on the
+// file. The result of Stat() and Info() are cached. The [StatDirEntry]
+// helper can be used to call Stat() on the returned [fastwalk.DirEntry].
+//
+// - Walk can follow symlinks in two ways: the fist, and simplest, is to
+// set Follow [Config] option to true - this will cause Walk to follow
+// symlinks and detect/ignore any symlink loops; the second, is for walkFn
+// to return the sentinel [ErrTraverseLink] error.
+// When using [ErrTraverseLink] to follow symlinks it is walkFn's
+// responsibility to prevent Walk from going into symlink cycles.
+// By default Walk does not follow symbolic links.
+//
+// - When walking a directory, walkFn will be called for each non-directory
+// entry and directories will be enqueued and visited at a later time or
+// by another goroutine.
func Walk(conf *Config, root string, walkFn fs.WalkDirFunc) error {
fi, err := os.Stat(root)
if err != nil {
@@ -229,7 +400,10 @@
}
w := &walker{
- fn: walkFn,
+ fn: walkFn,
+ // TODO: Increase the size of enqueuec so that we don't stall
+ // while processing a directory. Increasing the size of workc
+ // doesn't help as much (needs more testing).
enqueuec: make(chan walkItem, numWorkers), // buffered for performance
workc: make(chan walkItem, numWorkers), // buffered for performance
donec: make(chan struct{}),
@@ -237,8 +411,10 @@
// buffered for correctness & not leaking goroutines:
resc: make(chan error, numWorkers),
- follow: conf.Follow,
- toSlash: conf.ToSlash,
+ // TODO: we should just pass the Config
+ follow: conf.Follow,
+ toSlash: conf.ToSlash,
+ sortMode: conf.Sort,
}
if w.follow {
w.ignoredDirs = append(w.ignoredDirs, fi)
@@ -252,6 +428,8 @@
}
root = cleanRootPath(root)
+ // NOTE: in BenchmarkFastWalk the size of todo averages around
+ // 170 and can be in the ~250 range at max.
todo := []walkItem{{dir: root, info: fileInfoToDirEntry(filepath.Dir(root), fi)}}
out := 0
for {
@@ -267,6 +445,8 @@
todo = todo[:len(todo)-1]
out++
case it := <-w.enqueuec:
+ // TODO: consider appending to todo directly and using a
+ // mutext this might help with contention around select
todo = append(todo, it)
case err := <-w.resc:
out--
@@ -317,14 +497,15 @@
enqueuec chan walkItem // from workers
resc chan error // from workers
- ignoredDirs []os.FileInfo
+ ignoredDirs []fs.FileInfo
follow bool
toSlash bool
+ sortMode SortMode
}
type walkItem struct {
dir string
- info fs.DirEntry
+ info DirEntry
callbackDone bool // callback already called; don't do it again
}
@@ -335,7 +516,7 @@
}
}
-func (w *walker) shouldSkipDir(fi os.FileInfo) bool {
+func (w *walker) shouldSkipDir(fi fs.FileInfo) bool {
for _, ignored := range w.ignoredDirs {
if os.SameFile(ignored, fi) {
return true
@@ -344,9 +525,8 @@
return false
}
-func (w *walker) shouldTraverse(path string, de fs.DirEntry) bool {
- // TODO: do we need to use filepath.EvalSymlinks() here?
- ts, err := StatDirEntry(path, de)
+func (w *walker) shouldTraverse(path string, de DirEntry) bool {
+ ts, err := de.Stat()
if err != nil {
return false
}
@@ -381,13 +561,14 @@
}
return dir + "/" + base
}
+ // TODO: handle the above case of the argument to Walk being "/"
if w.toSlash {
return dir + "/" + base
}
return dir + string(os.PathSeparator) + base
}
-func (w *walker) onDirEnt(dirName, baseName string, de fs.DirEntry) error {
+func (w *walker) onDirEnt(dirName, baseName string, de DirEntry) error {
joined := w.joinPaths(dirName, baseName)
typ := de.Type()
if typ == os.ModeDir {
@@ -418,7 +599,7 @@
return err
}
-func (w *walker) walk(root string, info fs.DirEntry, runUserCallback bool) error {
+func (w *walker) walk(root string, info DirEntry, runUserCallback bool) error {
if runUserCallback {
err := w.fn(root, info, nil)
if err == filepath.SkipDir {
@@ -429,7 +610,7 @@
}
}
- err := readDir(root, w.onDirEnt)
+ err := w.readDir(root)
if err != nil {
// Second call, to report ReadDir error.
return w.fn(root, info, err)
@@ -448,3 +629,17 @@
}
return root
}
+
+// Avoid the dependency on strconv since it pulls in a large number of other
+// dependencies which bloats the size of this package.
+func itoa(val uint64) string {
+ buf := make([]byte, 20)
+ i := len(buf) - 1
+ for val >= 10 {
+ buf[i] = byte(val%10 + '0')
+ i--
+ val /= 10
+ }
+ buf[i] = byte(val + '0')
+ return string(buf[i:])
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/charlievieth/fastwalk/fastwalk_darwin.go new/vendor/github.com/charlievieth/fastwalk/fastwalk_darwin.go
--- old/vendor/github.com/charlievieth/fastwalk/fastwalk_darwin.go 2024-07-08 16:14:30.000000000 +0200
+++ new/vendor/github.com/charlievieth/fastwalk/fastwalk_darwin.go 2024-07-20 16:16:46.000000000 +0200
@@ -3,16 +3,12 @@
package fastwalk
import (
- "io/fs"
"os"
"syscall"
"unsafe"
)
-//sys closedir(dir uintptr) (err error)
-//sys readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno)
-
-func readDir(dirName string, fn func(dirName, entName string, de fs.DirEntry) error) (err error) {
+func (w *walker) readDir(dirName string) (err error) {
var fd uintptr
for {
fd, err = opendir(dirName)
@@ -25,6 +21,12 @@
}
defer closedir(fd) //nolint:errcheck
+ var p *[]*unixDirent
+ if w.sortMode != SortNone {
+ p = direntSlicePool.Get().(*[]*unixDirent)
+ }
+ defer putDirentSlice(p)
+
skipFiles := false
var dirent syscall.Dirent
var entptr *syscall.Dirent
@@ -66,14 +68,36 @@
continue
}
nm := string(name)
- if err := fn(dirName, nm, newUnixDirent(dirName, nm, typ)); err != nil {
+ de := newUnixDirent(dirName, nm, typ)
+ if w.sortMode == SortNone {
+ if err := w.onDirEnt(dirName, nm, de); err != nil {
+ if err != ErrSkipFiles {
+ return err
+ }
+ skipFiles = true
+ }
+ } else {
+ *p = append(*p, de)
+ }
+ }
+ if w.sortMode == SortNone {
+ return nil
+ }
+
+ dents := *p
+ sortDirents(w.sortMode, dents)
+ for _, d := range dents {
+ d := d
+ if skipFiles && d.typ.IsRegular() {
+ continue
+ }
+ if err := w.onDirEnt(dirName, d.Name(), d); err != nil {
if err != ErrSkipFiles {
return err
}
skipFiles = true
}
}
-
return nil
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/charlievieth/fastwalk/fastwalk_portable.go new/vendor/github.com/charlievieth/fastwalk/fastwalk_portable.go
--- old/vendor/github.com/charlievieth/fastwalk/fastwalk_portable.go 2024-07-08 16:14:30.000000000 +0200
+++ new/vendor/github.com/charlievieth/fastwalk/fastwalk_portable.go 2024-07-20 16:16:46.000000000 +0200
@@ -3,7 +3,6 @@
package fastwalk
import (
- "io/fs"
"os"
)
@@ -11,7 +10,7 @@
// It does not descend into directories or follow symlinks.
// If fn returns a non-nil error, readDir returns with that error
// immediately.
-func readDir(dirName string, fn func(dirName, entName string, de fs.DirEntry) error) error {
+func (w *walker) readDir(dirName string) error {
f, err := os.Open(dirName)
if err != nil {
return err
@@ -22,6 +21,12 @@
return readErr
}
+ var p *[]DirEntry
+ if w.sortMode != SortNone {
+ p = direntSlicePool.Get().(*[]DirEntry)
+ }
+ defer putDirentSlice(p)
+
var skipFiles bool
for _, d := range des {
if skipFiles && d.Type().IsRegular() {
@@ -29,13 +34,34 @@
}
// Need to use FileMode.Type().Type() for fs.DirEntry
e := newDirEntry(dirName, d)
- if err := fn(dirName, d.Name(), e); err != nil {
+ if w.sortMode == SortNone {
+ if err := w.onDirEnt(dirName, d.Name(), e); err != nil {
+ if err != ErrSkipFiles {
+ return err
+ }
+ skipFiles = true
+ }
+ } else {
+ *p = append(*p, e)
+ }
+ }
+ if w.sortMode == SortNone {
+ return readErr
+ }
+
+ dents := *p
+ sortDirents(w.sortMode, dents)
+ for _, d := range dents {
+ d := d
+ if skipFiles && d.Type().IsRegular() {
+ continue
+ }
+ if err := w.onDirEnt(dirName, d.Name(), d); err != nil {
if err != ErrSkipFiles {
return err
}
skipFiles = true
}
}
-
return readErr
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/charlievieth/fastwalk/fastwalk_unix.go new/vendor/github.com/charlievieth/fastwalk/fastwalk_unix.go
--- old/vendor/github.com/charlievieth/fastwalk/fastwalk_unix.go 2024-07-08 16:14:30.000000000 +0200
+++ new/vendor/github.com/charlievieth/fastwalk/fastwalk_unix.go 2024-07-20 16:16:46.000000000 +0200
@@ -7,7 +7,6 @@
package fastwalk
import (
- "io/fs"
"os"
"syscall"
@@ -21,13 +20,19 @@
// value used to represent a syscall.DT_UNKNOWN Dirent.Type.
const unknownFileMode os.FileMode = ^os.FileMode(0)
-func readDir(dirName string, fn func(dirName, entName string, de fs.DirEntry) error) error {
+func (w *walker) readDir(dirName string) error {
fd, err := open(dirName, 0, 0)
if err != nil {
return &os.PathError{Op: "open", Path: dirName, Err: err}
}
defer syscall.Close(fd)
+ var p *[]*unixDirent
+ if w.sortMode != SortNone {
+ p = direntSlicePool.Get().(*[]*unixDirent)
+ }
+ defer putDirentSlice(p)
+
// The buffer must be at least a block long.
buf := make([]byte, blockSize) // stack-allocated; doesn't escape
bufp := 0 // starting read position in buf
@@ -41,7 +46,7 @@
return os.NewSyscallError("readdirent", err)
}
if nbuf <= 0 {
- return nil
+ break // exit loop
}
}
consumed, name, typ := dirent.Parse(buf[bufp:nbuf])
@@ -68,14 +73,37 @@
continue
}
de := newUnixDirent(dirName, name, typ)
- if err := fn(dirName, name, de); err != nil {
- if err == ErrSkipFiles {
- skipFiles = true
- continue
+ if w.sortMode == SortNone {
+ if err := w.onDirEnt(dirName, name, de); err != nil {
+ if err == ErrSkipFiles {
+ skipFiles = true
+ continue
+ }
+ return err
+ }
+ } else {
+ *p = append(*p, de)
+ }
+ }
+ if w.sortMode == SortNone {
+ return nil
+ }
+
+ dents := *p
+ sortDirents(w.sortMode, dents)
+ for _, d := range dents {
+ d := d
+ if skipFiles && d.typ.IsRegular() {
+ continue
+ }
+ if err := w.onDirEnt(dirName, d.Name(), d); err != nil {
+ if err != ErrSkipFiles {
+ return err
}
- return err
+ skipFiles = true
}
}
+ return nil
}
// According to https://golang.org/doc/go1.14#runtime
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/charlievieth/fastwalk/internal/fmtdirent/fmtdirent_go… new/vendor/github.com/charlievieth/fastwalk/internal/fmtdirent/fmtdirent_go…
--- old/vendor/github.com/charlievieth/fastwalk/internal/fmtdirent/fmtdirent_go… 1970-01-01 01:00:00.000000000 +0100
+++ new/vendor/github.com/charlievieth/fastwalk/internal/fmtdirent/fmtdirent_go… 2024-07-20 16:16:46.000000000 +0200
@@ -0,0 +1,31 @@
+//go:build !go1.21
+
+package fmtdirent
+
+import "io/fs"
+
+// Backport fs.FormatDirEntry from go1.21
+
+// FormatDirEntry returns a formatted version of dir for human readability.
+// Implementations of [DirEntry] can call this from a String method.
+// The outputs for a directory named subdir and a file named hello.go are:
+//
+// d subdir/
+// - hello.go
+func FormatDirEntry(dir fs.DirEntry) string {
+ name := dir.Name()
+ b := make([]byte, 0, 5+len(name))
+
+ // The Type method does not return any permission bits,
+ // so strip them from the string.
+ mode := dir.Type().String()
+ mode = mode[:len(mode)-9]
+
+ b = append(b, mode...)
+ b = append(b, ' ')
+ b = append(b, name...)
+ if dir.IsDir() {
+ b = append(b, '/')
+ }
+ return string(b)
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/charlievieth/fastwalk/internal/fmtdirent/fmtdirent_go… new/vendor/github.com/charlievieth/fastwalk/internal/fmtdirent/fmtdirent_go…
--- old/vendor/github.com/charlievieth/fastwalk/internal/fmtdirent/fmtdirent_go… 1970-01-01 01:00:00.000000000 +0100
+++ new/vendor/github.com/charlievieth/fastwalk/internal/fmtdirent/fmtdirent_go… 2024-07-20 16:16:46.000000000 +0200
@@ -0,0 +1,15 @@
+//go:build go1.21
+
+package fmtdirent
+
+import "io/fs"
+
+// FormatDirEntry returns a formatted version of dir for human readability.
+// Implementations of [DirEntry] can call this from a String method.
+// The outputs for a directory named subdir and a file named hello.go are:
+//
+// d subdir/
+// - hello.go
+func FormatDirEntry(dir fs.DirEntry) string {
+ return fs.FormatDirEntry(dir)
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/charlievieth/fastwalk/path_portable.go new/vendor/github.com/charlievieth/fastwalk/path_portable.go
--- old/vendor/github.com/charlievieth/fastwalk/path_portable.go 2024-07-08 16:14:30.000000000 +0200
+++ new/vendor/github.com/charlievieth/fastwalk/path_portable.go 1970-01-01 01:00:00.000000000 +0100
@@ -1,7 +0,0 @@
-//go:build !windows
-
-package fastwalk
-
-func useForwardSlash() bool {
- return false
-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/charlievieth/fastwalk/path_windows.go new/vendor/github.com/charlievieth/fastwalk/path_windows.go
--- old/vendor/github.com/charlievieth/fastwalk/path_windows.go 2024-07-08 16:14:30.000000000 +0200
+++ new/vendor/github.com/charlievieth/fastwalk/path_windows.go 1970-01-01 01:00:00.000000000 +0100
@@ -1,62 +0,0 @@
-//go:build windows
-
-package fastwalk
-
-import (
- "bytes"
- "os"
- "runtime"
- "sync"
-)
-
-func useForwardSlash() bool {
- // Use a forward slash as the path separator if this a Windows executable
- // running in either MSYS/MSYS2 or WSL.
- return runningUnderMSYS() || runningUnderWSL()
-}
-
-// runningUnderMSYS reports if we're running in a MSYS/MSYS2 enviroment.
-//
-// See: https://github.com/sharkdp/fd/pull/730
-func runningUnderMSYS() bool {
- switch os.Getenv("MSYSTEM") {
- case "MINGW64", "MINGW32", "MSYS":
- return true
- }
- return false
-}
-
-var underWSL struct {
- once sync.Once
- wsl bool
-}
-
-// runningUnderWSL returns if we're a Widows executable running in WSL.
-// See [DefaultToSlash] for an explanation of the heuristics used here.
-func runningUnderWSL() bool {
- if runtime.GOOS != "windows" {
- return false
- }
- w := &underWSL
- w.once.Do(func() {
- w.wsl = func() bool {
- // Best check (but not super fast)
- if _, err := os.Lstat("/proc/sys/fs/binfmt_misc/WSLInterop"); err == nil {
- return true
- }
- // Fast check, but could provide a false positive if the user sets
- // this on the Windows side.
- if os.Getenv("WSL_DISTRO_NAME") != "" {
- return true
- }
- // If the binary is compiled for Windows and we're running under Linux
- // then honestly just the presence of "/proc/version" should be enough
- // to determine that we're running under WSL, but check the version
- // string just to be pedantic.
- data, _ := os.ReadFile("/proc/version")
- return bytes.Contains(data, []byte("microsoft")) ||
- bytes.Contains(data, []byte("Microsoft"))
- }()
- })
- return w.wsl
-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/charlievieth/fastwalk/zsyscall_darwin.go new/vendor/github.com/charlievieth/fastwalk/zsyscall_darwin.go
--- old/vendor/github.com/charlievieth/fastwalk/zsyscall_darwin.go 2024-07-08 16:14:30.000000000 +0200
+++ new/vendor/github.com/charlievieth/fastwalk/zsyscall_darwin.go 2024-07-20 16:16:46.000000000 +0200
@@ -44,7 +44,9 @@
// We implent opendir so that we don't have to open a file, duplicate
// it's FD, then call fdopendir with it.
- var buf [1024]byte // Tested by TestFastWalk_LongPath
+ const maxPath = len(syscall.Dirent{}.Name) // Tested by TestFastWalk_LongPath
+
+ var buf [maxPath]byte
if len(path) >= len(buf) {
return 0, errEINVAL
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/modules.txt new/vendor/modules.txt
--- old/vendor/modules.txt 2024-07-08 16:14:31.000000000 +0200
+++ new/vendor/modules.txt 2024-07-20 16:16:46.000000000 +0200
@@ -1,7 +1,8 @@
-# github.com/charlievieth/fastwalk v1.0.7-0.20240703190418-87029d931815
+# github.com/charlievieth/fastwalk v1.0.8
## explicit; go 1.20
github.com/charlievieth/fastwalk
github.com/charlievieth/fastwalk/internal/dirent
+github.com/charlievieth/fastwalk/internal/fmtdirent
# github.com/gdamore/encoding v1.0.0
## explicit; go 1.9
github.com/gdamore/encoding
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package cdecl for openSUSE:Factory checked in at 2024-07-22 17:17:44
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/cdecl (Old)
and /work/SRC/openSUSE:Factory/.cdecl.new.17339 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "cdecl"
Mon Jul 22 17:17:44 2024 rev:78 rq:1188817 version:18.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/cdecl/cdecl.changes 2024-07-10 16:49:49.104285346 +0200
+++ /work/SRC/openSUSE:Factory/.cdecl.new.17339/cdecl.changes 2024-07-22 17:19:27.876786818 +0200
@@ -1,0 +2,9 @@
+Sat Jul 20 14:56:44 UTC 2024 - Jan Engelhardt <jengelh(a)inai.de>
+
+- Update to release 18.1
+ * Alignments can now have names to denote the number of bytes.
+ * In C89, implicit int is now warned about in more cases.
+ * To match gibberish output, K&R C typeless parameters now print
+ ``as integer`` in pseudo-English.
+
+-------------------------------------------------------------------
Old:
----
cdecl-18.0.tar.gz
New:
----
cdecl-18.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ cdecl.spec ++++++
--- /var/tmp/diff_new_pack.tN0g0c/_old 2024-07-22 17:19:28.736821396 +0200
+++ /var/tmp/diff_new_pack.tN0g0c/_new 2024-07-22 17:19:28.740821557 +0200
@@ -17,7 +17,7 @@
Name: cdecl
-Version: 18.0
+Version: 18.1
Release: 0
Summary: C/C++ function declaration translator
License: GPL-3.0-or-later
++++++ _scmsync.obsinfo ++++++
--- /var/tmp/diff_new_pack.tN0g0c/_old 2024-07-22 17:19:28.768822683 +0200
+++ /var/tmp/diff_new_pack.tN0g0c/_new 2024-07-22 17:19:28.772822843 +0200
@@ -1,5 +1,5 @@
-mtime: 1720534628
-commit: 6082ce6e6db8c9ded7e7aba8936aa741138145a9218a057f7062e87cb9e46a50
+mtime: 1721487549
+commit: 998e7e878958cb9d6fd50011b3ee92ba6f4bdd7cf589ba21bc6d5e71f634d845
url: https://src.opensuse.org/jengelh/cdecl
revision: master
++++++ cdecl-18.0.tar.gz -> cdecl-18.1.tar.gz ++++++
++++ 30366 lines of diff (skipped)
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package sundials for openSUSE:Factory checked in at 2024-07-22 17:17:40
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/sundials (Old)
and /work/SRC/openSUSE:Factory/.sundials.new.17339 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "sundials"
Mon Jul 22 17:17:40 2024 rev:17 rq:1188809 version:7.1.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/sundials/sundials.changes 2024-03-18 16:45:45.597616854 +0100
+++ /work/SRC/openSUSE:Factory/.sundials.new.17339/sundials.changes 2024-07-22 17:19:23.676617948 +0200
@@ -1,0 +2,10 @@
+Wed Jul 17 05:10:15 UTC 2024 - Atri Bhattacharya <badshah400(a)gmail.com>
+
+- Update to version 7.1.1:
+ * Fixed a bug in v7.1.0 with the SYCL N_Vector N_VSpace
+ * function (gh#LLNL/sundials#523).
+- Changes from version 7.1.0:
+ * Too many to list, see
+ <https://github.com/LLNL/sundials/releases/tag/v7.1.0>.
+
+-------------------------------------------------------------------
Old:
----
sundials-7.0.0.tar.gz
New:
----
sundials-7.1.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ sundials.spec ++++++
--- /var/tmp/diff_new_pack.faIAOT/_old 2024-07-22 17:19:25.632696593 +0200
+++ /var/tmp/diff_new_pack.faIAOT/_new 2024-07-22 17:19:25.636696754 +0200
@@ -92,7 +92,7 @@
%define shlib_sunnonlin libsundials_sunnonlin4%{?my_suffix}
Name: %{package_name}
-Version: 7.0.0
+Version: 7.1.1
Release: 0
Summary: Suite of nonlinear solvers
# SUNDIALS is licensed under BSD with some additional (but unrestrictive) clauses.
++++++ sundials-7.0.0.tar.gz -> sundials-7.1.1.tar.gz ++++++
/work/SRC/openSUSE:Factory/sundials/sundials-7.0.0.tar.gz /work/SRC/openSUSE:Factory/.sundials.new.17339/sundials-7.1.1.tar.gz differ: char 5, line 1
1
0