Reimplemented generation of build.xml release-0.12 0.12
authorEd Bartosh <eduard.bartosh@intel.com>
Fri, 26 Apr 2013 16:17:58 +0000 (19:17 +0300)
committerGerrit Code Review <gerrit2@otctools.jf.intel.com>
Wed, 8 May 2013 02:12:58 +0000 (19:12 -0700)
Refactored and reimplemented generation of build.xml according to new
download structure.

Change-Id: Iff7c246200ca412294ed129eab7f9728ae2f3cf4

common/buildservice.py
job_pre_release_obs.py

index 33de7b9..92a6363 100644 (file)
@@ -514,3 +514,11 @@ class BuildService(OSC):
         """Remove pre-release OBS project."""
         if self.exists(obs_project):
             return self.delete_project(obs_project, force=True, msg=msg)
+
+    def get_arch(self, project, repo_name):
+        meta_xml = self.get_meta(project)
+        xml_root = ET.fromstringlist(meta_xml)
+        for repo_setting in xml_root.findall('repository'):
+            if repo_setting.attrib['name'] == repo_name:
+                return [node.text for node in repo_setting.findall('arch')]
+        return []
index ce75170..d5a8c2b 100755 (executable)
@@ -10,19 +10,47 @@ import sys
 import re
 
 from common.tempbuildpkg import ProjectBuildService, ProjectRepository
-from common.tempbuildpkg import BuildData, RepoConf
+from common.tempbuildpkg import RepoConf
 from common.buildtrigger import trigger_info, trigger_next
 from testprojects.prerelease import PreRelease2
 from testprojects.prerelease import get_prerelease_project_name
 from common.buildservice import BuildService
 
+from gitbuildsys import BuildData, BuildDataError
+
+class LocalError(Exception):
+    """Local error exception."""
+    pass
+
+def get_latest_snapshot(product='tizen-2.1'):
+    """Gets latest snapshot id from Redis."""
+    # to be implemented
+    return '%s_20130320.11' % product
+
+def gen_builddata(build, project, repo='standard'):
+    """Generate build.xml with repository data."""
+
+    build_id = '%s.pre-release.%s' % (get_latest_snapshot(),
+                                      project.split(':')[-1])
+    try:
+        bdata = BuildData(build_id)
+        # get target data from OBS
+        target = {}
+        # Create or update build.xml
+        outf = os.path.join('/srv/obs/repos/', project.replace(':', ':/'),
+                            'build.xml')
+        if os.path.exists(outf):
+            bdata.load(open(outf))
+
+        bdata.add_target(target)
+        bdata.save(outf)
+    except BuildDataError, err:
+        raise LocalError("Unable to generate build.xml: %s" % err)
 
 def create_images(prerelease):
     """Create images using live prerelease repository."""
     linked, depended = prerelease.get_parent_project()
 
-    builddata = BuildData()
-
     # TODO, update when boss-repomaker updated
     repo_config = RepoConf('/etc/repos/repos.yaml')
 
@@ -34,17 +62,6 @@ def create_images(prerelease):
     repo = ProjectRepository(prerelease.obs_project, repo_conf = repo_config,
                              server_conf = server_conf)
 
-    # Fill build data
-    builddata.git_tag = prerelease.git_tag
-    builddata.git_project = prerelease.git_project
-    builddata.obs_target_prj = prerelease.target_project
-    builddata.obs_prj = prerelease.obs_project
-    builddata.archs.extend(prerelease.get_available_archs())
-    builddata.images_path = os.path.join(repo.get_live_repo_path(),
-                                         "images")
-
-    repo.save_builddata(builddata, repo.get_live_repo_path())
-
     for link_prj in linked:
         # TODO: get_url from repo.yaml configuration
         link_prj_path = repo.get_latest_repo_path(link_prj)
@@ -104,16 +121,21 @@ def main(name, action):
     git_tag = content.get("GIT_TAG")
 
     project = get_prerelease_project_name(obs_target_prj, obs_user, git_tag)
+    build = BuildService(obs_api, obs_user, obs_passwd)
 
     if action == 'create_images':
+        gen_builddata(build, project)
         projectbuild = ProjectBuildService(project, obs_api, obs_user, obs_passwd)
         prerelease = PreRelease2(project, projectbuild)
         create_images(prerelease)
     elif action == 'cleanup':
-        build = BuildService(obs_api, obs_user, obs_passwd)
         build.cleanup(project, "Cleaned up by %s" % name)
     else:
         print "Not supported method of Pre-release jobs:", action
 
 if __name__ == '__main__':
-    sys.exit(main(os.path.basename(sys.argv[0]), sys.argv[1]))
+    try:
+        sys.exit(main(os.path.basename(sys.argv[0]), sys.argv[1]))
+    except LocalError, err:
+        print err
+        sys.exit(1)