[PATCH] Emit QA notices for setuptools warnings

Michał Górny <[email protected]> Sat, 29 May 2021 12:18:24 +0200
Newsgroups gmane.linux.gentoo.portage.devel
Message-ID <[email protected]>
Emit QA notices for setuptools warnings such as:

     * QA Notice: setuptools warnings detected:
     *
     *      Usage of dash-separated 'build-requires' will not be supported in future versions. Please use the underscore name 'build_requires' instead
     *      Usage of dash-separated 'description-file' will not be supported in future versions. Please use the underscore name 'description_file' instead
     *      Usage of dash-separated 'upload-dir' will not be supported in future versions. Please use the underscore name 'upload_dir' instead

Signed-off-by: Michał Górny <[email protected]>
---
 lib/portage/package/ebuild/doebuild.py | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/lib/portage/package/ebuild/doebuild.py b/lib/portage/package/ebuild/doebuild.py
index 86c1d40b4..b1557edd7 100644
--- a/lib/portage/package/ebuild/doebuild.py
+++ b/lib/portage/package/ebuild/doebuild.py
@@ -1863,6 +1863,10 @@ def _check_build_log(mysettings, out=None):
 		re.compile(r'g?make\[\d+\]: warning: jobserver unavailable:')
 	make_jobserver = []
 
+	# we deduplicate these since they is repeated for every setup.py call
+	setuptools_warn = set()
+	setuptools_warn_re = re.compile(r'.*\/setuptools\/.*: UserWarning: (.*)')
+
 	def _eerror(lines):
 		for line in lines:
 			eerror(line, phase="install", key=mysettings.mycpv, out=out)
@@ -1892,6 +1896,10 @@ def _check_build_log(mysettings, out=None):
 			if make_jobserver_re.match(line) is not None:
 				make_jobserver.append(line.rstrip("\n"))
 
+			m = setuptools_warn_re.match(line)
+			if m is not None:
+				setuptools_warn.add(m.group(1))
+
 	except (EOFError, zlib.error) as e:
 		_eerror(["portage encountered a zlib error: '%s'" % (e,),
 			"while reading the log file: '%s'" % logfile])
@@ -1945,6 +1953,12 @@ def _check_build_log(mysettings, out=None):
 		msg.extend("\t" + line for line in make_jobserver)
 		_eqawarn(msg)
 
+	if setuptools_warn:
+		msg = [_("QA Notice: setuptools warnings detected:")]
+		msg.append("")
+		msg.extend("\t" + line for line in sorted(setuptools_warn))
+		_eqawarn(msg)
+
 	f.close()
 	if f_real is not None:
 		f_real.close()
-- 
2.31.1