diff --git a/pagure/lib/git.py b/pagure/lib/git.py index b722988..f47aa34 100644 --- a/pagure/lib/git.py +++ b/pagure/lib/git.py @@ -1515,3 +1515,25 @@ def log_commits_to_db(session, project, commits, gitdir): date_created=date_created.datetime ) session.add(log) + + +def reinit_git(project, repofolder): + ''' Delete and recreate a git folder + :args project: SQLAlchemy object of the project + :args folder: The folder which contains the git repos + like TICKETS_FOLDER for tickets and REQUESTS_FOLDER for + pull requests + ''' + + repo_path = os.path.join(repofolder, project.path) + if not os.path.exists(repo_path): + return + + # delete that repo + shutil.rmtree(repo_path) + + # create it again + pygit2.init_repository( + repo_path, bare=True, + mode=pygit2.C.GIT_REPOSITORY_INIT_SHARED_GROUP + ) diff --git a/pagure/ui/repo.py b/pagure/ui/repo.py index e4ab560..cb5be2f 100644 --- a/pagure/ui/repo.py +++ b/pagure/ui/repo.py @@ -1919,6 +1919,14 @@ def regenerate_git(repo, username=None, namespace=None): form = pagure.forms.ConfirmationForm() if form.validate_on_submit(): if regenerate.lower() == 'requests': + + # delete the requests repo and reinit + # in case there are no requests + if len(repo.requests) == 0: + pagure.lib.git.reinit_git( + project=repo, + repofolder=APP.config['REQUESTS_FOLDER'] + ) for request in repo.requests: pagure.lib.git.update_git( request, repo=repo, @@ -1928,6 +1936,14 @@ def regenerate_git(repo, username=None, namespace=None): regenerate.lower() == 'tickets' and repo.settings.get('issue_tracker') and pagure.APP.config.get('ENABLE_TICKETS')): + + # delete the ticket repo and reinit + # in case there are no tickets + if len(repo.issues) == 0: + pagure.lib.git.reinit_git( + project=repo, + repofolder=APP.config['TICKETS_FOLDER'] + ) for ticket in repo.issues: pagure.lib.git.update_git( ticket, repo=repo,