def __init__(self, build_id=None):
self.build_id = build_id
+ self.base_id = None
+ self.ref_id = None
self.targets = OrderedDict()
def add_target(self, target):
"""Add (or update) target to the list of targets."""
self.targets[target["name"]] = target
+ def set_base_id(self, base_id):
+ """ Set Base id """
+ self.base_id = base_id
+
+ def set_ref_id(self, ref_id):
+ """ Set Ref id """
+ self.ref_id = ref_id
+
def load(self, xml):
"""Load build data from string."""
"""Format build data as xml."""
content = '<?xml version="1.0"?><build version="1.0">'\
'<id>%s</id>' % self.build_id
+ # set base id
+ if self.base_id:
+ content += '<base_id>%s</base_id>' % self.base_id
+
+ # set ref id
+ if self.ref_id:
+ content += '<ref_id>%s</ref_id>' % self.ref_id
# build targets
content += '<buildtargets>'
except BuildDataError, err:
raise RepoMakerError("Unable to generate build.xml: %s" % err)
+ def update_extend_builddata(self, base_id=None, ref_id=None):
+ """
+ Update or create build.xml
+ Args:
+ base id : id of Base snapshot
+ ref id : id of Ref Project
+ """
+ try:
+ bdata = BuildData(self.build_id)
+ # Create or update build.xml
+ outf = os.path.join(self.outdir, 'build.xml')
+ if os.path.exists(outf):
+ bdata.load(open(outf).read())
+ if base_id:
+ bdata.set_base_id(base_id)
+ if ref_id:
+ bdata.set_ref_id(ref_id)
+ bdata.save(outf)
+ except BuildDataError, err:
+ raise RepoMakerError("Unable to generate build.xml: %s" % err)
+
def gen_manifest_info(self, name, gerrit_fetch_url, gerrit_review_url):
"""
Generate manifest for repo
"PURPOSE": "JENKINS_IMAGER", \
"REQUESTED_NUM_EXECUTORS": "%d" % count})
-def make_repo(project, backenddb, base_path, live_repo_base):
+def make_repo(project, backenddb, base_path, live_repo_base, base_id=None, ref_id=None):
"""
make repo.
}
trigger_next("BUILD-MONITOR-5-%s" % bm_stage, bm_data)
raise LocalError("Image configuration not found in %s" %
- local_path)
+ local_path)
repos.update(repomaker.repos)
imagedatas[repo['Name']] = repomaker.imagedata
bm_pkg_url = bm_repo_dir.replace(base_path, bm_base_url)
#print '[%s] bm_base_url(%s), base_path(%s), bm_pkg_url(%s)\n' \
# % (__file__, bm_base_url, base_path, bm_pkg_url)
-
# get rpm files
bm_pkg_name_lst = []
bm_pkg_mdate_lst = []
# os.getenv('NOREPLY_EMAIL_SENDER'), \
# os.getenv('MAILINGLIST_SYSTEM').split(','))
+ # Update base id and ref id of the builddata.
+ if base_id or ref_id:
+ try:
+ repomaker = RepoMaker(local_build_id, local_path)
+ repomaker.update_extend_builddata(base_id, ref_id)
+ except Exception as err:
+ print err
+
return {'project': project,
'repo': repos,
'repo_path': os.path.join(local_dir, local_build_id),
}
trigger_next("BUILD-MONITOR-1-%s" % bm_stage, bm_data)
+ # Get link project
+ ref_project_id = None
+ try:
+ ref_project_id = build.get_link_project_info(project)
+ if ref_project_id:
+ l_project = ref_project_id
+ loop_count = 10
+ while loop_count >= 0:
+ l_project = build.get_link_project_info(l_project)
+ if l_project == None:
+ break;
+ else:
+ ref_project_id = l_project
+ loop_count -= 1
+ print "ref Project:",ref_project_id
+ except Exception as err:
+ ref_project_id = None
+ print "ref Project is None"
+
# Init backend database
redis_host = os.getenv("REDIS_HOST")
redis_port = int(os.getenv("REDIS_PORT"))
backenddb = BackendDB(redis_host, redis_port)
- repo_data = make_repo(project, backenddb, base_path, live_repo_base)
+ # Find base project or base release id
+ base_release_id = None
+ try:
+ base_projects = build.get_path_project(project)
+ if base_projects:
+ base_project = base_projects[0]
+ repo_name = backenddb.get_obs_repo_map()[base_project]
+ release_name = backenddb.get_repos()[repo_name]['Release']
+ release_id = backenddb.get_release_ids()[repo_name]
+ base_release_id = "%s_%s" %(release_name, release_id)
+ print 'base release id:',base_release_id
+ except Exception as err:
+ loop_count = 10
+ while loop_count >= 0:
+ base_projects = build.get_path_project(base_project)
+ if base_projects:
+ old_base_project = base_project = base_projects[0]
+ print base_project
+ loop_count -= 1
+ else:
+ base_release_id = old_base_project
+ break
+ print 'base release id is',base_release_id
+
+ repo_data = make_repo(project, backenddb, base_path, live_repo_base, \
+ base_release_id, ref_project_id)
# update/create the latest repo link
make_latest_link(os.path.join(base_path, repo_data['repo_path']))
# remove unused item
data.pop('imagedata')
- #INSERT MANIFEST DATA TO BUILDMONITOR
+ #INSERT MANIFEST DATA TO BUILDMONITOR
if buildmonitor_enabled:
if data.get('manifestdata'):
bm_stage = 'Update_Manifest'