Changeset - 8c781cb03412
[Not reviewed]
default
0 1 0
Mads Kiilerich (mads) - 5 years ago 2020-11-20 16:10:30
mads@kiilerich.com
Grafted from: 516bf0770096
repo-scan: log error and continue after failure creating a scanned repo

Continue after for example:
Exception: invalid repo name Foo
1 file changed with 16 insertions and 11 deletions:
0 comments (0 inline, 0 general)
kallithea/lib/utils.py
Show inline comments
 
@@ -392,59 +392,64 @@ def repo2db_mapper(initial_repo_dict, re
 
    from kallithea.model.scm import ScmModel
 
    sa = meta.Session()
 
    repo_model = RepoModel()
 
    if user is None:
 
        user = db.User.get_first_admin()
 
    added = []
 

	
 
    # creation defaults
 
    defs = db.Setting.get_default_repo_settings(strip_prefix=True)
 
    enable_statistics = defs.get('repo_enable_statistics')
 
    enable_downloads = defs.get('repo_enable_downloads')
 
    private = defs.get('repo_private')
 

	
 
    for name, repo in sorted(initial_repo_dict.items()):
 
        group = map_groups(name)
 
        db_repo = repo_model.get_by_repo_name(name)
 
        # found repo that is on filesystem not in Kallithea database
 
        if not db_repo:
 
            log.info('repository %s not found, creating now', name)
 
            added.append(name)
 
            desc = (repo.description
 
                    if repo.description != 'unknown'
 
                    else '%s repository' % name)
 

	
 
            new_repo = repo_model._create_repo(
 
                repo_name=name,
 
                repo_type=repo.alias,
 
                description=desc,
 
                repo_group=getattr(group, 'group_id', None),
 
                owner=user,
 
                enable_downloads=enable_downloads,
 
                enable_statistics=enable_statistics,
 
                private=private,
 
                state=db.Repository.STATE_CREATED
 
            )
 
            try:
 
                new_repo = repo_model._create_repo(
 
                    repo_name=name,
 
                    repo_type=repo.alias,
 
                    description=desc,
 
                    repo_group=getattr(group, 'group_id', None),
 
                    owner=user,
 
                    enable_downloads=enable_downloads,
 
                    enable_statistics=enable_statistics,
 
                    private=private,
 
                    state=db.Repository.STATE_CREATED
 
                )
 
            except Exception as e:
 
                log.error('error creating %r: %s: %s', name, type(e).__name__, e)
 
                sa.rollback()
 
                continue
 
            sa.commit()
 
            # we added that repo just now, and make sure it has githook
 
            # installed, and updated server info
 
            if new_repo.repo_type == 'git':
 
                git_repo = new_repo.scm_instance
 
                ScmModel().install_git_hooks(git_repo)
 
                # update repository server-info
 
                log.debug('Running update server info')
 
                git_repo._update_server_info()
 
            new_repo.update_changeset_cache()
 
        elif install_git_hooks or overwrite_git_hooks:
 
            if db_repo.repo_type == 'git':
 
                ScmModel().install_git_hooks(db_repo.scm_instance, force=overwrite_git_hooks)
 

	
 
    removed = []
 
    # remove from database those repositories that are not in the filesystem
 
    for repo in sa.query(db.Repository).all():
 
        if repo.repo_name not in initial_repo_dict:
 
            if remove_obsolete:
 
                log.debug("Removing non-existing repository found in db `%s`",
 
                          repo.repo_name)
 
                try:
 
                    RepoModel().delete(repo, forks='detach', fs_remove=False)
 
                    sa.commit()
0 comments (0 inline, 0 general)