"""Get git tag info"""
git_cache = os.path.join(os.getenv('GIT_CACHE_DIR'))
-
if event_fields.get('github'):
github = event_fields.get('github')
- prjdir = os.path.join(git_cache, prj)
- giturl = None
- git_cache_dir = None
for item in github:
- if prj in item.get('project'):
- giturl = github.get('url')
- gitorg = giturl.split(':')[1]
- git_full_name = os.path.join(gitorg, prj)
- prjdir = os.path.join(git_cache, git_full_name)
- git_cache_dir = os.path.join(git_cache, gitorg)
- break
+ for p in item:
+ if prj == p:
+ giturl = item[p]
+ gitorg = giturl.split(':')[1]
+ git_full_name = os.path.join(gitorg, prj)
+ prjdir = os.path.join(git_cache, git_full_name)
+ git_cache_dir = os.path.join(git_cache, gitorg)
+ print 'org=%s git_full_name = %s' %(gitorg, git_full_name)
+ break
else: # GERRIT
prjdir = os.path.join(git_cache, prj)
giturl = None
obs_req_pkg_name = event_fields['packages'][projects.index(project)]
except Exception as err:
print 'Warning: not able to find package name from description'
+
tag = tag_info(project, entry['GIT_TAG'], event_fields)
if tag:
tag.update({'GIT_PROJECT': project,
status['body'], os.getenv('NOREPLY_EMAIL_SENDER'), \
status['To'], status['Cc'])
+def sub_request_gerrit(event_type, event_fields, reqinfo):
+ """ sub request gerrit """
+
+ try:
+ data, projects_data = obs_git_data(event_fields)
+ except GitError, err:
+ print >> sys.stderr, err
+ return []
+
+ gerrit = Gerrit(os.getenv('GERRIT_HOSTNAME_EXTERNAL'), os.getenv('GERRIT_USERNAME'),
+ os.getenv('GERRIT_SSHPORT'),
+ int(os.getenv('GERRIT_SILENT_MODE')))
+
+ for project_data in projects_data:
+ data.update(project_data)
+ data.update({'GIT_AUTHOR_EMAIL': '%s <%s>' % \
+ (project_data['author'],
+ project_data['email'])})
+ # Update sourcepackage and targetpackage into event_fields,
+ # becuase the multiple project have the different packages.
+ event_fields.update({'sourcepackage': project_data['OBS_REQ_PKG_SRC'],
+ 'targetpackage': project_data['OBS_REQ_PKG']})
+ if not (event_type == 'OBS_SRCSRV_REQUEST_REVOKED' or \
+ (event_type == 'OBS_SRCSRV_REQUEST_STATECHANGE' and \
+ event_fields['state'] == 'revoked')):
+ notify_submiter(event_fields, data)
+
+ git_cache = os.path.join(os.getenv('GIT_CACHE_DIR'))
+ prjdir = os.path.join(git_cache, data['GIT_PROJECT'])
+
+ try:
+ gitprj = Git(prjdir)
+ except GitRepositoryError, err:
+ # clone project to local workspace if it doesn't exist in git cache
+ if not clone_gitproject(data['GIT_PROJECT'], \
+ os.path.join(os.getenv('WORKSPACE'), data['GIT_PROJECT'])):
+ return -1
+ gitprj = Git('%s/%s' % (os.getenv('WORKSPACE'),
+ data['GIT_PROJECT']))
+
+ trigger_next(event_type, data)
+
+ if event_type == 'OBS_SRCSRV_REQUEST_STATECHANGE':
+ if event_fields['state'] == 'declined':
+ request_rejected(data, gerrit)
+ elif event_fields['state'] == 'revoked':
+ request_revoked(data)
+ elif event_fields['state'] == 'accepted':
+ print 'From accept'
+ request_accepted(data, gerrit, gitprj, reqinfo.get('targetpackagelist', None))
+
+ elif event_type == 'OBS_SRCSRV_REQUEST_CREATE':
+ request_created(data)
+
+ elif event_type == 'OBS_SRCSRV_REQUEST_ACCEPTED':
+ request_accepted(data, gerrit, gitprj, reqinfo.get('targetpackagelist', None))
+ elif event_type == 'OBS_SRCSRV_REQUEST_REVOKED':
+ request_revoked(data)
+
+ return data
+
+def request_github_accepted(data, targetpackagelist=[]):
+ """Do lots of things when request accepted"""
+
+ print '====request accepted===================================='
+
+ message = 'The SR (Submit Request) has been accepted to OBS %s project.\n' \
+ '- Package: %s\n' \
+ '- Reviewer: %s\n' \
+ '- Comments: %s\n' \
+ '- Git project: %s\n' \
+ '- Tag:%s\n' \
+ '- Request URL:%s' % (data['OBS_REQ_PRJ'],
+ data['OBS_REQ_PKG'],
+ data["OBS_REQ_SENDER"],
+ data["OBS_REQ_COMMENT"],
+ data['GIT_PROJECT'],
+ data["GIT_TAG"],
+ request_url(data['OBS_REQ_ID']))
+
+ additional_comment = REPAIR_COMMENT \
+ % (data['OBS_REQ_ID'], os.getenv('OBS_URL_EXTERNAL'), data['OBS_REQ_ID'], \
+ data['OBS_REQ_DESP'])
+ delete_from_obs(data['OBS_REQ_PRJ_SRC'], data['OBS_REQ_PKG_SRC'], \
+ handle_link={'target_project': data['OBS_REQ_PRJ'], \
+ 'comments': additional_comment, \
+ 'target_packages': targetpackagelist})
+
+def request_github_rejected(data):
+ """When request rejected, give msg to gerrit and delete remote package"""
+
+ print '====request rejected===================================='
+
+ message = 'The SR (Submit Request) has been *rejected* ' \
+ 'to OBS %s project.\n' \
+ '- Reviewer: %s\n' \
+ '- Comments: %s\n' \
+ '- Git project: %s\n' \
+ '- Tag:%s\n' \
+ '- Request URL:%s' % (data['OBS_REQ_PRJ'],
+ data["OBS_REQ_SENDER"],
+ data["OBS_REQ_COMMENT"],
+ data['GIT_PROJECT'],
+ data["GIT_TAG"],
+ request_url(data['OBS_REQ_ID']))
+
+ delete_from_obs(data['OBS_REQ_PRJ_SRC'], data['OBS_REQ_PKG_SRC'])
+
+def request_github_revoked(data):
+ """When request revoked, delete the remote package"""
+
+ print '====request revoked===================================='
+
+ delete_from_obs(data['OBS_REQ_PRJ_SRC'], data['OBS_REQ_PKG_SRC'])
+
+def sub_request_github(event_type, event_fields, reqinfo):
+ """ sub request github """
+ try:
+ data, projects_data = obs_git_data(event_fields)
+ except GitError, err:
+ print >> sys.stderr, err
+ return []
+
+ for project_data in projects_data:
+ data.update(project_data)
+
+ if event_type == 'OBS_SRCSRV_REQUEST_STATECHANGE':
+ if event_fields['state'] == 'declined':
+ request_github_rejected(data)
+ elif event_fields['state'] == 'revoked':
+ request_github_revoked(data)
+ elif event_fields['state'] == 'accepted':
+ request_github_accepted(data, reqinfo.get('targetpackagelist', None))
+
+ return data
+
def main():
"""The main body"""
buildmonitor_enabled = os.getenv("BUILDMONITOR_ENABLED", "0") != "0"
if not event_fields:
print 'Invalid OBS event'
return -1
+
+ # Get event type
+ event_type = event_fields['event_type']
+
+ if event_type == 'OBS_SRCSRV_REQUEST_CREATE' \
+ and 'home:prerelease:' in event_fields['sourceproject']:
+ # do not notify submitter about SR creation from prerelease projects
+ # repa immediately accepts/rejects SRs after creation, so submitter
+ # will be notified anyway
+ print 'Skipping processing of REQUEST_CREATE for prerelease project'
+ return 0
+
# Update info of request
build = BuildService(os.getenv('OBS_API_URL'), \
os.getenv('OBS_API_USERNAME'), os.getenv('OBS_API_PASSWD'))
"when": event_fields.get('when'),
"reason": event_fields.get('comment'),
})
- try:
- data, projects_data = obs_git_data(event_fields)
- except GitError, err:
- print >> sys.stderr, err
- return -1
- # Get event type
- event_type = event_fields['event_type']
-
- if event_type == 'OBS_SRCSRV_REQUEST_CREATE' \
- and 'home:prerelease:' in event_fields['sourceproject']:
- # do not notify submitter about SR creation from prerelease projects
- # repa immediately accepts/rejects SRs after creation, so submitter
- # will be notified anyway
- print 'Skipping processing of REQUEST_CREATE for prerelease project'
- return 0
-
- gerrit = Gerrit(os.getenv('GERRIT_HOSTNAME_EXTERNAL'), os.getenv('GERRIT_USERNAME'),
- os.getenv('GERRIT_SSHPORT'),
- int(os.getenv('GERRIT_SILENT_MODE')))
-
- for project_data in projects_data:
- data.update(project_data)
- data.update({'GIT_AUTHOR_EMAIL': '%s <%s>' % \
- (project_data['author'],
- project_data['email'])})
- # Update sourcepackage and targetpackage into event_fields,
- # becuase the multiple project have the different packages.
- event_fields.update({'sourcepackage': project_data['OBS_REQ_PKG_SRC'],
- 'targetpackage': project_data['OBS_REQ_PKG']})
- if not (event_type == 'OBS_SRCSRV_REQUEST_REVOKED' or \
- (event_type == 'OBS_SRCSRV_REQUEST_STATECHANGE' and \
- event_fields['state'] == 'revoked')):
- notify_submiter(event_fields, data)
-
- git_cache = os.path.join(os.getenv('GIT_CACHE_DIR'))
- # Enable Github Connection
- if event_fields.get('github'):
- github = event_fields.get('github')
- prjdir = os.path.join(git_cache, data['GIT_PROJECT'])
- giturl = None
- git_cache_dir = None
- for item in github:
- if data['GIT_PROJECT'] in item.get('project'):
- giturl = item.get('url')
- gitorg = giturl.split(':')[1]
- git_full_name = os.path.join(gitorg, data['GIT_PROJECT'])
- prjdir = os.path.join(git_cache, git_full_name)
- git_cache_dir = os.path.join(git_cache, gitorg)
- print "GITHUB prjdir=%s git_cache_dir=%s" %(prjdir, git_cache_dir)
- break
- else: # GERRIT
- prjdir = os.path.join(git_cache, data['GIT_PROJECT'])
- giturl = None
- git_cache_dir = None
- print "GERRIT prjdir=%s git_cache_dir=%s" %(prjdir, git_cache_dir)
- try:
- gitprj = Git(prjdir)
- except GitRepositoryError, err:
- # clone project to local workspace if it doesn't exist in git cache
- if not clone_gitproject(data['GIT_PROJECT'], \
- os.path.join(os.getenv('WORKSPACE'), data['GIT_PROJECT']), \
- giturl=giturl, git_cache_dir=git_cache_dir):
- return -1
- gitprj = Git('%s/%s' % (os.getenv('WORKSPACE'),
- data['GIT_PROJECT']))
-
- trigger_next(event_type, data)
-
- if event_type == 'OBS_SRCSRV_REQUEST_STATECHANGE':
- if event_fields['state'] == 'declined':
- request_rejected(data, gerrit)
- elif event_fields['state'] == 'revoked':
- request_revoked(data)
- elif event_fields['state'] == 'accepted':
- print 'From accept'
- request_accepted(data, gerrit, gitprj, reqinfo.get('targetpackagelist', None))
-
- elif event_type == 'OBS_SRCSRV_REQUEST_CREATE':
- request_created(data)
-
- elif event_type == 'OBS_SRCSRV_REQUEST_ACCEPTED':
- request_accepted(data, gerrit, gitprj, reqinfo.get('targetpackagelist', None))
- elif event_type == 'OBS_SRCSRV_REQUEST_REVOKED':
- request_revoked(data)
+ if event_fields.get('github'): #GITHUB
+ data = sub_request_github(event_type, event_fields, reqinfo)
+ else: #GERRIT
+ data = sub_request_gerrit(event_type, event_fields, reqinfo)
# Deleting project for SR-SYNC
if submissions and len(submissions) >= 1: