iztokf pushed to rpms/python-pdf2image (f38). "Initial import
(fedora#2188273)."
by notificationsï¼ fedoraproject.org
Notification time stamped 2023-06-30 20:22:56 UTC
From f72e43dc043ba2b6df61967b7204b6377f5145c1 Mon Sep 17 00:00:00 2001
From: Iztok Fister Jr <iztok(a)iztok-jr-fister.eu>
Date: Jun 30 2023 19:02:52 +0000
Subject: Initial import (fedora#2188273).
---
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..1985ce8
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+/pdf2image-v.1.16.3.tar.gz
diff --git a/269.patch b/269.patch
new file mode 100644
index 0000000..1c1a46f
--- /dev/null
+++ b/269.patch
@@ -0,0 +1,33 @@
+From 0c0835dfdf22c9a45f1394fa8ae0dc367ee77f38 Mon Sep 17 00:00:00 2001
+From: "Benjamin A. Beasley" <code(a)musicinmybrain.net>
+Date: Wed, 31 May 2023 17:13:11 -0400
+Subject: [PATCH] Import memory_profiler only when it is enabled
+
+This removes the test dependency on
+https://pypi.org/project/memory-profiler/ when the PROFILE_MEMORY
+environment variable is not set.
+---
+ tests.py | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/tests.py b/tests.py
+index ae421f6..260f30c 100644
+--- a/tests.py
++++ b/tests.py
+@@ -11,7 +11,6 @@
+ from subprocess import Popen, PIPE
+ from tempfile import TemporaryDirectory
+ from multiprocessing.dummy import Pool
+-from memory_profiler import profile as profile_memory
+
+ sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
+
+@@ -31,6 +30,8 @@
+ from functools import wraps
+
+ PROFILE_MEMORY = os.environ.get("PROFILE_MEMORY", False)
++if PROFILE_MEMORY:
++ from memory_profiler import profile as profile_memory
+
+ try:
+ subprocess.call(
diff --git a/python-pdf2image.spec b/python-pdf2image.spec
new file mode 100644
index 0000000..9c4e246
--- /dev/null
+++ b/python-pdf2image.spec
@@ -0,0 +1,97 @@
+%bcond_without tests
+# Sphinx-generated HTML documentation is not suitable for packaging; see
+# https://bugzilla.redhat.com/show_bug.cgi?id=2006555 for discussion.
+#
+# We would like to generate PDF documentation as a substitute, but have not
+# been able to successfully build the Sphinx-generated LaTeX for this
+# particular package.
+%bcond_without doc_pdf
+
+Name: python-pdf2image
+Version: 1.16.3
+Release: 1%{?dist}
+Summary: Convert PDF to PIL Image object
+
+License: MIT
+URL: https://github.com/Belval/pdf2image
+Source: %{url}/archive/v.%{version}/pdf2image-v.%{version}.tar.gz
+
+# Import memory_profiler only when it is enabled
+# https://github.com/Belval/pdf2image/pull/269
+Patch: %{url}/pull/269.patch
+
+BuildArch: noarch
+
+%global _description %{expand:
+A wrapper around the pdftoppm and pdftocairo
+command line tools to convert PDF to a PIL
+Image list.}
+
+%description %_description
+
+%package -n python3-pdf2image
+Summary: %{summary}
+BuildRequires: python3-devel
+Requires: poppler
+
+%if %{with tests}
+BuildRequires: python3dist(pytest) >= 3.7.1
+BuildRequires: poppler
+%endif
+
+%description -n python3-pdf2image %_description
+
+%package doc
+Summary: Documentation and examples for %{name}
+
+%if %{with doc_pdf}
+BuildRequires: make
+BuildRequires: python3-sphinx
+BuildRequires: python3-sphinx_rtd_theme
+BuildRequires: python3-sphinx-latex
+BuildRequires: python3-recommonmark
+BuildRequires: latexmk
+BuildRequires: tex-xetex-bin
+%endif
+
+%description doc
+%{summary}.
+
+Full HTML documentation is available at
+https://belval.github.io/pdf2image/
+
+%prep
+%autosetup -n pdf2image-v.%{version} -p1
+
+%generate_buildrequires
+%pyproject_buildrequires
+
+%build
+%pyproject_wheel
+
+%if %{with doc_pdf}
+PYTHONPATH="${PWD}" %make_build -C docs latex SPHINXOPTS='-j%{?_smp_build_ncpus}'
+%make_build -C docs/_build/latex LATEXMKOPTS='-quiet -f'
+%endif
+
+%install
+%pyproject_install
+%pyproject_save_files pdf2image
+
+%check
+%if %{with tests}
+%pytest tests.py
+%endif
+
+%files -n python3-pdf2image -f %{pyproject_files}
+%doc README.md
+
+%files doc
+%license LICENSE
+%if %{with doc_pdf}
+%doc docs/_build/latex/pdf2image.pdf
+%endif
+
+%changelog
+* Mon Apr 17 2023 Iztok Fister Jr. <iztokf AT fedoraproject DOT org> - 1.16.3-1
+- Initial package
diff --git a/sources b/sources
new file mode 100644
index 0000000..1f87708
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+SHA512 (pdf2image-v.1.16.3.tar.gz) = 8c724307fcb7b7d1e577ac5ed76a54393a283eb3e7378762506862123af25f0ed9fda7f0309140456aab493bd75405c54195579d1d2bbaec4502861f2731e506
https://src.fedoraproject.org/rpms/python-pdf2image/c/f72e43dc043ba2b6df6...
10Â months, 1Â week
walters pushed to rpms/ostree (f38).
"https://github.com/ostreedev/ostree/releases/tag/v2023.5"
by notificationsï¼ fedoraproject.org
Notification time stamped 2023-06-30 20:21:51 UTC
From acfa02e9d5ed425a697de86cff24ec0d2b861728 Mon Sep 17 00:00:00 2001
From: Colin Walters <walters(a)verbum.org>
Date: Jun 30 2023 19:17:17 +0000
Subject: https://github.com/ostreedev/ostree/releases/tag/v2023.5
---
diff --git a/.gitignore b/.gitignore
index c375452..b258220 100644
--- a/.gitignore
+++ b/.gitignore
@@ -100,3 +100,4 @@
/libostree-2023.2.tar.xz
/libostree-2023.3.tar.xz
/libostree-2023.4.tar.xz
+/libostree-2023.5.tar.xz
diff --git a/0001-Revert-fetcher-Always-open-tmpfiles-in-repo-location.patch b/0001-Revert-fetcher-Always-open-tmpfiles-in-repo-location.patch
deleted file mode 100644
index fd40771..0000000
--- a/0001-Revert-fetcher-Always-open-tmpfiles-in-repo-location.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From 15bb7c8d531c24a144c1b7e3f85322ebf4f25be6 Mon Sep 17 00:00:00 2001
-From: Colin Walters <walters(a)verbum.org>
-Date: Mon, 26 Jun 2023 05:17:45 -0400
-Subject: [PATCH] Revert "fetcher: Always open tmpfiles in repo location"
-
-This reverts commit f7f6f87c513c9f35bc24f35e909779c19cb49d3a.
-
-This seems to have broken flatpak, so we'll revert and then
-investigate.
-
-Closes: https://github.com/ostreedev/ostree/issues/2900
----
- src/libostree/ostree-fetcher-util.h | 8 +++++++-
- 1 file changed, 7 insertions(+), 1 deletion(-)
-
-diff --git a/src/libostree/ostree-fetcher-util.h b/src/libostree/ostree-fetcher-util.h
-index 35f3e854..c3243801 100644
---- a/src/libostree/ostree-fetcher-util.h
-+++ b/src/libostree/ostree-fetcher-util.h
-@@ -35,8 +35,14 @@ static inline gboolean
- _ostree_fetcher_tmpf_from_flags (OstreeFetcherRequestFlags flags, int dfd, GLnxTmpfile *tmpf,
- GError **error)
- {
-- if (!glnx_open_tmpfile_linkable_at (dfd, ".", O_RDWR | O_CLOEXEC, tmpf, error))
-+ if ((flags & OSTREE_FETCHER_REQUEST_LINKABLE) > 0)
-+ {
-+ if (!glnx_open_tmpfile_linkable_at (dfd, ".", O_RDWR | O_CLOEXEC, tmpf, error))
-+ return FALSE;
-+ }
-+ else if (!glnx_open_anonymous_tmpfile (O_RDWR | O_CLOEXEC, tmpf, error))
- return FALSE;
-+
- if (!glnx_fchmod (tmpf->fd, 0644, error))
- return FALSE;
- return TRUE;
---
-2.41.0
-
diff --git a/ostree.spec b/ostree.spec
index aa0fc3d..225cd61 100644
--- a/ostree.spec
+++ b/ostree.spec
@@ -7,14 +7,12 @@
Summary: Tool for managing bootable, immutable filesystem trees
Name: ostree
-Version: 2023.4
+Version: 2023.5
Release: 2%{?dist}
Source0: https://github.com/ostreedev/%{name}/releases/download/v%{version}/libost...
License: LGPL-2.0-or-later
URL: https://ostree.readthedocs.io/en/latest/
-Patch0: 0001-Revert-fetcher-Always-open-tmpfiles-in-repo-location.patch
-
BuildRequires: make
BuildRequires: git
# We always run autogen.sh
@@ -171,6 +169,9 @@ find %{buildroot} -name '*.la' -delete
%endif
%changelog
+* Fri Jun 30 2023 Colin Walters <walters(a)verbum.org> - 2023.5-2
+- https://github.com/ostreedev/ostree/releases/tag/v2023.5
+
* Mon Jun 26 2023 Colin Walters <walters(a)verbum.org> - 2023.4-2
- Cherry pick patch to fix flatpak
diff --git a/sources b/sources
index c2b6fa1..3362907 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (libostree-2023.4.tar.xz) = 7587732c6852843abd6e4ab0778399a3da868318eb536c1c8e7031bcc7d18ad033c3162e146da3dbdee1c468c4287721cf7421c6208dbd6a9383982e160a5e80
+SHA512 (libostree-2023.5.tar.xz) = 0bb19f199344d8db7299cf710f2ba0b2657cdcb5b1fc6d85446cef9538b069e470b47fc0c2c1029e12b8b9adb978f32a6f44f48949ff5c97a01051a425a9f2d5
https://src.fedoraproject.org/rpms/ostree/c/acfa02e9d5ed425a697de86cff24e...
10Â months, 1Â week
jjames pushed to rpms/python-bash-kernel (rawhide). "Version 0.9.1"
by notificationsï¼ fedoraproject.org
Notification time stamped 2023-06-30 20:20:00 UTC
From 216d9d32ad2e26cf751239498e19ad87b48af033 Mon Sep 17 00:00:00 2001
From: Jerry James <loganjerry(a)gmail.com>
Date: Jun 30 2023 20:19:48 +0000
Subject: Version 0.9.1
---
diff --git a/python-bash-kernel.spec b/python-bash-kernel.spec
index b52d3d0..340c072 100644
--- a/python-bash-kernel.spec
+++ b/python-bash-kernel.spec
@@ -1,6 +1,6 @@
Name: python-bash-kernel
-Version: 0.9.0
-Release: 2%{?dist}
+Version: 0.9.1
+Release: 1%{?dist}
Summary: Bash kernel for Jupyter
License: BSD-3-Clause
URL: https://github.com/takluyver/bash_kernel
@@ -48,6 +48,9 @@ cd -
%{_datadir}/jupyter/kernels/bash/
%changelog
+* Fri Jun 30 2023 Jerry James <loganjerry(a)gmail.com> - 0.9.1-1
+- Version 0.9.1
+
* Thu Feb 23 2023 Jerry James <loganjerry(a)gmail.com> - 0.9.0-2
- Dynamically generate BuildRequires
diff --git a/sources b/sources
index 22b5749..ddeeafd 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (bash_kernel-0.9.0.tar.gz) = 07feaa2bb594e4b6d61327fb2ca9ce02ef2b64616fdf879b8c4290364942232a16961c0993378ef674f41a1d268e0d312d70f0cdbff9685212b1bd6d27b2d1e2
+SHA512 (bash_kernel-0.9.1.tar.gz) = 41e510dbb6c9e9ae47279da09bb97277a0a0c485523d748e28b6c6fc740f71d88babe790d03a82df155bf40f42f3673c54f37923b8a4a5091fd179d3d8747d8e
https://src.fedoraproject.org/rpms/python-bash-kernel/c/216d9d32ad2e26cf7...
10Â months, 1Â week
jjames pushed to rpms/scala (rawhide). "Non-bootstrap build"
by notificationsï¼ fedoraproject.org
Notification time stamped 2023-06-30 20:03:56 UTC
From 2cbdce15065be62a146cde3aae310418b2ebfcfc Mon Sep 17 00:00:00 2001
From: Jerry James <loganjerry(a)gmail.com>
Date: Jun 30 2023 20:03:36 +0000
Subject: Non-bootstrap build
---
diff --git a/scala.spec b/scala.spec
index 5b55e93..b2673ae 100644
--- a/scala.spec
+++ b/scala.spec
@@ -12,7 +12,7 @@
# Scala needs itself to compile. Use this if the version in the repository
# cannot build the current version.
-%bcond_without bootstrap
+%bcond_with bootstrap
Name: scala
Version: 2.13.11
diff --git a/sources b/sources
index 2d8351c..8753779 100644
--- a/sources
+++ b/sources
@@ -1,5 +1,4 @@
SHA512 (scala-2.13.11.tar.gz) = 5cf56b5c5f1177867de93a6e1507d68e65b07a63c66bf77930b1390f2277d616302d7966d7b78a8b7a885106d5d4e474332aa0dbb3cea0a52dcc6864b721a350
-SHA512 (scala-2.13.11.tgz) = a24353ebbbc7d66e99c46c88c9781428fa68db904fa5284c3169559a93013d74b9dbe5accdad123b1278d1f78c1b303a195652d3fbe0090afe0987d6adcf4ae9
SHA512 (v9.5.0-scala-1.tar.gz) = 6448d3e28ce8567288ace08138e43c5d26c82341869a49e026126c749c51d50638e0a8e3a86bbbe1fca1d28d0d813eddba12fe312c8570b844bb33827bffef47
SHA512 (jquery-3.6.4.min.js) = a6e981b23351186aa43f32879dd64c6801be6e2af7ef8b0e472cccdeeba52d5d7894de4bcb292a364f1e11e525524077534338140a72687ada4fae62849843a5
SHA512 (jquery-3.6.4.slim.min.js) = 7d88d2a1c0c3e9cb6e435406228f7e367f4e73899f6aed88884f0a8b5172315e0e704494b7cd4532a9a1b197bdcd667a83a35d733ac4300a2cd4694b2c08a95a
https://src.fedoraproject.org/rpms/scala/c/2cbdce15065be62a146cde3aae3104...
10Â months, 1Â week
jjames pushed to rpms/python-texext (rawhide). "Add versioneer patch
to fix FTBFS with python 3.12"
by notificationsï¼ fedoraproject.org
Notification time stamped 2023-06-30 19:59:58 UTC
From 5d011911401380ee19a1c96162e9ce807d026a27 Mon Sep 17 00:00:00 2001
From: Jerry James <loganjerry(a)gmail.com>
Date: Jun 30 2023 19:59:46 +0000
Subject: Add versioneer patch to fix FTBFS with python 3.12
---
diff --git a/python-texext-versioneer.patch b/python-texext-versioneer.patch
new file mode 100644
index 0000000..a97949c
--- /dev/null
+++ b/python-texext-versioneer.patch
@@ -0,0 +1,2012 @@
+--- texext-0.6.7/texext/__init__.py.orig 2022-06-02 08:06:17.000000000 -0600
++++ texext-0.6.7/texext/__init__.py 2023-06-30 09:30:57.183422846 -0600
+@@ -3,9 +3,8 @@
+ from . import math_dollar
+ from . import mathcode
+
+-from ._version import get_versions
+-__version__ = get_versions()['version']
+-del get_versions
++from . import _version
++__version__ = _version.get_versions()['version']
+
+
+ def setup(app):
+--- texext-0.6.7/texext/_version.py.orig 2022-06-02 08:06:17.000000000 -0600
++++ texext-0.6.7/texext/_version.py 2023-06-30 13:55:32.860235782 -0600
+@@ -5,8 +5,9 @@
+ # directories (produced by setup.py build) will contain a much shorter file
+ # that just contains the computed version number.
+
+-# This file is released into the public domain. Generated by
+-# versioneer-0.17 (https://github.com/warner/python-versioneer)
++# This file is released into the public domain.
++# Generated by versioneer-0.28
++# https://github.com/python-versioneer/python-versioneer
+
+ """Git implementation of _version.py."""
+
+@@ -15,6 +16,8 @@ import os
+ import re
+ import subprocess
+ import sys
++from typing import Callable, Dict
++import functools
+
+
+ def get_keywords():
+@@ -23,9 +26,9 @@ def get_keywords():
+ # setup.py/versioneer.py will grep for the variable names, so they must
+ # each be defined on a line of their own. _version.py will just call
+ # get_keywords().
+- git_refnames = " (HEAD -> main, tag: 0.6.7)"
+- git_full = "42d7bec56ead317162725edf8e503b493c541f32"
+- git_date = "2022-06-02 15:06:17 +0100"
++ git_refnames = "$Format:%d$"
++ git_full = "$Format:%H$"
++ git_date = "$Format:%ci$"
+ keywords = {"refnames": git_refnames, "full": git_full, "date": git_date}
+ return keywords
+
+@@ -52,12 +55,12 @@ class NotThisMethod(Exception):
+ """Exception raised if a method is not valid for the current scenario."""
+
+
+-LONG_VERSION_PY = {}
+-HANDLERS = {}
++LONG_VERSION_PY: Dict[str, str] = {}
++HANDLERS: Dict[str, Dict[str, Callable]] = {}
+
+
+ def register_vcs_handler(vcs, method): # decorator
+- """Decorator to mark a method as the handler for a particular VCS."""
++ """Create decorator to mark a method as the handler of a VCS."""
+ def decorate(f):
+ """Store f in HANDLERS[vcs][method]."""
+ if vcs not in HANDLERS:
+@@ -71,17 +74,25 @@ def run_command(commands, args, cwd=None
+ env=None):
+ """Call the given command(s)."""
+ assert isinstance(commands, list)
+- p = None
+- for c in commands:
++ process = None
++
++ popen_kwargs = {}
++ if sys.platform == "win32":
++ # This hides the console window if pythonw.exe is used
++ startupinfo = subprocess.STARTUPINFO()
++ startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
++ popen_kwargs["startupinfo"] = startupinfo
++
++ for command in commands:
+ try:
+- dispcmd = str([c] + args)
++ dispcmd = str([command] + args)
+ # remember shell=False, so use git.cmd on windows, not just git
+- p = subprocess.Popen([c] + args, cwd=cwd, env=env,
++ process = subprocess.Popen([command] + args, cwd=cwd, env=env,
+ stdout=subprocess.PIPE,
+ stderr=(subprocess.PIPE if hide_stderr
+- else None))
++ else None), **popen_kwargs)
+ break
+- except EnvironmentError:
++ except OSError:
+ e = sys.exc_info()[1]
+ if e.errno == errno.ENOENT:
+ continue
+@@ -93,15 +104,13 @@ def run_command(commands, args, cwd=None
+ if verbose:
+ print("unable to find command, tried %s" % (commands,))
+ return None, None
+- stdout = p.communicate()[0].strip()
+- if sys.version_info[0] >= 3:
+- stdout = stdout.decode()
+- if p.returncode != 0:
++ stdout = process.communicate()[0].strip().decode()
++ if process.returncode != 0:
+ if verbose:
+ print("unable to run %s (error)" % dispcmd)
+ print("stdout was %s" % stdout)
+- return None, p.returncode
+- return stdout, p.returncode
++ return None, process.returncode
++ return stdout, process.returncode
+
+
+ def versions_from_parentdir(parentdir_prefix, root, verbose):
+@@ -113,13 +122,12 @@ def versions_from_parentdir(parentdir_pr
+ """
+ rootdirs = []
+
+- for i in range(3):
++ for _ in range(3):
+ dirname = os.path.basename(root)
+ if dirname.startswith(parentdir_prefix):
+ return {"version": dirname[len(parentdir_prefix):],
+ "full-revisionid": None,
+ "dirty": False, "error": None, "date": None}
+- else:
+ rootdirs.append(root)
+ root = os.path.dirname(root) # up a level
+
+@@ -138,22 +146,21 @@ def git_get_keywords(versionfile_abs):
+ # _version.py.
+ keywords = {}
+ try:
+- f = open(versionfile_abs, "r")
+- for line in f.readlines():
+- if line.strip().startswith("git_refnames ="):
+- mo = re.search(r'=\s*"(.*)"', line)
+- if mo:
+- keywords["refnames"] = mo.group(1)
+- if line.strip().startswith("git_full ="):
+- mo = re.search(r'=\s*"(.*)"', line)
+- if mo:
+- keywords["full"] = mo.group(1)
+- if line.strip().startswith("git_date ="):
+- mo = re.search(r'=\s*"(.*)"', line)
+- if mo:
+- keywords["date"] = mo.group(1)
+- f.close()
+- except EnvironmentError:
++ with open(versionfile_abs, "r") as fobj:
++ for line in fobj:
++ if line.strip().startswith("git_refnames ="):
++ mo = re.search(r'=\s*"(.*)"', line)
++ if mo:
++ keywords["refnames"] = mo.group(1)
++ if line.strip().startswith("git_full ="):
++ mo = re.search(r'=\s*"(.*)"', line)
++ if mo:
++ keywords["full"] = mo.group(1)
++ if line.strip().startswith("git_date ="):
++ mo = re.search(r'=\s*"(.*)"', line)
++ if mo:
++ keywords["date"] = mo.group(1)
++ except OSError:
+ pass
+ return keywords
+
+@@ -161,10 +168,14 @@ def git_get_keywords(versionfile_abs):
+ @register_vcs_handler("git", "keywords")
+ def git_versions_from_keywords(keywords, tag_prefix, verbose):
+ """Get version information from git keywords."""
+- if not keywords:
+- raise NotThisMethod("no keywords at all, weird")
++ if "refnames" not in keywords:
++ raise NotThisMethod("Short version file found")
+ date = keywords.get("date")
+ if date is not None:
++ # Use only the last line. Previous lines may contain GPG signature
++ # information.
++ date = date.splitlines()[-1]
++
+ # git-2.2.0 added "%cI", which expands to an ISO-8601 -compliant
+ # datestamp. However we prefer "%ci" (which expands to an "ISO-8601
+ # -like" string, which we must then edit to make compliant), because
+@@ -177,11 +188,11 @@ def git_versions_from_keywords(keywords,
+ if verbose:
+ print("keywords are unexpanded, not using")
+ raise NotThisMethod("unexpanded keywords, not a git-archive tarball")
+- refs = set([r.strip() for r in refnames.strip("()").split(",")])
++ refs = {r.strip() for r in refnames.strip("()").split(",")}
+ # starting in git-1.8.3, tags are listed as "tag: foo-1.0" instead of
+ # just "foo-1.0". If we see a "tag: " prefix, prefer those.
+ TAG = "tag: "
+- tags = set([r[len(TAG):] for r in refs if r.startswith(TAG)])
++ tags = {r[len(TAG):] for r in refs if r.startswith(TAG)}
+ if not tags:
+ # Either we're using git < 1.8.3, or there really are no tags. We use
+ # a heuristic: assume all version tags have a digit. The old git %d
+@@ -190,7 +201,7 @@ def git_versions_from_keywords(keywords,
+ # between branches and tags. By ignoring refnames without digits, we
+ # filter out many common branch names like "release" and
+ # "stabilization", as well as "HEAD" and "master".
+- tags = set([r for r in refs if re.search(r'\d', r)])
++ tags = {r for r in refs if re.search(r'\d', r)}
+ if verbose:
+ print("discarding '%s', no digits" % ",".join(refs - tags))
+ if verbose:
+@@ -199,6 +210,11 @@ def git_versions_from_keywords(keywords,
+ # sorting will prefer e.g. "2.0" over "2.0rc1"
+ if ref.startswith(tag_prefix):
+ r = ref[len(tag_prefix):]
++ # Filter out refs that exactly match prefix or that don't start
++ # with a number once the prefix is stripped (mostly a concern
++ # when prefix is '')
++ if not re.match(r'\d', r):
++ continue
+ if verbose:
+ print("picking %s" % r)
+ return {"version": r,
+@@ -214,7 +230,7 @@ def git_versions_from_keywords(keywords,
+
+
+ @register_vcs_handler("git", "pieces_from_vcs")
+-def git_pieces_from_vcs(tag_prefix, root, verbose, run_command=run_command):
++def git_pieces_from_vcs(tag_prefix, root, verbose, runner=run_command):
+ """Get version from 'git describe' in the root of the source tree.
+
+ This only gets called if the git-archive 'subst' keywords were *not*
+@@ -225,8 +241,15 @@ def git_pieces_from_vcs(tag_prefix, root
+ if sys.platform == "win32":
+ GITS = ["git.cmd", "git.exe"]
+
+- out, rc = run_command(GITS, ["rev-parse", "--git-dir"], cwd=root,
+- hide_stderr=True)
++ # GIT_DIR can interfere with correct operation of Versioneer.
++ # It may be intended to be passed to the Versioneer-versioned project,
++ # but that should not change where we get our version from.
++ env = os.environ.copy()
++ env.pop("GIT_DIR", None)
++ runner = functools.partial(runner, env=env)
++
++ _, rc = runner(GITS, ["rev-parse", "--git-dir"], cwd=root,
++ hide_stderr=not verbose)
+ if rc != 0:
+ if verbose:
+ print("Directory %s not under git control" % root)
+@@ -234,15 +257,15 @@ def git_pieces_from_vcs(tag_prefix, root
+
+ # if there is a tag matching tag_prefix, this yields TAG-NUM-gHEX[-dirty]
+ # if there isn't one, this yields HEX[-dirty] (no NUM)
+- describe_out, rc = run_command(GITS, ["describe", "--tags", "--dirty",
+- "--always", "--long",
+- "--match", "%s*" % tag_prefix],
+- cwd=root)
++ describe_out, rc = runner(GITS, [
++ "describe", "--tags", "--dirty", "--always", "--long",
++ "--match", f"{tag_prefix}[[:digit:]]*"
++ ], cwd=root)
+ # --long was added in git-1.5.5
+ if describe_out is None:
+ raise NotThisMethod("'git describe' failed")
+ describe_out = describe_out.strip()
+- full_out, rc = run_command(GITS, ["rev-parse", "HEAD"], cwd=root)
++ full_out, rc = runner(GITS, ["rev-parse", "HEAD"], cwd=root)
+ if full_out is None:
+ raise NotThisMethod("'git rev-parse' failed")
+ full_out = full_out.strip()
+@@ -252,6 +275,39 @@ def git_pieces_from_vcs(tag_prefix, root
+ pieces["short"] = full_out[:7] # maybe improved later
+ pieces["error"] = None
+
++ branch_name, rc = runner(GITS, ["rev-parse", "--abbrev-ref", "HEAD"],
++ cwd=root)
++ # --abbrev-ref was added in git-1.6.3
++ if rc != 0 or branch_name is None:
++ raise NotThisMethod("'git rev-parse --abbrev-ref' returned error")
++ branch_name = branch_name.strip()
++
++ if branch_name == "HEAD":
++ # If we aren't exactly on a branch, pick a branch which represents
++ # the current commit. If all else fails, we are on a branchless
++ # commit.
++ branches, rc = runner(GITS, ["branch", "--contains"], cwd=root)
++ # --contains was added in git-1.5.4
++ if rc != 0 or branches is None:
++ raise NotThisMethod("'git branch --contains' returned error")
++ branches = branches.split("\n")
++
++ # Remove the first line if we're running detached
++ if "(" in branches[0]:
++ branches.pop(0)
++
++ # Strip off the leading "* " from the list of branches.
++ branches = [branch[2:] for branch in branches]
++ if "master" in branches:
++ branch_name = "master"
++ elif not branches:
++ branch_name = None
++ else:
++ # Pick the first branch that is returned. Good or bad.
++ branch_name = branches[0]
++
++ pieces["branch"] = branch_name
++
+ # parse describe_out. It will be like TAG-NUM-gHEX[-dirty] or HEX[-dirty]
+ # TAG might have hyphens.
+ git_describe = describe_out
+@@ -268,7 +324,7 @@ def git_pieces_from_vcs(tag_prefix, root
+ # TAG-NUM-gHEX
+ mo = re.search(r'^(.+)-(\d+)-g([0-9a-f]+)$', git_describe)
+ if not mo:
+- # unparseable. Maybe git-describe is misbehaving?
++ # unparsable. Maybe git-describe is misbehaving?
+ pieces["error"] = ("unable to parse git-describe output: '%s'"
+ % describe_out)
+ return pieces
+@@ -293,13 +349,14 @@ def git_pieces_from_vcs(tag_prefix, root
+ else:
+ # HEX: no tags
+ pieces["closest-tag"] = None
+- count_out, rc = run_command(GITS, ["rev-list", "HEAD", "--count"],
+- cwd=root)
+- pieces["distance"] = int(count_out) # total number of commits
++ out, rc = runner(GITS, ["rev-list", "HEAD", "--left-right"], cwd=root)
++ pieces["distance"] = len(out.split()) # total number of commits
+
+ # commit date: see ISO-8601 comment in git_versions_from_keywords()
+- date = run_command(GITS, ["show", "-s", "--format=%ci", "HEAD"],
+- cwd=root)[0].strip()
++ date = runner(GITS, ["show", "-s", "--format=%ci", "HEAD"], cwd=root)[0].strip()
++ # Use only the last line. Previous lines may contain GPG signature
++ # information.
++ date = date.splitlines()[-1]
+ pieces["date"] = date.strip().replace(" ", "T", 1).replace(" ", "", 1)
+
+ return pieces
+@@ -337,19 +394,67 @@ def render_pep440(pieces):
+ return rendered
+
+
+-def render_pep440_pre(pieces):
+- """TAG[.post.devDISTANCE] -- No -dirty.
++def render_pep440_branch(pieces):
++ """TAG[[.dev0]+DISTANCE.gHEX[.dirty]] .
++
++ The ".dev0" means not master branch. Note that .dev0 sorts backwards
++ (a feature branch will appear "older" than the master branch).
+
+ Exceptions:
+- 1: no tags. 0.post.devDISTANCE
++ 1: no tags. 0[.dev0]+untagged.DISTANCE.gHEX[.dirty]
+ """
+ if pieces["closest-tag"]:
+ rendered = pieces["closest-tag"]
++ if pieces["distance"] or pieces["dirty"]:
++ if pieces["branch"] != "master":
++ rendered += ".dev0"
++ rendered += plus_or_dot(pieces)
++ rendered += "%d.g%s" % (pieces["distance"], pieces["short"])
++ if pieces["dirty"]:
++ rendered += ".dirty"
++ else:
++ # exception #1
++ rendered = "0"
++ if pieces["branch"] != "master":
++ rendered += ".dev0"
++ rendered += "+untagged.%d.g%s" % (pieces["distance"],
++ pieces["short"])
++ if pieces["dirty"]:
++ rendered += ".dirty"
++ return rendered
++
++
++def pep440_split_post(ver):
++ """Split pep440 version string at the post-release segment.
++
++ Returns the release segments before the post-release and the
++ post-release version number (or -1 if no post-release segment is present).
++ """
++ vc = str.split(ver, ".post")
++ return vc[0], int(vc[1] or 0) if len(vc) == 2 else None
++
++
++def render_pep440_pre(pieces):
++ """TAG[.postN.devDISTANCE] -- No -dirty.
++
++ Exceptions:
++ 1: no tags. 0.post0.devDISTANCE
++ """
++ if pieces["closest-tag"]:
+ if pieces["distance"]:
+- rendered += ".post.dev%d" % pieces["distance"]
++ # update the post release segment
++ tag_version, post_version = pep440_split_post(pieces["closest-tag"])
++ rendered = tag_version
++ if post_version is not None:
++ rendered += ".post%d.dev%d" % (post_version + 1, pieces["distance"])
++ else:
++ rendered += ".post0.dev%d" % (pieces["distance"])
++ else:
++ # no commits, use the tag as the version
++ rendered = pieces["closest-tag"]
+ else:
+ # exception #1
+- rendered = "0.post.dev%d" % pieces["distance"]
++ rendered = "0.post0.dev%d" % pieces["distance"]
+ return rendered
+
+
+@@ -380,12 +485,41 @@ def render_pep440_post(pieces):
+ return rendered
+
+
++def render_pep440_post_branch(pieces):
++ """TAG[.postDISTANCE[.dev0]+gHEX[.dirty]] .
++
++ The ".dev0" means not master branch.
++
++ Exceptions:
++ 1: no tags. 0.postDISTANCE[.dev0]+gHEX[.dirty]
++ """
++ if pieces["closest-tag"]:
++ rendered = pieces["closest-tag"]
++ if pieces["distance"] or pieces["dirty"]:
++ rendered += ".post%d" % pieces["distance"]
++ if pieces["branch"] != "master":
++ rendered += ".dev0"
++ rendered += plus_or_dot(pieces)
++ rendered += "g%s" % pieces["short"]
++ if pieces["dirty"]:
++ rendered += ".dirty"
++ else:
++ # exception #1
++ rendered = "0.post%d" % pieces["distance"]
++ if pieces["branch"] != "master":
++ rendered += ".dev0"
++ rendered += "+g%s" % pieces["short"]
++ if pieces["dirty"]:
++ rendered += ".dirty"
++ return rendered
++
++
+ def render_pep440_old(pieces):
+ """TAG[.postDISTANCE[.dev0]] .
+
+ The ".dev0" means dirty.
+
+- Eexceptions:
++ Exceptions:
+ 1: no tags. 0.postDISTANCE[.dev0]
+ """
+ if pieces["closest-tag"]:
+@@ -456,10 +590,14 @@ def render(pieces, style):
+
+ if style == "pep440":
+ rendered = render_pep440(pieces)
++ elif style == "pep440-branch":
++ rendered = render_pep440_branch(pieces)
+ elif style == "pep440-pre":
+ rendered = render_pep440_pre(pieces)
+ elif style == "pep440-post":
+ rendered = render_pep440_post(pieces)
++ elif style == "pep440-post-branch":
++ rendered = render_pep440_post_branch(pieces)
+ elif style == "pep440-old":
+ rendered = render_pep440_old(pieces)
+ elif style == "git-describe":
+@@ -495,7 +633,7 @@ def get_versions():
+ # versionfile_source is the relative path from the top of the source
+ # tree (where the .git directory might live) to this file. Invert
+ # this to find the root from __file__.
+- for i in cfg.versionfile_source.split('/'):
++ for _ in cfg.versionfile_source.split('/'):
+ root = os.path.dirname(root)
+ except NameError:
+ return {"version": "0+unknown", "full-revisionid": None,
+--- texext-0.6.7/versioneer.py.orig 2022-06-02 08:06:17.000000000 -0600
++++ texext-0.6.7/versioneer.py 2023-06-30 09:50:18.606465788 -0600
+@@ -1,5 +1,5 @@
+
+-# Version: 0.17
++# Version: 0.28
+
+ """The Versioneer - like a rocketeer, but for versions.
+
+@@ -7,18 +7,14 @@ The Versioneer
+ ==============
+
+ * like a rocketeer, but for versions!
+-* https://github.com/warner/python-versioneer
++* https://github.com/python-versioneer/python-versioneer
+ * Brian Warner
+-* License: Public Domain
+-* Compatible With: python2.6, 2.7, 3.2, 3.3, 3.4, 3.5, and pypy
+-* [![Latest Version]
+-(https://pypip.in/version/versioneer/badge.svg?style=flat)
+-](https://pypi.python.org/pypi/versioneer/)
+-* [![Build Status]
+-(https://travis-ci.org/warner/python-versioneer.png?branch=master)
+-](https://travis-ci.org/warner/python-versioneer)
++* License: Public Domain (Unlicense)
++* Compatible with: Python 3.7, 3.8, 3.9, 3.10 and pypy3
++* [![Latest Version][pypi-image]][pypi-url]
++* [![Build Status][travis-image]][travis-url]
+
+-This is a tool for managing a recorded version number in distutils-based
++This is a tool for managing a recorded version number in setuptools-based
+ python projects. The goal is to remove the tedious and error-prone "update
+ the embedded version string" step from your release process. Making a new
+ release should be as easy as recording a new tag in your version-control
+@@ -27,9 +23,38 @@ system, and maybe making new tarballs.
+
+ ## Quick Install
+
+-* `pip install versioneer` to somewhere to your $PATH
+-* add a `[versioneer]` section to your setup.cfg (see below)
+-* run `versioneer install` in your source tree, commit the results
++Versioneer provides two installation modes. The "classic" vendored mode installs
++a copy of versioneer into your repository. The experimental build-time dependency mode
++is intended to allow you to skip this step and simplify the process of upgrading.
++
++### Vendored mode
++
++* `pip install versioneer` to somewhere in your $PATH
++ * A [conda-forge recipe](https://github.com/conda-forge/versioneer-feedstock) is
++ available, so you can also use `conda install -c conda-forge versioneer`
++* add a `[tool.versioneer]` section to your `pyproject.toml` or a
++ `[versioneer]` section to your `setup.cfg` (see [Install](INSTALL.md))
++ * Note that you will need to add `tomli; python_version < "3.11"` to your
++ build-time dependencies if you use `pyproject.toml`
++* run `versioneer install --vendor` in your source tree, commit the results
++* verify version information with `python setup.py version`
++
++### Build-time dependency mode
++
++* `pip install versioneer` to somewhere in your $PATH
++ * A [conda-forge recipe](https://github.com/conda-forge/versioneer-feedstock) is
++ available, so you can also use `conda install -c conda-forge versioneer`
++* add a `[tool.versioneer]` section to your `pyproject.toml` or a
++ `[versioneer]` section to your `setup.cfg` (see [Install](INSTALL.md))
++* add `versioneer` (with `[toml]` extra, if configuring in `pyproject.toml`)
++ to the `requires` key of the `build-system` table in `pyproject.toml`:
++ ```toml
++ [build-system]
++ requires = ["setuptools", "versioneer[toml]"]
++ build-backend = "setuptools.build_meta"
++ ```
++* run `versioneer install --no-vendor` in your source tree, commit the results
++* verify version information with `python setup.py version`
+
+ ## Version Identifiers
+
+@@ -61,7 +86,7 @@ version 1.3). Many VCS systems can repor
+ for example `git describe --tags --dirty --always` reports things like
+ "0.7-1-g574ab98-dirty" to indicate that the checkout is one revision past the
+ 0.7 tag, has a unique revision id of "574ab98", and is "dirty" (it has
+-uncommitted changes.
++uncommitted changes).
+
+ The version identifier is used for multiple purposes:
+
+@@ -151,8 +176,8 @@ that this commit is two revisions ("+2")
+ software (exactly equal to a known tag), the identifier will only contain the
+ stripped tag, e.g. "0.11".
+
+-Other styles are available. See details.md in the Versioneer source tree for
+-descriptions.
++Other styles are available. See [details.md](details.md) in the Versioneer
++source tree for descriptions.
+
+ ## Debugging
+
+@@ -166,7 +191,7 @@ which may help identify what went wrong)
+
+ Some situations are known to cause problems for Versioneer. This details the
+ most significant ones. More can be found on Github
+-[issues page](https://github.com/warner/python-versioneer/issues).
++[issues page](https://github.com/python-versioneer/python-versioneer/issues).
+
+ ### Subprojects
+
+@@ -180,7 +205,7 @@ two common reasons why `setup.py` might
+ `setup.cfg`, and `tox.ini`. Projects like these produce multiple PyPI
+ distributions (and upload multiple independently-installable tarballs).
+ * Source trees whose main purpose is to contain a C library, but which also
+- provide bindings to Python (and perhaps other langauges) in subdirectories.
++ provide bindings to Python (and perhaps other languages) in subdirectories.
+
+ Versioneer will look for `.git` in parent directories, and most operations
+ should get the right version string. However `pip` and `setuptools` have bugs
+@@ -194,9 +219,9 @@ work too.
+ Pip-8.1.1 is known to have this problem, but hopefully it will get fixed in
+ some later version.
+
+-[Bug #38](https://github.com/warner/python-versioneer/issues/38) is tracking
++[Bug #38](https://github.com/python-versioneer/python-versioneer/issues/38) is tracking
+ this issue. The discussion in
+-[PR #61](https://github.com/warner/python-versioneer/pull/61) describes the
++[PR #61](https://github.com/python-versioneer/python-versioneer/pull/61) describes the
+ issue from the Versioneer side in more detail.
+ [pip PR#3176](https://github.com/pypa/pip/pull/3176) and
+ [pip PR#3615](https://github.com/pypa/pip/pull/3615) contain work to improve
+@@ -224,31 +249,20 @@ regenerated while a different version is
+ cause egg_info to be rebuilt (including `sdist`, `wheel`, and installing into
+ a different virtualenv), so this can be surprising.
+
+-[Bug #83](https://github.com/warner/python-versioneer/issues/83) describes
++[Bug #83](https://github.com/python-versioneer/python-versioneer/issues/83) describes
+ this one, but upgrading to a newer version of setuptools should probably
+ resolve it.
+
+-### Unicode version strings
+-
+-While Versioneer works (and is continually tested) with both Python 2 and
+-Python 3, it is not entirely consistent with bytes-vs-unicode distinctions.
+-Newer releases probably generate unicode version strings on py2. It's not
+-clear that this is wrong, but it may be surprising for applications when then
+-write these strings to a network connection or include them in bytes-oriented
+-APIs like cryptographic checksums.
+-
+-[Bug #71](https://github.com/warner/python-versioneer/issues/71) investigates
+-this question.
+-
+
+ ## Updating Versioneer
+
+ To upgrade your project to a new release of Versioneer, do the following:
+
+ * install the new Versioneer (`pip install -U versioneer` or equivalent)
+-* edit `setup.cfg`, if necessary, to include any new configuration settings
+- indicated by the release notes. See [UPGRADING](./UPGRADING.md) for details.
+-* re-run `versioneer install` in your source tree, to replace
++* edit `setup.cfg` and `pyproject.toml`, if necessary,
++ to include any new configuration settings indicated by the release notes.
++ See [UPGRADING](./UPGRADING.md) for details.
++* re-run `versioneer install --[no-]vendor` in your source tree, to replace
+ `SRC/_version.py`
+ * commit any changed files
+
+@@ -265,28 +279,54 @@ installation by editing setup.py . Alter
+ direction and include code from all supported VCS systems, reducing the
+ number of intermediate scripts.
+
++## Similar projects
++
++* [setuptools_scm](https://github.com/pypa/setuptools_scm/) - a non-vendored build-time
++ dependency
++* [minver](https://github.com/jbweston/miniver) - a lightweight reimplementation of
++ versioneer
++* [versioningit](https://github.com/jwodder/versioningit) - a PEP 518-based setuptools
++ plugin
+
+ ## License
+
+ To make Versioneer easier to embed, all its code is dedicated to the public
+ domain. The `_version.py` that it creates is also in the public domain.
+-Specifically, both are released under the Creative Commons "Public Domain
+-Dedication" license (CC0-1.0), as described in
+-https://creativecommons.org/publicdomain/zero/1.0/ .
++Specifically, both are released under the "Unlicense", as described in
++https://unlicense.org/.
++
++[pypi-image]: https://img.shields.io/pypi/v/versioneer.svg
++[pypi-url]: https://pypi.python.org/pypi/versioneer/
++[travis-image]:
++https://img.shields.io/travis/com/python-versioneer/python-versioneer.svg
++[travis-url]: https://travis-ci.com/github/python-versioneer/python-versioneer
+
+ """
++# pylint:disable=invalid-name,import-outside-toplevel,missing-function-docstring
++# pylint:disable=missing-class-docstring,too-many-branches,too-many-statements
++# pylint:disable=raise-missing-from,too-many-lines,too-many-locals,import-error
++# pylint:disable=too-few-public-methods,redefined-outer-name,consider-using-with
++# pylint:disable=attribute-defined-outside-init,too-many-arguments
+
+-from __future__ import print_function
+-try:
+- import configparser
+-except ImportError:
+- import ConfigParser as configparser
++import configparser
+ import errno
+ import json
+ import os
+ import re
+ import subprocess
+ import sys
++from pathlib import Path
++from typing import Callable, Dict
++import functools
++
++have_tomllib = True
++if sys.version_info >= (3, 11):
++ import tomllib
++else:
++ try:
++ import tomli as tomllib
++ except ImportError:
++ have_tomllib = False
+
+
+ class VersioneerConfig:
+@@ -321,12 +361,12 @@ def get_root():
+ # module-import table will cache the first one. So we can't use
+ # os.path.dirname(__file__), as that will find whichever
+ # versioneer.py was first imported, even in later projects.
+- me = os.path.realpath(os.path.abspath(__file__))
+- me_dir = os.path.normcase(os.path.splitext(me)[0])
++ my_path = os.path.realpath(os.path.abspath(__file__))
++ me_dir = os.path.normcase(os.path.splitext(my_path)[0])
+ vsr_dir = os.path.normcase(os.path.splitext(versioneer_py)[0])
+- if me_dir != vsr_dir:
++ if me_dir != vsr_dir and "VERSIONEER_PEP518" not in globals():
+ print("Warning: build in %s is using versioneer.py from %s"
+- % (os.path.dirname(me), versioneer_py))
++ % (os.path.dirname(my_path), versioneer_py))
+ except NameError:
+ pass
+ return root
+@@ -334,48 +374,56 @@ def get_root():
+
+ def get_config_from_root(root):
+ """Read the project setup.cfg file to determine Versioneer config."""
+- # This might raise EnvironmentError (if setup.cfg is missing), or
++ # This might raise OSError (if setup.cfg is missing), or
+ # configparser.NoSectionError (if it lacks a [versioneer] section), or
+ # configparser.NoOptionError (if it lacks "VCS="). See the docstring at
+ # the top of versioneer.py for instructions on writing your setup.cfg .
+- setup_cfg = os.path.join(root, "setup.cfg")
+- parser = configparser.SafeConfigParser()
+- with open(setup_cfg, "r") as f:
+- parser.readfp(f)
+- VCS = parser.get("versioneer", "VCS") # mandatory
++ root = Path(root)
++ pyproject_toml = root / "pyproject.toml"
++ setup_cfg = root / "setup.cfg"
++ section = None
++ if pyproject_toml.exists() and have_tomllib:
++ try:
++ with open(pyproject_toml, 'rb') as fobj:
++ pp = tomllib.load(fobj)
++ section = pp['tool']['versioneer']
++ except (tomllib.TOMLDecodeError, KeyError):
++ pass
++ if not section:
++ parser = configparser.ConfigParser()
++ with open(setup_cfg) as cfg_file:
++ parser.read_file(cfg_file)
++ parser.get("versioneer", "VCS") # raise error if missing
++
++ section = parser["versioneer"]
+
+- def get(parser, name):
+- if parser.has_option("versioneer", name):
+- return parser.get("versioneer", name)
+- return None
+ cfg = VersioneerConfig()
+- cfg.VCS = VCS
+- cfg.style = get(parser, "style") or ""
+- cfg.versionfile_source = get(parser, "versionfile_source")
+- cfg.versionfile_build = get(parser, "versionfile_build")
+- cfg.tag_prefix = get(parser, "tag_prefix")
+- if cfg.tag_prefix in ("''", '""'):
++ cfg.VCS = section['VCS']
++ cfg.style = section.get("style", "")
++ cfg.versionfile_source = section.get("versionfile_source")
++ cfg.versionfile_build = section.get("versionfile_build")
++ cfg.tag_prefix = section.get("tag_prefix")
++ if cfg.tag_prefix in ("''", '""', None):
+ cfg.tag_prefix = ""
+- cfg.parentdir_prefix = get(parser, "parentdir_prefix")
+- cfg.verbose = get(parser, "verbose")
++ cfg.parentdir_prefix = section.get("parentdir_prefix")
++ cfg.verbose = section.get("verbose")
+ return cfg
+
+
+ class NotThisMethod(Exception):
+ """Exception raised if a method is not valid for the current scenario."""
+
++
+ # these dictionaries contain VCS-specific tools
+-LONG_VERSION_PY = {}
+-HANDLERS = {}
++LONG_VERSION_PY: Dict[str, str] = {}
++HANDLERS: Dict[str, Dict[str, Callable]] = {}
+
+
+ def register_vcs_handler(vcs, method): # decorator
+- """Decorator to mark a method as the handler for a particular VCS."""
++ """Create decorator to mark a method as the handler of a VCS."""
+ def decorate(f):
+ """Store f in HANDLERS[vcs][method]."""
+- if vcs not in HANDLERS:
+- HANDLERS[vcs] = {}
+- HANDLERS[vcs][method] = f
++ HANDLERS.setdefault(vcs, {})[method] = f
+ return f
+ return decorate
+
+@@ -384,17 +432,25 @@ def run_command(commands, args, cwd=None
+ env=None):
+ """Call the given command(s)."""
+ assert isinstance(commands, list)
+- p = None
+- for c in commands:
++ process = None
++
++ popen_kwargs = {}
++ if sys.platform == "win32":
++ # This hides the console window if pythonw.exe is used
++ startupinfo = subprocess.STARTUPINFO()
++ startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
++ popen_kwargs["startupinfo"] = startupinfo
++
++ for command in commands:
+ try:
+- dispcmd = str([c] + args)
++ dispcmd = str([command] + args)
+ # remember shell=False, so use git.cmd on windows, not just git
+- p = subprocess.Popen([c] + args, cwd=cwd, env=env,
++ process = subprocess.Popen([command] + args, cwd=cwd, env=env,
+ stdout=subprocess.PIPE,
+ stderr=(subprocess.PIPE if hide_stderr
+- else None))
++ else None), **popen_kwargs)
+ break
+- except EnvironmentError:
++ except OSError:
+ e = sys.exc_info()[1]
+ if e.errno == errno.ENOENT:
+ continue
+@@ -406,24 +462,25 @@ def run_command(commands, args, cwd=None
+ if verbose:
+ print("unable to find command, tried %s" % (commands,))
+ return None, None
+- stdout = p.communicate()[0].strip()
+- if sys.version_info[0] >= 3:
+- stdout = stdout.decode()
+- if p.returncode != 0:
++ stdout = process.communicate()[0].strip().decode()
++ if process.returncode != 0:
+ if verbose:
+ print("unable to run %s (error)" % dispcmd)
+ print("stdout was %s" % stdout)
+- return None, p.returncode
+- return stdout, p.returncode
+-LONG_VERSION_PY['git'] = '''
++ return None, process.returncode
++ return stdout, process.returncode
++
++
++LONG_VERSION_PY['git'] = r'''
+ # This file helps to compute a version number in source trees obtained from
+ # git-archive tarball (such as those provided by githubs download-from-tag
+ # feature). Distribution tarballs (built by setup.py sdist) and build
+ # directories (produced by setup.py build) will contain a much shorter file
+ # that just contains the computed version number.
+
+-# This file is released into the public domain. Generated by
+-# versioneer-0.17 (https://github.com/warner/python-versioneer)
++# This file is released into the public domain.
++# Generated by versioneer-0.28
++# https://github.com/python-versioneer/python-versioneer
+
+ """Git implementation of _version.py."""
+
+@@ -432,6 +489,8 @@ import os
+ import re
+ import subprocess
+ import sys
++from typing import Callable, Dict
++import functools
+
+
+ def get_keywords():
+@@ -469,12 +528,12 @@ class NotThisMethod(Exception):
+ """Exception raised if a method is not valid for the current scenario."""
+
+
+-LONG_VERSION_PY = {}
+-HANDLERS = {}
++LONG_VERSION_PY: Dict[str, str] = {}
++HANDLERS: Dict[str, Dict[str, Callable]] = {}
+
+
+ def register_vcs_handler(vcs, method): # decorator
+- """Decorator to mark a method as the handler for a particular VCS."""
++ """Create decorator to mark a method as the handler of a VCS."""
+ def decorate(f):
+ """Store f in HANDLERS[vcs][method]."""
+ if vcs not in HANDLERS:
+@@ -488,17 +547,25 @@ def run_command(commands, args, cwd=None
+ env=None):
+ """Call the given command(s)."""
+ assert isinstance(commands, list)
+- p = None
+- for c in commands:
++ process = None
++
++ popen_kwargs = {}
++ if sys.platform == "win32":
++ # This hides the console window if pythonw.exe is used
++ startupinfo = subprocess.STARTUPINFO()
++ startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
++ popen_kwargs["startupinfo"] = startupinfo
++
++ for command in commands:
+ try:
+- dispcmd = str([c] + args)
++ dispcmd = str([command] + args)
+ # remember shell=False, so use git.cmd on windows, not just git
+- p = subprocess.Popen([c] + args, cwd=cwd, env=env,
++ process = subprocess.Popen([command] + args, cwd=cwd, env=env,
+ stdout=subprocess.PIPE,
+ stderr=(subprocess.PIPE if hide_stderr
+- else None))
++ else None), **popen_kwargs)
+ break
+- except EnvironmentError:
++ except OSError:
+ e = sys.exc_info()[1]
+ if e.errno == errno.ENOENT:
+ continue
+@@ -510,15 +577,13 @@ def run_command(commands, args, cwd=None
+ if verbose:
+ print("unable to find command, tried %%s" %% (commands,))
+ return None, None
+- stdout = p.communicate()[0].strip()
+- if sys.version_info[0] >= 3:
+- stdout = stdout.decode()
+- if p.returncode != 0:
++ stdout = process.communicate()[0].strip().decode()
++ if process.returncode != 0:
+ if verbose:
+ print("unable to run %%s (error)" %% dispcmd)
+ print("stdout was %%s" %% stdout)
+- return None, p.returncode
+- return stdout, p.returncode
++ return None, process.returncode
++ return stdout, process.returncode
+
+
+ def versions_from_parentdir(parentdir_prefix, root, verbose):
+@@ -530,13 +595,12 @@ def versions_from_parentdir(parentdir_pr
+ """
+ rootdirs = []
+
+- for i in range(3):
++ for _ in range(3):
+ dirname = os.path.basename(root)
+ if dirname.startswith(parentdir_prefix):
+ return {"version": dirname[len(parentdir_prefix):],
+ "full-revisionid": None,
+ "dirty": False, "error": None, "date": None}
+- else:
+ rootdirs.append(root)
+ root = os.path.dirname(root) # up a level
+
+@@ -555,8 +619,8 @@ def git_get_keywords(versionfile_abs):
+ # _version.py.
+ keywords = {}
+ try:
+- f = open(versionfile_abs, "r")
+- for line in f.readlines():
++ with open(versionfile_abs, "r") as fobj:
++ for line in fobj:
+ if line.strip().startswith("git_refnames ="):
+ mo = re.search(r'=\s*"(.*)"', line)
+ if mo:
+@@ -569,8 +633,7 @@ def git_get_keywords(versionfile_abs):
+ mo = re.search(r'=\s*"(.*)"', line)
+ if mo:
+ keywords["date"] = mo.group(1)
+- f.close()
+- except EnvironmentError:
++ except OSError:
+ pass
+ return keywords
+
+@@ -578,10 +641,14 @@ def git_get_keywords(versionfile_abs):
+ @register_vcs_handler("git", "keywords")
+ def git_versions_from_keywords(keywords, tag_prefix, verbose):
+ """Get version information from git keywords."""
+- if not keywords:
+- raise NotThisMethod("no keywords at all, weird")
++ if "refnames" not in keywords:
++ raise NotThisMethod("Short version file found")
+ date = keywords.get("date")
+ if date is not None:
++ # Use only the last line. Previous lines may contain GPG signature
++ # information.
++ date = date.splitlines()[-1]
++
+ # git-2.2.0 added "%%cI", which expands to an ISO-8601 -compliant
+ # datestamp. However we prefer "%%ci" (which expands to an "ISO-8601
+ # -like" string, which we must then edit to make compliant), because
+@@ -594,11 +661,11 @@ def git_versions_from_keywords(keywords,
+ if verbose:
+ print("keywords are unexpanded, not using")
+ raise NotThisMethod("unexpanded keywords, not a git-archive tarball")
+- refs = set([r.strip() for r in refnames.strip("()").split(",")])
++ refs = {r.strip() for r in refnames.strip("()").split(",")}
+ # starting in git-1.8.3, tags are listed as "tag: foo-1.0" instead of
+ # just "foo-1.0". If we see a "tag: " prefix, prefer those.
+ TAG = "tag: "
+- tags = set([r[len(TAG):] for r in refs if r.startswith(TAG)])
++ tags = {r[len(TAG):] for r in refs if r.startswith(TAG)}
+ if not tags:
+ # Either we're using git < 1.8.3, or there really are no tags. We use
+ # a heuristic: assume all version tags have a digit. The old git %%d
+@@ -607,7 +674,7 @@ def git_versions_from_keywords(keywords,
+ # between branches and tags. By ignoring refnames without digits, we
+ # filter out many common branch names like "release" and
+ # "stabilization", as well as "HEAD" and "master".
+- tags = set([r for r in refs if re.search(r'\d', r)])
++ tags = {r for r in refs if re.search(r'\d', r)}
+ if verbose:
+ print("discarding '%%s', no digits" %% ",".join(refs - tags))
+ if verbose:
+@@ -616,6 +683,11 @@ def git_versions_from_keywords(keywords,
+ # sorting will prefer e.g. "2.0" over "2.0rc1"
+ if ref.startswith(tag_prefix):
+ r = ref[len(tag_prefix):]
++ # Filter out refs that exactly match prefix or that don't start
++ # with a number once the prefix is stripped (mostly a concern
++ # when prefix is '')
++ if not re.match(r'\d', r):
++ continue
+ if verbose:
+ print("picking %%s" %% r)
+ return {"version": r,
+@@ -631,7 +703,7 @@ def git_versions_from_keywords(keywords,
+
+
+ @register_vcs_handler("git", "pieces_from_vcs")
+-def git_pieces_from_vcs(tag_prefix, root, verbose, run_command=run_command):
++def git_pieces_from_vcs(tag_prefix, root, verbose, runner=run_command):
+ """Get version from 'git describe' in the root of the source tree.
+
+ This only gets called if the git-archive 'subst' keywords were *not*
+@@ -642,8 +714,15 @@ def git_pieces_from_vcs(tag_prefix, root
+ if sys.platform == "win32":
+ GITS = ["git.cmd", "git.exe"]
+
+- out, rc = run_command(GITS, ["rev-parse", "--git-dir"], cwd=root,
+- hide_stderr=True)
++ # GIT_DIR can interfere with correct operation of Versioneer.
++ # It may be intended to be passed to the Versioneer-versioned project,
++ # but that should not change where we get our version from.
++ env = os.environ.copy()
++ env.pop("GIT_DIR", None)
++ runner = functools.partial(runner, env=env)
++
++ _, rc = runner(GITS, ["rev-parse", "--git-dir"], cwd=root,
++ hide_stderr=not verbose)
+ if rc != 0:
+ if verbose:
+ print("Directory %%s not under git control" %% root)
+@@ -651,15 +730,15 @@ def git_pieces_from_vcs(tag_prefix, root
+
+ # if there is a tag matching tag_prefix, this yields TAG-NUM-gHEX[-dirty]
+ # if there isn't one, this yields HEX[-dirty] (no NUM)
+- describe_out, rc = run_command(GITS, ["describe", "--tags", "--dirty",
+- "--always", "--long",
+- "--match", "%%s*" %% tag_prefix],
+- cwd=root)
++ describe_out, rc = runner(GITS, [
++ "describe", "--tags", "--dirty", "--always", "--long",
++ "--match", f"{tag_prefix}[[:digit:]]*"
++ ], cwd=root)
+ # --long was added in git-1.5.5
+ if describe_out is None:
+ raise NotThisMethod("'git describe' failed")
+ describe_out = describe_out.strip()
+- full_out, rc = run_command(GITS, ["rev-parse", "HEAD"], cwd=root)
++ full_out, rc = runner(GITS, ["rev-parse", "HEAD"], cwd=root)
+ if full_out is None:
+ raise NotThisMethod("'git rev-parse' failed")
+ full_out = full_out.strip()
+@@ -669,6 +748,39 @@ def git_pieces_from_vcs(tag_prefix, root
+ pieces["short"] = full_out[:7] # maybe improved later
+ pieces["error"] = None
+
++ branch_name, rc = runner(GITS, ["rev-parse", "--abbrev-ref", "HEAD"],
++ cwd=root)
++ # --abbrev-ref was added in git-1.6.3
++ if rc != 0 or branch_name is None:
++ raise NotThisMethod("'git rev-parse --abbrev-ref' returned error")
++ branch_name = branch_name.strip()
++
++ if branch_name == "HEAD":
++ # If we aren't exactly on a branch, pick a branch which represents
++ # the current commit. If all else fails, we are on a branchless
++ # commit.
++ branches, rc = runner(GITS, ["branch", "--contains"], cwd=root)
++ # --contains was added in git-1.5.4
++ if rc != 0 or branches is None:
++ raise NotThisMethod("'git branch --contains' returned error")
++ branches = branches.split("\n")
++
++ # Remove the first line if we're running detached
++ if "(" in branches[0]:
++ branches.pop(0)
++
++ # Strip off the leading "* " from the list of branches.
++ branches = [branch[2:] for branch in branches]
++ if "master" in branches:
++ branch_name = "master"
++ elif not branches:
++ branch_name = None
++ else:
++ # Pick the first branch that is returned. Good or bad.
++ branch_name = branches[0]
++
++ pieces["branch"] = branch_name
++
+ # parse describe_out. It will be like TAG-NUM-gHEX[-dirty] or HEX[-dirty]
+ # TAG might have hyphens.
+ git_describe = describe_out
+@@ -685,7 +797,7 @@ def git_pieces_from_vcs(tag_prefix, root
+ # TAG-NUM-gHEX
+ mo = re.search(r'^(.+)-(\d+)-g([0-9a-f]+)$', git_describe)
+ if not mo:
+- # unparseable. Maybe git-describe is misbehaving?
++ # unparsable. Maybe git-describe is misbehaving?
+ pieces["error"] = ("unable to parse git-describe output: '%%s'"
+ %% describe_out)
+ return pieces
+@@ -710,13 +822,14 @@ def git_pieces_from_vcs(tag_prefix, root
+ else:
+ # HEX: no tags
+ pieces["closest-tag"] = None
+- count_out, rc = run_command(GITS, ["rev-list", "HEAD", "--count"],
+- cwd=root)
+- pieces["distance"] = int(count_out) # total number of commits
++ out, rc = runner(GITS, ["rev-list", "HEAD", "--left-right"], cwd=root)
++ pieces["distance"] = len(out.split()) # total number of commits
+
+ # commit date: see ISO-8601 comment in git_versions_from_keywords()
+- date = run_command(GITS, ["show", "-s", "--format=%%ci", "HEAD"],
+- cwd=root)[0].strip()
++ date = runner(GITS, ["show", "-s", "--format=%%ci", "HEAD"], cwd=root)[0].strip()
++ # Use only the last line. Previous lines may contain GPG signature
++ # information.
++ date = date.splitlines()[-1]
+ pieces["date"] = date.strip().replace(" ", "T", 1).replace(" ", "", 1)
+
+ return pieces
+@@ -754,19 +867,67 @@ def render_pep440(pieces):
+ return rendered
+
+
+-def render_pep440_pre(pieces):
+- """TAG[.post.devDISTANCE] -- No -dirty.
++def render_pep440_branch(pieces):
++ """TAG[[.dev0]+DISTANCE.gHEX[.dirty]] .
++
++ The ".dev0" means not master branch. Note that .dev0 sorts backwards
++ (a feature branch will appear "older" than the master branch).
+
+ Exceptions:
+- 1: no tags. 0.post.devDISTANCE
++ 1: no tags. 0[.dev0]+untagged.DISTANCE.gHEX[.dirty]
+ """
+ if pieces["closest-tag"]:
+ rendered = pieces["closest-tag"]
++ if pieces["distance"] or pieces["dirty"]:
++ if pieces["branch"] != "master":
++ rendered += ".dev0"
++ rendered += plus_or_dot(pieces)
++ rendered += "%%d.g%%s" %% (pieces["distance"], pieces["short"])
++ if pieces["dirty"]:
++ rendered += ".dirty"
++ else:
++ # exception #1
++ rendered = "0"
++ if pieces["branch"] != "master":
++ rendered += ".dev0"
++ rendered += "+untagged.%%d.g%%s" %% (pieces["distance"],
++ pieces["short"])
++ if pieces["dirty"]:
++ rendered += ".dirty"
++ return rendered
++
++
++def pep440_split_post(ver):
++ """Split pep440 version string at the post-release segment.
++
++ Returns the release segments before the post-release and the
++ post-release version number (or -1 if no post-release segment is present).
++ """
++ vc = str.split(ver, ".post")
++ return vc[0], int(vc[1] or 0) if len(vc) == 2 else None
++
++
++def render_pep440_pre(pieces):
++ """TAG[.postN.devDISTANCE] -- No -dirty.
++
++ Exceptions:
++ 1: no tags. 0.post0.devDISTANCE
++ """
++ if pieces["closest-tag"]:
+ if pieces["distance"]:
+- rendered += ".post.dev%%d" %% pieces["distance"]
++ # update the post release segment
++ tag_version, post_version = pep440_split_post(pieces["closest-tag"])
++ rendered = tag_version
++ if post_version is not None:
++ rendered += ".post%%d.dev%%d" %% (post_version + 1, pieces["distance"])
++ else:
++ rendered += ".post0.dev%%d" %% (pieces["distance"])
++ else:
++ # no commits, use the tag as the version
++ rendered = pieces["closest-tag"]
+ else:
+ # exception #1
+- rendered = "0.post.dev%%d" %% pieces["distance"]
++ rendered = "0.post0.dev%%d" %% pieces["distance"]
+ return rendered
+
+
+@@ -797,12 +958,41 @@ def render_pep440_post(pieces):
+ return rendered
+
+
++def render_pep440_post_branch(pieces):
++ """TAG[.postDISTANCE[.dev0]+gHEX[.dirty]] .
++
++ The ".dev0" means not master branch.
++
++ Exceptions:
++ 1: no tags. 0.postDISTANCE[.dev0]+gHEX[.dirty]
++ """
++ if pieces["closest-tag"]:
++ rendered = pieces["closest-tag"]
++ if pieces["distance"] or pieces["dirty"]:
++ rendered += ".post%%d" %% pieces["distance"]
++ if pieces["branch"] != "master":
++ rendered += ".dev0"
++ rendered += plus_or_dot(pieces)
++ rendered += "g%%s" %% pieces["short"]
++ if pieces["dirty"]:
++ rendered += ".dirty"
++ else:
++ # exception #1
++ rendered = "0.post%%d" %% pieces["distance"]
++ if pieces["branch"] != "master":
++ rendered += ".dev0"
++ rendered += "+g%%s" %% pieces["short"]
++ if pieces["dirty"]:
++ rendered += ".dirty"
++ return rendered
++
++
+ def render_pep440_old(pieces):
+ """TAG[.postDISTANCE[.dev0]] .
+
+ The ".dev0" means dirty.
+
+- Eexceptions:
++ Exceptions:
+ 1: no tags. 0.postDISTANCE[.dev0]
+ """
+ if pieces["closest-tag"]:
+@@ -873,10 +1063,14 @@ def render(pieces, style):
+
+ if style == "pep440":
+ rendered = render_pep440(pieces)
++ elif style == "pep440-branch":
++ rendered = render_pep440_branch(pieces)
+ elif style == "pep440-pre":
+ rendered = render_pep440_pre(pieces)
+ elif style == "pep440-post":
+ rendered = render_pep440_post(pieces)
++ elif style == "pep440-post-branch":
++ rendered = render_pep440_post_branch(pieces)
+ elif style == "pep440-old":
+ rendered = render_pep440_old(pieces)
+ elif style == "git-describe":
+@@ -912,7 +1106,7 @@ def get_versions():
+ # versionfile_source is the relative path from the top of the source
+ # tree (where the .git directory might live) to this file. Invert
+ # this to find the root from __file__.
+- for i in cfg.versionfile_source.split('/'):
++ for _ in cfg.versionfile_source.split('/'):
+ root = os.path.dirname(root)
+ except NameError:
+ return {"version": "0+unknown", "full-revisionid": None,
+@@ -947,22 +1141,21 @@ def git_get_keywords(versionfile_abs):
+ # _version.py.
+ keywords = {}
+ try:
+- f = open(versionfile_abs, "r")
+- for line in f.readlines():
+- if line.strip().startswith("git_refnames ="):
+- mo = re.search(r'=\s*"(.*)"', line)
+- if mo:
+- keywords["refnames"] = mo.group(1)
+- if line.strip().startswith("git_full ="):
+- mo = re.search(r'=\s*"(.*)"', line)
+- if mo:
+- keywords["full"] = mo.group(1)
+- if line.strip().startswith("git_date ="):
+- mo = re.search(r'=\s*"(.*)"', line)
+- if mo:
+- keywords["date"] = mo.group(1)
+- f.close()
+- except EnvironmentError:
++ with open(versionfile_abs, "r") as fobj:
++ for line in fobj:
++ if line.strip().startswith("git_refnames ="):
++ mo = re.search(r'=\s*"(.*)"', line)
++ if mo:
++ keywords["refnames"] = mo.group(1)
++ if line.strip().startswith("git_full ="):
++ mo = re.search(r'=\s*"(.*)"', line)
++ if mo:
++ keywords["full"] = mo.group(1)
++ if line.strip().startswith("git_date ="):
++ mo = re.search(r'=\s*"(.*)"', line)
++ if mo:
++ keywords["date"] = mo.group(1)
++ except OSError:
+ pass
+ return keywords
+
+@@ -970,10 +1163,14 @@ def git_get_keywords(versionfile_abs):
+ @register_vcs_handler("git", "keywords")
+ def git_versions_from_keywords(keywords, tag_prefix, verbose):
+ """Get version information from git keywords."""
+- if not keywords:
+- raise NotThisMethod("no keywords at all, weird")
++ if "refnames" not in keywords:
++ raise NotThisMethod("Short version file found")
+ date = keywords.get("date")
+ if date is not None:
++ # Use only the last line. Previous lines may contain GPG signature
++ # information.
++ date = date.splitlines()[-1]
++
+ # git-2.2.0 added "%cI", which expands to an ISO-8601 -compliant
+ # datestamp. However we prefer "%ci" (which expands to an "ISO-8601
+ # -like" string, which we must then edit to make compliant), because
+@@ -986,11 +1183,11 @@ def git_versions_from_keywords(keywords,
+ if verbose:
+ print("keywords are unexpanded, not using")
+ raise NotThisMethod("unexpanded keywords, not a git-archive tarball")
+- refs = set([r.strip() for r in refnames.strip("()").split(",")])
++ refs = {r.strip() for r in refnames.strip("()").split(",")}
+ # starting in git-1.8.3, tags are listed as "tag: foo-1.0" instead of
+ # just "foo-1.0". If we see a "tag: " prefix, prefer those.
+ TAG = "tag: "
+- tags = set([r[len(TAG):] for r in refs if r.startswith(TAG)])
++ tags = {r[len(TAG):] for r in refs if r.startswith(TAG)}
+ if not tags:
+ # Either we're using git < 1.8.3, or there really are no tags. We use
+ # a heuristic: assume all version tags have a digit. The old git %d
+@@ -999,7 +1196,7 @@ def git_versions_from_keywords(keywords,
+ # between branches and tags. By ignoring refnames without digits, we
+ # filter out many common branch names like "release" and
+ # "stabilization", as well as "HEAD" and "master".
+- tags = set([r for r in refs if re.search(r'\d', r)])
++ tags = {r for r in refs if re.search(r'\d', r)}
+ if verbose:
+ print("discarding '%s', no digits" % ",".join(refs - tags))
+ if verbose:
+@@ -1008,6 +1205,11 @@ def git_versions_from_keywords(keywords,
+ # sorting will prefer e.g. "2.0" over "2.0rc1"
+ if ref.startswith(tag_prefix):
+ r = ref[len(tag_prefix):]
++ # Filter out refs that exactly match prefix or that don't start
++ # with a number once the prefix is stripped (mostly a concern
++ # when prefix is '')
++ if not re.match(r'\d', r):
++ continue
+ if verbose:
+ print("picking %s" % r)
+ return {"version": r,
+@@ -1023,7 +1225,7 @@ def git_versions_from_keywords(keywords,
+
+
+ @register_vcs_handler("git", "pieces_from_vcs")
+-def git_pieces_from_vcs(tag_prefix, root, verbose, run_command=run_command):
++def git_pieces_from_vcs(tag_prefix, root, verbose, runner=run_command):
+ """Get version from 'git describe' in the root of the source tree.
+
+ This only gets called if the git-archive 'subst' keywords were *not*
+@@ -1034,8 +1236,15 @@ def git_pieces_from_vcs(tag_prefix, root
+ if sys.platform == "win32":
+ GITS = ["git.cmd", "git.exe"]
+
+- out, rc = run_command(GITS, ["rev-parse", "--git-dir"], cwd=root,
+- hide_stderr=True)
++ # GIT_DIR can interfere with correct operation of Versioneer.
++ # It may be intended to be passed to the Versioneer-versioned project,
++ # but that should not change where we get our version from.
++ env = os.environ.copy()
++ env.pop("GIT_DIR", None)
++ runner = functools.partial(runner, env=env)
++
++ _, rc = runner(GITS, ["rev-parse", "--git-dir"], cwd=root,
++ hide_stderr=not verbose)
+ if rc != 0:
+ if verbose:
+ print("Directory %s not under git control" % root)
+@@ -1043,15 +1252,15 @@ def git_pieces_from_vcs(tag_prefix, root
+
+ # if there is a tag matching tag_prefix, this yields TAG-NUM-gHEX[-dirty]
+ # if there isn't one, this yields HEX[-dirty] (no NUM)
+- describe_out, rc = run_command(GITS, ["describe", "--tags", "--dirty",
+- "--always", "--long",
+- "--match", "%s*" % tag_prefix],
+- cwd=root)
++ describe_out, rc = runner(GITS, [
++ "describe", "--tags", "--dirty", "--always", "--long",
++ "--match", f"{tag_prefix}[[:digit:]]*"
++ ], cwd=root)
+ # --long was added in git-1.5.5
+ if describe_out is None:
+ raise NotThisMethod("'git describe' failed")
+ describe_out = describe_out.strip()
+- full_out, rc = run_command(GITS, ["rev-parse", "HEAD"], cwd=root)
++ full_out, rc = runner(GITS, ["rev-parse", "HEAD"], cwd=root)
+ if full_out is None:
+ raise NotThisMethod("'git rev-parse' failed")
+ full_out = full_out.strip()
+@@ -1061,6 +1270,39 @@ def git_pieces_from_vcs(tag_prefix, root
+ pieces["short"] = full_out[:7] # maybe improved later
+ pieces["error"] = None
+
++ branch_name, rc = runner(GITS, ["rev-parse", "--abbrev-ref", "HEAD"],
++ cwd=root)
++ # --abbrev-ref was added in git-1.6.3
++ if rc != 0 or branch_name is None:
++ raise NotThisMethod("'git rev-parse --abbrev-ref' returned error")
++ branch_name = branch_name.strip()
++
++ if branch_name == "HEAD":
++ # If we aren't exactly on a branch, pick a branch which represents
++ # the current commit. If all else fails, we are on a branchless
++ # commit.
++ branches, rc = runner(GITS, ["branch", "--contains"], cwd=root)
++ # --contains was added in git-1.5.4
++ if rc != 0 or branches is None:
++ raise NotThisMethod("'git branch --contains' returned error")
++ branches = branches.split("\n")
++
++ # Remove the first line if we're running detached
++ if "(" in branches[0]:
++ branches.pop(0)
++
++ # Strip off the leading "* " from the list of branches.
++ branches = [branch[2:] for branch in branches]
++ if "master" in branches:
++ branch_name = "master"
++ elif not branches:
++ branch_name = None
++ else:
++ # Pick the first branch that is returned. Good or bad.
++ branch_name = branches[0]
++
++ pieces["branch"] = branch_name
++
+ # parse describe_out. It will be like TAG-NUM-gHEX[-dirty] or HEX[-dirty]
+ # TAG might have hyphens.
+ git_describe = describe_out
+@@ -1077,7 +1319,7 @@ def git_pieces_from_vcs(tag_prefix, root
+ # TAG-NUM-gHEX
+ mo = re.search(r'^(.+)-(\d+)-g([0-9a-f]+)$', git_describe)
+ if not mo:
+- # unparseable. Maybe git-describe is misbehaving?
++ # unparsable. Maybe git-describe is misbehaving?
+ pieces["error"] = ("unable to parse git-describe output: '%s'"
+ % describe_out)
+ return pieces
+@@ -1102,19 +1344,20 @@ def git_pieces_from_vcs(tag_prefix, root
+ else:
+ # HEX: no tags
+ pieces["closest-tag"] = None
+- count_out, rc = run_command(GITS, ["rev-list", "HEAD", "--count"],
+- cwd=root)
+- pieces["distance"] = int(count_out) # total number of commits
++ out, rc = runner(GITS, ["rev-list", "HEAD", "--left-right"], cwd=root)
++ pieces["distance"] = len(out.split()) # total number of commits
+
+ # commit date: see ISO-8601 comment in git_versions_from_keywords()
+- date = run_command(GITS, ["show", "-s", "--format=%ci", "HEAD"],
+- cwd=root)[0].strip()
++ date = runner(GITS, ["show", "-s", "--format=%ci", "HEAD"], cwd=root)[0].strip()
++ # Use only the last line. Previous lines may contain GPG signature
++ # information.
++ date = date.splitlines()[-1]
+ pieces["date"] = date.strip().replace(" ", "T", 1).replace(" ", "", 1)
+
+ return pieces
+
+
+-def do_vcs_install(manifest_in, versionfile_source, ipy):
++def do_vcs_install(versionfile_source, ipy):
+ """Git-specific installation logic for Versioneer.
+
+ For Git, this means creating/changing .gitattributes to mark _version.py
+@@ -1123,31 +1366,31 @@ def do_vcs_install(manifest_in, versionf
+ GITS = ["git"]
+ if sys.platform == "win32":
+ GITS = ["git.cmd", "git.exe"]
+- files = [manifest_in, versionfile_source]
++ files = [versionfile_source]
+ if ipy:
+ files.append(ipy)
+- try:
+- me = __file__
+- if me.endswith(".pyc") or me.endswith(".pyo"):
+- me = os.path.splitext(me)[0] + ".py"
+- versioneer_file = os.path.relpath(me)
+- except NameError:
+- versioneer_file = "versioneer.py"
++ if "VERSIONEER_PEP518" not in globals():
++ try:
++ my_path = __file__
++ if my_path.endswith((".pyc", ".pyo")):
++ my_path = os.path.splitext(my_path)[0] + ".py"
++ versioneer_file = os.path.relpath(my_path)
++ except NameError:
++ versioneer_file = "versioneer.py"
+ files.append(versioneer_file)
+ present = False
+ try:
+- f = open(".gitattributes", "r")
+- for line in f.readlines():
+- if line.strip().startswith(versionfile_source):
+- if "export-subst" in line.strip().split()[1:]:
+- present = True
+- f.close()
+- except EnvironmentError:
++ with open(".gitattributes", "r") as fobj:
++ for line in fobj:
++ if line.strip().startswith(versionfile_source):
++ if "export-subst" in line.strip().split()[1:]:
++ present = True
++ break
++ except OSError:
+ pass
+ if not present:
+- f = open(".gitattributes", "a+")
+- f.write("%s export-subst\n" % versionfile_source)
+- f.close()
++ with open(".gitattributes", "a+") as fobj:
++ fobj.write(f"{versionfile_source} export-subst\n")
+ files.append(".gitattributes")
+ run_command(GITS, ["add", "--"] + files)
+
+@@ -1161,13 +1404,12 @@ def versions_from_parentdir(parentdir_pr
+ """
+ rootdirs = []
+
+- for i in range(3):
++ for _ in range(3):
+ dirname = os.path.basename(root)
+ if dirname.startswith(parentdir_prefix):
+ return {"version": dirname[len(parentdir_prefix):],
+ "full-revisionid": None,
+ "dirty": False, "error": None, "date": None}
+- else:
+ rootdirs.append(root)
+ root = os.path.dirname(root) # up a level
+
+@@ -1176,8 +1418,9 @@ def versions_from_parentdir(parentdir_pr
+ (str(rootdirs), parentdir_prefix))
+ raise NotThisMethod("rootdir doesn't start with parentdir_prefix")
+
++
+ SHORT_VERSION_PY = """
+-# This file was generated by 'versioneer.py' (0.17) from
++# This file was generated by 'versioneer.py' (0.28) from
+ # revision-control system data, or from the parent directory name of an
+ # unpacked source archive. Distribution tarballs contain a pre-generated copy
+ # of this file.
+@@ -1199,7 +1442,7 @@ def versions_from_file(filename):
+ try:
+ with open(filename) as f:
+ contents = f.read()
+- except EnvironmentError:
++ except OSError:
+ raise NotThisMethod("unable to read _version.py")
+ mo = re.search(r"version_json = '''\n(.*)''' # END VERSION_JSON",
+ contents, re.M | re.S)
+@@ -1254,19 +1497,67 @@ def render_pep440(pieces):
+ return rendered
+
+
+-def render_pep440_pre(pieces):
+- """TAG[.post.devDISTANCE] -- No -dirty.
++def render_pep440_branch(pieces):
++ """TAG[[.dev0]+DISTANCE.gHEX[.dirty]] .
++
++ The ".dev0" means not master branch. Note that .dev0 sorts backwards
++ (a feature branch will appear "older" than the master branch).
+
+ Exceptions:
+- 1: no tags. 0.post.devDISTANCE
++ 1: no tags. 0[.dev0]+untagged.DISTANCE.gHEX[.dirty]
+ """
+ if pieces["closest-tag"]:
+ rendered = pieces["closest-tag"]
++ if pieces["distance"] or pieces["dirty"]:
++ if pieces["branch"] != "master":
++ rendered += ".dev0"
++ rendered += plus_or_dot(pieces)
++ rendered += "%d.g%s" % (pieces["distance"], pieces["short"])
++ if pieces["dirty"]:
++ rendered += ".dirty"
++ else:
++ # exception #1
++ rendered = "0"
++ if pieces["branch"] != "master":
++ rendered += ".dev0"
++ rendered += "+untagged.%d.g%s" % (pieces["distance"],
++ pieces["short"])
++ if pieces["dirty"]:
++ rendered += ".dirty"
++ return rendered
++
++
++def pep440_split_post(ver):
++ """Split pep440 version string at the post-release segment.
++
++ Returns the release segments before the post-release and the
++ post-release version number (or -1 if no post-release segment is present).
++ """
++ vc = str.split(ver, ".post")
++ return vc[0], int(vc[1] or 0) if len(vc) == 2 else None
++
++
++def render_pep440_pre(pieces):
++ """TAG[.postN.devDISTANCE] -- No -dirty.
++
++ Exceptions:
++ 1: no tags. 0.post0.devDISTANCE
++ """
++ if pieces["closest-tag"]:
+ if pieces["distance"]:
+- rendered += ".post.dev%d" % pieces["distance"]
++ # update the post release segment
++ tag_version, post_version = pep440_split_post(pieces["closest-tag"])
++ rendered = tag_version
++ if post_version is not None:
++ rendered += ".post%d.dev%d" % (post_version + 1, pieces["distance"])
++ else:
++ rendered += ".post0.dev%d" % (pieces["distance"])
++ else:
++ # no commits, use the tag as the version
++ rendered = pieces["closest-tag"]
+ else:
+ # exception #1
+- rendered = "0.post.dev%d" % pieces["distance"]
++ rendered = "0.post0.dev%d" % pieces["distance"]
+ return rendered
+
+
+@@ -1297,12 +1588,41 @@ def render_pep440_post(pieces):
+ return rendered
+
+
++def render_pep440_post_branch(pieces):
++ """TAG[.postDISTANCE[.dev0]+gHEX[.dirty]] .
++
++ The ".dev0" means not master branch.
++
++ Exceptions:
++ 1: no tags. 0.postDISTANCE[.dev0]+gHEX[.dirty]
++ """
++ if pieces["closest-tag"]:
++ rendered = pieces["closest-tag"]
++ if pieces["distance"] or pieces["dirty"]:
++ rendered += ".post%d" % pieces["distance"]
++ if pieces["branch"] != "master":
++ rendered += ".dev0"
++ rendered += plus_or_dot(pieces)
++ rendered += "g%s" % pieces["short"]
++ if pieces["dirty"]:
++ rendered += ".dirty"
++ else:
++ # exception #1
++ rendered = "0.post%d" % pieces["distance"]
++ if pieces["branch"] != "master":
++ rendered += ".dev0"
++ rendered += "+g%s" % pieces["short"]
++ if pieces["dirty"]:
++ rendered += ".dirty"
++ return rendered
++
++
+ def render_pep440_old(pieces):
+ """TAG[.postDISTANCE[.dev0]] .
+
+ The ".dev0" means dirty.
+
+- Eexceptions:
++ Exceptions:
+ 1: no tags. 0.postDISTANCE[.dev0]
+ """
+ if pieces["closest-tag"]:
+@@ -1373,10 +1693,14 @@ def render(pieces, style):
+
+ if style == "pep440":
+ rendered = render_pep440(pieces)
++ elif style == "pep440-branch":
++ rendered = render_pep440_branch(pieces)
+ elif style == "pep440-pre":
+ rendered = render_pep440_pre(pieces)
+ elif style == "pep440-post":
+ rendered = render_pep440_post(pieces)
++ elif style == "pep440-post-branch":
++ rendered = render_pep440_post_branch(pieces)
+ elif style == "pep440-old":
+ rendered = render_pep440_old(pieces)
+ elif style == "git-describe":
+@@ -1476,8 +1800,12 @@ def get_version():
+ return get_versions()["version"]
+
+
+-def get_cmdclass():
+- """Get the custom setuptools/distutils subclasses used by Versioneer."""
++def get_cmdclass(cmdclass=None):
++ """Get the custom setuptools subclasses used by Versioneer.
++
++ If the package uses a different cmdclass (e.g. one from numpy), it
++ should be provide as an argument.
++ """
+ if "versioneer" in sys.modules:
+ del sys.modules["versioneer"]
+ # this fixes the "python setup.py develop" case (also 'install' and
+@@ -1491,12 +1819,12 @@ def get_cmdclass():
+ # parent is protected against the child's "import versioneer". By
+ # removing ourselves from sys.modules here, before the child build
+ # happens, we protect the child from the parent's versioneer too.
+- # Also see https://github.com/warner/python-versioneer/issues/52
++ # Also see https://github.com/python-versioneer/python-versioneer/issues/52
+
+- cmds = {}
++ cmds = {} if cmdclass is None else cmdclass.copy()
+
+- # we add "version" to both distutils and setuptools
+- from distutils.core import Command
++ # we add "version" to setuptools
++ from setuptools import Command
+
+ class cmd_version(Command):
+ description = "report generated version string"
+@@ -1519,7 +1847,7 @@ def get_cmdclass():
+ print(" error: %s" % vers["error"])
+ cmds["version"] = cmd_version
+
+- # we override "build_py" in both distutils and setuptools
++ # we override "build_py" in setuptools
+ #
+ # most invocation pathways end up running build_py:
+ # distutils/build -> build_py
+@@ -1534,11 +1862,14 @@ def get_cmdclass():
+ # then does setup.py bdist_wheel, or sometimes setup.py install
+ # setup.py egg_info -> ?
+
++ # pip install -e . and setuptool/editable_wheel will invoke build_py
++ # but the build_py command is not expected to copy any files.
++
+ # we override different "build_py" commands for both environments
+- if "setuptools" in sys.modules:
+- from setuptools.command.build_py import build_py as _build_py
++ if 'build_py' in cmds:
++ _build_py = cmds['build_py']
+ else:
+- from distutils.command.build_py import build_py as _build_py
++ from setuptools.command.build_py import build_py as _build_py
+
+ class cmd_build_py(_build_py):
+ def run(self):
+@@ -1546,6 +1877,10 @@ def get_cmdclass():
+ cfg = get_config_from_root(root)
+ versions = get_versions()
+ _build_py.run(self)
++ if getattr(self, "editable_mode", False):
++ # During editable installs `.py` and data files are
++ # not copied to build_lib
++ return
+ # now locate _version.py in the new build/ directory and replace
+ # it with an updated value
+ if cfg.versionfile_build:
+@@ -1555,6 +1890,38 @@ def get_cmdclass():
+ write_to_version_file(target_versionfile, versions)
+ cmds["build_py"] = cmd_build_py
+
++ if 'build_ext' in cmds:
++ _build_ext = cmds['build_ext']
++ else:
++ from setuptools.command.build_ext import build_ext as _build_ext
++
++ class cmd_build_ext(_build_ext):
++ def run(self):
++ root = get_root()
++ cfg = get_config_from_root(root)
++ versions = get_versions()
++ _build_ext.run(self)
++ if self.inplace:
++ # build_ext --inplace will only build extensions in
++ # build/lib<..> dir with no _version.py to write to.
++ # As in place builds will already have a _version.py
++ # in the module dir, we do not need to write one.
++ return
++ # now locate _version.py in the new build/ directory and replace
++ # it with an updated value
++ if not cfg.versionfile_build:
++ return
++ target_versionfile = os.path.join(self.build_lib,
++ cfg.versionfile_build)
++ if not os.path.exists(target_versionfile):
++ print(f"Warning: {target_versionfile} does not exist, skipping "
++ "version update. This can happen if you are running build_ext "
++ "without first running build_py.")
++ return
++ print("UPDATING %s" % target_versionfile)
++ write_to_version_file(target_versionfile, versions)
++ cmds["build_ext"] = cmd_build_ext
++
+ if "cx_Freeze" in sys.modules: # cx_freeze enabled?
+ from cx_Freeze.dist import build_exe as _build_exe
+ # nczeczulin reports that py2exe won't like the pep440-style string
+@@ -1589,9 +1956,9 @@ def get_cmdclass():
+
+ if 'py2exe' in sys.modules: # py2exe enabled?
+ try:
+- from py2exe.distutils_buildexe import py2exe as _py2exe # py3
++ from py2exe.setuptools_buildexe import py2exe as _py2exe
+ except ImportError:
+- from py2exe.build_exe import py2exe as _py2exe # py2
++ from py2exe.distutils_buildexe import py2exe as _py2exe
+
+ class cmd_py2exe(_py2exe):
+ def run(self):
+@@ -1615,11 +1982,48 @@ def get_cmdclass():
+ })
+ cmds["py2exe"] = cmd_py2exe
+
++ # sdist farms its file list building out to egg_info
++ if 'egg_info' in cmds:
++ _egg_info = cmds['egg_info']
++ else:
++ from setuptools.command.egg_info import egg_info as _egg_info
++
++ class cmd_egg_info(_egg_info):
++ def find_sources(self):
++ # egg_info.find_sources builds the manifest list and writes it
++ # in one shot
++ super().find_sources()
++
++ # Modify the filelist and normalize it
++ root = get_root()
++ cfg = get_config_from_root(root)
++ self.filelist.append('versioneer.py')
++ if cfg.versionfile_source:
++ # There are rare cases where versionfile_source might not be
++ # included by default, so we must be explicit
++ self.filelist.append(cfg.versionfile_source)
++ self.filelist.sort()
++ self.filelist.remove_duplicates()
++
++ # The write method is hidden in the manifest_maker instance that
++ # generated the filelist and was thrown away
++ # We will instead replicate their final normalization (to unicode,
++ # and POSIX-style paths)
++ from setuptools import unicode_utils
++ normalized = [unicode_utils.filesys_decode(f).replace(os.sep, '/')
++ for f in self.filelist.files]
++
++ manifest_filename = os.path.join(self.egg_info, 'SOURCES.txt')
++ with open(manifest_filename, 'w') as fobj:
++ fobj.write('\n'.join(normalized))
++
++ cmds['egg_info'] = cmd_egg_info
++
+ # we override different "sdist" commands for both environments
+- if "setuptools" in sys.modules:
+- from setuptools.command.sdist import sdist as _sdist
++ if 'sdist' in cmds:
++ _sdist = cmds['sdist']
+ else:
+- from distutils.command.sdist import sdist as _sdist
++ from setuptools.command.sdist import sdist as _sdist
+
+ class cmd_sdist(_sdist):
+ def run(self):
+@@ -1683,21 +2087,26 @@ SAMPLE_CONFIG = """
+
+ """
+
+-INIT_PY_SNIPPET = """
++OLD_SNIPPET = """
+ from ._version import get_versions
+ __version__ = get_versions()['version']
+ del get_versions
+ """
+
++INIT_PY_SNIPPET = """
++from . import {0}
++__version__ = {0}.get_versions()['version']
++"""
++
+
+ def do_setup():
+- """Main VCS-independent setup function for installing Versioneer."""
++ """Do main VCS-independent setup function for installing Versioneer."""
+ root = get_root()
+ try:
+ cfg = get_config_from_root(root)
+- except (EnvironmentError, configparser.NoSectionError,
++ except (OSError, configparser.NoSectionError,
+ configparser.NoOptionError) as e:
+- if isinstance(e, (EnvironmentError, configparser.NoSectionError)):
++ if isinstance(e, (OSError, configparser.NoSectionError)):
+ print("Adding sample versioneer config to setup.cfg",
+ file=sys.stderr)
+ with open(os.path.join(root, "setup.cfg"), "a") as f:
+@@ -1721,54 +2130,28 @@ def do_setup():
+ try:
+ with open(ipy, "r") as f:
+ old = f.read()
+- except EnvironmentError:
++ except OSError:
+ old = ""
+- if INIT_PY_SNIPPET not in old:
++ module = os.path.splitext(os.path.basename(cfg.versionfile_source))[0]
++ snippet = INIT_PY_SNIPPET.format(module)
++ if OLD_SNIPPET in old:
++ print(" replacing boilerplate in %s" % ipy)
++ with open(ipy, "w") as f:
++ f.write(old.replace(OLD_SNIPPET, snippet))
++ elif snippet not in old:
+ print(" appending to %s" % ipy)
+ with open(ipy, "a") as f:
+- f.write(INIT_PY_SNIPPET)
++ f.write(snippet)
+ else:
+ print(" %s unmodified" % ipy)
+ else:
+ print(" %s doesn't exist, ok" % ipy)
+ ipy = None
+
+- # Make sure both the top-level "versioneer.py" and versionfile_source
+- # (PKG/_version.py, used by runtime code) are in MANIFEST.in, so
+- # they'll be copied into source distributions. Pip won't be able to
+- # install the package without this.
+- manifest_in = os.path.join(root, "MANIFEST.in")
+- simple_includes = set()
+- try:
+- with open(manifest_in, "r") as f:
+- for line in f:
+- if line.startswith("include "):
+- for include in line.split()[1:]:
+- simple_includes.add(include)
+- except EnvironmentError:
+- pass
+- # That doesn't cover everything MANIFEST.in can do
+- # (http://docs.python.org/2/distutils/sourcedist.html#commands), so
+- # it might give some false negatives. Appending redundant 'include'
+- # lines is safe, though.
+- if "versioneer.py" not in simple_includes:
+- print(" appending 'versioneer.py' to MANIFEST.in")
+- with open(manifest_in, "a") as f:
+- f.write("include versioneer.py\n")
+- else:
+- print(" 'versioneer.py' already in MANIFEST.in")
+- if cfg.versionfile_source not in simple_includes:
+- print(" appending versionfile_source ('%s') to MANIFEST.in" %
+- cfg.versionfile_source)
+- with open(manifest_in, "a") as f:
+- f.write("include %s\n" % cfg.versionfile_source)
+- else:
+- print(" versionfile_source already in MANIFEST.in")
+-
+ # Make VCS-specific changes. For git, this means creating/changing
+ # .gitattributes to mark _version.py for export-subst keyword
+ # substitution.
+- do_vcs_install(manifest_in, cfg.versionfile_source, ipy)
++ do_vcs_install(cfg.versionfile_source, ipy)
+ return 0
+
+
+@@ -1808,10 +2191,15 @@ def scan_setup_py():
+ errors += 1
+ return errors
+
++
++def setup_command():
++ """Set up Versioneer and exit with appropriate error code."""
++ errors = do_setup()
++ errors += scan_setup_py()
++ sys.exit(1 if errors else 0)
++
++
+ if __name__ == "__main__":
+ cmd = sys.argv[1]
+ if cmd == "setup":
+- errors = do_setup()
+- errors += scan_setup_py()
+- if errors:
+- sys.exit(1)
++ setup_command()
diff --git a/python-texext.spec b/python-texext.spec
index d78ce87..5adfe5d 100644
--- a/python-texext.spec
+++ b/python-texext.spec
@@ -6,6 +6,8 @@ Summary: Sphinx extensions for working with LaTeX math
License: BSD-2-Clause
URL: https://github.com/matthew-brett/texext
Source0: %pypi_source texext
+# Update versioneer to fix FTBFS with python 3.12
+Patch0: %{name}-versioneer.patch
BuildArch: noarch
BuildRequires: python3-devel
@@ -20,7 +22,7 @@ Summary: Sphinx extensions for working with LaTeX math
This package contains Sphinx extensions for working with LaTeX math.
%prep
-%autosetup -n texext-%{version}
+%autosetup -n texext-%{version} -p1
%generate_buildrequires
%pyproject_buildrequires -x test
@@ -40,6 +42,9 @@ rst2html --no-datestamp README.rst README.html
%doc README.html
%changelog
+* Fri Jun 30 2023 Jerry James <loganjerry(a)gmail.com> - 0.6.7-5
+- Add versioneer patch to fix FTBFS with python 3.12
+
* Fri Jun 30 2023 Python Maint <python-maint(a)redhat.com> - 0.6.7-5
- Rebuilt for Python 3.12
https://src.fedoraproject.org/rpms/python-texext/c/5d011911401380ee19a1c9...
10Â months, 1Â week
jjames pushed to rpms/scala (rawhide). "Version 2.13.11 (..more)"
by notificationsï¼ fedoraproject.org
Notification time stamped 2023-06-30 19:41:10 UTC
From c7e138200177592fe32a25fdc12e51ffa5a7a407 Mon Sep 17 00:00:00 2001
From: Jerry James <loganjerry(a)gmail.com>
Date: Jun 30 2023 19:40:48 +0000
Subject: Version 2.13.11
Fix bad scaladoc output (rhbz#2215780)
---
diff --git a/compiler.properties b/compiler.properties
index 542a9a1..21dbb9b 100644
--- a/compiler.properties
+++ b/compiler.properties
@@ -1,6 +1,6 @@
#@@DATE@@
shell.banner=%n ________ ___ / / ___%n / __/ __// _ | / / / _ |%n __\\ \\/ /__/ __ |/ /__/ __ |%n /____/\\___/_/ |_/____/_/ | |%n |/ %s
-copyright.string=Copyright 2002-2021, LAMP/EPFL and Lightbend, Inc.
+copyright.string=Copyright 2002-2023, LAMP/EPFL and Lightbend, Inc.
version.number=@@VER@@
osgi.version.number=@@OSGI@@
maven.version.number=@@VER@@
diff --git a/scala-compiler-2.13.10.pom b/scala-compiler-2.13.10.pom
deleted file mode 100644
index 4bf0184..0000000
--- a/scala-compiler-2.13.10.pom
+++ /dev/null
@@ -1,71 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0">
- <modelVersion>4.0.0</modelVersion>
- <groupId>org.scala-lang</groupId>
- <artifactId>scala-compiler</artifactId>
- <packaging>jar</packaging>
- <description>Compiler for the Scala Programming Language</description>
- <url>https://www.scala-lang.org/</url>
- <version>2.13.10</version>
- <licenses>
- <license>
- <name>Apache-2.0</name>
- <url>https://www.apache.org/licenses/LICENSE-2.0</url>
- <distribution>repo</distribution>
- </license>
- </licenses>
- <name>Scala Compiler</name>
- <inceptionYear>2002</inceptionYear>
- <organization>
- <name>LAMP/EPFL</name>
- <url>https://lamp.epfl.ch/</url>
- </organization>
- <scm>
- <connection>scm:git:git://github.com/scala/scala.git</connection>
- <url>https://github.com/scala/scala</url>
- </scm>
- <issueManagement>
- <system>GitHub</system>
- <url>https://github.com/scala/bug/issues</url>
- </issueManagement>
- <developers>
- <developer>
- <id>lamp</id>
- <name>LAMP/EPFL</name>
- </developer>
- <developer>
- <id>Lightbend</id>
- <name>Lightbend, Inc.</name>
- </developer>
- </developers>
- <properties>
- <info.apiURL>https://www.scala-lang.org/api/2.13.10/scala-compiler/</info.apiURL>
- </properties>
- <dependencies>
- <dependency>
- <groupId>org.scala-lang</groupId>
- <artifactId>scala-library</artifactId>
- <version>2.13.10</version>
- </dependency>
- <dependency>
- <groupId>org.scala-lang</groupId>
- <artifactId>scala-reflect</artifactId>
- <version>2.13.10</version>
- </dependency>
- <dependency>
- <groupId>io.github.java-diff-utils</groupId>
- <artifactId>java-diff-utils</artifactId>
- <version>4.12</version>
- </dependency>
- <dependency>
- <groupId>org.jline</groupId>
- <artifactId>jline</artifactId>
- <version>3.21.0</version>
- </dependency>
- <dependency>
- <groupId>net.java.dev.jna</groupId>
- <artifactId>jna</artifactId>
- <version>5.9.0</version>
- </dependency>
- </dependencies>
-</project>
\ No newline at end of file
diff --git a/scala-compiler-2.13.11.pom b/scala-compiler-2.13.11.pom
new file mode 100644
index 0000000..2e4f44f
--- /dev/null
+++ b/scala-compiler-2.13.11.pom
@@ -0,0 +1,71 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.scala-lang</groupId>
+ <artifactId>scala-compiler</artifactId>
+ <packaging>jar</packaging>
+ <description>Compiler for the Scala Programming Language</description>
+ <url>https://www.scala-lang.org/</url>
+ <version>2.13.11</version>
+ <licenses>
+ <license>
+ <name>Apache-2.0</name>
+ <url>https://www.apache.org/licenses/LICENSE-2.0</url>
+ <distribution>repo</distribution>
+ </license>
+ </licenses>
+ <name>Scala Compiler</name>
+ <inceptionYear>2002</inceptionYear>
+ <organization>
+ <name>LAMP/EPFL</name>
+ <url>https://lamp.epfl.ch/</url>
+ </organization>
+ <scm>
+ <connection>scm:git:git://github.com/scala/scala.git</connection>
+ <url>https://github.com/scala/scala</url>
+ </scm>
+ <issueManagement>
+ <system>GitHub</system>
+ <url>https://github.com/scala/bug/issues</url>
+ </issueManagement>
+ <developers>
+ <developer>
+ <id>lamp</id>
+ <name>LAMP/EPFL</name>
+ </developer>
+ <developer>
+ <id>Lightbend</id>
+ <name>Lightbend, Inc.</name>
+ </developer>
+ </developers>
+ <properties>
+ <info.apiURL>https://www.scala-lang.org/api/2.13.11/scala-compiler/</info.apiURL>
+ </properties>
+ <dependencies>
+ <dependency>
+ <groupId>org.scala-lang</groupId>
+ <artifactId>scala-library</artifactId>
+ <version>2.13.11</version>
+ </dependency>
+ <dependency>
+ <groupId>org.scala-lang</groupId>
+ <artifactId>scala-reflect</artifactId>
+ <version>2.13.11</version>
+ </dependency>
+ <dependency>
+ <groupId>io.github.java-diff-utils</groupId>
+ <artifactId>java-diff-utils</artifactId>
+ <version>4.12</version>
+ </dependency>
+ <dependency>
+ <groupId>org.jline</groupId>
+ <artifactId>jline</artifactId>
+ <version>3.22.0</version>
+ </dependency>
+ <dependency>
+ <groupId>net.java.dev.jna</groupId>
+ <artifactId>jna</artifactId>
+ <version>5.13.0</version>
+ </dependency>
+ </dependencies>
+</project>
\ No newline at end of file
diff --git a/scala-library-2.13.10.pom b/scala-library-2.13.10.pom
deleted file mode 100644
index 808a19b..0000000
--- a/scala-library-2.13.10.pom
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0">
- <modelVersion>4.0.0</modelVersion>
- <groupId>org.scala-lang</groupId>
- <artifactId>scala-library</artifactId>
- <packaging>jar</packaging>
- <description>Standard library for the Scala Programming Language</description>
- <url>https://www.scala-lang.org/</url>
- <version>2.13.10</version>
- <licenses>
- <license>
- <name>Apache-2.0</name>
- <url>https://www.apache.org/licenses/LICENSE-2.0</url>
- <distribution>repo</distribution>
- </license>
- </licenses>
- <name>Scala Library</name>
- <inceptionYear>2002</inceptionYear>
- <organization>
- <name>LAMP/EPFL</name>
- <url>https://lamp.epfl.ch/</url>
- </organization>
- <scm>
- <connection>scm:git:git://github.com/scala/scala.git</connection>
- <url>https://github.com/scala/scala</url>
- </scm>
- <issueManagement>
- <system>GitHub</system>
- <url>https://github.com/scala/bug/issues</url>
- </issueManagement>
- <developers>
- <developer>
- <id>lamp</id>
- <name>LAMP/EPFL</name>
- </developer>
- <developer>
- <id>Lightbend</id>
- <name>Lightbend, Inc.</name>
- </developer>
- </developers>
- <properties>
- <info.apiURL>https://www.scala-lang.org/api/2.13.10/</info.apiURL>
- </properties>
-</project>
\ No newline at end of file
diff --git a/scala-library-2.13.11.pom b/scala-library-2.13.11.pom
new file mode 100644
index 0000000..b0a82a6
--- /dev/null
+++ b/scala-library-2.13.11.pom
@@ -0,0 +1,44 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.scala-lang</groupId>
+ <artifactId>scala-library</artifactId>
+ <packaging>jar</packaging>
+ <description>Standard library for the Scala Programming Language</description>
+ <url>https://www.scala-lang.org/</url>
+ <version>2.13.11</version>
+ <licenses>
+ <license>
+ <name>Apache-2.0</name>
+ <url>https://www.apache.org/licenses/LICENSE-2.0</url>
+ <distribution>repo</distribution>
+ </license>
+ </licenses>
+ <name>Scala Library</name>
+ <inceptionYear>2002</inceptionYear>
+ <organization>
+ <name>LAMP/EPFL</name>
+ <url>https://lamp.epfl.ch/</url>
+ </organization>
+ <scm>
+ <connection>scm:git:git://github.com/scala/scala.git</connection>
+ <url>https://github.com/scala/scala</url>
+ </scm>
+ <issueManagement>
+ <system>GitHub</system>
+ <url>https://github.com/scala/bug/issues</url>
+ </issueManagement>
+ <developers>
+ <developer>
+ <id>lamp</id>
+ <name>LAMP/EPFL</name>
+ </developer>
+ <developer>
+ <id>Lightbend</id>
+ <name>Lightbend, Inc.</name>
+ </developer>
+ </developers>
+ <properties>
+ <info.apiURL>https://www.scala-lang.org/api/2.13.11/</info.apiURL>
+ </properties>
+</project>
\ No newline at end of file
diff --git a/scala-reflect-2.13.10.pom b/scala-reflect-2.13.10.pom
deleted file mode 100644
index 84413ce..0000000
--- a/scala-reflect-2.13.10.pom
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0">
- <modelVersion>4.0.0</modelVersion>
- <groupId>org.scala-lang</groupId>
- <artifactId>scala-reflect</artifactId>
- <packaging>jar</packaging>
- <description>Reflection Library for the Scala Programming Language</description>
- <url>https://www.scala-lang.org/</url>
- <version>2.13.10</version>
- <licenses>
- <license>
- <name>Apache-2.0</name>
- <url>https://www.apache.org/licenses/LICENSE-2.0</url>
- <distribution>repo</distribution>
- </license>
- </licenses>
- <name>Scala Reflect</name>
- <inceptionYear>2002</inceptionYear>
- <organization>
- <name>LAMP/EPFL</name>
- <url>https://lamp.epfl.ch/</url>
- </organization>
- <scm>
- <connection>scm:git:git://github.com/scala/scala.git</connection>
- <url>https://github.com/scala/scala</url>
- </scm>
- <issueManagement>
- <system>GitHub</system>
- <url>https://github.com/scala/bug/issues</url>
- </issueManagement>
- <developers>
- <developer>
- <id>lamp</id>
- <name>LAMP/EPFL</name>
- </developer>
- <developer>
- <id>Lightbend</id>
- <name>Lightbend, Inc.</name>
- </developer>
- </developers>
- <properties>
- <info.apiURL>https://www.scala-lang.org/api/2.13.10/scala-reflect/</info.apiURL>
- </properties>
- <dependencies>
- <dependency>
- <groupId>org.scala-lang</groupId>
- <artifactId>scala-library</artifactId>
- <version>2.13.10</version>
- </dependency>
- </dependencies>
-</project>
\ No newline at end of file
diff --git a/scala-reflect-2.13.11.pom b/scala-reflect-2.13.11.pom
new file mode 100644
index 0000000..270b057
--- /dev/null
+++ b/scala-reflect-2.13.11.pom
@@ -0,0 +1,51 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.scala-lang</groupId>
+ <artifactId>scala-reflect</artifactId>
+ <packaging>jar</packaging>
+ <description>Reflection Library for the Scala Programming Language</description>
+ <url>https://www.scala-lang.org/</url>
+ <version>2.13.11</version>
+ <licenses>
+ <license>
+ <name>Apache-2.0</name>
+ <url>https://www.apache.org/licenses/LICENSE-2.0</url>
+ <distribution>repo</distribution>
+ </license>
+ </licenses>
+ <name>Scala Reflect</name>
+ <inceptionYear>2002</inceptionYear>
+ <organization>
+ <name>LAMP/EPFL</name>
+ <url>https://lamp.epfl.ch/</url>
+ </organization>
+ <scm>
+ <connection>scm:git:git://github.com/scala/scala.git</connection>
+ <url>https://github.com/scala/scala</url>
+ </scm>
+ <issueManagement>
+ <system>GitHub</system>
+ <url>https://github.com/scala/bug/issues</url>
+ </issueManagement>
+ <developers>
+ <developer>
+ <id>lamp</id>
+ <name>LAMP/EPFL</name>
+ </developer>
+ <developer>
+ <id>Lightbend</id>
+ <name>Lightbend, Inc.</name>
+ </developer>
+ </developers>
+ <properties>
+ <info.apiURL>https://www.scala-lang.org/api/2.13.11/scala-reflect/</info.apiURL>
+ </properties>
+ <dependencies>
+ <dependency>
+ <groupId>org.scala-lang</groupId>
+ <artifactId>scala-library</artifactId>
+ <version>2.13.11</version>
+ </dependency>
+ </dependencies>
+</project>
\ No newline at end of file
diff --git a/scala.spec b/scala.spec
index ab258a8..5b55e93 100644
--- a/scala.spec
+++ b/scala.spec
@@ -1,30 +1,30 @@
# Version of scala-altered objectweb-asm
-%global asmver 9.3.0
+%global asmver 9.5.0
%global asmrel 1
# Version of jquery bundled in scaladoc
-%global jqueryver 3.6.0
+%global jqueryver 3.6.4
# Version of jline to use
-%global jlinever 3.21.0
+%global jlinever 3.22.0
%global scaladir %{_datadir}/scala
# Scala needs itself to compile. Use this if the version in the repository
# cannot build the current version.
-%bcond_with bootstrap
+%bcond_without bootstrap
Name: scala
-Version: 2.13.10
-Release: 2%{?dist}
+Version: 2.13.11
+Release: 1%{?dist}
Summary: Hybrid functional/object-oriented language for the JVM
BuildArch: noarch
ExclusiveArch: %{java_arches} noarch
# Used to generate OSGi data
-%global date 20221008
-%global seqnum 124105
-%global commit 4905801fc161300ba20bae4f7adf045b1698e831
+%global date 20230531
+%global seqnum 233414
+%global commit f113b1ab477ae2052725fe0b7ba5ae2796903807
%global shortcommit %(c=%{commit}; echo ${c:0:7})
%global osgiver %{version}.v%{date}-%{seqnum}-VFINAL-%{shortcommit}
%global majver %(cut -d. -f1-2 <<< %{version})
@@ -200,7 +200,7 @@ JLINE_JARS=$(build-classpath jna jline/jline-terminal jline/jline-terminal-jna \
jline/jline-reader jline/jline-style jline/jline-builtins)
JAVAC_FLAGS="-g -parameters -source 11 -target 11"
SCALAC_FLAGS="-g:vars -release $JAVA_VER -J-Xmx512M -J-Xms32M"
-SCALADOC_FLAGS='-J-Xmx512M -J-Xms32M -doc-footer epfl -diagrams -implicits -groups -doc-version %{version} -doc-source-url https://github.com/scala/scala/tree/${versionProperties.value.githubTree}...'
+SCALADOC_FLAGS='-J-Xmx512M -J-Xms32M -doc-footer epfl -diagrams -implicits -groups -doc-version %{version} -doc-source-url https://github.com/scala/scala/blob/v%{version}/src/€{FILE_PATH_EXT}#L€{F...'
DIFFUTILS_JAR=$(build-classpath java-diff-utils)
mkdir -p target/{compiler,library,manual,reflect,scalap,tastytest,testkit}
@@ -447,6 +447,10 @@ install -p -m 644 man/man1/* %{buildroot}%{_mandir}/man1
%license LICENSE NOTICE doc/LICENSE.md doc/License.rtf
%changelog
+* Fri Jun 30 2023 Jerry James <loganjerry(a)gmail.com> - 2.13.11-1
+- Version 2.13.11
+- Fix bad scaladoc output (rhbz#2215780)
+
* Sat Jan 21 2023 Fedora Release Engineering <releng(a)fedoraproject.org> - 2.13.10-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
diff --git a/scalap-2.13.10.pom b/scalap-2.13.10.pom
deleted file mode 100644
index 05d1440..0000000
--- a/scalap-2.13.10.pom
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0">
- <modelVersion>4.0.0</modelVersion>
- <groupId>org.scala-lang</groupId>
- <artifactId>scalap</artifactId>
- <packaging>jar</packaging>
- <description>bytecode analysis tool</description>
- <url>https://www.scala-lang.org/</url>
- <version>2.13.10</version>
- <licenses>
- <license>
- <name>Apache-2.0</name>
- <url>https://www.apache.org/licenses/LICENSE-2.0</url>
- <distribution>repo</distribution>
- </license>
- </licenses>
- <name>Scalap</name>
- <inceptionYear>2002</inceptionYear>
- <organization>
- <name>LAMP/EPFL</name>
- <url>https://lamp.epfl.ch/</url>
- </organization>
- <scm>
- <connection>scm:git:git://github.com/scala/scala.git</connection>
- <url>https://github.com/scala/scala</url>
- </scm>
- <issueManagement>
- <system>GitHub</system>
- <url>https://github.com/scala/bug/issues</url>
- </issueManagement>
- <developers>
- <developer>
- <id>lamp</id>
- <name>LAMP/EPFL</name>
- </developer>
- <developer>
- <id>Lightbend</id>
- <name>Lightbend, Inc.</name>
- </developer>
- </developers>
- <dependencies>
- <dependency>
- <groupId>org.scala-lang</groupId>
- <artifactId>scala-compiler</artifactId>
- <version>2.13.10</version>
- </dependency>
- </dependencies>
-</project>
\ No newline at end of file
diff --git a/scalap-2.13.11.pom b/scalap-2.13.11.pom
new file mode 100644
index 0000000..e698368
--- /dev/null
+++ b/scalap-2.13.11.pom
@@ -0,0 +1,48 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.scala-lang</groupId>
+ <artifactId>scalap</artifactId>
+ <packaging>jar</packaging>
+ <description>bytecode analysis tool</description>
+ <url>https://www.scala-lang.org/</url>
+ <version>2.13.11</version>
+ <licenses>
+ <license>
+ <name>Apache-2.0</name>
+ <url>https://www.apache.org/licenses/LICENSE-2.0</url>
+ <distribution>repo</distribution>
+ </license>
+ </licenses>
+ <name>Scalap</name>
+ <inceptionYear>2002</inceptionYear>
+ <organization>
+ <name>LAMP/EPFL</name>
+ <url>https://lamp.epfl.ch/</url>
+ </organization>
+ <scm>
+ <connection>scm:git:git://github.com/scala/scala.git</connection>
+ <url>https://github.com/scala/scala</url>
+ </scm>
+ <issueManagement>
+ <system>GitHub</system>
+ <url>https://github.com/scala/bug/issues</url>
+ </issueManagement>
+ <developers>
+ <developer>
+ <id>lamp</id>
+ <name>LAMP/EPFL</name>
+ </developer>
+ <developer>
+ <id>Lightbend</id>
+ <name>Lightbend, Inc.</name>
+ </developer>
+ </developers>
+ <dependencies>
+ <dependency>
+ <groupId>org.scala-lang</groupId>
+ <artifactId>scala-compiler</artifactId>
+ <version>2.13.11</version>
+ </dependency>
+ </dependencies>
+</project>
\ No newline at end of file
diff --git a/sources b/sources
index 9a497c6..2d8351c 100644
--- a/sources
+++ b/sources
@@ -1,4 +1,5 @@
-SHA512 (scala-2.13.10.tar.gz) = 7a89ee746d892640faf0ad3a91715c91bd174acbae22fde7dcbc16a71c6bd84d4f448071fd497a778ef5aaba48c306150e591ad1d2c263764aeac79bcc021529
-SHA512 (v9.3.0-scala-1.tar.gz) = babc21a384a2851ef838f85fb8edb7ef6a8b6854bd8d5527c4957eb6f01ea0bc2fe56e6042a88a4e583522a2c3ffe43e0652b59100907b389f98c8562f3beec8
-SHA512 (jquery-3.6.0.min.js) = f3de1813a4160f9239f4781938645e1589b876759cd50b7936dbd849a35c38ffaed53f6a61dbdd8a1cf43cf4a28aa9fffbfddeec9a3811a1bb4ee6df58652b31
-SHA512 (jquery-3.6.0.slim.min.js) = e8e456257fcbae74a3073c1e7dd354c8b08c4c8b06a0d3fa35fb4ccb65009b52419ba3d16423b577b387052b56a551592cef917ab4efa97fd9f660457c2259e0
+SHA512 (scala-2.13.11.tar.gz) = 5cf56b5c5f1177867de93a6e1507d68e65b07a63c66bf77930b1390f2277d616302d7966d7b78a8b7a885106d5d4e474332aa0dbb3cea0a52dcc6864b721a350
+SHA512 (scala-2.13.11.tgz) = a24353ebbbc7d66e99c46c88c9781428fa68db904fa5284c3169559a93013d74b9dbe5accdad123b1278d1f78c1b303a195652d3fbe0090afe0987d6adcf4ae9
+SHA512 (v9.5.0-scala-1.tar.gz) = 6448d3e28ce8567288ace08138e43c5d26c82341869a49e026126c749c51d50638e0a8e3a86bbbe1fca1d28d0d813eddba12fe312c8570b844bb33827bffef47
+SHA512 (jquery-3.6.4.min.js) = a6e981b23351186aa43f32879dd64c6801be6e2af7ef8b0e472cccdeeba52d5d7894de4bcb292a364f1e11e525524077534338140a72687ada4fae62849843a5
+SHA512 (jquery-3.6.4.slim.min.js) = 7d88d2a1c0c3e9cb6e435406228f7e367f4e73899f6aed88884f0a8b5172315e0e704494b7cd4532a9a1b197bdcd667a83a35d733ac4300a2cd4694b2c08a95a
https://src.fedoraproject.org/rpms/scala/c/c7e138200177592fe32a25fdc12e51...
10Â months, 1Â week
walters pushed to rpms/ostree (main).
"https://github.com/ostreedev/ostree/releases/tag/v2023.5"
by notificationsï¼ fedoraproject.org
Notification time stamped 2023-06-30 19:17:27 UTC
From acfa02e9d5ed425a697de86cff24ec0d2b861728 Mon Sep 17 00:00:00 2001
From: Colin Walters <walters(a)verbum.org>
Date: Jun 30 2023 19:17:17 +0000
Subject: https://github.com/ostreedev/ostree/releases/tag/v2023.5
---
diff --git a/.gitignore b/.gitignore
index c375452..b258220 100644
--- a/.gitignore
+++ b/.gitignore
@@ -100,3 +100,4 @@
/libostree-2023.2.tar.xz
/libostree-2023.3.tar.xz
/libostree-2023.4.tar.xz
+/libostree-2023.5.tar.xz
diff --git a/0001-Revert-fetcher-Always-open-tmpfiles-in-repo-location.patch b/0001-Revert-fetcher-Always-open-tmpfiles-in-repo-location.patch
deleted file mode 100644
index fd40771..0000000
--- a/0001-Revert-fetcher-Always-open-tmpfiles-in-repo-location.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From 15bb7c8d531c24a144c1b7e3f85322ebf4f25be6 Mon Sep 17 00:00:00 2001
-From: Colin Walters <walters(a)verbum.org>
-Date: Mon, 26 Jun 2023 05:17:45 -0400
-Subject: [PATCH] Revert "fetcher: Always open tmpfiles in repo location"
-
-This reverts commit f7f6f87c513c9f35bc24f35e909779c19cb49d3a.
-
-This seems to have broken flatpak, so we'll revert and then
-investigate.
-
-Closes: https://github.com/ostreedev/ostree/issues/2900
----
- src/libostree/ostree-fetcher-util.h | 8 +++++++-
- 1 file changed, 7 insertions(+), 1 deletion(-)
-
-diff --git a/src/libostree/ostree-fetcher-util.h b/src/libostree/ostree-fetcher-util.h
-index 35f3e854..c3243801 100644
---- a/src/libostree/ostree-fetcher-util.h
-+++ b/src/libostree/ostree-fetcher-util.h
-@@ -35,8 +35,14 @@ static inline gboolean
- _ostree_fetcher_tmpf_from_flags (OstreeFetcherRequestFlags flags, int dfd, GLnxTmpfile *tmpf,
- GError **error)
- {
-- if (!glnx_open_tmpfile_linkable_at (dfd, ".", O_RDWR | O_CLOEXEC, tmpf, error))
-+ if ((flags & OSTREE_FETCHER_REQUEST_LINKABLE) > 0)
-+ {
-+ if (!glnx_open_tmpfile_linkable_at (dfd, ".", O_RDWR | O_CLOEXEC, tmpf, error))
-+ return FALSE;
-+ }
-+ else if (!glnx_open_anonymous_tmpfile (O_RDWR | O_CLOEXEC, tmpf, error))
- return FALSE;
-+
- if (!glnx_fchmod (tmpf->fd, 0644, error))
- return FALSE;
- return TRUE;
---
-2.41.0
-
diff --git a/ostree.spec b/ostree.spec
index aa0fc3d..225cd61 100644
--- a/ostree.spec
+++ b/ostree.spec
@@ -7,14 +7,12 @@
Summary: Tool for managing bootable, immutable filesystem trees
Name: ostree
-Version: 2023.4
+Version: 2023.5
Release: 2%{?dist}
Source0: https://github.com/ostreedev/%{name}/releases/download/v%{version}/libost...
License: LGPL-2.0-or-later
URL: https://ostree.readthedocs.io/en/latest/
-Patch0: 0001-Revert-fetcher-Always-open-tmpfiles-in-repo-location.patch
-
BuildRequires: make
BuildRequires: git
# We always run autogen.sh
@@ -171,6 +169,9 @@ find %{buildroot} -name '*.la' -delete
%endif
%changelog
+* Fri Jun 30 2023 Colin Walters <walters(a)verbum.org> - 2023.5-2
+- https://github.com/ostreedev/ostree/releases/tag/v2023.5
+
* Mon Jun 26 2023 Colin Walters <walters(a)verbum.org> - 2023.4-2
- Cherry pick patch to fix flatpak
diff --git a/sources b/sources
index c2b6fa1..3362907 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (libostree-2023.4.tar.xz) = 7587732c6852843abd6e4ab0778399a3da868318eb536c1c8e7031bcc7d18ad033c3162e146da3dbdee1c468c4287721cf7421c6208dbd6a9383982e160a5e80
+SHA512 (libostree-2023.5.tar.xz) = 0bb19f199344d8db7299cf710f2ba0b2657cdcb5b1fc6d85446cef9538b069e470b47fc0c2c1029e12b8b9adb978f32a6f44f48949ff5c97a01051a425a9f2d5
https://src.fedoraproject.org/rpms/ostree/c/acfa02e9d5ed425a697de86cff24e...
10Â months, 1Â week
adamwill pushed to rpms/python-wikitcms (rawhide). "New release
2.6.9: expand gp3 not standard in AMI tables"
by notificationsï¼ fedoraproject.org
Notification time stamped 2023-06-30 19:10:39 UTC
From d49f7824173f3d34856ce938c913d3b65946c40a Mon Sep 17 00:00:00 2001
From: Adam Williamson <awilliam(a)redhat.com>
Date: Jun 30 2023 19:09:56 +0000
Subject: New release 2.6.9: expand gp3 not standard in AMI tables
---
diff --git a/.gitignore b/.gitignore
index 661fa1b..5bfff42 100644
--- a/.gitignore
+++ b/.gitignore
@@ -40,3 +40,4 @@
/wikitcms-2.6.6.tar.gz
/wikitcms-2.6.7.tar.gz
/wikitcms-2.6.8.tar.gz
+/wikitcms-2.6.9.tar.gz
diff --git a/python-wikitcms.spec b/python-wikitcms.spec
index 6f53c00..200088d 100644
--- a/python-wikitcms.spec
+++ b/python-wikitcms.spec
@@ -1,7 +1,7 @@
%global srcname wikitcms
Name: python-%{srcname}
-Version: 2.6.8
+Version: 2.6.9
Release: 1%{?dist}
Summary: Fedora QA wiki test management Python library
@@ -65,6 +65,9 @@ sed -i -e 's., "setuptools-git"..g' pyproject.toml
%{python3_sitelib}/%{srcname}*
%changelog
+* Fri Jun 30 2023 Adam Williamson <awilliam(a)redhat.com> - 2.6.9-1
+- New release 2.6.9: expand gp3 not standard in AMI tables
+
* Fri Jun 30 2023 Adam Williamson <awilliam(a)redhat.com> - 2.6.8-1
- New release 2.6.8: handle "gp3" voltype for AMI tables
diff --git a/sources b/sources
index 3c7d2a2..bf0c843 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (wikitcms-2.6.8.tar.gz) = bc74d352f9d492aeff87efe762a9bff16bf3bbc4f24c84806ad590e33016171de526935003d2ad33562cbe15a0bf6f9c78792261b4d75e92ec7c788611279ec0
+SHA512 (wikitcms-2.6.9.tar.gz) = 4ce3edfe17df4f4664920275f4ed3a55d1fcd0c73748675582150fac51926394a457f753cf0de0b9ef578eacfcd37a65892142825c9777193b7d7f399bc26fd3
https://src.fedoraproject.org/rpms/python-wikitcms/c/d49f7824173f3d34856c...
10Â months, 1Â week
adamwill pushed to rpms/python-wikitcms (f38). "New release 2.6.9:
expand gp3 not standard in AMI tables"
by notificationsï¼ fedoraproject.org
Notification time stamped 2023-06-30 19:10:26 UTC
From d49f7824173f3d34856ce938c913d3b65946c40a Mon Sep 17 00:00:00 2001
From: Adam Williamson <awilliam(a)redhat.com>
Date: Jun 30 2023 19:09:56 +0000
Subject: New release 2.6.9: expand gp3 not standard in AMI tables
---
diff --git a/.gitignore b/.gitignore
index 661fa1b..5bfff42 100644
--- a/.gitignore
+++ b/.gitignore
@@ -40,3 +40,4 @@
/wikitcms-2.6.6.tar.gz
/wikitcms-2.6.7.tar.gz
/wikitcms-2.6.8.tar.gz
+/wikitcms-2.6.9.tar.gz
diff --git a/python-wikitcms.spec b/python-wikitcms.spec
index 6f53c00..200088d 100644
--- a/python-wikitcms.spec
+++ b/python-wikitcms.spec
@@ -1,7 +1,7 @@
%global srcname wikitcms
Name: python-%{srcname}
-Version: 2.6.8
+Version: 2.6.9
Release: 1%{?dist}
Summary: Fedora QA wiki test management Python library
@@ -65,6 +65,9 @@ sed -i -e 's., "setuptools-git"..g' pyproject.toml
%{python3_sitelib}/%{srcname}*
%changelog
+* Fri Jun 30 2023 Adam Williamson <awilliam(a)redhat.com> - 2.6.9-1
+- New release 2.6.9: expand gp3 not standard in AMI tables
+
* Fri Jun 30 2023 Adam Williamson <awilliam(a)redhat.com> - 2.6.8-1
- New release 2.6.8: handle "gp3" voltype for AMI tables
diff --git a/sources b/sources
index 3c7d2a2..bf0c843 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (wikitcms-2.6.8.tar.gz) = bc74d352f9d492aeff87efe762a9bff16bf3bbc4f24c84806ad590e33016171de526935003d2ad33562cbe15a0bf6f9c78792261b4d75e92ec7c788611279ec0
+SHA512 (wikitcms-2.6.9.tar.gz) = 4ce3edfe17df4f4664920275f4ed3a55d1fcd0c73748675582150fac51926394a457f753cf0de0b9ef578eacfcd37a65892142825c9777193b7d7f399bc26fd3
https://src.fedoraproject.org/rpms/python-wikitcms/c/d49f7824173f3d34856c...
10Â months, 1Â week
adamwill pushed to rpms/python-wikitcms (f37). "New release 2.6.9:
expand gp3 not standard in AMI tables"
by notificationsï¼ fedoraproject.org
Notification time stamped 2023-06-30 19:10:12 UTC
From d49f7824173f3d34856ce938c913d3b65946c40a Mon Sep 17 00:00:00 2001
From: Adam Williamson <awilliam(a)redhat.com>
Date: Jun 30 2023 19:09:56 +0000
Subject: New release 2.6.9: expand gp3 not standard in AMI tables
---
diff --git a/.gitignore b/.gitignore
index 661fa1b..5bfff42 100644
--- a/.gitignore
+++ b/.gitignore
@@ -40,3 +40,4 @@
/wikitcms-2.6.6.tar.gz
/wikitcms-2.6.7.tar.gz
/wikitcms-2.6.8.tar.gz
+/wikitcms-2.6.9.tar.gz
diff --git a/python-wikitcms.spec b/python-wikitcms.spec
index 6f53c00..200088d 100644
--- a/python-wikitcms.spec
+++ b/python-wikitcms.spec
@@ -1,7 +1,7 @@
%global srcname wikitcms
Name: python-%{srcname}
-Version: 2.6.8
+Version: 2.6.9
Release: 1%{?dist}
Summary: Fedora QA wiki test management Python library
@@ -65,6 +65,9 @@ sed -i -e 's., "setuptools-git"..g' pyproject.toml
%{python3_sitelib}/%{srcname}*
%changelog
+* Fri Jun 30 2023 Adam Williamson <awilliam(a)redhat.com> - 2.6.9-1
+- New release 2.6.9: expand gp3 not standard in AMI tables
+
* Fri Jun 30 2023 Adam Williamson <awilliam(a)redhat.com> - 2.6.8-1
- New release 2.6.8: handle "gp3" voltype for AMI tables
diff --git a/sources b/sources
index 3c7d2a2..bf0c843 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (wikitcms-2.6.8.tar.gz) = bc74d352f9d492aeff87efe762a9bff16bf3bbc4f24c84806ad590e33016171de526935003d2ad33562cbe15a0bf6f9c78792261b4d75e92ec7c788611279ec0
+SHA512 (wikitcms-2.6.9.tar.gz) = 4ce3edfe17df4f4664920275f4ed3a55d1fcd0c73748675582150fac51926394a457f753cf0de0b9ef578eacfcd37a65892142825c9777193b7d7f399bc26fd3
https://src.fedoraproject.org/rpms/python-wikitcms/c/d49f7824173f3d34856c...
10Â months, 1Â week