merge mode is part of tag connection rather than inherent to repo
This commit is contained in:
parent
d63bf7f3df
commit
3273d249cd
3 changed files with 34 additions and 44 deletions
|
|
@ -5173,9 +5173,9 @@ def anon_handle_list_external_repos(goptions, session, args):
|
|||
# 2) Listing repo data for a tag (priority, name, url)
|
||||
# 3) Listing repo data for multiple tags (tag, priority, name, url)
|
||||
if format == "basic":
|
||||
format = "%(name)-25s %(merge_mode)-10s %(url)s"
|
||||
header1 = "%-25s %-10s URL" % ("External repo name", "Mode")
|
||||
header2 = "%s %s %s" % ("-"*25, "-"*40, "-"*20)
|
||||
format = "%(name)-25s %(url)s"
|
||||
header1 = "%-25s %s" % ("External repo name", "URL")
|
||||
header2 = "%s %s" % ("-"*25, "-"*40)
|
||||
elif format == "tag":
|
||||
format = "%(priority)-3i %(external_repo_name)-25s %(merge_mode)-10s %(url)s"
|
||||
header1 = "%-3s %-25s %-10s URL" % ("Pri", "External repo name", "Mode")
|
||||
|
|
@ -5183,7 +5183,7 @@ def anon_handle_list_external_repos(goptions, session, args):
|
|||
elif format == "multitag":
|
||||
format = "%(tag_name)-20s %(priority)-3i %(merge_mode)-10s %(external_repo_name)s"
|
||||
header1 = "%-20s %-3s %-10s %s" % ("Tag", "Pri", "Mode", "External repo name")
|
||||
header2 = "%s %s %s" % ("-"*20, "-"*3, "-"*25)
|
||||
header2 = "%s %s %s %s" % ("-"*20, "-"*3, "-"*10, "-"*25)
|
||||
if not options.quiet:
|
||||
print(header1)
|
||||
print(header2)
|
||||
|
|
@ -5235,6 +5235,8 @@ def handle_add_external_repo(goptions, session, args):
|
|||
if options.mode:
|
||||
if options.mode not in koji.REPO_MERGE_MODES:
|
||||
parser.error('Invalid mode: %s' % options.mode)
|
||||
if not options.tag:
|
||||
parser.error('The --mode option can only be used with --tag')
|
||||
if len(args) == 1:
|
||||
name = args[0]
|
||||
rinfo = session.getExternalRepo(name, strict=True)
|
||||
|
|
@ -5242,10 +5244,7 @@ def handle_add_external_repo(goptions, session, args):
|
|||
parser.error(_("A url is required to create an external repo entry"))
|
||||
elif len(args) == 2:
|
||||
name, url = args
|
||||
callopts = {}
|
||||
if options.mode:
|
||||
callopts['merge_mode'] = options.mode
|
||||
rinfo = session.createExternalRepo(name, url, **callopts)
|
||||
rinfo = session.createExternalRepo(name, url)
|
||||
print("Created external repo %(id)i" % rinfo)
|
||||
else:
|
||||
parser.error(_("Incorrect number of arguments"))
|
||||
|
|
@ -5258,7 +5257,10 @@ def handle_add_external_repo(goptions, session, args):
|
|||
priority = options.priority
|
||||
else:
|
||||
priority = _pick_external_repo_priority(session, tag)
|
||||
session.addExternalRepoToTag(tag, rinfo['name'], priority)
|
||||
callopts = {}
|
||||
if options.mode:
|
||||
callopts['merge_mode'] = options.mode
|
||||
session.addExternalRepoToTag(tag, rinfo['name'], priority, **callopts)
|
||||
print("Added external repo %s to tag %s (priority %i)" \
|
||||
% (rinfo['name'], tag, priority))
|
||||
|
||||
|
|
|
|||
|
|
@ -450,7 +450,6 @@ INSERT INTO external_repo (id, name) VALUES (0, 'INTERNAL');
|
|||
create table external_repo_config (
|
||||
external_repo_id INTEGER NOT NULL REFERENCES external_repo(id),
|
||||
url TEXT NOT NULL,
|
||||
merge_mode TEXT DEFAULT 'koji',
|
||||
-- versioned - see earlier description of versioning
|
||||
create_event INTEGER NOT NULL REFERENCES events(id) DEFAULT get_event(),
|
||||
revoke_event INTEGER REFERENCES events(id),
|
||||
|
|
@ -468,6 +467,7 @@ create table tag_external_repos (
|
|||
tag_id INTEGER NOT NULL REFERENCES tag(id),
|
||||
external_repo_id INTEGER NOT NULL REFERENCES external_repo(id),
|
||||
priority INTEGER NOT NULL,
|
||||
merge_mode TEXT DEFAULT 'koji',
|
||||
-- versioned - see earlier description of versioning
|
||||
create_event INTEGER NOT NULL REFERENCES events(id) DEFAULT get_event(),
|
||||
revoke_event INTEGER REFERENCES events(id),
|
||||
|
|
|
|||
|
|
@ -3252,7 +3252,7 @@ def get_external_repo_id(info, strict=False, create=False):
|
|||
"""Get the id for a build target"""
|
||||
return get_id('external_repo', info, strict, create)
|
||||
|
||||
def create_external_repo(name, url, merge_mode='koji'):
|
||||
def create_external_repo(name, url):
|
||||
"""Create a new external repo with the given name and url.
|
||||
Return a map containing the id, name, and url
|
||||
of the new repo."""
|
||||
|
|
@ -3262,16 +3262,13 @@ def create_external_repo(name, url, merge_mode='koji'):
|
|||
if get_external_repos(info=name):
|
||||
raise koji.GenericError('An external repo named "%s" already exists' % name)
|
||||
|
||||
if merge_mode not in koji.REPO_MERGE_MODES:
|
||||
raise koji.GenericError('Invalid merge mode: %s' % merge_mode)
|
||||
|
||||
id = get_external_repo_id(name, create=True)
|
||||
if not url.endswith('/'):
|
||||
# Ensure the url always ends with /
|
||||
url += '/'
|
||||
values = {'id': id, 'name': name, 'url': url, 'merge_mode': merge_mode}
|
||||
values = {'id': id, 'name': name, 'url': url}
|
||||
insert = InsertProcessor('external_repo_config')
|
||||
insert.set(external_repo_id=id, url=url, merge_mode=merge_mode)
|
||||
insert.set(external_repo_id=id, url=url)
|
||||
insert.make_create()
|
||||
insert.execute()
|
||||
return values
|
||||
|
|
@ -3281,7 +3278,7 @@ def get_external_repos(info=None, url=None, event=None, queryOpts=None):
|
|||
string (name) or an integer (id).
|
||||
If url is not None, filter the list of repos to those matching the
|
||||
given url."""
|
||||
fields = ['id', 'name', 'url', 'merge_mode']
|
||||
fields = ['id', 'name', 'url']
|
||||
tables = ['external_repo']
|
||||
joins = ['external_repo_config ON external_repo_id = id']
|
||||
clauses = [eventCondition(event)]
|
||||
|
|
@ -3315,7 +3312,7 @@ def get_external_repo(info, strict=False, event=None):
|
|||
else:
|
||||
return None
|
||||
|
||||
def edit_external_repo(info, name=None, url=None, merge_mode=None):
|
||||
def edit_external_repo(info, name=None, url=None):
|
||||
"""Edit an existing external repo"""
|
||||
|
||||
context.session.assertPerm('admin')
|
||||
|
|
@ -3323,20 +3320,6 @@ def edit_external_repo(info, name=None, url=None, merge_mode=None):
|
|||
repo = get_external_repo(info, strict=True)
|
||||
repo_id = repo['id']
|
||||
|
||||
# check repo changes
|
||||
changes = {}
|
||||
if url and url != repo['url']:
|
||||
if not url.endswith('/'):
|
||||
# Ensure the url always ends with /
|
||||
url += '/'
|
||||
changes['url'] = url
|
||||
if merge_mode is not None:
|
||||
if merge_mode not in koji.REPO_MERGE_MODES:
|
||||
raise koji.GenericError('Invalid merge mode: %s' % merge_mode)
|
||||
if merge_mode != repo['merge_mode']:
|
||||
changes['merge_mode'] = merge_mode
|
||||
|
||||
# deal with renames
|
||||
if name and name != repo['name']:
|
||||
existing_id = _singleValue("""SELECT id FROM external_repo WHERE name = %(name)s""",
|
||||
locals(), strict=False)
|
||||
|
|
@ -3346,17 +3329,17 @@ def edit_external_repo(info, name=None, url=None, merge_mode=None):
|
|||
rename = """UPDATE external_repo SET name = %(name)s WHERE id = %(repo_id)i"""
|
||||
_dml(rename, locals())
|
||||
|
||||
# apply changes
|
||||
if changes:
|
||||
if url and url != repo['url']:
|
||||
if not url.endswith('/'):
|
||||
# Ensure the url always ends with /
|
||||
url += '/'
|
||||
|
||||
update = UpdateProcessor('external_repo_config', values=locals(),
|
||||
clauses=['external_repo_id = %(repo_id)i'])
|
||||
update.make_revoke()
|
||||
|
||||
data = dslice(repo, ['url', 'merge_mode'])
|
||||
data['external_repo_id'] = repo['id']
|
||||
data.update(changes)
|
||||
insert = InsertProcessor('external_repo_config')
|
||||
insert.set(**data)
|
||||
insert.set(external_repo_id=repo_id, url=url)
|
||||
insert.make_create()
|
||||
|
||||
update.execute()
|
||||
|
|
@ -3379,11 +3362,14 @@ def delete_external_repo(info):
|
|||
update.make_revoke()
|
||||
update.execute()
|
||||
|
||||
def add_external_repo_to_tag(tag_info, repo_info, priority):
|
||||
def add_external_repo_to_tag(tag_info, repo_info, priority, merge_mode='koji'):
|
||||
"""Add an external repo to a tag"""
|
||||
|
||||
context.session.assertPerm('admin')
|
||||
|
||||
if merge_mode not in koji.REPO_MERGE_MODES:
|
||||
raise koji.GenericError('Invalid merge mode: %s' % merge_mode)
|
||||
|
||||
tag = get_tag(tag_info, strict=True)
|
||||
tag_id = tag['id']
|
||||
repo = get_external_repo(repo_info, strict=True)
|
||||
|
|
@ -3398,7 +3384,8 @@ def add_external_repo_to_tag(tag_info, repo_info, priority):
|
|||
(tag['name'], priority))
|
||||
|
||||
insert = InsertProcessor('tag_external_repos')
|
||||
insert.set(tag_id=tag_id, external_repo_id=repo_id, priority=priority)
|
||||
insert.set(tag_id=tag_id, external_repo_id=repo_id, priority=priority,
|
||||
merge_mode=merge_mode)
|
||||
insert.make_create()
|
||||
insert.execute()
|
||||
|
||||
|
|
@ -6749,10 +6736,10 @@ def query_history(tables=None, **kwargs):
|
|||
'tag_config': ['tag_id', 'arches', 'perm_id', 'locked', 'maven_support', 'maven_include_all'],
|
||||
'tag_extra': ['tag_id', 'key', 'value'],
|
||||
'build_target_config': ['build_target_id', 'build_tag', 'dest_tag'],
|
||||
'external_repo_config': ['external_repo_id', 'url', 'merge_mode'],
|
||||
'external_repo_config': ['external_repo_id', 'url'],
|
||||
'host_config': ['host_id', 'arches', 'capacity', 'description', 'comment', 'enabled'],
|
||||
'host_channels': ['host_id', 'channel_id'],
|
||||
'tag_external_repos': ['tag_id', 'external_repo_id', 'priority'],
|
||||
'tag_external_repos': ['tag_id', 'external_repo_id', 'priority', 'merge_mode'],
|
||||
'tag_listing': ['build_id', 'tag_id'],
|
||||
'tag_packages': ['package_id', 'tag_id', 'owner', 'blocked', 'extra_arches'],
|
||||
'group_config': ['group_id', 'tag_id', 'blocked', 'exported', 'display_name', 'is_default', 'uservisible',
|
||||
|
|
@ -9202,10 +9189,11 @@ class RootExports(object):
|
|||
editExternalRepo = staticmethod(edit_external_repo)
|
||||
deleteExternalRepo = staticmethod(delete_external_repo)
|
||||
|
||||
def addExternalRepoToTag(self, tag_info, repo_info, priority):
|
||||
def addExternalRepoToTag(self, tag_info, repo_info, priority,
|
||||
merge_mode='koji'):
|
||||
"""Add an external repo to a tag"""
|
||||
# wrap the local method so we don't expose the event parameter
|
||||
add_external_repo_to_tag(tag_info, repo_info, priority)
|
||||
add_external_repo_to_tag(tag_info, repo_info, priority, merge_mode)
|
||||
|
||||
def removeExternalRepoFromTag(self, tag_info, repo_info):
|
||||
"""Remove an external repo from a tag"""
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue