Merge pull request #1453 from coolo/add_sle_droplist
Add create_sle_weakremovers command
This commit is contained in:
commit
5d0c024ffe
@ -774,7 +774,7 @@ class CommandLineInterface(ToolBase.CommandLineInterface):
|
|||||||
self.solv_merge(solv_file_merged, solv_file, solv_file_nonfree)
|
self.solv_merge(solv_file_merged, solv_file, solv_file_nonfree)
|
||||||
|
|
||||||
def solv_merge(self, solv_merged, *solvs):
|
def solv_merge(self, solv_merged, *solvs):
|
||||||
solvs = list(solvs) # From tuple.
|
solvs = list(solvs) # From tuple.
|
||||||
|
|
||||||
if os.path.exists(solv_merged):
|
if os.path.exists(solv_merged):
|
||||||
modified = map(os.path.getmtime, [solv_merged] + solvs)
|
modified = map(os.path.getmtime, [solv_merged] + solvs)
|
||||||
@ -790,6 +790,66 @@ class CommandLineInterface(ToolBase.CommandLineInterface):
|
|||||||
if p.returncode:
|
if p.returncode:
|
||||||
raise Exception('failed to create merged solv file')
|
raise Exception('failed to create merged solv file')
|
||||||
|
|
||||||
|
def do_create_sle_weakremovers(self, subcmd, opts, *prjs):
|
||||||
|
for prj in prjs:
|
||||||
|
logger.debug("processing %s", prj)
|
||||||
|
self.options.repos = ['/'.join([prj, 'standard'])]
|
||||||
|
self.postoptparse()
|
||||||
|
opts.project = prj
|
||||||
|
self.do_update('update', opts)
|
||||||
|
|
||||||
|
drops = dict()
|
||||||
|
for arch in self.tool.architectures:
|
||||||
|
pool = solv.Pool()
|
||||||
|
pool.setarch(arch)
|
||||||
|
|
||||||
|
sysrepo = None
|
||||||
|
for prp in prjs:
|
||||||
|
fn = os.path.join(CACHEDIR, 'repo-{}-{}-{}.solv'.format(prp, 'standard', arch))
|
||||||
|
r = pool.add_repo(prp)
|
||||||
|
r.add_solv(fn)
|
||||||
|
if not sysrepo:
|
||||||
|
sysrepo = r
|
||||||
|
|
||||||
|
pool.createwhatprovides()
|
||||||
|
|
||||||
|
for s in pool.solvables_iter():
|
||||||
|
if s.repo == sysrepo or not (s.arch == 'noarch' or s.arch == arch):
|
||||||
|
continue
|
||||||
|
haveit = False
|
||||||
|
for s2 in pool.whatprovides(s.nameid):
|
||||||
|
if s2.repo == sysrepo and s.nameid == s2.nameid:
|
||||||
|
haveit = True
|
||||||
|
if haveit:
|
||||||
|
continue
|
||||||
|
nevr = pool.rel2id(s.nameid, s.evrid, solv.REL_EQ)
|
||||||
|
for s2 in pool.whatmatchesdep(solv.SOLVABLE_OBSOLETES, nevr):
|
||||||
|
if s2.repo == sysrepo:
|
||||||
|
continue
|
||||||
|
haveit = True
|
||||||
|
if haveit:
|
||||||
|
continue
|
||||||
|
if s.name not in drops:
|
||||||
|
drops[s.name] = {'repo': s.repo.name, 'archs': []}
|
||||||
|
if arch not in drops[s.name]['archs']:
|
||||||
|
drops[s.name]['archs'].append(arch)
|
||||||
|
for prp in prjs:
|
||||||
|
exclusives = dict()
|
||||||
|
print('#', prp)
|
||||||
|
for name in sorted(drops.keys()):
|
||||||
|
if drops[name]['repo'] != prp:
|
||||||
|
continue
|
||||||
|
if len(drops[name]['archs']) == len(self.tool.architectures):
|
||||||
|
print('Provides: weakremover({})'.format(name))
|
||||||
|
else:
|
||||||
|
jarch = ' '.join(sorted(drops[name]['archs']))
|
||||||
|
exclusives.setdefault(jarch, []).append(name)
|
||||||
|
for arch in sorted(exclusives.keys()):
|
||||||
|
print('%ifarch {}'.format(arch))
|
||||||
|
for name in sorted(exclusives[arch]):
|
||||||
|
print('Provides: weakremover({})'.format(name))
|
||||||
|
print('%endif')
|
||||||
|
|
||||||
def do_create_droplist(self, subcmd, opts, *oldsolv):
|
def do_create_droplist(self, subcmd, opts, *oldsolv):
|
||||||
"""${cmd_name}: generate list of obsolete packages
|
"""${cmd_name}: generate list of obsolete packages
|
||||||
|
|
||||||
@ -935,7 +995,7 @@ class CommandLineInterface(ToolBase.CommandLineInterface):
|
|||||||
|
|
||||||
if name is not None:
|
if name is not None:
|
||||||
# Only update file if overwrite or different.
|
# Only update file if overwrite or different.
|
||||||
ofh.flush() # Ensure entirely written before comparing.
|
ofh.flush() # Ensure entirely written before comparing.
|
||||||
if not opts.overwrite and os.path.exists(name) and filecmp.cmp(name + '.new', name, shallow=False):
|
if not opts.overwrite and os.path.exists(name) and filecmp.cmp(name + '.new', name, shallow=False):
|
||||||
logger.debug('file identical, skip dumping')
|
logger.debug('file identical, skip dumping')
|
||||||
os.remove(name + '.new')
|
os.remove(name + '.new')
|
||||||
|
Loading…
x
Reference in New Issue
Block a user