openSUSE-release-tools/osclib/check_duplicate_binaries_command.py
Jimmy Berry 5e6df089a6 osclib/stagingapi: drop {load,save}_file_content() methods.
Since the implementations have been made generic and dropped to osclib.core
there is not point in having wrappers in StagingAPI with the same args.
2018-08-17 22:15:58 -05:00

43 lines
1.5 KiB
Python

from __future__ import print_function
from osclib.core import package_binary_list
from osclib.core import target_archs
import yaml
class CheckDuplicateBinariesCommand(object):
def __init__(self, api):
self.api = api
def perform(self, save=False):
duplicates = {}
for arch in sorted(target_archs(self.api.apiurl, self.api.project), reverse=True):
package_binaries, _ = package_binary_list(
self.api.apiurl, self.api.project, 'standard', arch,
strip_multibuild=False, exclude_src_debug=True)
binaries = {}
for pb in package_binaries:
if pb.arch != 'noarch' and pb.arch != arch:
continue
binaries.setdefault(arch, {})
if pb.name in binaries[arch]:
duplicates.setdefault(arch, {})
duplicates[arch].setdefault(pb.name, set())
duplicates[arch][pb.name].add(pb.package)
duplicates[arch][pb.name].add(binaries[arch][pb.name])
continue
binaries[arch][pb.name] = pb.package
# convert sets to lists for readable yaml
for arch in duplicates.keys():
for name in duplicates[arch].keys():
duplicates[arch][name] = list(duplicates[arch][name])
current = yaml.dump(duplicates, default_flow_style=False)
if save:
self.api.dashboard_content_ensure('duplicate_binaries', current)
else:
print(current)