diff --git a/rhodecode/api/tests/test_update_repo.py b/rhodecode/api/tests/test_update_repo.py --- a/rhodecode/api/tests/test_update_repo.py +++ b/rhodecode/api/tests/test_update_repo.py @@ -116,7 +116,8 @@ class TestApiUpdateRepo(object): master_repo = backend.create_repo() repo = backend.create_repo() updates = { - 'fork_of': master_repo.repo_name + 'fork_of': master_repo.repo_name, + 'fork_of_id': master_repo.repo_id } expected_api_data = repo.get_api_data(include_secrets=True) expected_api_data.update(updates) @@ -131,6 +132,7 @@ class TestApiUpdateRepo(object): assert_ok(id_, expected, given=response.body) result = response.json['result']['repository'] assert result['fork_of'] == master_repo.repo_name + assert result['fork_of_id'] == master_repo.repo_id def test_api_update_repo_fork_of_not_found(self, backend): master_repo_name = 'fake-parent-repo' diff --git a/rhodecode/lib/audit_logger.py b/rhodecode/lib/audit_logger.py --- a/rhodecode/lib/audit_logger.py +++ b/rhodecode/lib/audit_logger.py @@ -50,6 +50,7 @@ ACTIONS = { 'user.edit.password_reset.disabled': {}, 'repo.create': {'data': {}}, + 'repo.fork': {'data': {}}, 'repo.edit': {'old_data': {}}, 'repo.edit.permissions': {}, 'repo.delete': {'old_data': {}}, diff --git a/rhodecode/lib/celerylib/tasks.py b/rhodecode/lib/celerylib/tasks.py --- a/rhodecode/lib/celerylib/tasks.py +++ b/rhodecode/lib/celerylib/tasks.py @@ -31,12 +31,13 @@ from celery.task import task from pylons import config import rhodecode +from rhodecode.lib import audit_logger from rhodecode.lib.celerylib import ( run_task, dbsession, __get_lockkey, LockHeld, DaemonLock, get_session, vcsconnection, RhodecodeCeleryTask) from rhodecode.lib.hooks_base import log_create_repository from rhodecode.lib.rcmail.smtp_mailer import SmtpMailer -from rhodecode.lib.utils import add_cache, action_logger +from rhodecode.lib.utils import add_cache from rhodecode.lib.utils2 import safe_int, str2bool from rhodecode.model.db import Repository, User @@ -141,7 +142,7 @@ def create_repo(form_data, cur_user): 'enable_downloads', defs.get('repo_enable_downloads')) try: - RepoModel(DBS)._create_repo( + repo = RepoModel(DBS)._create_repo( repo_name=repo_name_full, repo_type=repo_type, description=description, @@ -158,8 +159,6 @@ def create_repo(form_data, cur_user): enable_downloads=enable_downloads, state=state ) - - action_logger(cur_user, 'user_created_repo', repo_name_full, '', DBS) DBS.commit() # now create this repo on Filesystem @@ -177,6 +176,15 @@ def create_repo(form_data, cur_user): # set new created state repo.set_state(Repository.STATE_CREATED) + repo_id = repo.repo_id + repo_data = repo.get_api_data() + + audit_logger.store( + action='repo.create', + action_data={'data': repo_data}, + user=cur_user, + repo=audit_logger.RepoWrap(repo_name=repo_name, repo_id=repo_id)) + DBS.commit() except Exception: log.warning('Exception occurred when creating repository, ' @@ -240,8 +248,7 @@ def create_repo_fork(form_data, cur_user fork_of=fork_of, copy_fork_permissions=copy_fork_permissions ) - action_logger(cur_user, 'user_forked_repo:%s' % repo_name_full, - fork_of.repo_name, '', DBS) + DBS.commit() base_path = Repository.base_path() @@ -264,6 +271,15 @@ def create_repo_fork(form_data, cur_user # set new created state repo.set_state(Repository.STATE_CREATED) + + repo_id = repo.repo_id + repo_data = repo.get_api_data() + audit_logger.store( + action='repo.fork', + action_data={'data': repo_data}, + user=cur_user, + repo=audit_logger.RepoWrap(repo_name=repo_name, repo_id=repo_id)) + DBS.commit() except Exception as e: log.warning('Exception %s occurred when forking repository, ' diff --git a/rhodecode/model/db.py b/rhodecode/model/db.py --- a/rhodecode/model/db.py +++ b/rhodecode/model/db.py @@ -1782,6 +1782,7 @@ class Repository(Base, BaseModel): 'landing_rev': repo.landing_rev, 'owner': repo.user.username, 'fork_of': repo.fork.repo_name if repo.fork else None, + 'fork_of_id': repo.fork.repo_id if repo.fork else None, 'enable_statistics': repo.enable_statistics, 'enable_locking': repo.enable_locking, 'enable_downloads': repo.enable_downloads,