Today I updated the test ingress node of FreshPorts. Not long after, I was told by Nagios monitoring:
Notification Type: PROBLEM Service: FreshPorts dev-vs-test Host: webserver Address: webserver.int.unixathome.org State: WARNING Date/Time: Sat Oct 19 13:22:51 UTC 2024 Additional Info: --- /tmp/url-compare.gRydZE2024-10-19 13:22:48.300556000 +0000
I had a similar message comparing test to stage.
Soon after, I saw this error in the logs:
Oct 19 12:18:04 test-ingress01 dvl[12403]: FATAL eror with git-to-freshports-xml.py result: 1 - check git-delta.sh logs for more detail
Looking farther, I found this:
2024.10.19 12:18:03 git-delta.sh The commits found are: 2024.10.19 12:18:03 git-delta.sh 0682711dee4631234d7cc197af3e92acb936d6da 2024.10.19 12:18:03 git-delta.sh /usr/local/libexec/freshports/git-to-freshports-xml.py --repo ports --path /var/db/ingress/repos/ports --branch main --commit-range 57537ad6cea08e3d16cd67b1280b5723be42d08a..0682711dee4631234d7cc197af3e92acb936d6da --spooling /var/db/ingress/message-queues/spooling --output /var/db/ingress/message-queues/incoming Traceback (most recent call last): File "/usr/local/libexec/freshports/git-to-freshports-xml.py", line 267, in <module> main() File "/usr/local/libexec/freshports/git-to-freshports-xml.py", line 161, in main commits = commit_range(repo, config['commit_range']) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/libexec/freshports/git-to-freshports-xml.py", line 125, in commit_range walker = repo.walk(end_commit.oid) ^^^^^^^^^^^^^^ AttributeError: '_pygit2.Commit' object has no attribute 'oid'. Did you mean: 'id'? 2024.10.19 12:18:04 git-delta.sh /usr/local/libexec/freshports/git-to-freshports-xml.py result: 1 2024.10.19 12:18:04 git-delta.sh Now processing repo: src --------------- 2024.10.19 12:18:04 git-delta.sh REPODIR='/var/db/ingress/repos/src' exists 2024.10.19 12:18:04 git-delta.sh Repodir is /var/db/ingress/repos/src 2024.10.19 12:18:04 git-delta.sh Running: /usr/local/bin/git fetch: 2024.10.19 12:18:04 git-delta.sh fetch completed.
Tracking it down
It seems that oid has gone away with this upgrade:
Oct 19 11:47:00 test-ingress01 pkg[61274]: py311-pygit2 upgraded: 1.14.1 -> 1.15.1
Visiting devel/py-pygit2 (the irony of using FreshPorts to debug FreshPorts is not lost on me) I found the home page and the Github repo. Searching the issues for oid, I found issue 1316
Fixing it
I found a list of breaking changes, fixed my code, ran it, fixed more code, ran it, all good.
This is the diff I had on test:
[14:41 test-ingress01 dvl /usr/local/libexec/freshports] % diff -ruN git-to-freshports-xml.py.orig git-to-freshports-xml.py --- git-to-freshports-xml.py.orig 2024-10-19 14:13:45.235491000 +0000 +++ git-to-freshports-xml.py 2024-10-19 14:40:20.000000000 +0000 @@ -122,7 +122,7 @@ start_commit = repo.revparse_single(start_commit_ref) end_commit = repo.revparse_single(end_commit_ref) - walker = repo.walk(end_commit.oid) + walker = repo.walk(end_commit.id) walker.simplify_first_parent() # Avoid wandering off to merged branches. Same as 'git log --first-parent' result = [] @@ -171,7 +171,7 @@ for order_number, commit in enumerate(commits): commit: pygit2.Commit - log.info(f"Processing commit '{commit.hex} {commit.message.splitlines()[0]}'") + log.info(f"Processing commit '{str(commit.id)} {commit.message.splitlines()[0]}'") root = ET.Element('UPDATES', Version=FORMAT_VERSION, Source='git') update = ET.SubElement(root, 'UPDATE') @@ -193,11 +193,11 @@ commit_branches = list(repo.branches.remote.with_commit(commit)) commit_branches_num = len(commit_branches) if commit_branches_num == 0: - log.error(f"Unable to get branch name for commit {commit.hex}. " + log.error(f"Unable to get branch name for commit {str(commit.id)}. " f"Make sure that the local tracking branch exists for the remote branch.") continue elif commit_branches_num > 1: - log.warning(f"Ambiguity in getting branch name for commit {commit.hex}. Got branches: {commit_branches}." + log.warning(f"Ambiguity in getting branch name for commit {str(commit.id)}. Got branches: {commit_branches}." f"Using the first one: {commit_branches[0]}") ET.SubElement(update, 'OS', Repo=config['repo'], Id=config['os'], Branch=commit_branches[0]) @@ -214,7 +214,7 @@ ET.SubElement(people, 'AUTHOR', AuthorName=f"{commit.author.name}", AuthorEmail=f"{commit.author.email}") log.debug("Writing commit hash") - ET.SubElement(update, 'COMMIT', Hash=commit.hex, HashShort=commit.short_id, + ET.SubElement(update, 'COMMIT', Hash=str(commit.id), HashShort=commit.short_id, Subject=commit.message.splitlines()[0], EncodingLoses="false", Repository=config['repo']) files = ET.SubElement(update, 'FILES') @@ -244,7 +244,7 @@ file_name = (f"{commit_datetime.year}.{commit_datetime.month:02d}.{commit_datetime.day:02d}." f"{commit_datetime.hour:02d}.{commit_datetime.minute:02d}.{commit_datetime.second:02d}." - f"{order_number:06d}.{commit.hex}.xml") + f"{order_number:06d}.{str(commit.id)}.xml") file_mode = 'wb' if config['force'] else 'xb' log.debug("Dumping XML") try: [14:41 test-ingress01 dvl /usr/local/libexec/freshports] %
That code was copied over to my working FreshPorts node, and committed here.
Thanks
My thanks for Serhii (Sergey) Kozlov for their work on the original code.