pkglistgen: Also support zstd for weakremovers.inc

This commit is contained in:
Stephan Kulow 2022-02-25 07:45:06 +01:00
parent e679863a88
commit 33da10611b
3 changed files with 31 additions and 36 deletions

View File

@ -2,6 +2,9 @@ import glob
import os
import os.path
import shutil
import solv
import tempfile
import subprocess
from lxml import etree as ET
@ -60,3 +63,19 @@ def unlink_list(path, names):
if os.path.isfile(name_path):
os.unlink(name_path)
def add_susetags(pool, file):
oldsysrepo = pool.add_repo(file)
defvendorid = oldsysrepo.meta.lookup_id(solv.SUSETAGS_DEFAULTVENDOR)
f = tempfile.TemporaryFile()
if file.endswith('.xz'):
subprocess.call(['xz', '-cd', file], stdout=f.fileno())
elif file.endswith('.zst'):
subprocess.call(['zstd', '-cd', file], stdout=f.fileno())
else:
raise Exception("unsupported " + file)
os.lseek(f.fileno(), 0, os.SEEK_SET)
oldsysrepo.add_susetags(solv.xfopen_fd(None, f.fileno()), defvendorid, None,
solv.Repo.REPO_NO_INTERNALIZE | solv.Repo.SUSETAGS_RECORD_SHARES)
return oldsysrepo

View File

@ -7,7 +7,6 @@ import solv
import shutil
import subprocess
import yaml
import tempfile
from lxml import etree as ET
@ -405,22 +404,17 @@ class PkgListGen(ToolBase.ToolBase):
# cast 15.1 to string :)
key = str(key)
oldrepos = set(glob.glob(os.path.join(directory, '{}_*.packages.xz'.format(key))))
oldrepos |= set(glob.glob(os.path.join(directory, '{}.packages.xz'.format(key))))
oldrepos = set()
for suffix in ['xz', 'zst']:
oldrepos |= set(glob.glob(os.path.join(directory, f"{key}_*.packages.{suffix}")))
oldrepos |= set(glob.glob(os.path.join(directory, f"{key}.packages.{suffix}")))
for oldrepo in sorted(oldrepos):
pool = solv.Pool()
pool.setarch()
# we need some progress in the debug output - or gocd gets nervous
self.logger.debug('checking {}'.format(oldrepo))
oldsysrepo = pool.add_repo(oldrepo)
defvendorid = oldsysrepo.meta.lookup_id(solv.SUSETAGS_DEFAULTVENDOR)
f = tempfile.TemporaryFile()
# FIXME: port to lzma module with python3
subprocess.call(['xz', '-cd', oldrepo], stdout=f.fileno())
os.lseek(f.fileno(), 0, os.SEEK_SET)
oldsysrepo.add_susetags(solv.xfopen_fd(None, f.fileno()), defvendorid, None,
solv.Repo.REPO_NO_INTERNALIZE | solv.Repo.SUSETAGS_RECORD_SHARES)
oldsysrepo = file_utils.add_susetags(pool, oldrepo)
for arch in self.all_architectures:
for project, repo in self.repos:

View File

@ -12,17 +12,14 @@ import subprocess
import shutil
import sys
import tempfile
import requests
import solv
import yaml
from lxml import etree as ET
import osc.core
from osclib.cache_manager import CacheManager
import requests
import solv
import yaml
from pkglistgen import file_utils
from urllib.parse import urljoin, urlparse
@ -181,27 +178,12 @@ def print_repo_delta(pool, repo2, packages_file):
print('-Prv:', file=packages_file)
def add_susetags(pool, file):
oldsysrepo = pool.add_repo(file)
defvendorid = oldsysrepo.meta.lookup_id(solv.SUSETAGS_DEFAULTVENDOR)
f = tempfile.TemporaryFile()
if file.endswith('.xz'):
subprocess.call(['xz', '-cd', file], stdout=f.fileno())
elif file.endswith('.zst'):
subprocess.call(['zstd', '-cd', file], stdout=f.fileno())
else:
raise Exception("unsupported " + file)
os.lseek(f.fileno(), 0, os.SEEK_SET)
oldsysrepo.add_susetags(solv.xfopen_fd(None, f.fileno()), defvendorid, None,
solv.Repo.REPO_NO_INTERNALIZE | solv.Repo.SUSETAGS_RECORD_SHARES)
def merge_susetags(output, files):
pool = solv.Pool()
pool.setarch()
for file in files:
add_susetags(pool, file)
file_utils.add_susetags(pool, file)
packages = dict()
for s in pool.solvables_iter():
@ -236,7 +218,7 @@ def fixate_target(root, package, fixate):
return False
del opts['refresh']
oldfiles = target_files(package.dir, key)
newfile = os.path.join(package.dir, f'{fixate}_package')
newfile = os.path.join(package.dir, f'{fixate}_packages')
merge_susetags(newfile, oldfiles)
for file in oldfiles:
os.unlink(file)
@ -320,7 +302,7 @@ def update_project(apiurl, project, fixate=None):
if opts.get('refresh', False):
for file in target_files(repo_dir, key):
add_susetags(pool, file)
file_utils.add_susetags(pool, file)
repo1 = pool.add_repo(''.join(random.choice(string.ascii_letters) for _ in range(5)))
repo1.add_solv(solv_file)