core.checkout_package(self.apiurl, prj, pkg, rev, prj_dir=prj, \
expand_link=True)
+ def get_comments(self, project, package=None):
+ """
+ Get comments of the package
+ """
+
+ if package is not None:
+ url = core.makeurl(self.apiurl, ['comments', 'package', project, package])
+ else:
+ url = core.makeurl(self.apiurl, ['comments', 'project', project])
+ cmtroot = ElementTree.parse(core.http_GET(url)).getroot()
+ tag_ids = {}
+ for headTag in cmtroot.getchildren():
+ tag_ids[headTag.attrib['id']] = headTag.text
+ return tag_ids
+
+ def set_comments(self, project, package=None, comment=''):
+ """
+ Get comments of the package
+ """
+
+ if package is not None:
+ url = core.makeurl(self.apiurl, ['comments', 'package', project, package])
+ else:
+ url = core.makeurl(self.apiurl, ['comments', 'project', project])
+ self.core_http(core.http_POST, url, data='%s' % comment)
+
+ def purge_comments(self, project, package=None):
+ """
+ Delete the specific file from package in project
+ """
+
+ for t in self.get_comments(project, package):
+ url = core.makeurl(self.apiurl, ['comment', t])
+ self.core_http(core.http_DELETE, url)
+
+ def delete_file(self, project, package, files=[], comment=None, purge_comments=False):
+ """
+ Delete the specific file from package in project
+ """
+
+ core.delete_files(self.apiurl, project, package, files)
+
+ if purge_comments == True:
+ self.purge_comments(project, package)
+
+ if comment is not None:
+ self.set_comments(project, package, comment)
+
@staticmethod
def find_pac(work_dir='.'):
"""Get the single Package object for specified dir
print 'get_pkgrev_from_snapshot http_GET(%s) error' % u
return None
- def get_source_viewinfo(self, prj, parse=0, nofilename=1):
+ def get_source_viewinfo(self, prj, pkg=None, parse=0, nofilename=1):
"""
Get source viewinfo of the project
"""
query['parse'] = parse
query['nofilename'] = nofilename
- u = core.makeurl(self.apiurl, ['source', prj], query)
+ if pkg is not None:
+ u = core.makeurl(self.apiurl, ['source', prj, pkg], query)
+ else:
+ u = core.makeurl(self.apiurl, ['source', prj], query)
try:
return core.http_GET(u)
except (urllib2.URLError, urllib2.HTTPError), e:
import base64
from time import sleep
from xml.sax.saxutils import unescape
+import xml.etree.cElementTree as ElementTree
# set default char-set endcoding to utf-8
reload(sys)
print ppt.pprint(ret_data)
return ret_data, projects_list
-def delete_from_obs(prj, pkg):
+def delete_from_obs(prj, pkg, target_project=None, comments=None):
"""
Delete package from OBS.
Delete project if it's prerelease project
os.getenv('OBS_API_USERNAME'),
os.getenv('OBS_API_PASSWD'))
+ # If selected package have both _link and _service file, delete _link.
+ if target_project is not None:
+ try:
+ viewinfo = _bs.get_source_viewinfo(target_project, pkg, parse=0, nofilename=0)
+ viewroot = ElementTree.parse(viewinfo).getroot()
+ if viewroot.find('filename').text.startswith('_service:'):
+ if viewroot.find('linked') is not None:
+ print 'Found conflicting LINK %s/%s' % (viewroot.find('linked').get('project'), \
+ viewroot.find('linked').get('package'))
+ _comments = 'revision %d is the same as revision %d w/o link. </br>\n%s' % \
+ (int(viewroot.get('rev')) + 1, int(viewroot.get('rev')), \
+ comments.replace('<','<').replace('>','>').replace('\n',' </br>\n'))
+ _bs.delete_file(target_project, viewroot.get('package'), ['_link'], \
+ _comments, purge_comments=True)
+ except Exception as err:
+ print repr(err)
+
try:
if 'home:prerelease:' in prj:
print 'Removing %s' % prj
print gre
return 1
- delete_from_obs(data['OBS_REQ_PRJ_SRC'], data['OBS_REQ_PKG_SRC'])
+ additional_comment = 'accepted request %s (%s/request/show/%s)\n\n%s' \
+ % (data['OBS_REQ_ID'], os.getenv('OBS_URL'), data['OBS_REQ_ID'], \
+ data['OBS_REQ_DESP'])
+ delete_from_obs(data['OBS_REQ_PRJ_SRC'], data['OBS_REQ_PKG_SRC'], \
+ target_project=data['OBS_REQ_PRJ'], comments=additional_comment)
# Disable triggerring make_dep_graph.
# Code remained to enable it in the future