Your message dated Thu, 2 Jan 2025 09:05:03 +0100
with message-id 
<capybu_2wz9jfxnnqeic7a4uqm0-yqpnojajid2tk30rjk6s...@mail.gmail.com>
and subject line 
has caused the Debian Bug report #1090192,
regarding b4: FTBFS: E ValueError: dictionary update sequence element #12 has 
length 1; 2 is required
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact [email protected]
immediately.)


-- 
1090192: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1090192
Debian Bug Tracking System
Contact [email protected] with problems
--- Begin Message ---
Package: src:b4
Version: 0.14.2-2
Severity: serious
Tags: ftbfs

Dear maintainer:

During a rebuild of all packages in unstable, your package failed to build:

--------------------------------------------------------------------------------
[...]
 debian/rules binary
dh binary --with python3 --buildsystem=pybuild
   dh_update_autotools_config -O--buildsystem=pybuild
   dh_autoreconf -O--buildsystem=pybuild
   dh_auto_configure -O--buildsystem=pybuild
   dh_auto_build -O--buildsystem=pybuild
I: pybuild plugin_pyproject:129: Building wheel for python3.13 with "build" 
module
I: pybuild base:311: python3.13 -m build --skip-dependency-check --no-isolation 
--wheel --outdir /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_b4  
* Building wheel...
running bdist_wheel
running build
running build_py
creating build/lib/b4
copying src/b4/pr.py -> build/lib/b4

[... snipped ...]

            assert config.get('shazam-am-flags') == '--signoff'
            if rep:
                with open(mfile, 'rb') as fh:
                    contents = fh.read()
                contents = contents.replace(rep[0], rep[1])
                tfile = os.path.join(prepdir, '.git', 'modified.mbox')
                with open(tfile, 'wb') as fh:
                    fh.write(contents)
            else:
                tfile = mfile
            b4args = ['--no-stdin', '--no-interactive', '--offline-mode', 
'shazam', '--no-add-trailers', '-m', tfile]
            parser = b4.command.setup_parser()
    
            cmdargs = parser.parse_args(b4args)
            with pytest.raises(SystemExit) as e:
                b4.mbox.main(cmdargs)
                assert e.type == SystemExit
                assert e.value.code == 0
    
        cfile = os.path.join(sampledir, f'{compareout}.verify')
        assert os.path.exists(cfile)
    
        parser = b4.command.setup_parser()
        b4args = ['--no-stdin', '--no-interactive', '--offline-mode', 
'trailers', '--update', '-m', mfile] + trargs
        cmdargs = parser.parse_args(b4args)
>       b4.ez.cmd_trailers(cmdargs)

/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_b4/build/tests/test_ez.py:73: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_b4/build/b4/ez.py:2859: in cmd_trailers
    update_trailers(cmdargs)
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_b4/build/b4/ez.py:1217: in 
update_trailers
    frf.run()
/usr/lib/python3/dist-packages/git_filter_repo.py:4875: in run
    self._run_sanity_checks()
/usr/lib/python3/dist-packages/git_filter_repo.py:3276: in _run_sanity_checks
    self._config_settings = GitUtils.get_config_settings(target_working_dir)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

repo_working_dir = b'.'

    @staticmethod
    def get_config_settings(repo_working_dir):
      output = ''
      try:
        output = subproc.check_output('git config --list'.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"))
E     ValueError: dictionary update sequence element #12 has length 1; 2 is 
required

/usr/lib/python3/dist-packages/git_filter_repo.py:1692: ValueError
------------------------------ Captured log call -------------------------------
CRITICAL b4:ez.py:1196 ---
=========================== short test summary info ============================
FAILED 
tests/test_ez.py::test_trailers[trailers-thread-with-followups-None-None-trargs0-compareargs0-trailers-thread-with-followups-b4cfg0]
FAILED 
tests/test_ez.py::test_trailers[trailers-thread-with-cover-followup-None-None-trargs1-compareargs1-trailers-thread-with-cover-followup-b4cfg1]
FAILED 
tests/test_ez.py::test_trailers[trailers-thread-with-followups-None-rep2-trargs2-compareargs2-trailers-thread-with-followups-b4cfg2]
FAILED 
tests/test_ez.py::test_trailers[trailers-thread-with-followups-trailers-with-tripledash-None-trargs3-compareargs3-trailers-thread-with-followups-and-tripledash-None]
========================= 4 failed, 78 passed in 1.65s =========================
E: pybuild pybuild:389: test: plugin pyproject failed with: exit code=1: cd 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_b4/build; python3.13 -m pytest 
I: pybuild pybuild:308: cp -r /<<PKGBUILDDIR>>/src/tests 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_b4/build/
I: pybuild base:311: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_b4/build; 
python3.12 -m pytest 
============================= test session starts ==============================
platform linux -- Python 3.12.8, pytest-8.3.4, pluggy-1.5.0
rootdir: /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_b4/build
configfile: pyproject.toml
plugins: typeguard-4.4.1
collected 82 items

tests/test___init__.py ................................................. [ 59%]
..........................                                               [ 91%]
tests/test_ez.py FFFF                                                    [ 96%]
tests/test_mbox.py ...                                                   [100%]

=================================== FAILURES ===================================
_ 
test_trailers[trailers-thread-with-followups-None-None-trargs0-compareargs0-trailers-thread-with-followups-b4cfg0]
 _

sampledir = '/<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_b4/build/tests/samples'
prepdir = '/tmp/pytest-of-buildd/pytest-1/test_trailers_trailers_thread_0/repo'
mboxf = 'trailers-thread-with-followups', bundlef = None, rep = None
trargs = [], compareargs = ['log', '--format=%ae%n%s%n%b---', 'HEAD~4..']
compareout = 'trailers-thread-with-followups'
b4cfg = {'shazam-am-flags': '--signoff'}

    @pytest.mark.parametrize('mboxf, bundlef, rep, trargs, compareargs, 
compareout, b4cfg', [
        ('trailers-thread-with-followups', None, None, [],
         ['log', '--format=%ae%n%s%n%b---', 'HEAD~4..'], 
'trailers-thread-with-followups',
         {'shazam-am-flags': '--signoff'}),
        ('trailers-thread-with-cover-followup', None, None, [],
         ['log', '--format=%ae%n%s%n%b---', 'HEAD~4..'], 
'trailers-thread-with-cover-followup',
         {'shazam-am-flags': '--signoff'}),
        # Test matching trailer updates by subject when patch-id changes
        ('trailers-thread-with-followups', None, (b'vivendum', b'addendum'), [],
         ['log', '--format=%ae%n%s%n%b---', 'HEAD~4..'], 
'trailers-thread-with-followups',
         {'shazam-am-flags': '--signoff'}),
        # Test that we properly perserve commits with --- in them
        ('trailers-thread-with-followups', 'trailers-with-tripledash', None, [],
         ['log', '--format=%ae%n%s%n%b---', 'HEAD~4..'], 
'trailers-thread-with-followups-and-tripledash',
         None),
    ])
    def test_trailers(sampledir, prepdir, mboxf, bundlef, rep, trargs, 
compareargs, compareout, b4cfg):
        if b4cfg:
            b4.MAIN_CONFIG.update(b4cfg)
        config = b4.get_main_config()
        mfile = os.path.join(sampledir, f'{mboxf}.mbox')
        assert os.path.exists(mfile)
        if bundlef:
            bfile = os.path.join(sampledir, f'{bundlef}.bundle')
            assert os.path.exists(bfile)
            gitargs = ['pull', '--rebase', bfile]
            out, logstr = b4.git_run_command(None, gitargs)
            assert out == 0
        else:
            assert config.get('shazam-am-flags') == '--signoff'
            if rep:
                with open(mfile, 'rb') as fh:
                    contents = fh.read()
                contents = contents.replace(rep[0], rep[1])
                tfile = os.path.join(prepdir, '.git', 'modified.mbox')
                with open(tfile, 'wb') as fh:
                    fh.write(contents)
            else:
                tfile = mfile
            b4args = ['--no-stdin', '--no-interactive', '--offline-mode', 
'shazam', '--no-add-trailers', '-m', tfile]
            parser = b4.command.setup_parser()
    
            cmdargs = parser.parse_args(b4args)
            with pytest.raises(SystemExit) as e:
                b4.mbox.main(cmdargs)
                assert e.type == SystemExit
                assert e.value.code == 0
    
        cfile = os.path.join(sampledir, f'{compareout}.verify')
        assert os.path.exists(cfile)
    
        parser = b4.command.setup_parser()
        b4args = ['--no-stdin', '--no-interactive', '--offline-mode', 
'trailers', '--update', '-m', mfile] + trargs
        cmdargs = parser.parse_args(b4args)
>       b4.ez.cmd_trailers(cmdargs)

/<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_b4/build/tests/test_ez.py:73: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_b4/build/b4/ez.py:2859: in cmd_trailers
    update_trailers(cmdargs)
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_b4/build/b4/ez.py:1217: in 
update_trailers
    frf.run()
/usr/lib/python3/dist-packages/git_filter_repo.py:4875: in run
    self._run_sanity_checks()
/usr/lib/python3/dist-packages/git_filter_repo.py:3276: in _run_sanity_checks
    self._config_settings = GitUtils.get_config_settings(target_working_dir)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

repo_working_dir = b'.'

    @staticmethod
    def get_config_settings(repo_working_dir):
      output = ''
      try:
        output = subproc.check_output('git config --list'.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"))
E     ValueError: dictionary update sequence element #12 has length 1; 2 is 
required

/usr/lib/python3/dist-packages/git_filter_repo.py:1692: ValueError
------------------------------ Captured log call -------------------------------
CRITICAL b4:mbox.py:165 Total patches: 4
CRITICAL b4:mbox.py:200 ---
CRITICAL b4:ez.py:1196 ---
_ 
test_trailers[trailers-thread-with-cover-followup-None-None-trargs1-compareargs1-trailers-thread-with-cover-followup-b4cfg1]
 _

sampledir = '/<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_b4/build/tests/samples'
prepdir = '/tmp/pytest-of-buildd/pytest-1/test_trailers_trailers_thread_1/repo'
mboxf = 'trailers-thread-with-cover-followup', bundlef = None, rep = None
trargs = [], compareargs = ['log', '--format=%ae%n%s%n%b---', 'HEAD~4..']
compareout = 'trailers-thread-with-cover-followup'
b4cfg = {'shazam-am-flags': '--signoff'}

    @pytest.mark.parametrize('mboxf, bundlef, rep, trargs, compareargs, 
compareout, b4cfg', [
        ('trailers-thread-with-followups', None, None, [],
         ['log', '--format=%ae%n%s%n%b---', 'HEAD~4..'], 
'trailers-thread-with-followups',
         {'shazam-am-flags': '--signoff'}),
        ('trailers-thread-with-cover-followup', None, None, [],
         ['log', '--format=%ae%n%s%n%b---', 'HEAD~4..'], 
'trailers-thread-with-cover-followup',
         {'shazam-am-flags': '--signoff'}),
        # Test matching trailer updates by subject when patch-id changes
        ('trailers-thread-with-followups', None, (b'vivendum', b'addendum'), [],
         ['log', '--format=%ae%n%s%n%b---', 'HEAD~4..'], 
'trailers-thread-with-followups',
         {'shazam-am-flags': '--signoff'}),
        # Test that we properly perserve commits with --- in them
        ('trailers-thread-with-followups', 'trailers-with-tripledash', None, [],
         ['log', '--format=%ae%n%s%n%b---', 'HEAD~4..'], 
'trailers-thread-with-followups-and-tripledash',
         None),
    ])
    def test_trailers(sampledir, prepdir, mboxf, bundlef, rep, trargs, 
compareargs, compareout, b4cfg):
        if b4cfg:
            b4.MAIN_CONFIG.update(b4cfg)
        config = b4.get_main_config()
        mfile = os.path.join(sampledir, f'{mboxf}.mbox')
        assert os.path.exists(mfile)
        if bundlef:
            bfile = os.path.join(sampledir, f'{bundlef}.bundle')
            assert os.path.exists(bfile)
            gitargs = ['pull', '--rebase', bfile]
            out, logstr = b4.git_run_command(None, gitargs)
            assert out == 0
        else:
            assert config.get('shazam-am-flags') == '--signoff'
            if rep:
                with open(mfile, 'rb') as fh:
                    contents = fh.read()
                contents = contents.replace(rep[0], rep[1])
                tfile = os.path.join(prepdir, '.git', 'modified.mbox')
                with open(tfile, 'wb') as fh:
                    fh.write(contents)
            else:
                tfile = mfile
            b4args = ['--no-stdin', '--no-interactive', '--offline-mode', 
'shazam', '--no-add-trailers', '-m', tfile]
            parser = b4.command.setup_parser()
    
            cmdargs = parser.parse_args(b4args)
            with pytest.raises(SystemExit) as e:
                b4.mbox.main(cmdargs)
                assert e.type == SystemExit
                assert e.value.code == 0
    
        cfile = os.path.join(sampledir, f'{compareout}.verify')
        assert os.path.exists(cfile)
    
        parser = b4.command.setup_parser()
        b4args = ['--no-stdin', '--no-interactive', '--offline-mode', 
'trailers', '--update', '-m', mfile] + trargs
        cmdargs = parser.parse_args(b4args)
>       b4.ez.cmd_trailers(cmdargs)

/<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_b4/build/tests/test_ez.py:73: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_b4/build/b4/ez.py:2859: in cmd_trailers
    update_trailers(cmdargs)
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_b4/build/b4/ez.py:1217: in 
update_trailers
    frf.run()
/usr/lib/python3/dist-packages/git_filter_repo.py:4875: in run
    self._run_sanity_checks()
/usr/lib/python3/dist-packages/git_filter_repo.py:3276: in _run_sanity_checks
    self._config_settings = GitUtils.get_config_settings(target_working_dir)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

repo_working_dir = b'.'

    @staticmethod
    def get_config_settings(repo_working_dir):
      output = ''
      try:
        output = subproc.check_output('git config --list'.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"))
E     ValueError: dictionary update sequence element #12 has length 1; 2 is 
required

/usr/lib/python3/dist-packages/git_filter_repo.py:1692: ValueError
------------------------------ Captured log call -------------------------------
CRITICAL b4:mbox.py:165 Total patches: 4
CRITICAL b4:mbox.py:200 ---
CRITICAL b4:ez.py:1196 ---
_ 
test_trailers[trailers-thread-with-followups-None-rep2-trargs2-compareargs2-trailers-thread-with-followups-b4cfg2]
 _

sampledir = '/<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_b4/build/tests/samples'
prepdir = '/tmp/pytest-of-buildd/pytest-1/test_trailers_trailers_thread_2/repo'
mboxf = 'trailers-thread-with-followups', bundlef = None
rep = (b'vivendum', b'addendum'), trargs = []
compareargs = ['log', '--format=%ae%n%s%n%b---', 'HEAD~4..']
compareout = 'trailers-thread-with-followups'
b4cfg = {'shazam-am-flags': '--signoff'}

    @pytest.mark.parametrize('mboxf, bundlef, rep, trargs, compareargs, 
compareout, b4cfg', [
        ('trailers-thread-with-followups', None, None, [],
         ['log', '--format=%ae%n%s%n%b---', 'HEAD~4..'], 
'trailers-thread-with-followups',
         {'shazam-am-flags': '--signoff'}),
        ('trailers-thread-with-cover-followup', None, None, [],
         ['log', '--format=%ae%n%s%n%b---', 'HEAD~4..'], 
'trailers-thread-with-cover-followup',
         {'shazam-am-flags': '--signoff'}),
        # Test matching trailer updates by subject when patch-id changes
        ('trailers-thread-with-followups', None, (b'vivendum', b'addendum'), [],
         ['log', '--format=%ae%n%s%n%b---', 'HEAD~4..'], 
'trailers-thread-with-followups',
         {'shazam-am-flags': '--signoff'}),
        # Test that we properly perserve commits with --- in them
        ('trailers-thread-with-followups', 'trailers-with-tripledash', None, [],
         ['log', '--format=%ae%n%s%n%b---', 'HEAD~4..'], 
'trailers-thread-with-followups-and-tripledash',
         None),
    ])
    def test_trailers(sampledir, prepdir, mboxf, bundlef, rep, trargs, 
compareargs, compareout, b4cfg):
        if b4cfg:
            b4.MAIN_CONFIG.update(b4cfg)
        config = b4.get_main_config()
        mfile = os.path.join(sampledir, f'{mboxf}.mbox')
        assert os.path.exists(mfile)
        if bundlef:
            bfile = os.path.join(sampledir, f'{bundlef}.bundle')
            assert os.path.exists(bfile)
            gitargs = ['pull', '--rebase', bfile]
            out, logstr = b4.git_run_command(None, gitargs)
            assert out == 0
        else:
            assert config.get('shazam-am-flags') == '--signoff'
            if rep:
                with open(mfile, 'rb') as fh:
                    contents = fh.read()
                contents = contents.replace(rep[0], rep[1])
                tfile = os.path.join(prepdir, '.git', 'modified.mbox')
                with open(tfile, 'wb') as fh:
                    fh.write(contents)
            else:
                tfile = mfile
            b4args = ['--no-stdin', '--no-interactive', '--offline-mode', 
'shazam', '--no-add-trailers', '-m', tfile]
            parser = b4.command.setup_parser()
    
            cmdargs = parser.parse_args(b4args)
            with pytest.raises(SystemExit) as e:
                b4.mbox.main(cmdargs)
                assert e.type == SystemExit
                assert e.value.code == 0
    
        cfile = os.path.join(sampledir, f'{compareout}.verify')
        assert os.path.exists(cfile)
    
        parser = b4.command.setup_parser()
        b4args = ['--no-stdin', '--no-interactive', '--offline-mode', 
'trailers', '--update', '-m', mfile] + trargs
        cmdargs = parser.parse_args(b4args)
>       b4.ez.cmd_trailers(cmdargs)

/<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_b4/build/tests/test_ez.py:73: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_b4/build/b4/ez.py:2859: in cmd_trailers
    update_trailers(cmdargs)
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_b4/build/b4/ez.py:1217: in 
update_trailers
    frf.run()
/usr/lib/python3/dist-packages/git_filter_repo.py:4875: in run
    self._run_sanity_checks()
/usr/lib/python3/dist-packages/git_filter_repo.py:3276: in _run_sanity_checks
    self._config_settings = GitUtils.get_config_settings(target_working_dir)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

repo_working_dir = b'.'

    @staticmethod
    def get_config_settings(repo_working_dir):
      output = ''
      try:
        output = subproc.check_output('git config --list'.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"))
E     ValueError: dictionary update sequence element #12 has length 1; 2 is 
required

/usr/lib/python3/dist-packages/git_filter_repo.py:1692: ValueError
------------------------------ Captured log call -------------------------------
CRITICAL b4:mbox.py:165 Total patches: 4
CRITICAL b4:mbox.py:200 ---
CRITICAL b4:ez.py:1196 ---
_ 
test_trailers[trailers-thread-with-followups-trailers-with-tripledash-None-trargs3-compareargs3-trailers-thread-with-followups-and-tripledash-None]
 _

sampledir = '/<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_b4/build/tests/samples'
prepdir = '/tmp/pytest-of-buildd/pytest-1/test_trailers_trailers_thread_3/repo'
mboxf = 'trailers-thread-with-followups', bundlef = 'trailers-with-tripledash'
rep = None, trargs = []
compareargs = ['log', '--format=%ae%n%s%n%b---', 'HEAD~4..']
compareout = 'trailers-thread-with-followups-and-tripledash', b4cfg = None

    @pytest.mark.parametrize('mboxf, bundlef, rep, trargs, compareargs, 
compareout, b4cfg', [
        ('trailers-thread-with-followups', None, None, [],
         ['log', '--format=%ae%n%s%n%b---', 'HEAD~4..'], 
'trailers-thread-with-followups',
         {'shazam-am-flags': '--signoff'}),
        ('trailers-thread-with-cover-followup', None, None, [],
         ['log', '--format=%ae%n%s%n%b---', 'HEAD~4..'], 
'trailers-thread-with-cover-followup',
         {'shazam-am-flags': '--signoff'}),
        # Test matching trailer updates by subject when patch-id changes
        ('trailers-thread-with-followups', None, (b'vivendum', b'addendum'), [],
         ['log', '--format=%ae%n%s%n%b---', 'HEAD~4..'], 
'trailers-thread-with-followups',
         {'shazam-am-flags': '--signoff'}),
        # Test that we properly perserve commits with --- in them
        ('trailers-thread-with-followups', 'trailers-with-tripledash', None, [],
         ['log', '--format=%ae%n%s%n%b---', 'HEAD~4..'], 
'trailers-thread-with-followups-and-tripledash',
         None),
    ])
    def test_trailers(sampledir, prepdir, mboxf, bundlef, rep, trargs, 
compareargs, compareout, b4cfg):
        if b4cfg:
            b4.MAIN_CONFIG.update(b4cfg)
        config = b4.get_main_config()
        mfile = os.path.join(sampledir, f'{mboxf}.mbox')
        assert os.path.exists(mfile)
        if bundlef:
            bfile = os.path.join(sampledir, f'{bundlef}.bundle')
            assert os.path.exists(bfile)
            gitargs = ['pull', '--rebase', bfile]
            out, logstr = b4.git_run_command(None, gitargs)
            assert out == 0
        else:
            assert config.get('shazam-am-flags') == '--signoff'
            if rep:
                with open(mfile, 'rb') as fh:
                    contents = fh.read()
                contents = contents.replace(rep[0], rep[1])
                tfile = os.path.join(prepdir, '.git', 'modified.mbox')
                with open(tfile, 'wb') as fh:
                    fh.write(contents)
            else:
                tfile = mfile
            b4args = ['--no-stdin', '--no-interactive', '--offline-mode', 
'shazam', '--no-add-trailers', '-m', tfile]
            parser = b4.command.setup_parser()
    
            cmdargs = parser.parse_args(b4args)
            with pytest.raises(SystemExit) as e:
                b4.mbox.main(cmdargs)
                assert e.type == SystemExit
                assert e.value.code == 0
    
        cfile = os.path.join(sampledir, f'{compareout}.verify')
        assert os.path.exists(cfile)
    
        parser = b4.command.setup_parser()
        b4args = ['--no-stdin', '--no-interactive', '--offline-mode', 
'trailers', '--update', '-m', mfile] + trargs
        cmdargs = parser.parse_args(b4args)
>       b4.ez.cmd_trailers(cmdargs)

/<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_b4/build/tests/test_ez.py:73: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_b4/build/b4/ez.py:2859: in cmd_trailers
    update_trailers(cmdargs)
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_b4/build/b4/ez.py:1217: in 
update_trailers
    frf.run()
/usr/lib/python3/dist-packages/git_filter_repo.py:4875: in run
    self._run_sanity_checks()
/usr/lib/python3/dist-packages/git_filter_repo.py:3276: in _run_sanity_checks
    self._config_settings = GitUtils.get_config_settings(target_working_dir)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

repo_working_dir = b'.'

    @staticmethod
    def get_config_settings(repo_working_dir):
      output = ''
      try:
        output = subproc.check_output('git config --list'.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"))
E     ValueError: dictionary update sequence element #12 has length 1; 2 is 
required

/usr/lib/python3/dist-packages/git_filter_repo.py:1692: ValueError
------------------------------ Captured log call -------------------------------
CRITICAL b4:ez.py:1196 ---
=========================== short test summary info ============================
FAILED 
tests/test_ez.py::test_trailers[trailers-thread-with-followups-None-None-trargs0-compareargs0-trailers-thread-with-followups-b4cfg0]
FAILED 
tests/test_ez.py::test_trailers[trailers-thread-with-cover-followup-None-None-trargs1-compareargs1-trailers-thread-with-cover-followup-b4cfg1]
FAILED 
tests/test_ez.py::test_trailers[trailers-thread-with-followups-None-rep2-trargs2-compareargs2-trailers-thread-with-followups-b4cfg2]
FAILED 
tests/test_ez.py::test_trailers[trailers-thread-with-followups-trailers-with-tripledash-None-trargs3-compareargs3-trailers-thread-with-followups-and-tripledash-None]
========================= 4 failed, 78 passed in 1.72s =========================
E: pybuild pybuild:389: test: plugin pyproject failed with: exit code=1: cd 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_b4/build; python3.12 -m pytest 
dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p "3.13 
3.12" returned exit code 13
make: *** [debian/rules:7: binary] Error 25
dpkg-buildpackage: error: debian/rules binary subprocess returned exit status 2
--------------------------------------------------------------------------------

The above is just how the build ends and not necessarily the most relevant part.
If required, the full build log is available here:

https://people.debian.org/~sanvila/build-logs/202412/

About the archive rebuild: The build was made on virtual machines from AWS,
using sbuild and a reduced chroot with only build-essential packages.

If you could not reproduce the bug please contact me privately, as I
am willing to provide ssh access to a virtual machine where the bug is
fully reproducible.

If this is really a bug in one of the build-depends, please use
reassign and affects, so that this is still visible in the BTS web
page for this package.

Thanks.

--- End Message ---
--- Begin Message ---
I have tried to rebuild b4 with the latest unstable and it builds fine
after #1091422 has  been fixed.

Closing for now

--- End Message ---

Reply via email to