diff --git a/ToolBase.py b/ToolBase.py index 9318defa..0e2c2f8e 100644 --- a/ToolBase.py +++ b/ToolBase.py @@ -80,6 +80,12 @@ class ToolBase(object): else: osc.core.http_PUT(*args, **kwargs) + def http_POST(self, *args, **kwargs): + if self.dryrun: + logging.debug("dryrun POST %s %s", args, str(kwargs)[:200]) + else: + osc.core.http_POST(*args, **kwargs) + def get_project_meta(self, prj): url = self.makeurl(['source', prj, '_meta']) return self.cached_GET(url) diff --git a/biarchtool.py b/biarchtool.py index 60af8c27..90ac516b 100755 --- a/biarchtool.py +++ b/biarchtool.py @@ -30,8 +30,6 @@ import osc.core import ToolBase -makeurl = osc.core.makeurl - logger = logging.getLogger() FACTORY = "openSUSE:Factory" @@ -62,7 +60,7 @@ class BiArchTool(ToolBase.ToolBase): self._init_biarch_packages() - resulturl = makeurl(self.apiurl, ['build', self.project, '_result']) + resulturl = self.makeurl(['build', self.project, '_result']) result = ET.fromstring(self.cached_GET(resulturl)) packages = set() @@ -76,7 +74,7 @@ class BiArchTool(ToolBase.ToolBase): changed = False logger.debug("processing %s", pkg) - pkgmetaurl = makeurl(self.apiurl, ['source', self.project, pkg, '_meta']) + pkgmetaurl = self.makeurl(['source', self.project, pkg, '_meta']) pkgmeta = ET.fromstring(self.cached_GET(pkgmetaurl)) for build in pkgmeta.findall("./build"): @@ -93,11 +91,11 @@ class BiArchTool(ToolBase.ToolBase): except urllib2.HTTPError, e: logger.error('failed to update %s: %s', pkg, e) - def add_explicit_disable(self): + def add_explicit_disable(self, wipebinaries=False): self._init_biarch_packages() - resulturl = makeurl(self.apiurl, ['source', self.project]) + resulturl = self.makeurl(['source', self.project]) result = ET.fromstring(self.cached_GET(resulturl)) for pkg in self.packages: @@ -105,7 +103,7 @@ class BiArchTool(ToolBase.ToolBase): changed = False logger.debug("processing %s", pkg) - pkgmetaurl = makeurl(self.apiurl, ['source', self.project, pkg, '_meta']) + pkgmetaurl = self.makeurl(['source', self.project, pkg, '_meta']) pkgmeta = ET.fromstring(self.cached_GET(pkgmetaurl)) build = pkgmeta.findall("./build") @@ -122,6 +120,11 @@ class BiArchTool(ToolBase.ToolBase): self.http_PUT(pkgmetaurl, data=ET.tostring(pkgmeta)) if self.caching: self._invalidate__cached_GET(pkgmetaurl) + if wipebinaries: + self.http_POST(self.makeurl(['build', self.project], { + 'cmd' : 'wipe', + 'arch': self.arch, + 'package' : pkg })) except urllib2.HTTPError, e: logger.error('failed to update %s: %s', pkg, e) @@ -130,7 +133,7 @@ class BiArchTool(ToolBase.ToolBase): self._init_biarch_packages() for pkg in self.packages: logger.debug("processing %s", pkg) - pkgmetaurl = makeurl(self.apiurl, ['source', self.project, pkg, '_meta']) + pkgmetaurl = self.makeurl(['source', self.project, pkg, '_meta']) pkgmeta = ET.fromstring(self.cached_GET(pkgmetaurl)) is_enabled = None is_disabled = None @@ -151,7 +154,7 @@ class BiArchTool(ToolBase.ToolBase): logger.debug('%s is known biarch package', pkg) must_disable = False else: - files = ET.fromstring(self.cached_GET(makeurl(self.apiurl, ['source', self.project, pkg]))) + files = ET.fromstring(self.cached_GET(self.makeurl(['source', self.project, pkg]))) for n in files.findall("./entry[@name='baselibs.conf']"): has_baselibs = True logger.debug('%s has baselibs', pkg) @@ -247,6 +250,7 @@ class CommandLineInterface(ToolBase.CommandLineInterface): @cmdln.option('-a', '--all', action='store_true', help='process all packages') @cmdln.option('-n', '--interval', metavar="minutes", type="int", help="periodic interval in minutes") + @cmdln.option('--wipe', action='store_true', help='also wipe binaries') def do_add_explicit_disable(self, subcmd, opts, *packages): """${cmd_name}: add explicit disable to all packages @@ -256,7 +260,7 @@ class CommandLineInterface(ToolBase.CommandLineInterface): def work(): self._select_packages(opts.all, packages) - self.tool.add_explicit_disable() + self.tool.add_explicit_disable(wipebinaries=opts.wipe) self.runner(work, opts.interval)