From 42df122cd5439f3768fa819e58539ecb25623ef8 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Jul 11 2017 11:12:39 +0000 Subject: [PATCH 1/6] Support configuration where there are no docs folder and no tickets folder Those cases are basically for instances not wanting to run the doc server or enable issue tracking globally, so let's not create the git repositories. Signed-off-by: Pierre-Yves Chibon --- diff --git a/pagure/lib/tasks.py b/pagure/lib/tasks.py index 38cd7f3..b273aed 100644 --- a/pagure/lib/tasks.py +++ b/pagure/lib/tasks.py @@ -160,37 +160,43 @@ def create_project(username, namespace, name, add_readme, with open(http_clone_file, 'w') as stream: pass - docrepo = os.path.join(APP.config['DOCS_FOLDER'], project.path) - if os.path.exists(docrepo): - if not ignore_existing_repo: - shutil.rmtree(gitrepo) - raise pagure.exceptions.RepoExistsException( - 'The docs repo "%s" already exists' % project.path - ) - else: - pygit2.init_repository(docrepo, bare=True) - - ticketrepo = os.path.join(APP.config['TICKETS_FOLDER'], project.path) - if os.path.exists(ticketrepo): - if not ignore_existing_repo: - shutil.rmtree(gitrepo) - shutil.rmtree(docrepo) - raise pagure.exceptions.RepoExistsException( - 'The tickets repo "%s" already exists' % project.path - ) - else: - pygit2.init_repository( - ticketrepo, bare=True, - mode=pygit2.C.GIT_REPOSITORY_INIT_SHARED_GROUP) - - requestrepo = os.path.join(APP.config['REQUESTS_FOLDER'], project.path) + if APP.config['DOCS_FOLDER']: + docrepo = os.path.join(APP.config['DOCS_FOLDER'], project.path) + if os.path.exists(docrepo): + if not ignore_existing_repo: + shutil.rmtree(gitrepo) + raise pagure.exceptions.RepoExistsException( + 'The docs repo "%s" already exists' % project.path + ) + else: + pygit2.init_repository(docrepo, bare=True) + + if APP.config['TICKETS_FOLDER']: + ticketrepo = os.path.join( + APP.config['TICKETS_FOLDER'], project.path) + if os.path.exists(ticketrepo): + if not ignore_existing_repo: + shutil.rmtree(gitrepo) + shutil.rmtree(docrepo) + raise pagure.exceptions.RepoExistsException( + 'The tickets repo "%s" already exists' % + project.path + ) + else: + pygit2.init_repository( + ticketrepo, bare=True, + mode=pygit2.C.GIT_REPOSITORY_INIT_SHARED_GROUP) + + requestrepo = os.path.join( + APP.config['REQUESTS_FOLDER'], project.path) if os.path.exists(requestrepo): if not ignore_existing_repo: shutil.rmtree(gitrepo) shutil.rmtree(docrepo) shutil.rmtree(ticketrepo) raise pagure.exceptions.RepoExistsException( - 'The requests repo "%s" already exists' % project.path + 'The requests repo "%s" already exists' % + project.path ) else: pygit2.init_repository( @@ -348,24 +354,28 @@ def fork(name, namespace, user_owner, user_forker, editbranch, editfile): with open(http_clone_file, 'w'): pass - docrepo = os.path.join(APP.config['DOCS_FOLDER'], repo_to.path) - if os.path.exists(docrepo): - shutil.rmtree(forkreponame) - raise pagure.exceptions.RepoExistsException( - 'The docs "%s" already exists' % repo_to.path - ) - pygit2.init_repository(docrepo, bare=True) + # Only fork the doc folder if the pagure instance supports the doc + # service/server. + if APP.config.get('DOCS_FOLDER'): + docrepo = os.path.join(APP.config['DOCS_FOLDER'], repo_to.path) + if os.path.exists(docrepo): + shutil.rmtree(forkreponame) + raise pagure.exceptions.RepoExistsException( + 'The docs "%s" already exists' % repo_to.path + ) + pygit2.init_repository(docrepo, bare=True) - ticketrepo = os.path.join(APP.config['TICKETS_FOLDER'], repo_to.path) - if os.path.exists(ticketrepo): - shutil.rmtree(forkreponame) - shutil.rmtree(docrepo) - raise pagure.exceptions.RepoExistsException( - 'The tickets repo "%s" already exists' % repo_to.path - ) - pygit2.init_repository( - ticketrepo, bare=True, - mode=pygit2.C.GIT_REPOSITORY_INIT_SHARED_GROUP) + if APP.config.get('TICKETS_FOLDER'): + ticketrepo = os.path.join(APP.config['TICKETS_FOLDER'], repo_to.path) + if os.path.exists(ticketrepo): + shutil.rmtree(forkreponame) + shutil.rmtree(docrepo) + raise pagure.exceptions.RepoExistsException( + 'The tickets repo "%s" already exists' % repo_to.path + ) + pygit2.init_repository( + ticketrepo, bare=True, + mode=pygit2.C.GIT_REPOSITORY_INIT_SHARED_GROUP) requestrepo = os.path.join(APP.config['REQUESTS_FOLDER'], repo_to.path) if os.path.exists(requestrepo): From d012eed6a8d7e5b01bfa6e9db0a2cf90b74d4518 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Jul 12 2017 13:07:01 +0000 Subject: [PATCH 2/6] Fix retrieving a group only when there was a group specified Signed-off-by: Pierre-Yves Chibon --- diff --git a/pagure/lib/tasks.py b/pagure/lib/tasks.py index b273aed..4d9ebdc 100644 --- a/pagure/lib/tasks.py +++ b/pagure/lib/tasks.py @@ -93,7 +93,9 @@ def generate_gitolite_acls(namespace=None, name=None, user=None, group=None): APP.config['GITOLITE_BACKEND']) _log.debug('Got helper: %s', helper) - group_obj = pagure.lib.search_groups(session, group_name=group) or None + group_obj = None + if group: + group_obj = pagure.lib.search_groups(session, group_name=group) _log.debug( 'Calling helper: %s with arg: project=%s, group=%s', helper, project, group_obj) From 4a31fb3c67b0ce8096f455b0e9a602ece212e5b0 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Jul 12 2017 13:07:25 +0000 Subject: [PATCH 3/6] Send the group name not the group object to the task Signed-off-by: Pierre-Yves Chibon --- diff --git a/pagure/ui/groups.py b/pagure/ui/groups.py index 0691ce4..54b3fce 100644 --- a/pagure/ui/groups.py +++ b/pagure/ui/groups.py @@ -84,7 +84,8 @@ def view_group(group): is_admin=pagure.is_admin(), ) pagure.SESSION.commit() - pagure.lib.git.generate_gitolite_acls(project=None, group=group) + pagure.lib.git.generate_gitolite_acls( + project=None, group=group.group_name) flask.flash(msg) except pagure.exceptions.PagureException as err: pagure.SESSION.rollback() From 7614955799225a91a838cd32cf37be1b2f38532c Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Jul 12 2017 13:07:41 +0000 Subject: [PATCH 4/6] Typo fixes in the docstrings Signed-off-by: Pierre-Yves Chibon --- diff --git a/pagure/ui/repo.py b/pagure/ui/repo.py index 6252161..9d6227d 100644 --- a/pagure/ui/repo.py +++ b/pagure/ui/repo.py @@ -1678,7 +1678,7 @@ def add_deploykey(repo, username=None, namespace=None): '/fork////adduser', methods=('GET', 'POST')) @login_required def add_user(repo, username=None, namespace=None): - """ Add the specified user from the project. + """ Add the specified user to the project. """ if not pagure.APP.config.get('ENABLE_USER_MNGT', True): @@ -1821,7 +1821,7 @@ def remove_group_project(repo, groupid, username=None, namespace=None): '/fork////addgroup', methods=('GET', 'POST')) @login_required def add_group_project(repo, username=None, namespace=None): - """ Add the specified group from the project. + """ Add the specified group to the project. """ if not pagure.APP.config.get('ENABLE_USER_MNGT', True): From 10fdb943d7bb55a49c4ab67dbc078201d7f3f60a Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Jul 13 2017 10:21:12 +0000 Subject: [PATCH 5/6] Show all the projects a group has access to Before that it was showing only projects where the group had admin access on. Signed-off-by: Pierre-Yves Chibon --- diff --git a/pagure/templates/group_info.html b/pagure/templates/group_info.html index 27c1c13..7f806b0 100644 --- a/pagure/templates/group_info.html +++ b/pagure/templates/group_info.html @@ -55,8 +55,7 @@
- {{ render_repos_as_card( - group.projects_admin_groups, group.projects_admin_groups|count, 'Projects') }} + {{ render_repos_as_card(group.projects, group.projects|count, 'Projects') }}
From b31a794dafedff0b8f6711c4e4670792903e0c5e Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Jul 13 2017 10:21:19 +0000 Subject: [PATCH 6/6] Add unit-tests ensuring generate_acls is called with group=None This to ensure that when group=None, not all the groups are retrieved but that group=None is kept and passed on. Signed-off-by: Pierre-Yves Chibon --- diff --git a/tests/test_pagure_lib_gitolite_config.py b/tests/test_pagure_lib_gitolite_config.py index 7219200..e07de7f 100644 --- a/tests/test_pagure_lib_gitolite_config.py +++ b/tests/test_pagure_lib_gitolite_config.py @@ -720,6 +720,22 @@ repo requests/test #print data self.assertEqual(data, exp) + @patch('pagure.lib.git_auth.get_git_auth_helper') + def test_task_generate_gitolite_acls_one_group(self, get_helper): + """ Test the generate_gitolite_acls task to ensure if group is None + then None is passed to the helper. """ + helper = MagicMock() + get_helper.return_value = helper + pagure.lib.SESSIONMAKER = self.session.session_factory + + pagure.lib.tasks.generate_gitolite_acls( + namespace=None, name='test', user=None, group=None) + + get_helper.assert_called_with('gitolite3') + args = helper.generate_acls.call_args + self.assertIsNone(args[1].get('group')) + self.assertEqual(args[1].get('project').fullname, 'test') + if __name__ == '__main__': unittest.main(verbosity=2)