98 lines
3.4 KiB
Python
Executable File
98 lines
3.4 KiB
Python
Executable File
#!/usr/bin/python3
|
|
|
|
import argparse
|
|
import logging
|
|
import sys
|
|
import os
|
|
import shutil
|
|
import git
|
|
|
|
from lxml import etree as ET
|
|
|
|
import osc.conf
|
|
from osclib.core import source_file_ensure
|
|
from osclib.core import project_pseudometa_package
|
|
|
|
META_FILE = 'SLFO_Packagelist.group'
|
|
|
|
|
|
class PackagelistUploader(object):
|
|
def __init__(self, project, branch, print_only, verbose):
|
|
self.project = project
|
|
# Use default branch if there is no specify branch given
|
|
self.branch = branch if branch else 'main'
|
|
self.print_only = print_only
|
|
self.verbose = verbose
|
|
self.apiurl = osc.conf.config['apiurl']
|
|
self.debug = osc.conf.config['debug']
|
|
|
|
def create_packagelist(self, packages=[]):
|
|
packagelist = ET.Element('packagelist')
|
|
for pkg in sorted(packages):
|
|
if not self.print_only and self.verbose:
|
|
print(pkg)
|
|
attr = {'name': pkg}
|
|
ET.SubElement(packagelist, 'package', attr)
|
|
|
|
return ET.tostring(packagelist, pretty_print=True, encoding='unicode')
|
|
|
|
def crawl(self):
|
|
"""Main method"""
|
|
cwd = os.getcwd()
|
|
filepath = os.path.join(cwd, 'SLFO_main')
|
|
if os.path.isdir(filepath):
|
|
shutil.rmtree(filepath)
|
|
gitpath = 'https://src.opensuse.org/products/SLFO_main.git'
|
|
git.Repo.clone_from(gitpath, filepath, branch=self.branch)
|
|
packages = []
|
|
files = os.listdir(filepath)
|
|
for f in files:
|
|
if f.startswith("."):
|
|
continue
|
|
fullpath = os.path.join(filepath, f)
|
|
if os.path.isdir(fullpath):
|
|
packages.append(f)
|
|
|
|
slfo_packagelist = self.create_packagelist(packages)
|
|
pseudometa_project, pseudometa_package = project_pseudometa_package(self.apiurl, self.project)
|
|
if not self.print_only:
|
|
source_file_ensure(self.apiurl, pseudometa_project, pseudometa_package, META_FILE,
|
|
slfo_packagelist, 'Update SLFO packagelist')
|
|
else:
|
|
print(slfo_packagelist)
|
|
|
|
|
|
def main(args):
|
|
osc.conf.get_config(override_apiurl=args.apiurl)
|
|
osc.conf.config['debug'] = args.debug
|
|
|
|
if args.project is None:
|
|
print("Please pass --project argument. See usage with --help.")
|
|
quit()
|
|
|
|
uc = PackagelistUploader(args.project, args.branch, args.print_only, args.verbose)
|
|
uc.crawl()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
description = 'Upload SLFO packagelist from src.opensuse.org to staging meta package.'
|
|
parser = argparse.ArgumentParser(description=description)
|
|
parser.add_argument('-A', '--apiurl', metavar='URL', help='API URL')
|
|
parser.add_argument('-d', '--debug', action='store_true',
|
|
help='print info useful for debuging')
|
|
parser.add_argument('-p', '--project', dest='project', metavar='PROJECT',
|
|
help='Target project on buildservice')
|
|
parser.add_argument('-b', '--branch', dest='branch', metavar='BRANCH',
|
|
help='Git tree branch name')
|
|
parser.add_argument('-o', '--print-only', action='store_true',
|
|
help='show the result instead of the uploading')
|
|
parser.add_argument('-v', '--verbose', action='store_true',
|
|
help='show the diff')
|
|
|
|
args = parser.parse_args()
|
|
|
|
logging.basicConfig(level=logging.DEBUG if args.debug
|
|
else logging.INFO)
|
|
|
|
sys.exit(main(args))
|