Files @ ff4fc4b0e825
Branch filter:

Location: kallithea/docs/usage/locking.rst

ff4fc4b0e825 1.1 KiB text/prs.fallenstein.rst Show Annotation Show as Raw Download as Raw
Marc Abramowitz
tests: Destroy user_user_group 'perms_group_1'

This doesn't seem to be a problem when running `nosetests`, but with `py.test` for some reason it becomes a problem:

$ py.test kallithea/tests/models/test_user_permissions_on_repo_groups.py kallithea/tests/models/test_user_group_permissions_on_repo_groups.py --maxfail=1 --tb=short
...
build/bdist.macosx-10.6-intel/egg/sqlalchemy/engine/default.py:331: in do_execute
cursor.execute(statement, parameters)
E IntegrityError: (IntegrityError) UNIQUE constraint failed: users_groups.users_group_name
u'INSERT INTO users_groups (users_group_name, user_group_description, users_group_active, users_group_inherit_default_permissions, user_id, created_on, group_data) VALUES (?, ?, ?, ?, ?, ?, ?)' ('perms_group_1', 'DESC', 1, 1, 2, '2015-04-08 17:38:03.457963', None)
...
.. _locking:

==================
Repository locking
==================

Kallithea has a ``repository locking`` feature, disabled by default. When
enabled, every initial clone and every pull gives users (with write permission)
the exclusive right to do a push.

When repository locking is enabled, repositories get a ``locked`` state that
can be true or false.  The hg/git commands ``hg/git clone``, ``hg/git pull``,
and ``hg/git push`` influence this state:

- A ``clone`` or ``pull`` action on the repository locks it (``locked=true``)
  if the user has write/admin permissions on this repository.

- Kallithea will remember the user who locked the repository so only this
  specific user can unlock the repo (``locked=false``) by performing a ``push``
  command.

- Every other command on a locked repository from this user and every command
  from any other user will result in an HTTP return code 423 (Locked).
  Additionally, the HTTP error includes the <user> that locked the repository
  (e.g., “repository <repo> locked by user <user>”).

Each repository can be manually unlocked by an administrator from the
repository settings menu.