pkgdev
pkgdev copied to clipboard
`pkgdev commit` backtraces if committing changes with unstaged ebuild
I am working on a radare2 bump. In the course of doing this, I noticed that its remote ID was missing from its metadata. I decided to modify the metadata, stage, and commit just this change to the metadata. Reproduction is roughly the following, from gentoo/gentoo@d30761d3c18593bbee87fd2f56fad7e5893042d0:
~/gentoo/gentoo/dev-util/radare2 $ cp radare2-5.7.8.ebuild radare2-5.8.2.ebuild
~/gentoo/gentoo/dev-util/radare2 $ $EDITOR metadata.xml
~/gentoo/gentoo/dev-util/radare2 $ git add metadata.xml
~/gentoo/gentoo/dev-util/radare2 $ git status
On branch master
Your branch is up to date with 'origin/master'.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: metadata.xml
Untracked files:
(use "git add <file>..." to include in what will be committed)
radare2-5.8.2.ebuild
~/gentoo/gentoo/dev-util/radare2 $ pkgdev commit
Traceback (most recent call last):
File "/usr/lib/python-exec/python3.10/pkgdev", line 8, in <module>
sys.exit(main())
File "/usr/lib/python3.10/site-packages/pkgdev/scripts/__init__.py", line 46, in main
run(os.path.basename(sys.argv[0]))
File "/usr/lib/python3.10/site-packages/pkgdev/scripts/__init__.py", line 38, in run
sys.exit(tool())
File "/usr/lib/python3.10/site-packages/snakeoil/cli/tool.py", line 81, in __call__
ret = self.main()
File "/usr/lib/python3.10/site-packages/pkgdev/cli.py", line 24, in main
return super().main()
File "/usr/lib/python3.10/site-packages/snakeoil/cli/tool.py", line 191, in main
self.handle_exec_exception(e)
File "/usr/lib/python3.10/site-packages/snakeoil/cli/tool.py", line 176, in main
exitstatus = func(self.options, self.out, self.err)
File "/usr/lib/python3.10/site-packages/pkgdev/scripts/pkgdev_commit.py", line 835, in _commit
args = determine_msg_args(options, changes)
File "/usr/lib/python3.10/site-packages/pkgdev/scripts/pkgdev_commit.py", line 709, in determine_msg_args
message.append(changes.prefix + changes.summary)
File "/usr/lib/python3.10/site-packages/snakeoil/klass.py", line 203, in __get__
obj = self.function(instance)
File "/usr/lib/python3.10/site-packages/pkgdev/scripts/pkgdev_commit.py", line 612, in summary
return str(MetadataSummary(self._options, self.pkg_changes))
File "/usr/lib/python3.10/site-packages/pkgdev/scripts/pkgdev_commit.py", line 262, in __str__
if s := self.status_funcs[statuses](self):
File "/usr/lib/python3.10/site-packages/pkgdev/scripts/pkgdev_commit.py", line 285, in modify
old_pkg = self.old_repo.match(atom)[0]
File "/usr/lib/python3.10/site-packages/pkgcore/repository/prototype.py", line 227, in match
return list(self.itermatch(atom, **kwds))
File "/usr/lib/python3.10/site-packages/pkgcore/repository/prototype.py", line 317, in _internal_match
for pkg in self._internal_gen_candidates(candidates, **kwargs):
File "/usr/lib/python3.10/site-packages/pkgcore/repository/prototype.py", line 312, in _internal_gen_candidates
yield from sorter(pkg_filter(pkgs))
File "/usr/lib/python3.10/site-packages/pkgcore/ebuild/repository.py", line 574, in _pkg_filter
if not pkg.is_supported:
File "/usr/lib/python3.10/site-packages/snakeoil/klass.py", line 389, in __call__
return self.getter(obj)
File "/usr/lib/python3.10/site-packages/pkgcore/package/base.py", line 97, in dynamic_getattr_dict
val = functor(self)
File "/usr/lib/python3.10/site-packages/pkgcore/ebuild/ebuild_src.py", line 289, in eapi
i = fileutils.readlines_utf8(ebuild.path)
File "/usr/lib/python3.10/site-packages/snakeoil/_fileutils.py", line 85, in native_readlines
handle = open(mypath, mode, encoding=encoding)
FileNotFoundError: [Errno 2] No such file or directory: '/tmp/tmpg_8vhxva/dev-util/radare2/radare2-5.8.2.ebuild'
Can confirm, ran into this today. I was committing just metadata.xml while an unstaged new ebuild for the same package was present. pkgcore 0.12.30