mirror of
https://git.launchpad.net/~ubuntu-release/britney/+git/britney2-ubuntu
synced 2025-05-30 03:41:30 +00:00
Allow blocking uploads by way of bugs with the block-proposed tag set
This commit is contained in:
parent
243703f7ac
commit
dbb9883380
@ -62,6 +62,9 @@ Other than source and binary packages, Britney loads the following data:
|
|||||||
* Hints, which contains lists of commands which modify the standard behaviour
|
* Hints, which contains lists of commands which modify the standard behaviour
|
||||||
of Britney (see Britney.read_hints).
|
of Britney (see Britney.read_hints).
|
||||||
|
|
||||||
|
* Blocks, which contains user-supplied blocks read from Launchpad bugs
|
||||||
|
(see LPBlockBugPolicy).
|
||||||
|
|
||||||
For a more detailed explanation about the format of these files, please read
|
For a more detailed explanation about the format of these files, please read
|
||||||
the documentation of the related methods. The exact meaning of them will be
|
the documentation of the related methods. The exact meaning of them will be
|
||||||
instead explained in the chapter "Excuses Generation".
|
instead explained in the chapter "Excuses Generation".
|
||||||
@ -210,6 +213,7 @@ from britney2.policies.policy import (AgePolicy,
|
|||||||
BuiltUsingPolicy,
|
BuiltUsingPolicy,
|
||||||
BuiltOnBuilddPolicy,
|
BuiltOnBuilddPolicy,
|
||||||
ImplicitDependencyPolicy,
|
ImplicitDependencyPolicy,
|
||||||
|
LPBlockBugPolicy,
|
||||||
)
|
)
|
||||||
from britney2.policies.autopkgtest import AutopkgtestPolicy
|
from britney2.policies.autopkgtest import AutopkgtestPolicy
|
||||||
from britney2.utils import (log_and_format_old_libraries,
|
from britney2.utils import (log_and_format_old_libraries,
|
||||||
@ -517,6 +521,7 @@ class Britney(object):
|
|||||||
self._policy_engine.add_policy(ImplicitDependencyPolicy(self.options, self.suite_info))
|
self._policy_engine.add_policy(ImplicitDependencyPolicy(self.options, self.suite_info))
|
||||||
if getattr(self.options, 'check_buildd', 'no') == 'yes':
|
if getattr(self.options, 'check_buildd', 'no') == 'yes':
|
||||||
self._policy_engine.add_policy(BuiltOnBuilddPolicy(self.options, self.suite_info))
|
self._policy_engine.add_policy(BuiltOnBuilddPolicy(self.options, self.suite_info))
|
||||||
|
self._policy_engine.add_policy(LPBlockBugPolicy(self.options, self.suite_info))
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def hints(self):
|
def hints(self):
|
||||||
|
@ -1731,3 +1731,51 @@ class ImplicitDependencyPolicy(BasePolicy):
|
|||||||
sorted(broken_old | broken_binaries)
|
sorted(broken_old | broken_binaries)
|
||||||
|
|
||||||
return verdict
|
return verdict
|
||||||
|
|
||||||
|
|
||||||
|
class LPBlockBugPolicy(BasePolicy):
|
||||||
|
"""block-proposed Launchpad bug policy for source migrations
|
||||||
|
|
||||||
|
This policy will read an user-supplied "Blocks" file from the unstable
|
||||||
|
directory (provided by an external script) with rows of the following
|
||||||
|
format:
|
||||||
|
|
||||||
|
<source-name> <bug> <date>
|
||||||
|
|
||||||
|
The dates are expressed as the number of seconds from the Unix epoch
|
||||||
|
(1970-01-01 00:00:00 UTC).
|
||||||
|
"""
|
||||||
|
def __init__(self, options, suite_info):
|
||||||
|
super().__init__('block-bugs', options, suite_info, {SuiteClass.PRIMARY_SOURCE_SUITE})
|
||||||
|
|
||||||
|
def initialise(self, britney):
|
||||||
|
super().initialise(britney)
|
||||||
|
self.blocks = {} # srcpkg -> [(bug, date), ...]
|
||||||
|
|
||||||
|
filename = os.path.join(self.options.unstable, "Blocks")
|
||||||
|
self.log("Loading user-supplied block data from %s" % filename)
|
||||||
|
for line in open(filename):
|
||||||
|
ln = line.split()
|
||||||
|
if len(ln) != 3:
|
||||||
|
self.log("Blocks, ignoring malformed line %s" % line, type='W')
|
||||||
|
continue
|
||||||
|
try:
|
||||||
|
self.blocks.setdefault(ln[0], [])
|
||||||
|
self.blocks[ln[0]].append((ln[1], int(ln[2])))
|
||||||
|
except ValueError:
|
||||||
|
self.log("Blocks, unable to parse \"%s\"" % line, type='E')
|
||||||
|
|
||||||
|
def apply_src_policy_impl(self, block_bugs_info, item, source_data_tdist, source_data_srcdist, excuse):
|
||||||
|
source_name = item.package
|
||||||
|
try:
|
||||||
|
blocks = self.blocks[source_name]
|
||||||
|
except KeyError:
|
||||||
|
return PolicyVerdict.PASS
|
||||||
|
|
||||||
|
for bug, date in blocks:
|
||||||
|
block_bugs_info[bug] = date
|
||||||
|
excuse.addinfo("Not touching package as requested in <a href=\"https://launchpad.net/bugs/%s\">bug %s</a> on %s" %
|
||||||
|
(bug, bug, time.asctime(time.gmtime(date))))
|
||||||
|
excuse.addreason('block')
|
||||||
|
|
||||||
|
return PolicyVerdict.REJECTED_PERMANENTLY
|
||||||
|
@ -1920,28 +1920,6 @@ class AT(TestAutopkgtestBase):
|
|||||||
{'lightgreen': [('reason', 'block')]}
|
{'lightgreen': [('reason', 'block')]}
|
||||||
)
|
)
|
||||||
|
|
||||||
################################################################
|
|
||||||
# Tests for non-hint policies (Ubuntu only)
|
|
||||||
################################################################
|
|
||||||
|
|
||||||
# # def test_lp_bug_block(self):
|
|
||||||
# # self.data.add_default_packages(darkgreen=False)
|
|
||||||
# #
|
|
||||||
# # with open(os.path.join(self.data.path, 'data/unstable/Blocks'), 'w') as f:
|
|
||||||
# # f.write('darkgreen 12345 1471505000\ndarkgreen 98765 1471500000\n')
|
|
||||||
# #
|
|
||||||
# # exc = self.run_it(
|
|
||||||
# # [('darkgreen', {'Version': '2'}, 'autopkgtest')],
|
|
||||||
# # {'darkgreen': (False, {'darkgreen': {'i386': 'RUNNING-ALWAYSFAIL', 'amd64': 'RUNNING-ALWAYSFAIL'}})},
|
|
||||||
# # {'darkgreen': [('reason', 'block'),
|
|
||||||
# # ('excuses', 'Not touching package as requested in <a href="https://launchpad.net/bugs/12345">bug 12345</a> on Thu Aug 18 07:23:20 2016'),
|
|
||||||
# # ('is-candidate', False),
|
|
||||||
# # ]
|
|
||||||
# # }
|
|
||||||
# # )[1]
|
|
||||||
# # self.assertEqual(exc['darkgreen']['policy_info']['block-bugs'],
|
|
||||||
# # {'12345': 1471505000, '98765': 1471500000})
|
|
||||||
|
|
||||||
################################################################
|
################################################################
|
||||||
# Kernel related tests
|
# Kernel related tests
|
||||||
################################################################
|
################################################################
|
||||||
|
70
tests/test_lpblockbug.py
Normal file
70
tests/test_lpblockbug.py
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
#!/usr/bin/python3
|
||||||
|
# (C) 2020 Canonical Ltd.
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
|
||||||
|
from collections import defaultdict
|
||||||
|
|
||||||
|
import calendar
|
||||||
|
import fileinput
|
||||||
|
import json
|
||||||
|
import os
|
||||||
|
import pprint
|
||||||
|
import sys
|
||||||
|
import time
|
||||||
|
import unittest
|
||||||
|
import yaml
|
||||||
|
from unittest.mock import DEFAULT, patch, call
|
||||||
|
|
||||||
|
PROJECT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||||
|
sys.path.insert(0, PROJECT_DIR)
|
||||||
|
|
||||||
|
from britney2.policies.policy import PolicyVerdict
|
||||||
|
# We want to reuse run_it
|
||||||
|
from tests.test_autopkgtest import TestAutopkgtestBase
|
||||||
|
|
||||||
|
|
||||||
|
class T(TestAutopkgtestBase):
|
||||||
|
def test_lp_bug_block(self):
|
||||||
|
self.data.add_default_packages(darkgreen=False)
|
||||||
|
|
||||||
|
with open(
|
||||||
|
os.path.join(self.data.path, "data/unstable/Blocks"), "w"
|
||||||
|
) as f:
|
||||||
|
f.write("darkgreen 12345 1471505000\ndarkgreen 98765 1471500000\n")
|
||||||
|
|
||||||
|
exc = self.run_it(
|
||||||
|
[("darkgreen", {"Version": "2"}, "autopkgtest")],
|
||||||
|
{
|
||||||
|
"darkgreen": (
|
||||||
|
False,
|
||||||
|
{
|
||||||
|
"darkgreen": {
|
||||||
|
"i386": "RUNNING-ALWAYSFAIL",
|
||||||
|
"amd64": "RUNNING-ALWAYSFAIL",
|
||||||
|
}
|
||||||
|
},
|
||||||
|
)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"darkgreen": [
|
||||||
|
("reason", "block"),
|
||||||
|
(
|
||||||
|
"excuses",
|
||||||
|
'Not touching package as requested in <a href="https://launchpad.net/bugs/12345">bug 12345</a> on Thu Aug 18 07:23:20 2016',
|
||||||
|
),
|
||||||
|
("is-candidate", False),
|
||||||
|
]
|
||||||
|
},
|
||||||
|
)[1]
|
||||||
|
self.assertEqual(
|
||||||
|
exc["darkgreen"]["policy_info"]["block-bugs"],
|
||||||
|
{
|
||||||
|
"12345": 1471505000,
|
||||||
|
"98765": 1471500000,
|
||||||
|
"verdict": "REJECTED_PERMANENTLY",
|
||||||
|
},
|
||||||
|
)
|
Loading…
x
Reference in New Issue
Block a user