hub: editTagExternalRepo is able to set merge_mode

fixes: #1857
This commit is contained in:
Yuming Zhu 2020-02-28 02:20:43 +08:00 committed by Tomas Kopecek
parent 4864df3442
commit 944d105571
3 changed files with 26 additions and 5 deletions

View file

@ -13,4 +13,8 @@ CREATE OR REPLACE FUNCTION get_event() RETURNS INTEGER AS '
SELECT currval(''events_id_seq'')::INTEGER; SELECT currval(''events_id_seq'')::INTEGER;
' LANGUAGE SQL; ' LANGUAGE SQL;
-- merge_mode can not be null
UPDATE tag_external_repos SET merge_mode = 'koji' WHERE merge_mode is NULL;
ALTER TABLE tag_external_repos ALTER COLUMN merge_mode SET NOT NULL;
COMMIT; COMMIT;

View file

@ -484,7 +484,7 @@ create table tag_external_repos (
tag_id INTEGER NOT NULL REFERENCES tag(id), tag_id INTEGER NOT NULL REFERENCES tag(id),
external_repo_id INTEGER NOT NULL REFERENCES external_repo(id), external_repo_id INTEGER NOT NULL REFERENCES external_repo(id),
priority INTEGER NOT NULL, priority INTEGER NOT NULL,
merge_mode TEXT DEFAULT 'koji', merge_mode TEXT NOT NULL DEFAULT 'koji',
-- versioned - see earlier description of versioning -- versioned - see earlier description of versioning
create_event INTEGER NOT NULL REFERENCES events(id) DEFAULT get_event(), create_event INTEGER NOT NULL REFERENCES events(id) DEFAULT get_event(),
revoke_event INTEGER REFERENCES events(id), revoke_event INTEGER REFERENCES events(id),

View file

@ -3678,6 +3678,9 @@ def add_external_repo_to_tag(tag_info, repo_info, priority, merge_mode='koji'):
context.session.assertPerm('tag') context.session.assertPerm('tag')
# sanity check for None value, which may happen if DB schema isn't updated to 1.21+
if merge_mode is None:
merge_mode = 'koji'
if merge_mode not in koji.REPO_MERGE_MODES: if merge_mode not in koji.REPO_MERGE_MODES:
raise koji.GenericError('Invalid merge mode: %s' % merge_mode) raise koji.GenericError('Invalid merge mode: %s' % merge_mode)
@ -3721,9 +3724,12 @@ def remove_external_repo_from_tag(tag_info, repo_info):
update.execute() update.execute()
def edit_tag_external_repo(tag_info, repo_info, priority): def edit_tag_external_repo(tag_info, repo_info, priority=None, merge_mode=None):
"""Edit a tag<->external repo association """Edit a tag<->external repo association
This allows you to update the priority without removing/adding the repo.""" This allows you to update the priority and merge_mode without removing/adding the repo.
Note that None value of priority and merge_mode means no change on it
"""
context.session.assertPerm('tag') context.session.assertPerm('tag')
@ -3738,9 +3744,20 @@ def edit_tag_external_repo(tag_info, repo_info, priority):
(repo['name'], tag['name'])) (repo['name'], tag['name']))
tag_repo = tag_repos[0] tag_repo = tag_repos[0]
if priority != tag_repo['priority']: data = {}
for k in ('priority', 'merge_mode'):
val = locals().get(k)
# None value means no change
if val is not None and val != tag_repo[k]:
data[k] = val
if not data:
return False
else:
for k in ('priority', 'merge_mode'):
data.setdefault(k, tag_repo[k])
remove_external_repo_from_tag(tag_id, repo_id) remove_external_repo_from_tag(tag_id, repo_id)
add_external_repo_to_tag(tag_id, repo_id, priority) add_external_repo_to_tag(tag_id, repo_id, **data)
return True
def get_tag_external_repos(tag_info=None, repo_info=None, event=None): def get_tag_external_repos(tag_info=None, repo_info=None, event=None):