feat(upgrade): added feature to bulk upgrade hooks from 4.X -> 5.X fixes RCCE-34
This commit is contained in:
parent
174ccfff79
commit
719ae001e0
7 changed files with 14 additions and 10 deletions
2
Makefile
2
Makefile
|
|
@ -145,7 +145,7 @@ dev-srv:
|
||||||
.PHONY: dev-srv-g
|
.PHONY: dev-srv-g
|
||||||
## run gunicorn multi process workers
|
## run gunicorn multi process workers
|
||||||
dev-srv-g:
|
dev-srv-g:
|
||||||
gunicorn --paste .dev/dev.ini --bind=0.0.0.0:10020 --config=.dev/gunicorn_config.py --timeout=120
|
gunicorn --paste .dev/dev.ini --bind=0.0.0.0:10020 --config=.dev/gunicorn_config.py --timeout=120 --reload
|
||||||
|
|
||||||
|
|
||||||
# Default command on calling make
|
# Default command on calling make
|
||||||
|
|
|
||||||
|
|
@ -206,7 +206,7 @@ def rescan_repos(request, apiuser, remove_obsolete=Optional(False)):
|
||||||
try:
|
try:
|
||||||
rm_obsolete = Optional.extract(remove_obsolete)
|
rm_obsolete = Optional.extract(remove_obsolete)
|
||||||
added, removed = repo2db_mapper(ScmModel().repo_scan(),
|
added, removed = repo2db_mapper(ScmModel().repo_scan(),
|
||||||
remove_obsolete=rm_obsolete)
|
remove_obsolete=rm_obsolete, force_hooks_rebuild=True)
|
||||||
return {'added': added, 'removed': removed}
|
return {'added': added, 'removed': removed}
|
||||||
except Exception:
|
except Exception:
|
||||||
log.exception('Failed to run repo rescann')
|
log.exception('Failed to run repo rescann')
|
||||||
|
|
|
||||||
|
|
@ -217,7 +217,7 @@ class AdminSettingsView(BaseAppView):
|
||||||
def settings_mapping(self):
|
def settings_mapping(self):
|
||||||
c = self.load_default_context()
|
c = self.load_default_context()
|
||||||
c.active = 'mapping'
|
c.active = 'mapping'
|
||||||
|
c.storage_path = VcsSettingsModel().get_repos_location()
|
||||||
data = render('rhodecode:templates/admin/settings/settings.mako',
|
data = render('rhodecode:templates/admin/settings/settings.mako',
|
||||||
self._get_template_context(c), self.request)
|
self._get_template_context(c), self.request)
|
||||||
html = formencode.htmlfill.render(
|
html = formencode.htmlfill.render(
|
||||||
|
|
@ -245,7 +245,7 @@ class AdminSettingsView(BaseAppView):
|
||||||
ScmModel().mark_for_invalidation(repo.repo_name, delete=True)
|
ScmModel().mark_for_invalidation(repo.repo_name, delete=True)
|
||||||
|
|
||||||
filesystem_repos = ScmModel().repo_scan()
|
filesystem_repos = ScmModel().repo_scan()
|
||||||
added, removed = repo2db_mapper(filesystem_repos, rm_obsolete)
|
added, removed = repo2db_mapper(filesystem_repos, rm_obsolete, force_hooks_rebuild=True)
|
||||||
PermissionModel().trigger_permission_flush()
|
PermissionModel().trigger_permission_flush()
|
||||||
|
|
||||||
def _repr(rm_repo):
|
def _repr(rm_repo):
|
||||||
|
|
|
||||||
|
|
@ -508,7 +508,7 @@ def map_groups(path):
|
||||||
return group
|
return group
|
||||||
|
|
||||||
|
|
||||||
def repo2db_mapper(initial_repo_list, remove_obsolete=False):
|
def repo2db_mapper(initial_repo_list, remove_obsolete=False, force_hooks_rebuild=False):
|
||||||
"""
|
"""
|
||||||
maps all repos given in initial_repo_list, non existing repositories
|
maps all repos given in initial_repo_list, non existing repositories
|
||||||
are created, if remove_obsolete is True it also checks for db entries
|
are created, if remove_obsolete is True it also checks for db entries
|
||||||
|
|
@ -537,9 +537,10 @@ def repo2db_mapper(initial_repo_list, remove_obsolete=False):
|
||||||
group = map_groups(name)
|
group = map_groups(name)
|
||||||
str_name = safe_str(name)
|
str_name = safe_str(name)
|
||||||
db_repo = repo_model.get_by_repo_name(str_name)
|
db_repo = repo_model.get_by_repo_name(str_name)
|
||||||
|
|
||||||
# found repo that is on filesystem not in RhodeCode database
|
# found repo that is on filesystem not in RhodeCode database
|
||||||
if not db_repo:
|
if not db_repo:
|
||||||
log.info('repository %s not found, creating now', name)
|
log.info('repository `%s` not found in the database, creating now', name)
|
||||||
added.append(name)
|
added.append(name)
|
||||||
desc = (repo.description
|
desc = (repo.description
|
||||||
if repo.description != 'unknown'
|
if repo.description != 'unknown'
|
||||||
|
|
@ -570,7 +571,7 @@ def repo2db_mapper(initial_repo_list, remove_obsolete=False):
|
||||||
config = db_repo._config
|
config = db_repo._config
|
||||||
config.set('extensions', 'largefiles', '')
|
config.set('extensions', 'largefiles', '')
|
||||||
repo = db_repo.scm_instance(config=config)
|
repo = db_repo.scm_instance(config=config)
|
||||||
repo.install_hooks()
|
repo.install_hooks(force=force_hooks_rebuild)
|
||||||
|
|
||||||
removed = []
|
removed = []
|
||||||
if remove_obsolete:
|
if remove_obsolete:
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,11 @@ ${h.secure_form(h.route_path('admin_settings_mapping_update'), request=request)}
|
||||||
<h3 class="panel-title">${_('Import New Groups or Repositories')}</h3>
|
<h3 class="panel-title">${_('Import New Groups or Repositories')}</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
|
|
||||||
|
<p>
|
||||||
|
${_('This function will scann all data under the current storage path location at')} <code>${c.storage_path}</code>
|
||||||
|
</p>
|
||||||
|
|
||||||
<div class="checkbox">
|
<div class="checkbox">
|
||||||
${h.checkbox('destroy',True)}
|
${h.checkbox('destroy',True)}
|
||||||
<label for="destroy">${_('Destroy old data')}</label>
|
<label for="destroy">${_('Destroy old data')}</label>
|
||||||
|
|
|
||||||
|
|
@ -358,7 +358,7 @@ class TestRepoContainer(object):
|
||||||
return Repository.get(self._repos[key])
|
return Repository.get(self._repos[key])
|
||||||
|
|
||||||
def _create_repo(self, dump_name, backend_alias, config):
|
def _create_repo(self, dump_name, backend_alias, config):
|
||||||
repo_name = '%s-%s' % (backend_alias, dump_name)
|
repo_name = f'{backend_alias}-{dump_name}'
|
||||||
backend = get_backend(backend_alias)
|
backend = get_backend(backend_alias)
|
||||||
dump_extractor = self.dump_extractors[backend_alias]
|
dump_extractor = self.dump_extractors[backend_alias]
|
||||||
repo_path = dump_extractor(dump_name, repo_name)
|
repo_path = dump_extractor(dump_name, repo_name)
|
||||||
|
|
|
||||||
|
|
@ -231,8 +231,6 @@ def platform_encodes_filenames():
|
||||||
return path_with_latin1 != read_path
|
return path_with_latin1 != read_path
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def test_repo2db_mapper_groups(repo_groups):
|
def test_repo2db_mapper_groups(repo_groups):
|
||||||
session = meta.Session()
|
session = meta.Session()
|
||||||
zombie_group, parent_group, child_group = repo_groups
|
zombie_group, parent_group, child_group = repo_groups
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue