pre-upload: reject -r0 ebuilds
These are redundant, confusing, and some tools don't like them.
BUG=chromium:1150672
TEST=unittests pass
TEST=ran against example commits in chromiumos-overlay
Change-Id: I0bee561cb00486f66a5064a611bbf53d4cbd15ac
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/repohooks/+/2551822
Reviewed-by: Manoj Gupta <manojgupta@chromium.org>
Commit-Queue: Mike Frysinger <vapier@chromium.org>
Tested-by: Mike Frysinger <vapier@chromium.org>
diff --git a/pre-upload.py b/pre-upload.py
index d37c7b4..0624254 100755
--- a/pre-upload.py
+++ b/pre-upload.py
@@ -1296,6 +1296,20 @@
return None
+def _check_ebuild_r0(_project, commit):
+ """Do not allow ebuilds to end with -r0 versions."""
+ ebuilds = _filter_files(
+ _get_affected_files(commit, include_symlinks=True, relative=True),
+ (r'-r0\.ebuild$',))
+ if ebuilds:
+ return HookFailure(
+ 'The -r0 in ebuilds is redundant and confusing. Simply remove it.\n'
+ 'For example: git mv foo-1.0-r0.ebuild foo-1.0.ebuild',
+ ebuilds)
+
+ return None
+
+
def _check_ebuild_virtual_pv(project, commit):
"""Enforce the virtual PV policies."""
# If this is the portage-stable overlay, then ignore the check.
@@ -2070,6 +2084,7 @@
_check_ebuild_eapi,
_check_ebuild_keywords,
_check_ebuild_licenses,
+ _check_ebuild_r0,
_check_ebuild_virtual_pv,
_check_exec_files,
_check_for_uprev,
diff --git a/pre-upload_unittest.py b/pre-upload_unittest.py
index b5902aa..8aeeee7 100755
--- a/pre-upload_unittest.py
+++ b/pre-upload_unittest.py
@@ -801,6 +801,25 @@
self._CheckContent(u'# HEADER\nKEYWORDS="~arm x86"\nblah\n', True)
+class CheckEbuildR0(PreUploadTestCase):
+ """Tests for _check_ebuild_r0."""
+
+ def setUp(self):
+ self.file_mock = self.PatchObject(pre_upload, '_get_affected_files')
+
+ def testNoMatches(self):
+ """Handle no matching files."""
+ self.file_mock.return_value = []
+ ret = pre_upload._check_ebuild_r0('project', 'HEAD')
+ self.assertIsNone(ret)
+
+ def testBadEbuilds(self):
+ """Handle matching r0 files."""
+ self.file_mock.return_value = ['foo-1-r0.ebuild']
+ ret = pre_upload._check_ebuild_r0('project', 'HEAD')
+ self.assertIsNotNone(ret)
+
+
class CheckEbuildVirtualPv(PreUploadTestCase):
"""Tests for _check_ebuild_virtual_pv."""