import runner
import buildservice
+from urllib import quote_plus
+from osc import core
+from xml.etree import cElementTree as ET
+
def encode_passwd(passwd):
'''encode passwd by bz2 and base64'''
return base64.b64encode(passwd.encode('bz2'))
self.apiurl = apiurl
tmpf = Temp(prefix='.oscrc', content=oscrc)
- oscrcpath = tmpf.path
- buildservice.BuildService(apiurl, oscrc=oscrcpath)
+ self.oscrcpath = tmpf.path
+ buildservice.BuildService(apiurl, oscrc=self.oscrcpath)
+
+ def update_meta(self, project, metaconf):
+ """
+ update meta configuration for project
+ """
+ meta_url = core.make_meta_url('prj',
+ path_args=quote_plus(project))
+
+ core.http_PUT(meta_url, file=metaconf)
+
+ def get_meta(self, project):
+ """
+ update meta configuration for project
+ """
+ meta_url = core.make_meta_url('prj',
+ path_args=quote_plus(project))
+ return core.http_GET(meta_url).readlines()
class TempPackageBuild:
def del_itself(self):
self.bs.deleteProject(self.project)
-PRJ_TEMPLATE = """<project name="%(target)s">
- <title></title>
- <description>%(desp)s</description>
- <person role="maintainer" userid="%(user)s"/>
- <person role="bugowner" userid="%(user)s"/>
- <link project="%(src)s"/>
- <build>
- <%(build)s/>
- </build>
- <repository name="standard" linkedbuild="localdep">
- <path repository="standard" project="%(src)s"/>
- <arch>i586</arch>
- </repository>
-</project>"""
-
class TempBuildService():
def __init__(self, project, apiurl, apiuser, apipasswd):
return self.bs.getRepoState(self.project)
def cleanup(self):
- os.system("osc -H -d -v rdelete --recursive %s -m 'deleted'" %(self.project))
return self.bs.deleteProject(self.project)
def is_published(self):
if not found:
print "did not find any image configurations"
- def disable_build(self, user):
-
- targetmeta = """<project name="%(target)s">
- <title></title>
- <description></description>
- <person role="maintainer" userid="%(user)s"/>
- <person role="bugowner" userid="%(user)s"/>
- <build>
- <%(build)s/>
- </build>
-</project>"""% {'target': self.project, 'user': user, 'build': 'disable'}
- print targetmeta
+
+ def disable_build(self):
+ """ disable the project"""
+ origin_meta = self.bs.get_meta(self.project)
+
+ root = ET.fromstringlist(origin_meta)
+ build = root.find('build')
+
+ if build:
+ build.clear()
+ build.append(ET.Element('disable'))
+ else:
+ build = ET.Element('build')
+ build.append(ET.Element('disable'))
+ root.append(build)
+
fileh, filename = tempfile.mkstemp(prefix="osc_metafile.",
suffix=".xml", text=True)
- os.write(fileh, targetmeta)
+ os.write(fileh, ET.tostring(root))
+
+ self.bs.update_meta(self.project, filename)
+
os.close(fileh)
- os.system("osc -d -v meta prj %s -F %s" %(self.project, filename))
- sys.stdout.flush()
os.unlink(filename)
-
- def link_project(self, src, user, desp = ''):
- targetmeta = PRJ_TEMPLATE % {'target': self.project, 'src': src,
- 'user': user, 'build': 'enable',
- 'desp': desp}
+
+ def linkbuild_localdep(self, desp=''):
+ """ Link the project build against repo with dependency (localdep)"""
+ origin_meta = self.bs.get_meta(self.project)
+
+ root = ET.fromstringlist(origin_meta)
+ for repo_setting in root.findall('repository'):
+ repo_setting.set('linkedbuild', 'localdep')
+
+ if desp:
+ description = root.find('description')
+ description.text = desp
fileh, filename = tempfile.mkstemp(prefix="osc_metafile.",
suffix=".xml", text=True)
- os.write(fileh, targetmeta)
+ os.write(fileh, ET.tostring(root))
+
+ self.bs.update_meta(self.project, filename)
+
os.close(fileh)
- os.system("osc meta prj %s -F %s" %(self.project, filename))
os.unlink(filename)