PR#2071: Better help for build/latest-build
Merges #2071 https://pagure.io/koji/pull-request/2071 Fixes: #1808 https://pagure.io/koji/issue/1808 cli: Print a warning in latest-build if the tag is not a buildroot
This commit is contained in:
commit
ae05aa7654
2 changed files with 56 additions and 34 deletions
|
|
@ -11,6 +11,7 @@ import random
|
|||
import re
|
||||
import stat
|
||||
import sys
|
||||
import textwrap
|
||||
import time
|
||||
import traceback
|
||||
from collections import OrderedDict, defaultdict
|
||||
|
|
@ -454,7 +455,19 @@ def handle_remove_pkg(goptions, session, args):
|
|||
|
||||
def handle_build(options, session, args):
|
||||
"[build] Build a package from source"
|
||||
usage = _("usage: %prog build [options] <target> <srpm path or scm url>")
|
||||
|
||||
usage = _("""\
|
||||
usage: %prog build [options] <target> <srpm path or scm url>
|
||||
|
||||
The first option is the build target, not to be confused with the destination
|
||||
tag (where the build eventually lands) or build tag (where the buildroot
|
||||
contents are pulled from).
|
||||
|
||||
You can list all available build targets using the '%prog list-targets' command.
|
||||
More detail can be found in the documentation.
|
||||
https://docs.pagure.org/koji/HOWTO/#package-organization""")
|
||||
|
||||
usage = textwrap.dedent(usage)
|
||||
parser = OptionParser(usage=get_usage_str(usage))
|
||||
parser.add_option("--skip-tag", action="store_true",
|
||||
help=_("Do not attempt to tag package"))
|
||||
|
|
@ -2334,8 +2347,19 @@ def handle_revoke_cg_access(goptions, session, args):
|
|||
|
||||
|
||||
def anon_handle_latest_build(goptions, session, args):
|
||||
"[info] Print the latest builds for a tag"
|
||||
usage = _("usage: %prog latest-build [options] <tag> <package> [<package> ...]")
|
||||
"""[info] Print the latest builds for a tag"""
|
||||
usage = _("""\
|
||||
usage: %prog latest-build [options] <tag> <package> [<package> ...]
|
||||
|
||||
The first option should be the name of a tag, not the name of a build target.
|
||||
If you want to know the latest build in buildroots for a given build target,
|
||||
then you should use the name of the build tag for that target. You can find
|
||||
this value by running '%prog list-targets --name=<target>'
|
||||
|
||||
More information on tags and build targets can be found in the documentation.
|
||||
https://docs.pagure.org/koji/HOWTO/#package-organization""")
|
||||
|
||||
usage = textwrap.dedent(usage)
|
||||
parser = OptionParser(usage=get_usage_str(usage))
|
||||
parser.add_option("--arch", help=_("List all of the latest packages for this arch"))
|
||||
parser.add_option("--all", action="store_true",
|
||||
|
|
|
|||
|
|
@ -3,14 +3,11 @@ import mock
|
|||
import os
|
||||
import six
|
||||
import sys
|
||||
try:
|
||||
import unittest2 as unittest
|
||||
except ImportError:
|
||||
import unittest
|
||||
|
||||
from koji_cli.commands import handle_build, _progress_callback
|
||||
from . import utils
|
||||
|
||||
class TestBuild(unittest.TestCase):
|
||||
class TestBuild(utils.CliTestCase):
|
||||
# Show long diffs in error output...
|
||||
maxDiff = None
|
||||
|
||||
|
|
@ -22,6 +19,19 @@ class TestBuild(unittest.TestCase):
|
|||
self.options.poll_interval = 0
|
||||
# Mock out the xmlrpc server
|
||||
self.session = mock.MagicMock()
|
||||
self.error_format = """Usage: %s build [options] <target> <srpm path or scm url>
|
||||
|
||||
The first option is the build target, not to be confused with the destination
|
||||
tag (where the build eventually lands) or build tag (where the buildroot
|
||||
contents are pulled from).
|
||||
|
||||
You can list all available build targets using the '%s list-targets' command.
|
||||
More detail can be found in the documentation.
|
||||
https://docs.pagure.org/koji/HOWTO/#package-organization
|
||||
(Specify the --help global option for a list of other help options)
|
||||
|
||||
%s: error: {message}
|
||||
""" % (self.progname, self.progname, self.progname)
|
||||
|
||||
@mock.patch('sys.stdout', new_callable=six.StringIO)
|
||||
@mock.patch('koji_cli.commands.activate_session')
|
||||
|
|
@ -147,11 +157,7 @@ Task info: weburl/taskinfo?taskID=1
|
|||
actual_stdout = stdout.getvalue()
|
||||
actual_stderr = stderr.getvalue()
|
||||
expected_stdout = ''
|
||||
expected_stderr = """Usage: %s build [options] <target> <srpm path or scm url>
|
||||
(Specify the --help global option for a list of other help options)
|
||||
|
||||
%s: error: Exactly two arguments (a build target and a SCM URL or srpm file) are required
|
||||
""" % (progname, progname)
|
||||
expected_stderr = self.format_error_message("Exactly two arguments (a build target and a SCM URL or srpm file) are required")
|
||||
self.assertMultiLineEqual(actual_stdout, expected_stdout)
|
||||
self.assertMultiLineEqual(actual_stderr, expected_stderr)
|
||||
|
||||
|
|
@ -193,6 +199,14 @@ Task info: weburl/taskinfo?taskID=1
|
|||
actual_stdout = stdout.getvalue()
|
||||
actual_stderr = stderr.getvalue()
|
||||
expected_stdout = """Usage: %s build [options] <target> <srpm path or scm url>
|
||||
|
||||
The first option is the build target, not to be confused with the destination
|
||||
tag (where the build eventually lands) or build tag (where the buildroot
|
||||
contents are pulled from).
|
||||
|
||||
You can list all available build targets using the '%s list-targets' command.
|
||||
More detail can be found in the documentation.
|
||||
https://docs.pagure.org/koji/HOWTO/#package-organization
|
||||
(Specify the --help global option for a list of other help options)
|
||||
|
||||
Options:
|
||||
|
|
@ -213,7 +227,7 @@ Options:
|
|||
--repo-id=REPO_ID Use a specific repo
|
||||
--noprogress Do not display progress of the upload
|
||||
--background Run the build at a lower priority
|
||||
""" % progname
|
||||
""" % (progname, progname)
|
||||
expected_stderr = ''
|
||||
self.assertMultiLineEqual(actual_stdout, expected_stdout)
|
||||
self.assertMultiLineEqual(actual_stderr, expected_stderr)
|
||||
|
|
@ -259,11 +273,7 @@ Options:
|
|||
actual_stdout = stdout.getvalue()
|
||||
actual_stderr = stderr.getvalue()
|
||||
expected_stdout = ''
|
||||
expected_stderr = """Usage: %s build [options] <target> <srpm path or scm url>
|
||||
(Specify the --help global option for a list of other help options)
|
||||
|
||||
%s: error: --arch_override is only allowed for --scratch builds
|
||||
""" % (progname, progname)
|
||||
expected_stderr = self.format_error_message("--arch_override is only allowed for --scratch builds")
|
||||
self.assertMultiLineEqual(actual_stdout, expected_stdout)
|
||||
self.assertMultiLineEqual(actual_stderr, expected_stderr)
|
||||
|
||||
|
|
@ -354,11 +364,7 @@ Task info: weburl/taskinfo?taskID=1
|
|||
with self.assertRaises(SystemExit) as cm:
|
||||
handle_build(self.options, self.session, args)
|
||||
actual = stderr.getvalue()
|
||||
expected = """Usage: %s build [options] <target> <srpm path or scm url>
|
||||
(Specify the --help global option for a list of other help options)
|
||||
|
||||
%s: error: Unknown build target: target
|
||||
""" % (progname, progname)
|
||||
expected = self.format_error_message( "Unknown build target: target")
|
||||
self.assertMultiLineEqual(actual, expected)
|
||||
# Finally, assert that things were called as we expected.
|
||||
activate_session_mock.assert_called_once_with(self.session, self.options)
|
||||
|
|
@ -405,11 +411,7 @@ Task info: weburl/taskinfo?taskID=1
|
|||
with self.assertRaises(SystemExit) as cm:
|
||||
handle_build(self.options, self.session, args)
|
||||
actual = stderr.getvalue()
|
||||
expected = """Usage: %s build [options] <target> <srpm path or scm url>
|
||||
(Specify the --help global option for a list of other help options)
|
||||
|
||||
%s: error: Unknown destination tag: dest_tag_name
|
||||
""" % (progname, progname)
|
||||
expected = self.format_error_message("Unknown destination tag: dest_tag_name")
|
||||
self.assertMultiLineEqual(actual, expected)
|
||||
# Finally, assert that things were called as we expected.
|
||||
activate_session_mock.assert_called_once_with(self.session, self.options)
|
||||
|
|
@ -456,11 +458,7 @@ Task info: weburl/taskinfo?taskID=1
|
|||
with self.assertRaises(SystemExit) as cm:
|
||||
handle_build(self.options, self.session, args)
|
||||
actual = stderr.getvalue()
|
||||
expected = """Usage: %s build [options] <target> <srpm path or scm url>
|
||||
(Specify the --help global option for a list of other help options)
|
||||
|
||||
%s: error: Destination tag dest_tag_name is locked
|
||||
""" % (progname, progname)
|
||||
expected = self.format_error_message("Destination tag dest_tag_name is locked")
|
||||
self.assertMultiLineEqual(actual, expected)
|
||||
# Finally, assert that things were called as we expected.
|
||||
activate_session_mock.assert_called_once_with(self.session, self.options)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue