From f944b62bc84a4d9bab3d0511446613fea4266fa1 Mon Sep 17 00:00:00 2001 From: Yonghee Han Date: Wed, 20 Dec 2017 16:41:02 +0900 Subject: [PATCH] Add Request Submit funtion in git sync add api : get_tagname_from_prerelease_name add funtion : Request submit after git sync Change-Id: I37a37e757a49d0761d5545194de150b5e916ca6b --- common/prerelease.py | 9 +++++ job_submit_request_git_sync.py | 74 +++++++++++++++++++++++++++++++++++++++++- 2 files changed, 82 insertions(+), 1 deletion(-) diff --git a/common/prerelease.py b/common/prerelease.py index d654725..4e101cf 100644 --- a/common/prerelease.py +++ b/common/prerelease.py @@ -66,3 +66,12 @@ def prerelease_enabled(backenddb, obs_project): return 'PrereleaseDir' in backenddb.get_repos()[repo_name] except (BackendDBError, EntityError): return False + +def get_tagname_from_prerelease_name(prerelease_project): + """ + Get tagname from obs project + """ + project = get_info_from_prerelease_name(prerelease_project)[0] + + return (prerelease_project.split(project)[-1].replace(":","/")[1:]) + diff --git a/job_submit_request_git_sync.py b/job_submit_request_git_sync.py index c200079..3f50684 100644 --- a/job_submit_request_git_sync.py +++ b/job_submit_request_git_sync.py @@ -20,6 +20,7 @@ from common.send_mail import prepare_mail from time import sleep from common.workflow import MailSender +from common.prerelease import get_tagname_from_prerelease_name GIT_URL = 'ssh://%s@%s:%s' % (os.getenv('GERRIT_USERNAME'), os.getenv('GERRIT_HOSTNAME'), @@ -33,6 +34,35 @@ class UpstreamError(Exception): pass class OverwriteError(Exception): pass class MergeError(Exception): pass class SubmitError(Exception): pass +class SubmitRequestError(Exception): pass + +def submit_request(project, branch, commit, tagname): + """ + Submit Request + """ + result = True + message = "Auto Sync SR Tag" + try: + + tmpdir = tempfile.mkdtemp(prefix=os.getenv('WORKSPACE')+'/') + if not git.clone_gitproject(project, os.path.join(tmpdir, project)): + raise SubmitRequestError('Submit Request git update failed(%s)' % (project)) + + git_dir = os.path.join(tmpdir, project) + gitprj = git.Git(git_dir) + + gitprj.set_branch(branch) + print 'set branch' + gitprj.checkout(commit) + print 'checkout' + gitprj.create_tag(tagname, message) + print 'create_tag' + gitprj.push_tag("origin", tagname) + print 'push' + except Exception as err: + result = False + + return result def submit_gerrit_change(gerritobj, gitprj, project, branch, commit): result = True @@ -82,6 +112,7 @@ def update_sync_for_git_sync(tmpdir, private_gerrit, target, requests, request_s email_to_members = target.get('notify') or [] GIT_PREFIX = target.get('fork') or [] UPSTREAM_BRANCH = "public_" + target.get('source_branch') or [] + tagname = get_tagname_from_prerelease_name(requests.keys()[0]) request_projects = [] new_private_projects = [] @@ -92,6 +123,8 @@ def update_sync_for_git_sync(tmpdir, private_gerrit, target, requests, request_s merge_failures = [] merge_successs = [] submit_failures = [] + submit_request_successs = [] + submit_request_failures = [] private_projects = private_gerrit.ls_projects() @@ -167,6 +200,12 @@ def update_sync_for_git_sync(tmpdir, private_gerrit, target, requests, request_s if ret == None: raise UpstreamError('create %s branch failed(%s)' % (branch, private_project)) merge_successs.append((private_project, '%s -> %s' %(commit, commit))) + + ret = submit_request(project=private_project, branch=branch, commit=commit, tagname=tagname) + if not ret: + raise SubmitRequestError('submit request failed(%s, %s)' % (private_project, commit)) + submit_request_successs.append((private_project, commit, tagname)) + elif is_mixed_git: ## Merge if branch in private_gitprj.branch_contains(commit): print 'already merge %s branch..' % (branch) @@ -209,6 +248,12 @@ def update_sync_for_git_sync(tmpdir, private_gerrit, target, requests, request_s if not ret: raise SubmitError('submit failed(%s, %s)' % (private_project, merge_commit)) merge_successs.append((private_project, '%s -> %s' %(commit, merge_commit))) + + ret = submit_request(project=private_project, branch=branch, commit=merge_commit, tagname=tagname) + if not ret: + raise SubmitRequestError('submit request failed(%s, %s)' % (private_project, merge_commit)) + submit_request_successs.append((private_project, merge_commit, tagname)) + else: ## Overwrite branch print '\n* Overwrite %s %s %s' % (commit, branch, private_project) ret, overwrite_commit = private_gitprj.create_overwrite_commit(branch, commit) @@ -246,6 +291,12 @@ def update_sync_for_git_sync(tmpdir, private_gerrit, target, requests, request_s raise SubmitError('submit failed(%s, %s)' % (private_project, overwrite_commit)) overwrite_successs.append((private_project, '%s -> %s' %(commit, overwrite_commit))) + + ret = submit_request(project=private_project, branch=branch, commit=merge_commit, tagname=tagname) + if not ret: + raise SubmitRequestError('submit request failed(%s, %s)' % (private_project, merge_commit)) + submit_request_successs.append((private_project, merge_commit, tagname)) + except UpstreamError, exc: upstream_failures.append((project, revision, exc)) print 'Error:', exc @@ -258,6 +309,9 @@ def update_sync_for_git_sync(tmpdir, private_gerrit, target, requests, request_s except SubmitError, exc: submit_failures.append((project, revision, exc)) print 'Error:', exc + except SubmitRequestError, exc: + submit_request_failures.append((project, revision, exc)) + print 'Error:', exc finally: if upstream_git_dir and os.path.exists(upstream_git_dir): shutil.rmtree(upstream_git_dir) @@ -300,6 +354,14 @@ def update_sync_for_git_sync(tmpdir, private_gerrit, target, requests, request_s print '\n-----[Submit Failure List]--------------------------------' print '\n'.join(str(item) for item in submit_failures) + if submit_request_successs: + print '\n-----[SR(Submit Request) Success List]---------------------------------' + print '\n'.join(str(item) for item in submit_request_successs) + + if submit_request_failures: + print '\n-----[SR(Submit Request) Failure List]--------------------------------' + print '\n'.join(str(item) for item in submit_request_failures) + #### Send mail to maintainers if True: ### Init MailSender #### @@ -346,8 +408,18 @@ def update_sync_for_git_sync(tmpdir, private_gerrit, target, requests, request_s my_mail.add_message('\n-----[Submit Failure List]--------------------------------') [my_mail.add_message(str(item)) for item in submit_failures] + if submit_request_successs: + my_mail.add_message('\n-----[SR(Submit Request) Success List]--------------------------------') + [my_mail.add_message(str(item)) for item in submit_request_successs] + + + if submit_request_failures: + my_mail.add_message('\n-----[SR(Submit Request) Failure List]--------------------------------') + [my_mail.add_message(str(item)) for item in submit_request_failures] + if new_private_projects or overwrite_alreadys or overwrite_successs or \ - upstream_failures or overwrite_failures or merge_failures or submit_failures or merge_successs: + upstream_failures or overwrite_failures or merge_failures or submit_failures or merge_successs or \ + submit_request_successs or submit_request_failures: # Send mail to maintainers my_mail.send_mail() -- 2.7.4