2017-06-14 23:51:14 -05:00
|
|
|
from __future__ import print_function
|
2018-04-26 11:24:26 -05:00
|
|
|
from osclib.core import package_binary_list
|
2017-06-14 23:51:14 -05:00
|
|
|
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):
|
2018-04-26 11:24:26 -05:00
|
|
|
package_binaries, _ = package_binary_list(
|
|
|
|
self.api.apiurl, self.api.project, 'standard', arch,
|
|
|
|
strip_multibuild=False, exclude_src_debug=True)
|
2017-06-14 23:51:14 -05:00
|
|
|
binaries = {}
|
2018-04-26 11:24:26 -05:00
|
|
|
for pb in package_binaries:
|
2018-04-26 11:25:49 -05:00
|
|
|
if pb.arch != 'noarch' and pb.arch != arch:
|
2018-04-26 11:24:26 -05:00
|
|
|
continue
|
2017-06-14 23:51:14 -05:00
|
|
|
|
2018-04-26 11:24:26 -05:00
|
|
|
binaries.setdefault(arch, {})
|
2017-07-07 16:05:23 +02:00
|
|
|
|
2018-04-26 11:24:26 -05:00
|
|
|
if pb.name in binaries[arch]:
|
2018-12-18 18:50:43 +08:00
|
|
|
duplicates.setdefault(str(arch), {})
|
2018-04-26 11:24:26 -05:00
|
|
|
duplicates[arch].setdefault(pb.name, set())
|
|
|
|
duplicates[arch][pb.name].add(pb.package)
|
|
|
|
duplicates[arch][pb.name].add(binaries[arch][pb.name])
|
2017-06-14 23:51:14 -05:00
|
|
|
|
2018-04-26 11:24:26 -05:00
|
|
|
continue
|
2017-06-14 23:51:14 -05:00
|
|
|
|
2018-04-26 11:24:26 -05:00
|
|
|
binaries[arch][pb.name] = pb.package
|
2017-06-14 23:51:14 -05:00
|
|
|
|
2017-12-22 13:36:46 +01:00
|
|
|
# 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)
|
2017-06-14 23:51:14 -05:00
|
|
|
if save:
|
2018-08-17 23:19:24 -05:00
|
|
|
self.api.pseudometa_file_ensure('duplicate_binaries', current)
|
2017-07-07 16:05:23 +02:00
|
|
|
else:
|
2017-12-22 13:36:46 +01:00
|
|
|
print(current)
|