return (targetprj, targetpkg)
+ def update_buildstatus(self,info,prj,pkg=None):
+ saved_info = self.get_info(prj, pkg)
+ saved_info["buildstatus"]=info["buildstatus"]
+ self.set_description(json.dumps(saved_info), prj, pkg)
+
def update_info(self, info, prj, pkg=None):
"""Updated jsoned info dictionary, saved in description."""
saved_info = self.get_info(prj, pkg)
else:
# reset 'images'
saved_info['images'] = info['images']
+ if 'snapshot' in info:
+ saved_info['snapshot'] = info['snapshot']
+ if 'chksnap' in info:
+ saved_info['chksnap'] = info['chksnap']
self.set_description(json.dumps(saved_info), prj, pkg)
def get_info(self, prj, pkg=None):
self.set_meta(ElementTree.tostring(xml_root), project)
+ def link_projectDev(self, project, src=None, linktype="all", buildtype="local", blocktype="local", repo=None):
+ """
+ modify the meta conf to make it linked with src project
+ """
+ if src and not self.exists(src):
+ raise ObsError('base project: %s not exists' % src)
+
+ if not self.exists(project):
+ raise ObsError('project: %s not exists' % project)
+
+ meta_xml = self.get_meta(project)
+ xml_root = ElementTree.fromstringlist(meta_xml)
+
+ if xml_root.find('link') is not None:
+ raise ObsError('project: %s already linked with %s'
+ %(project, xml_root.find('link').get('project')))
+ # Add linked project
+ link_element = ElementTree.Element('link',
+ {"project": "%s" %src})
+ xml_root.append(link_element)
+
+ # remove repo
+ if not repo == None:
+ for repo_element in xml_root.findall('repository'):
+ if not repo_element.get('name') == repo:
+ xml_root.remove(repo_element)
+
+ # Set linkedbuild attribute for all repositories
+ for repo_element in xml_root.findall('repository'):
+ repo_element.set('linkedbuild', linktype)
+ repo_element.set('rebuild', buildtype)
+ repo_element.set('block', blocktype)
+
+ self.set_meta(ElementTree.tostring(xml_root), project)
+
def unlink_project(self, project):
"""
modify the meta conf to unlink the project
elem.remove(subelem)
ElementTree.SubElement(elem, value)
self.set_meta(ElementTree.tostring(root), project, package)
+
+ def get_user_meta(self,apiurl, user):
+ u = core.makeurl(apiurl, ['person', core.quote_plus(user)])
+ try:
+ f = core.http_GET(u)
+ return ''.join(f.readlines())
+ except urllib2.HTTPError:
+ print 'user \'%s\' not found' % user
+ return None
+
+ def create_copy_pac(self, src_project, src_package, dst_project, dst_package,
+ client_side_copy=False, keep_maintainers=False,keep_develproject=False,
+ expand=False, revision=None, comment=None,
+ force_meta_update=None, keep_link=None):
+ """create a copy of package
+ Copying can be done by downloading the files from one package and commit
+ them into the other by uploading them (client-side copy) --
+ or by the server, in a single api call.
+ """
+ core.copy_pac(self.apiurl, src_project, src_package, self.apiurl, dst_project, dst_package,
+ client_side_copy,revision)
+
+ def get_dependson(self, project, repo, arch, packages=None, reverse=None):
+ """
+ get_dependson
+ """
+ query = []
+
+ if packages:
+ for p in packages:
+ query.append('package=%s' % core.quote_plus(p))
+
+ if reverse:
+ query.append('view=revpkgnames')
+ else:
+ query.append('view=pkgnames')
+
+ url = core.makeurl(self.apiurl, ['build', project, repo, arch,'_builddepinfo'],query=query)
+ return core.http_GET(url).read()
+
+ def show_upstream_rev(self, project, package, revision=None, expand=False, linkrev=None, meta=False, include_service_files=False):
+ """
+ show upstream rev
+ """
+ return core.show_upstream_rev(self.apiurl, project, package, revision, expand, linkrev, meta, include_service_files)
+
+ def disable_build_flag(self, prj,repo, flag, status):
+ """disable build flag for the project """
+ #Started POST "/source/acl-link?cmd=set_flag&flag=build&status=disable"
+ query = { 'cmd': 'set_flag' }
+ if flag:
+ query['flag'] = flag
+ if repo:
+ query['repository'] = repo
+ if status:
+ query['status'] = status
+
+ u = core.makeurl(self.apiurl, ['source', prj], query=query)
+ try:
+ print u
+ f = core.http_POST(u)
+ except urllib2.HTTPError, e:
+ e.osc_msg = 'could not trigger disable build flag for project \'%s\'' % (prj)
+ raise
+
+ return
+
+ def default_build_flag(self, prj, repo, flag):
+ """default build flag for the project """
+ # Started POST "/source/acl-link?cmd=remove_flag&flag=build
+ query = { 'cmd': 'remove_flag' }
+ if repo:
+ query['repository'] = repo
+ if flag:
+ query['flag'] = flag
+
+ u = core.makeurl(self.apiurl, ['source', prj], query=query)
+ try:
+ print u
+ f = core.http_POST(u)
+ except urllib2.HTTPError, e:
+ e.osc_msg = 'could not trigger default build flag for project \'%s\'' % (prj)
+ raise
+ return
+
from xml.dom import minidom
from common.buildtrigger import trigger_info
+from common.buildservice import BuildService
from common.utils import sync
def restructure_output_dir(package_build_dict, target_path):
project = content.get("project")
+ obs_api = os.getenv("OBS_API_URL")
+ obs_user = os.getenv("OBS_API_USERNAME")
+ obs_passwd = os.getenv("OBS_API_PASSWD")
+
+ build = BuildService(obs_api, obs_user, obs_passwd)
+
for repository in content.get("repo").keys():
project_logs_base = os.path.join(build_base_path,
project,
'buildlogs',
repository))
+ # Make file at packages depends of OBS
+ os.makedirs(os.path.join(sync_out_dir,'builddata','depends'))
+ reverse = 1
+ repo_status = build.get_repo_state(project)
+ for target_arch,status in repo_status.items():
+ repo = target_arch.split("/")[0]
+ arch = target_arch.split("/")[1]
+ xml = build.get_dependson(project, repo, arch, None, reverse)
+
+ file_name = os.path.join(sync_out_dir,'builddata','depends',"%s_%s_%s_revpkgdepends.xml"%(project,repo,arch))
+ #print file_name
+ with open(file_name, 'w') as xml_file:
+ xml_file.write(xml)
+
+ # Make file at packages revision of OBS
+ packages_rev = dict()
+ for package in build.get_package_list(project):
+ packages_rev[package] = build.show_upstream_rev(project, package)
+ file_name = os.path.join(sync_out_dir,'builddata','depends', '%s_pkgrevisions.xml' % project)
+ #print str(packages_rev)
+ with open(file_name, 'w') as rev_file:
+ rev_file.write(str(packages_rev))
+
# sync to donwload server
sync(sync_out_dir, sync_dest)