mirror of
https://github.com/openSUSE/osc.git
synced 2024-12-30 19:56:14 +01:00
Merge branch 'prjresults-watch' of https://github.com/JanZerebecki/osc
Add "--watch" option to "osc prjresults" ("--watch" can only be used in combination with "--xml").
This commit is contained in:
commit
aa88b6b795
@ -5156,7 +5156,7 @@ Please submit there instead, or use --nodevelproject to force direct submission.
|
|||||||
help='Disable results for all direct affect packages inside of the project')
|
help='Disable results for all direct affect packages inside of the project')
|
||||||
@cmdln.option('-M', '--multibuild-package', action='append', default=[],
|
@cmdln.option('-M', '--multibuild-package', action='append', default=[],
|
||||||
help='Only show results for the specified multibuild package')
|
help='Only show results for the specified multibuild package')
|
||||||
@cmdln.option('-w', '--watch', action='store_true', default=False,
|
@cmdln.option('-w', '--watch', action='store_true',
|
||||||
help='watch the results until all finished building')
|
help='watch the results until all finished building')
|
||||||
@cmdln.option('', '--xml', action='store_true', default=False,
|
@cmdln.option('', '--xml', action='store_true', default=False,
|
||||||
help='generate output in XML (former results_meta)')
|
help='generate output in XML (former results_meta)')
|
||||||
@ -5239,6 +5239,8 @@ Please submit there instead, or use --nodevelproject to force direct submission.
|
|||||||
# as well when adding a new option!
|
# as well when adding a new option!
|
||||||
@cmdln.option('-q', '--hide-legend', action='store_true',
|
@cmdln.option('-q', '--hide-legend', action='store_true',
|
||||||
help='hide the legend')
|
help='hide the legend')
|
||||||
|
@cmdln.option('-w', '--watch', action='store_true',
|
||||||
|
help='watch the results until all finished building, only supported with --xml')
|
||||||
@cmdln.option('-c', '--csv', action='store_true',
|
@cmdln.option('-c', '--csv', action='store_true',
|
||||||
help='csv output')
|
help='csv output')
|
||||||
@cmdln.option('', '--xml', action='store_true', default=False,
|
@cmdln.option('', '--xml', action='store_true', default=False,
|
||||||
@ -5277,9 +5279,20 @@ Please submit there instead, or use --nodevelproject to force direct submission.
|
|||||||
project = store_read_project(wd)
|
project = store_read_project(wd)
|
||||||
|
|
||||||
if opts.xml:
|
if opts.xml:
|
||||||
print(''.join(show_prj_results_meta(apiurl, project, opts.repo, opts.arch)))
|
kwargs = {}
|
||||||
|
if opts.repo:
|
||||||
|
kwargs['repository'] = opts.repo
|
||||||
|
if opts.arch:
|
||||||
|
kwargs['arch'] = opts.arch
|
||||||
|
kwargs['wait'] = opts.watch
|
||||||
|
for results in get_package_results(apiurl, project, **kwargs):
|
||||||
|
print(results)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
if opts.watch:
|
||||||
|
print('Please implement support for osc prjresults --watch without --xml.')
|
||||||
|
return 2
|
||||||
|
|
||||||
print('\n'.join(get_prj_results(apiurl, project, hide_legend=opts.hide_legend, \
|
print('\n'.join(get_prj_results(apiurl, project, hide_legend=opts.hide_legend, \
|
||||||
csv=opts.csv, status_filter=opts.status_filter, \
|
csv=opts.csv, status_filter=opts.status_filter, \
|
||||||
name_filter=opts.name_filter, repo=opts.repo, \
|
name_filter=opts.name_filter, repo=opts.repo, \
|
||||||
|
@ -5735,7 +5735,7 @@ def get_results(apiurl, project, package, verbose=False, printJoin='', *args, **
|
|||||||
return r
|
return r
|
||||||
|
|
||||||
|
|
||||||
def get_package_results(apiurl, project, package, wait=False, *args, **kwargs):
|
def get_package_results(apiurl, project, package=None, wait=False, *args, **kwargs):
|
||||||
"""generator that returns a the package results as an xml structure"""
|
"""generator that returns a the package results as an xml structure"""
|
||||||
xml = ''
|
xml = ''
|
||||||
waiting_states = ('blocked', 'scheduled', 'dispatching', 'building',
|
waiting_states = ('blocked', 'scheduled', 'dispatching', 'building',
|
||||||
|
103
tests/results_fixtures/oscrc
Normal file
103
tests/results_fixtures/oscrc
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
[general]
|
||||||
|
# URL to access API server, e.g. https://api.opensuse.org
|
||||||
|
# you also need a section [https://api.opensuse.org] with the credentials
|
||||||
|
apiurl = http://localhost
|
||||||
|
# Downloaded packages are cached here. Must be writable by you.
|
||||||
|
#packagecachedir = /var/tmp/osbuild-packagecache
|
||||||
|
# Wrapper to call build as root (sudo, su -, ...)
|
||||||
|
#su-wrapper = su -c
|
||||||
|
# rootdir to setup the chroot environment
|
||||||
|
# can contain %(repo)s, %(arch)s, %(project)s and %(package)s for replacement, e.g.
|
||||||
|
# /srv/oscbuild/%(repo)s-%(arch)s or
|
||||||
|
# /srv/oscbuild/%(repo)s-%(arch)s-%(project)s-%(package)s
|
||||||
|
#build-root = /var/tmp/build-root
|
||||||
|
# compile with N jobs (default: "getconf _NPROCESSORS_ONLN")
|
||||||
|
#build-jobs = N
|
||||||
|
# build-type to use - values can be (depending on the capabilities of the 'build' script)
|
||||||
|
# empty - chroot build
|
||||||
|
# kvm - kvm VM build (needs build-device, build-swap, build-memory)
|
||||||
|
# xen - xen VM build (needs build-device, build-swap, build-memory)
|
||||||
|
# experimental:
|
||||||
|
# qemu - qemu VM build
|
||||||
|
# lxc - lxc build
|
||||||
|
#build-type =
|
||||||
|
# build-device is the disk-image file to use as root for VM builds
|
||||||
|
# e.g. /var/tmp/FILE.root
|
||||||
|
#build-device = /var/tmp/FILE.root
|
||||||
|
# build-swap is the disk-image to use as swap for VM builds
|
||||||
|
# e.g. /var/tmp/FILE.swap
|
||||||
|
#build-swap = /var/tmp/FILE.swap
|
||||||
|
# build-memory is the amount of memory used in the VM
|
||||||
|
# value in MB - e.g. 512
|
||||||
|
#build-memory = 512
|
||||||
|
# build-vmdisk-rootsize is the size of the disk-image used as root in a VM build
|
||||||
|
# values in MB - e.g. 4096
|
||||||
|
#build-vmdisk-rootsize = 4096
|
||||||
|
# build-vmdisk-swapsize is the size of the disk-image used as swap in a VM build
|
||||||
|
# values in MB - e.g. 1024
|
||||||
|
#build-vmdisk-swapsize = 1024
|
||||||
|
# Numeric uid:gid to assign to the "abuild" user in the build-root
|
||||||
|
# or "caller" to use the current users uid:gid
|
||||||
|
# This is convenient when sharing the buildroot with ordinary userids
|
||||||
|
# on the host.
|
||||||
|
# This should not be 0
|
||||||
|
# build-uid =
|
||||||
|
# extra packages to install when building packages locally (osc build)
|
||||||
|
# this corresponds to osc build's -x option and can be overridden with that
|
||||||
|
# -x '' can also be given on the command line to override this setting, or
|
||||||
|
# you can have an empty setting here.
|
||||||
|
#extra-pkgs = vim gdb strace
|
||||||
|
# build platform is used if the platform argument is omitted to osc build
|
||||||
|
#build_repository = openSUSE_Factory
|
||||||
|
# default project for getpac or bco
|
||||||
|
#getpac_default_project = openSUSE:Factory
|
||||||
|
# alternate filesystem layout: have multiple subdirs, where colons were.
|
||||||
|
#checkout_no_colon = 0
|
||||||
|
# local files to ignore with status, addremove, ....
|
||||||
|
#exclude_glob = .osc CVS .svn .* _linkerror *~ #*# *.orig *.bak *.changes.*
|
||||||
|
# keep passwords in plaintext. If you see this comment, your osc
|
||||||
|
# already uses the encrypted password, and only keeps them in plain text
|
||||||
|
# for backwards compatibility. Default will change to 0 in future releases.
|
||||||
|
# You can remove the plaintext password without harm, if you do not need
|
||||||
|
# backwards compatibility.
|
||||||
|
#plaintext_passwd = 1
|
||||||
|
# limit the age of requests shown with 'osc req list'.
|
||||||
|
# this is a default only, can be overridden by 'osc req list -D NNN'
|
||||||
|
# Use 0 for unlimted.
|
||||||
|
#request_list_days = 0
|
||||||
|
# show info useful for debugging
|
||||||
|
#debug = 1
|
||||||
|
# show HTTP traffic useful for debugging
|
||||||
|
#http_debug = 1
|
||||||
|
# Skip signature verification of packages used for build.
|
||||||
|
#no_verify = 1
|
||||||
|
# jump into the debugger in case of errors
|
||||||
|
#post_mortem = 1
|
||||||
|
# print call traces in case of errors
|
||||||
|
#traceback = 1
|
||||||
|
# use KDE/Gnome/MacOS/Windows keyring for credentials if available
|
||||||
|
#use_keyring = 1
|
||||||
|
# check for unversioned/removed files before commit
|
||||||
|
#check_filelist = 1
|
||||||
|
# check for pending requests after executing an action (e.g. checkout, update, commit)
|
||||||
|
#check_for_request_on_action = 0
|
||||||
|
# what to do with the source package if the submitrequest has been accepted. If
|
||||||
|
# nothing is specified the API default is used
|
||||||
|
#submitrequest_on_accept_action = cleanup|update|noupdate
|
||||||
|
#review requests interactively (default: off)
|
||||||
|
#request_show_review = 1
|
||||||
|
# Directory with executables to validate sources, esp before committing
|
||||||
|
#source_validator_directory = /usr/lib/osc/source_validators
|
||||||
|
|
||||||
|
[http://localhost]
|
||||||
|
user=Admin
|
||||||
|
pass=opensuse
|
||||||
|
# set aliases for this apiurl
|
||||||
|
# aliases = foo, bar
|
||||||
|
# email used in .changes, unless the one from osc meta prj <user> will be used
|
||||||
|
# email =
|
||||||
|
# additional headers to pass to a request, e.g. for special authentication
|
||||||
|
#http_headers = Host: foofoobar,
|
||||||
|
# User: mumblegack
|
||||||
|
# Force using of keyring for this API
|
||||||
|
#keyring = 1
|
14
tests/results_fixtures/result-dirty.xml
Normal file
14
tests/results_fixtures/result-dirty.xml
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<resultlist state="c57e2ee592dbbf26ebf19cc4f1bc1e83">
|
||||||
|
<result project="testproject" repository="openSUSE_Leap_42.3" arch="x86_64" code="published" state="published">
|
||||||
|
<status package="python-MarkupSafe" code="disabled" />
|
||||||
|
</result>
|
||||||
|
<result project="testproject" repository="openSUSE_Leap_15.0" arch="x86_64" code="broken" state="broken" details="repository 'inheritedproject/openSUSE_Leap_15.0' is unavailable">
|
||||||
|
<status package="python-MarkupSafe" code="disabled" />
|
||||||
|
</result>
|
||||||
|
<result project="testproject" repository="SLE_12_SP4" arch="x86_64" code="publishing" state="publishing">
|
||||||
|
<status package="python-MarkupSafe" code="disabled" />
|
||||||
|
</result>
|
||||||
|
<result project="testproject" repository="SLE_12_SP3" arch="x86_64" code="blocked" state="blocked" details="suspendproject" dirty="true">
|
||||||
|
<status package="python-MarkupSafe" code="disabled" />
|
||||||
|
</result>
|
||||||
|
</resultlist>
|
14
tests/results_fixtures/result.xml
Normal file
14
tests/results_fixtures/result.xml
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<resultlist state="f1cfebfd13354bcb8e792cb85f6218d8">
|
||||||
|
<result project="testproject" repository="openSUSE_Leap_42.3" arch="x86_64" code="published" state="published">
|
||||||
|
<status package="python-MarkupSafe" code="disabled" />
|
||||||
|
</result>
|
||||||
|
<result project="testproject" repository="openSUSE_Leap_15.0" arch="x86_64" code="published" state="published">
|
||||||
|
<status package="python-MarkupSafe" code="disabled" />
|
||||||
|
</result>
|
||||||
|
<result project="testproject" repository="SLE_12_SP4" arch="x86_64" code="published" state="published">
|
||||||
|
<status package="python-MarkupSafe" code="disabled" />
|
||||||
|
</result>
|
||||||
|
<result project="testproject" repository="SLE_12_SP3" arch="x86_64" code="published" state="published">
|
||||||
|
<status package="python-MarkupSafe" code="disabled" />
|
||||||
|
</result>
|
||||||
|
</resultlist>
|
@ -23,6 +23,7 @@ import test_request
|
|||||||
import test_setlinkrev
|
import test_setlinkrev
|
||||||
import test_prdiff
|
import test_prdiff
|
||||||
import test_conf
|
import test_conf
|
||||||
|
import test_results
|
||||||
|
|
||||||
suite = unittest.TestSuite()
|
suite = unittest.TestSuite()
|
||||||
suite.addTests(test_addfiles.suite())
|
suite.addTests(test_addfiles.suite())
|
||||||
@ -40,6 +41,7 @@ suite.addTests(test_request.suite())
|
|||||||
suite.addTests(test_setlinkrev.suite())
|
suite.addTests(test_setlinkrev.suite())
|
||||||
suite.addTests(test_prdiff.suite())
|
suite.addTests(test_prdiff.suite())
|
||||||
suite.addTests(test_conf.suite())
|
suite.addTests(test_conf.suite())
|
||||||
|
suite.addTests(test_results.suite())
|
||||||
|
|
||||||
if have_xmlrunner:
|
if have_xmlrunner:
|
||||||
result = xmlrunner.XMLTestRunner(output=os.path.join(os.getcwd(), 'junit-xml-results')).run(suite)
|
result = xmlrunner.XMLTestRunner(output=os.path.join(os.getcwd(), 'junit-xml-results')).run(suite)
|
||||||
|
56
tests/test_results.py
Normal file
56
tests/test_results.py
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
import osc.commandline
|
||||||
|
from common import GET, OscTestCase
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
def suite():
|
||||||
|
import unittest
|
||||||
|
return unittest.makeSuite(TestResults)
|
||||||
|
|
||||||
|
class TestResults(OscTestCase):
|
||||||
|
def setUp(self):
|
||||||
|
OscTestCase.setUp(self, copytree=False)
|
||||||
|
|
||||||
|
def _get_fixtures_name(self):
|
||||||
|
return 'results_fixtures'
|
||||||
|
|
||||||
|
def _get_fixtures_dir(self):
|
||||||
|
return os.path.join(os.path.dirname(__file__), self._get_fixtures_name())
|
||||||
|
|
||||||
|
def _run_osc(self, *args):
|
||||||
|
"""Runs osc, returning captured STDOUT as a string."""
|
||||||
|
cli = osc.commandline.Osc()
|
||||||
|
argv = ['osc', '--no-keyring', '--no-gnome-keyring']
|
||||||
|
argv.extend(args)
|
||||||
|
cli.main(argv=argv)
|
||||||
|
return sys.stdout.getvalue()
|
||||||
|
|
||||||
|
def _get_fixture(self, filename):
|
||||||
|
return open(os.path.join(self._get_fixtures_dir(), filename), 'r').read()
|
||||||
|
|
||||||
|
@GET('http://localhost/build/testproject/_result', file='result.xml')
|
||||||
|
def testPrjresults(self):
|
||||||
|
out = self._run_osc('prjresults', '--xml', 'testproject')
|
||||||
|
self.assertEqualMultiline(out, self._get_fixture('result.xml')+'\n')
|
||||||
|
|
||||||
|
@GET('http://localhost/build/testproject/_result', file='result-dirty.xml')
|
||||||
|
@GET('http://localhost/build/testproject/_result?oldstate=c57e2ee592dbbf26ebf19cc4f1bc1e83', file='result.xml')
|
||||||
|
def testPrjresultsWatch(self):
|
||||||
|
out = self._run_osc('prjresults', '--watch', '--xml', 'testproject')
|
||||||
|
self.assertEqualMultiline(out, self._get_fixture('result-dirty.xml')+'\n'+self._get_fixture('result.xml')+'\n')
|
||||||
|
|
||||||
|
@GET('http://localhost/build/testproject/_result?package=python-MarkupSafe&multibuild=1&locallink=1', file='result.xml')
|
||||||
|
def testResults(self):
|
||||||
|
out = self._run_osc('results', '--xml', 'testproject', 'python-MarkupSafe')
|
||||||
|
self.assertEqualMultiline(out, self._get_fixture('result.xml'))
|
||||||
|
|
||||||
|
@GET('http://localhost/build/testproject/_result?package=python-MarkupSafe&multibuild=1&locallink=1', file='result-dirty.xml')
|
||||||
|
@GET('http://localhost/build/testproject/_result?package=python-MarkupSafe&oldstate=c57e2ee592dbbf26ebf19cc4f1bc1e83&multibuild=1&locallink=1', file='result.xml')
|
||||||
|
def testResultsWatch(self):
|
||||||
|
out = self._run_osc('results', '--watch', '--xml', 'testproject', 'python-MarkupSafe')
|
||||||
|
self.assertEqualMultiline(out, self._get_fixture('result-dirty.xml')+self._get_fixture('result.xml'))
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
import unittest
|
||||||
|
unittest.main()
|
||||||
|
|
Loading…
Reference in New Issue
Block a user