From: Marc Herbert <marc.herbert@linux.intel.com>
To: tools@kernel.org
Subject: Unreleased, multi-lines git_filter_repo fix required to run b4 tests?
Date: Thu, 30 Oct 2025 20:49:01 -0700 [thread overview]
Message-ID: <m2zf97ybma.fsf@C02X38VBJHD2mac.jf.intel.com> (raw)
Hi,
I learned the really hard way that I need this multi-lines
git_filter_repo.py fix at the bottom to successfully run "uv run
pytest".
- 100% pass rate _with_ that fix applied on top of git_filter_repo.py v2.47
- 3 tests failing _without_ that fix:
FAILED src/tests/test_ez.py::test_trailers[trailers-thread-with-followups-None-None-trargs0-compareargs0-trailers-thread-with-followups-b4cfg0] - ValueError: dictionary update sequence element #35 has length 1; 2 is required
FAILED src/tests/test_ez.py::test_trailers[trailers-thread-with-cover-followup-None-None-trargs1-compareargs1-trailers-thread-with-cover-followup-b4cfg1] - ValueError: dictionary update sequence element #35 has length 1; 2 is required
FAILED src/tests/test_ez.py::test_trailers[trailers-thread-with-followups-trailers-with-tripledash-None-trargs3-compareargs3-trailers-thread-with-followups-and-tripledash-None] - ValueError: dictionary update sequence element #35 has length 1; 2 is required
These 3 tests fail because they do use a (very long) multi-line git config:
[branch "b4/pytest"]
b4-prep-cover-strategy = branch-description
description = "EDITME: cover title for pytest\n\n# Describe the pur...
^^^^
As found with "uv run pytest --pdb", they crash exactly where the fix is.
Unfortunately, this fix is part of git_filter_repo.py version... 2.48 which
is not released yet!?
https://pypi.org/project/git-filter-repo/#history
So what really baffles me is: how come no one else noticed this before?
Maybe some recent change in the default "git config --list" output
format? Reproduced with git --version 2.51 and today's b4 509f56ff5c24
in case that matters.
PS: if some `uv` expert knows how to hack the uv configuration to use a
local git_filter_repo version in the virtual environment, by all
means please share.
https://github.com/newren/git-filter-repo/commit/4697eeb37b7c3c30b
--- ./.venv/lib/python3.13/site-packages/git_filter_repo.py
+++ ./.venv/lib/python3.13/site-packages/git_filter_repo.py
@@ -1683,14 +1683,14 @@
def get_config_settings(repo_working_dir):
output = ''
try:
- output = subproc.check_output('git config --list'.split(),
+ output = subproc.check_output('git config --list --null'.split(),
cwd=repo_working_dir)
except subprocess.CalledProcessError as e: # pragma: no cover
raise SystemExit('fatal: {}'.format(e))
# FIXME: Ignores multi-valued keys, just let them overwrite for now
- return dict(line.split(b'=', maxsplit=1)
- for line in output.strip().split(b"\n"))
+ return dict(item.split(b'\n', maxsplit=1)
+ for item in output.strip().split(b"\0") if item)
@staticmethod
def get_blob_sizes(quiet = False):
next reply other threads:[~2025-10-31 3:49 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-31 3:49 Marc Herbert [this message]
2025-10-31 14:00 ` Unreleased, multi-lines git_filter_repo fix required to run b4 tests? Konstantin Ryabitsev
2025-11-01 3:28 ` Marc Herbert
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=m2zf97ybma.fsf@C02X38VBJHD2mac.jf.intel.com \
--to=marc.herbert@linux.intel.com \
--cc=tools@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.