feature(repo): added ability to bootstrap repositories on creation
This commit is contained in:
parent
6f780dccb1
commit
ee52770fff
4 changed files with 176 additions and 30 deletions
|
|
@ -297,6 +297,9 @@ def RepoForm(localizer, edit=False, old_data=None, repo_groups=None, allow_disab
|
|||
repo_enable_downloads = v.StringBoolean(if_missing=False)
|
||||
repo_enable_locking = v.StringBoolean(if_missing=False)
|
||||
|
||||
repo_bootstrap_readme = v.StringBoolean(if_missing=False)
|
||||
repo_bootstrap_svn_branch_struct = v.StringBoolean(if_missing=False)
|
||||
|
||||
if edit:
|
||||
# this is repo owner
|
||||
user = All(v.UnicodeString(not_empty=True), v.ValidRepoUser(localizer, allow_disabled))
|
||||
|
|
|
|||
|
|
@ -27,7 +27,6 @@ from dataclasses import dataclass, field
|
|||
from enum import StrEnum, auto
|
||||
|
||||
from sqlalchemy.orm import aliased
|
||||
from zope.cachedescriptors.property import Lazy as LazyProperty
|
||||
|
||||
from rhodecode import events
|
||||
from rhodecode.lib.auth import HasUserGroupPermissionAny
|
||||
|
|
@ -47,6 +46,7 @@ from rhodecode.lib.utils2 import (
|
|||
action_logger_generic,
|
||||
)
|
||||
from rhodecode.lib.vcs.backends import get_backend
|
||||
from rhodecode.lib.vcs.backends.base import EmptyCommit
|
||||
from rhodecode.lib.vcs.nodes import NodeKind
|
||||
from rhodecode.model import BaseModel
|
||||
from rhodecode.model.db import (
|
||||
|
|
@ -677,6 +677,48 @@ class RepoModel(BaseModel):
|
|||
|
||||
return run_task(tasks.create_repo, form_data, cur_user)
|
||||
|
||||
def bootstrap(self, db_repo, db_user, readme=None, svn_struct=None):
|
||||
"""
|
||||
Bootstrap new created repo with some files/structure
|
||||
"""
|
||||
from rhodecode.model.scm import ScmModel
|
||||
from rhodecode.model.settings import SettingsModel
|
||||
|
||||
_branch_name, _sha_commit_id, is_head = db_repo.landing_ref_name, "", True
|
||||
author = db_user.full_contact
|
||||
repo_name = db_repo.repo_name
|
||||
message = "Bootstrap: created initial project files"
|
||||
commit = EmptyCommit(alias=db_repo.repo_type, branch=_branch_name)
|
||||
|
||||
rc_config = SettingsModel().get_all_settings(cache=True, from_request=False)
|
||||
default_renderer = rc_config.get("rhodecode_markup_renderer", "rst")
|
||||
|
||||
nodes = {}
|
||||
if readme:
|
||||
if default_renderer == "markdown":
|
||||
ext = "md"
|
||||
readme_content = f"# {repo_name}\n"
|
||||
elif default_renderer == "rst":
|
||||
ext = "rst"
|
||||
readme_content = f"{repo_name}\n" + "-" * len(repo_name) + "\n"
|
||||
else:
|
||||
ext = ".txt"
|
||||
readme_content = f"{repo_name}\n"
|
||||
|
||||
nodes[safe_bytes(f"readme.{ext}")] = {"content": safe_bytes(readme_content)}
|
||||
|
||||
if nodes:
|
||||
commit = ScmModel().create_nodes(
|
||||
user=db_user.user_id,
|
||||
repo=db_repo,
|
||||
message=message,
|
||||
nodes=nodes,
|
||||
parent_commit=commit,
|
||||
author=author,
|
||||
)
|
||||
return commit
|
||||
return None
|
||||
|
||||
def update_permissions(
|
||||
self, repo, perm_additions=None, perm_updates=None, perm_deletions=None, check_perms=True, cur_user=None
|
||||
):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue