Merge pull request #829 from jberry-suse/check_source-skip-changes-only

check_source: skip staging process if only .changes modifications.
This commit is contained in:
Max Lin 2017-04-20 03:35:23 -05:00 committed by GitHub
commit 4af3945f11

View File

@ -26,6 +26,7 @@ class CheckSource(ReviewBot.ReviewBot):
self.devel_whitelist = None
self.review_team = 'opensuse-review-team'
self.repo_checker = 'factory-repo-checker'
self.staging_group = 'factory-staging'
self.skip_add_reviews = False
def check_one_request(self, request):
@ -71,7 +72,7 @@ class CheckSource(ReviewBot.ReviewBot):
server_service_files=True, expand_link=True)
shutil.rmtree(os.path.join(target_package, '.osc'))
os.rename(target_package, '_old')
old_info = self.package_source_parse(self.apiurl, target_project, target_package)
old_info = self.package_source_parse(target_project, target_package)
except urllib2.HTTPError:
self.logger.error('failed to checkout %s/%s' % (target_project, target_package))
@ -80,7 +81,7 @@ class CheckSource(ReviewBot.ReviewBot):
os.rename(source_package, target_package)
shutil.rmtree(os.path.join(target_package, '.osc'))
new_info = self.package_source_parse(self.apiurl, source_project, source_package, source_revision)
new_info = self.package_source_parse(source_project, source_package, source_revision)
if new_info['name'] != target_package:
shutil.rmtree(dir)
self.review_messages['declined'] = "A package submitted as %s has to build as 'Name: %s' - found Name '%s'" % (target_package, target_package, new_info['name'])
@ -127,7 +128,13 @@ class CheckSource(ReviewBot.ReviewBot):
if self.review_team is not None:
self.add_review(self.request, by_group=self.review_team, msg='Please review sources')
if self.repo_checker is not None:
if self.only_changes():
self.logger.debug('only .changes modifications')
if not self.dryrun:
osc.core.change_review_state(self.apiurl, str(self.request.reqid), 'accepted',
by_group=self.staging_group,
message='skipping the staging process since only .changes modifications')
elif self.repo_checker is not None:
self.add_review(self.request, by_user=self.repo_checker, msg='Please review build success')
return True
@ -155,7 +162,7 @@ class CheckSource(ReviewBot.ReviewBot):
sys.stdout = _stdout
return result
def package_source_parse(self, apiurl, project, package, revision=None):
def package_source_parse(self, project, package, revision=None):
query = {'view': 'info', 'parse': 1}
if revision:
query['rev'] = revision
@ -178,6 +185,19 @@ class CheckSource(ReviewBot.ReviewBot):
return ret
def only_changes(self):
u = osc.core.makeurl(self.apiurl, ['request', self.request.reqid],
{'cmd': 'diff', 'view': 'xml'})
try:
diff = ET.parse(osc.core.http_POST(u)).getroot()
for f in diff.findall('action/sourcediff/files/file/*[@name]'):
if not f.get('name').endswith('.changes'):
return False
return True
except:
pass
return False
def check_action_add_role(self, request, action):
# Decline add_role request (assumed the bot acting on requests to Factory or similar).
message = 'Roles to packages are granted in the devel project, not in %s.' % action.tgt_project
@ -225,6 +245,7 @@ class CommandLineInterface(ReviewBot.CommandLineInterface):
parser.add_option('--devel-whitelist', dest='devel_whitelist_file', metavar='FILE', help='file containing whitelisted projects (one per line)')
parser.add_option('--review-team', dest='review_team', metavar='GROUP', help='review team group added to requests with > 8 diff')
parser.add_option('--repo-checker', dest='repo_checker', metavar='USER', help='repo checker user added after accepted review')
parser.add_option('--staging-group', metavar='GROUP', help='group used by staging process')
parser.add_option('--skip-add-reviews', dest='skip_add_reviews', action='store_true', default=False, help='skip adding review after completing checks')
return parser
@ -240,6 +261,8 @@ class CommandLineInterface(ReviewBot.CommandLineInterface):
bot.review_team = self.options.review_team
if self.options.repo_checker:
bot.repo_checker = self.options.repo_checker
if self.options.staging_group:
bot.staging_group = self.options.staging_group
bot.skip_add_reviews = self.options.skip_add_reviews
return bot