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.

Reply via email to