104 lines
No EOL
3.4 KiB
ReStructuredText
104 lines
No EOL
3.4 KiB
ReStructuredText
.. _repo-admin-tasks:
|
|
|
|
Common Admin Tasks for Repositories
|
|
-----------------------------------
|
|
|
|
|
|
Manually Force Delete Repository
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
In case of attached forks or pull-requests repositories should be archived.
|
|
Here is how to force delete a repository and remove all dependent objects
|
|
|
|
|
|
.. code-block:: bash
|
|
:dedent: 1
|
|
|
|
# starts the ishell interactive prompt
|
|
$ rccontrol ishell enterprise-1
|
|
|
|
.. code-block:: python
|
|
:dedent: 1
|
|
|
|
In [4]: from rhodecode.model.repo import RepoModel
|
|
In [3]: repo = Repository.get_by_repo_name('test_repos/repo_with_prs')
|
|
In [5]: RepoModel().delete(repo, forks='detach', pull_requests='delete')
|
|
In [6]: Session().commit()
|
|
|
|
|
|
Below is a fully automated example to force delete repositories reading from a
|
|
file where each line is a repository name. This can be executed via simple CLI command
|
|
without entering the interactive shell.
|
|
|
|
Save the below content as a file named `repo_delete_task.py`
|
|
|
|
|
|
.. code-block:: python
|
|
:dedent: 1
|
|
|
|
from rhodecode.model.db import *
|
|
from rhodecode.model.repo import RepoModel
|
|
with open('delete_repos.txt', 'rb') as f:
|
|
# read all lines from file
|
|
repos = f.readlines()
|
|
for repo_name in repos:
|
|
repo_name = repo_name.strip() # cleanup the name just in case
|
|
repo = Repository.get_by_repo_name(repo_name)
|
|
if not repo:
|
|
raise Exception('Repo with name {} not found'.format(repo_name))
|
|
RepoModel().delete(repo, forks='detach', pull_requests='delete')
|
|
Session().commit()
|
|
print('Removed repository {}'.format(repo_name))
|
|
|
|
|
|
The code above will read the names of repositories from a file called `delete_repos.txt`
|
|
Each lines should represent a single name e.g `repo_name_1` or `repo_group/repo_name_2`
|
|
|
|
Run this line from CLI to execute the code from the `repo_delete_task.py` file and
|
|
exit the ishell after the execution::
|
|
|
|
echo "%run repo_delete_task.py" | rccontrol ishell enterprise-1
|
|
|
|
|
|
|
|
|
|
Bulk edit permissions for all repositories or groups
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
In case when a permissions should be applied in bulk here are two ways to apply
|
|
the permissions onto *all* repositories and/or repository groups.
|
|
|
|
1) Start by running the interactive ishell interface
|
|
|
|
.. code-block:: bash
|
|
:dedent: 1
|
|
|
|
# starts the ishell interactive prompt
|
|
$ rccontrol ishell enterprise-1
|
|
|
|
|
|
2a) Add user called 'admin' into all repositories with write permission.
|
|
Permissions can be also `repository.read`, `repository.admin`, `repository.none`
|
|
|
|
.. code-block:: python
|
|
:dedent: 1
|
|
|
|
In [1]: from rhodecode.model.repo import RepoModel
|
|
In [2]: user = User.get_by_username('admin')
|
|
In [3]: permission_name = 'repository.write'
|
|
In [4]: for repo in Repository.get_all():
|
|
...: RepoModel().grant_user_permission(repo, user, permission_name)
|
|
...: Session().commit()
|
|
|
|
2b) Add user called 'admin' into all repository groups with write permission.
|
|
Permissions can be also can be `group.read`, `group.admin`, `group.none`
|
|
|
|
.. code-block:: python
|
|
:dedent: 1
|
|
|
|
In [1]: from rhodecode.model.repo import RepoModel
|
|
In [2]: user = User.get_by_username('admin')
|
|
In [3]: permission_name = 'group.write'
|
|
In [4]: for repo_group in RepoGroup.get_all():
|
|
...: RepoGroupModel().grant_user_permission(repo_group, user, permission_name)
|
|
...: Session().commit() |