@staticmethod
def __encode_to_ascii(source):
""" encode unicode list element to ascii """
- dest = []
- for i in source:
- if type(i) == unicode:
- dest.append(i.encode('ascii'))
- else:
- dest.append(i)
+ if type(source) == list:
+ dest = []
+ for i in source:
+ if type(i) == unicode:
+ dest.append(i.encode('ascii'))
+ else:
+ dest.append(i)
+ elif type(source) == dict:
+ dest = {}
+ for i in source:
+ if type(source[i]) == unicode:
+ dest[i] = source[i].encode('ascii')
+ else:
+ dest[i] = source[i]
return dest
def __get_mapping(self, obj, branch=None):
""" get OBS target project under one object(project or path) """
mapping = []
+ key_list = ['OBS_project', 'OBS_staging_project', 'OBS_package', 'OBS_use_specname']
if obj.submission == 'N':
# <project name="public/tools/ext4-utils" submission="N"/>
if brch.submission == 'N':
return None
else:
- mapping.append(self.__encode_to_ascii(\
- [brch.OBS_project,
- brch.OBS_staging_project,
- brch.OBS_package]))
+ brch_dict = {}
+ for key in key_list:
+ brch_dict[key] = brch.__getitem__(key)
+ mapping.append(self.__encode_to_ascii(brch_dict))
else:
for brch in obj.branch:
if brch.submission == 'N':
continue
else:
- mapping.append(self.__encode_to_ascii(\
- [brch.OBS_project,
- brch.OBS_staging_project,
- brch.OBS_package]))
+ brch_dict = {}
+ for key in key_list:
+ brch_dict[key] = brch.__getitem__(key) or None
+ mapping.append(self.__encode_to_ascii(brch_dict))
+
return mapping
def get_submit_mapping(self, project, branch=None):
@staticmethod
def __encode_to_ascii(source):
""" encode unicode list element to ascii """
- dest = []
- for i in source:
- if type(i) == unicode:
- dest.append(i.encode('ascii'))
- else:
- dest.append(i)
+ if type(source) == list:
+ dest = []
+ for i in source:
+ if type(i) == unicode:
+ dest.append(i.encode('ascii'))
+ else:
+ dest.append(i)
+ elif type(source) == dict:
+ dest = {}
+ for i in source:
+ if type(source[i]) == unicode:
+ dest[i] = source[i].encode('ascii')
+ else:
+ dest[i] = source[i]
return dest
- def get_submit_mapping(self, project, branch=None, include_config=False):
+ def get_submit_mapping(self, project, branch=None):
"""Get submit mapping though project or branch"""
mapping = []
- config_enabled = True
if self.mapping_obj.configure:
# if configure.enable is false then return []
if self.mapping_obj.configure.enable == 'false':
config_enabled = False
- if config_enabled and self.mapping_obj.branch:
+ if self.mapping_obj.branch:
for brch in self.mapping_obj.branch:
for prj in brch.project:
if (prj.name == project or prj.name == '/' + project) and ( branch in brch.name.split(",") ):
- item = self.__encode_to_ascii([brch.OBS_project, brch.OBS_staging_project, prj.OBS_package])
- if include_config:
- item.append(self.mapping_obj.configure)
+ item = {}
+ item['OBS_project'] = brch.OBS_project
+ item['OBS_staging_project'] = brch.OBS_staging_project
+ item['OBS_package'] = prj.OBS_package
+ item['OBS_use_specname'] = self.mapping_obj.configure.OBS_use_specname
+ item = self.__encode_to_ascii(item)
+ item['config'] = self.mapping_obj.configure
mapping.append(item)
return mapping
return branchs
def git_obs_map(gerrit_prj, gerrit_branch=None, gitcache=None, \
- gerrit_hostname=None, gerrit_username=None, gerrit_sshport=None, \
- include_config=False):
+ gerrit_hostname=None, gerrit_username=None, gerrit_sshport=None):
"""
Find an OBS project[s correspondent to Gerrit project and branch
by parsing git-obs-mapping.xml.
for file in mapping_v2_file_lists:
mymapping_v2 = MappingV2(file)
obs_prjs.extend(mymapping_v2.get_submit_mapping(gerrit_prj,
- gerrit_branch,
- include_config=include_config))
+ gerrit_branch))
# remove overlapped items
obs_prjs = remove_overlaps(obs_prjs)
return True
-def find_specfile(prj_dir, packaging_dir, tag, event, tagger, pkg_name=None):
+def find_specfile(prj_dir, packaging_dir, tag, event, tagger, pkg_name=None, debug_prj_name=None):
"""search specfile under packaging directory"""
msg = ''
- if pkg_name:
- spec = '%s/%s/%s.spec' % (prj_dir, packaging_dir, pkg_name)
- if not os.path.isfile(spec):
- msg = "The tag %s pushed, but backend service can not find %s \n"\
- "under packaging directory, which is caused by mistake \n"\
- "OBS_PACKAGE parameter in scm/git-obs-mapping project. \n"\
- "Please correct it or contact system administrator for \n"\
- "more details." % (tag, os.path.basename(spec))
- else:
+ if True:
specs = utils.find_spec('%s/%s' % (prj_dir, packaging_dir))
if not specs:
# no spec exist under packaging, use default name
elif len(specs) == 1:
# only one spec exist under packaging
spec = specs[0]
+ print 'Single spec. Use %s' % os.path.basename(spec)
else:
# multiple specs exist under packaging, use default name
- spec = '%s/%s/%s.spec' % (prj_dir, packaging_dir, \
- os.path.basename(event['project']))
+ spec = None
+ if pkg_name:
+ spec = '%s/%s/%s.spec' % (prj_dir, packaging_dir, pkg_name)
+ print 'Multiple specs. Try %s' % os.path.basename(spec)
+ if spec is None or not os.path.isfile(spec):
+ spec = '%s/%s/%s.spec' % (prj_dir, packaging_dir, \
+ os.path.basename(event['project']))
+ print 'Multiple specs with no pkg_name.spec. Try %s' % os.path.basename(spec)
if not os.path.isfile(spec):
msg = "The tag %s pushed, but packaging directory contains \n"\
"multiply spec files, backend service can not decide \n"\
"administrator for more details." % tag
if msg:
+ if debug_prj_name is not None:
+ msg = "TARGET_PROJECT: %s\n%s" % (debug_prj_name, msg)
print msg
send_mail(TITLE_FAILED % (tag, event['project']), msg, tagger)
return None
tagger = mygit.get_tag(tag)
# get list of target projects from git-obs-mapping
- obs_target_prjs = git_obs_map(os.getenv("GERRIT_PROJECT"), git_branch, include_config=True)
+ obs_target_prjs = git_obs_map(os.getenv("GERRIT_PROJECT"), git_branch)
build = BuildService(obs_api, obs_user, obs_passwd)
# prepare submit_info
for item in obs_target_prjs:
enable_build = True
- obs_target_prj, obs_stg_prj, obs_pkg = item[0:3]
- if len(item) >= 4 and item[3].build == 'no':
+ obs_target_prj = item['OBS_project']
+ obs_stg_prj = item['OBS_staging_project']
+ obs_pkg = item['OBS_package']
+ if 'config' in item and item['config'] is not None and item['config'].build == 'no':
print 'Set disable build for %s' % (obs_target_prj)
enable_build = False
+
url = 'ssh://%s:%s' % (os.getenv('GERRIT_HOSTNAME'),
os.getenv('GERRIT_SSHPORT'))
# get package name from xml files.
submitter += ' <%s>' % gerrit_account_email
# search specfile under packaging directory
- #specfile = find_specfile(prjdir, packagingdir, tag, event, tagger, obs_pkg)
+ #specfile = find_specfile(prjdir, packagingdir, tag, event, tagger, obs_pkg,\
+ # debug_prj_name=obs_target_prj)
#if not specfile:
# continue
# generate tarball and submit to obs
for target in obstargets:
mygit.clean(directories=True, force=True)
- (obs_dst_prj, obs_stg_prj, obs_pkg) = target
+ obs_dst_prj = target['OBS_project']
+ obs_stg_prj = target['OBS_staging_project']
+ obs_pkg = target['OBS_package']
if not obs_dst_prj:
continue