fedora-infra / rpmautospec

Automatically generate release values and changelog entries from git history in RPM spec files
MIT License
4 stars 7 forks source link

rhbz#2278226 - rpmautospec fails with KeyError: 'commit-id' #139

Closed nphilipp closed 5 months ago

nphilipp commented 5 months ago

https://bugzilla.redhat.com/show_bug.cgi?id=2278226

I am getting rpmautospec failures during Fedora koji builds.  It's happened on two different builds, that have similar git commits.

https://koji.fedoraproject.org/koji/taskinfo?taskID=117112494
https://koji.fedoraproject.org/koji/taskinfo?taskID=117117201

---------------
CallbackError: Error running postSCMCheckout callback from rpmautospec_koji.rpmautospec_builder:
Traceback (most recent call last):
  File "/usr/lib/python3.12/site-packages/koji/plugin.py", line 223, in run_callbacks
    func(cbtype, *cb_args, **cb_kwargs)
  File "/usr/lib/python3.12/site-packages/rpmautospec_koji/rpmautospec_builder.py", line 19, in process_distgit_cb
    if not process_distgit(srcdir, enable_caching=False):
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/site-packages/rpmautospec/subcommands/process_distgit.py", line 96, in process_distgit
    result = processor.run(visitors=visitors)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/site-packages/rpmautospec/pkg_history.py", line 720, in run
    visited_results = self._run_on_history(head, visitors=visitors, seed_info=seed_info)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/site-packages/rpmautospec/pkg_history.py", line 686, in _run_on_history
    visited_results[commit] = reduce(
                              ^^^^^^^
  File "/usr/lib/python3.12/site-packages/rpmautospec/pkg_history.py", line 687, in <lambda>
    lambda commit_result, visitor: visitor.send((commit_result, parent_results)),
                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/site-packages/rpmautospec/pkg_history.py", line 446, in changelog_visitor
    if candidate["commit-id"] == parent_to_follow.id:
       ~~~~~~~~~^^^^^^^^^^^^^
KeyError: 'commit-id'
---------------

This is what the git repo looks like

---------------
kde-partitionmanager (epel9)]$ git log -n2
commit e8f4b3bd55c0c76b41e5943747d89e1507bf9ca3 (HEAD -> epel9, origin/epel9)
Merge: cc3166b 77a9fcc
Author: Troy Dawson <[tdawson@redhat.com](mailto:tdawson@redhat.com)>
Date:   Tue Apr 30 10:20:21 2024 -0700

    Merge branch epel9-next into epel9

commit 77a9fcc36350c2bb54f4971c5fb9a5ab4dc1b23a (origin/f39, origin/f38, origin/epel9-next, f39, epel9-next)
Author: Alessandro Astone <[ales.astone@gmail.com](mailto:ales.astone@gmail.com)>
Date:   Fri Feb 16 00:34:34 2024 +0100

    23.08.5
---------------
kpmcore (epel9)]$ git log -n2
commit 0ae7de895cc2b9aca799397350b5df1440c0005d (HEAD -> epel9, origin/epel9)
Merge: b49ef6d 9c04183
Author: Troy Dawson <[tdawson@redhat.com](mailto:tdawson@redhat.com)>
Date:   Tue Apr 30 11:36:57 2024 -0700

    Merge branch epel9-next into epel9

commit 9c04183c9c74d100c662639c3811a672ca66f3a7 (origin/f39, origin/f38, origin/epel9-next, epel9-next)
Author: Alessandro Astone <[ales.astone@gmail.com](mailto:ales.astone@gmail.com)>
Date:   Fri Feb 16 00:34:34 2024 +0100

    23.08.5
---------------

Reproducible: Always

Steps to Reproduce:
1. koji build --scratch epel9 git+https://src.fedoraproject.org/rpms/kde-partitionmanager.git#e8f4b3bd55c0c76b41e5943747d89e1507bf9ca3
2. koji build --scratch epel9 git+https://src.fedoraproject.org/rpms/kpmcore.git#0ae7de895cc2b9aca799397350b5df1440c0005d
3.
Actual Results:  
Traceback and failures

Expected Results:  
A package builds
nphilipp commented 5 months ago

The repos in question:

Here’s my working hypothesis:

Both repositories have merge commits, but with strategy "ours", i.e. sharing the tree with one parent which rpmautospec should be able to resolve. The branches leading up to these trees have commits which either enable rpmautospec or touch the changelog file, so rpmautospec thinks it only needs to traverse them, but not examine them. Later, when it digs through the other branch, it comes across this commit which lacks all information and the crash happens.

/cc @tdawson