forked from openSUSE/openSUSE-release-tools
-
Notifications
You must be signed in to change notification settings - Fork 0
/
slfo-packagelist-uploader.py
executable file
·97 lines (78 loc) · 3.39 KB
/
slfo-packagelist-uploader.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#!/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))