From d04df25df8bc2500d8e6965c464ebd1cb2bb966f Mon Sep 17 00:00:00 2001 From: Vivek Anand Date: Feb 09 2017 16:51:20 +0000 Subject: [PATCH 1/5] we now store private tickets in git, so allow regenerating them Signed-off-by: Vivek Anand --- diff --git a/pagure/ui/repo.py b/pagure/ui/repo.py index 6713176..a65ecd3 100644 --- a/pagure/ui/repo.py +++ b/pagure/ui/repo.py @@ -1926,9 +1926,6 @@ def regenerate_git(repo, username=None, namespace=None): flask.flash('Requests git repo updated') elif regenerate.lower() == 'tickets': for ticket in repo.issues: - # Do not store private issues in the git - if ticket.private: - continue pagure.lib.git.update_git( ticket, repo=repo, repofolder=APP.config['TICKETS_FOLDER']) From 6bdb8f9ff3041b3331c2fe3ccbe63535ea2eb214 Mon Sep 17 00:00:00 2001 From: Vivek Anand Date: Feb 09 2017 16:51:20 +0000 Subject: [PATCH 2/5] Check if tickets enabled on instance and on repo before regenerating the tickets repo Signed-off-by: Vivek Anand --- diff --git a/pagure/ui/repo.py b/pagure/ui/repo.py index a65ecd3..e4ab560 100644 --- a/pagure/ui/repo.py +++ b/pagure/ui/repo.py @@ -1924,7 +1924,10 @@ def regenerate_git(repo, username=None, namespace=None): request, repo=repo, repofolder=APP.config['REQUESTS_FOLDER']) flask.flash('Requests git repo updated') - elif regenerate.lower() == 'tickets': + elif ( + regenerate.lower() == 'tickets' and + repo.settings.get('issue_tracker') and + pagure.APP.config.get('ENABLE_TICKETS')): for ticket in repo.issues: pagure.lib.git.update_git( ticket, repo=repo, From 8ced04ed7ffbc2e342611e4a7aebd7f4bf7fa7d4 Mon Sep 17 00:00:00 2001 From: Vivek Anand Date: Feb 09 2017 16:51:20 +0000 Subject: [PATCH 3/5] Recreate the git repos before regenerating them from database Signed-off-by: Vivek Anand --- 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, From 3b70918cf15185a75158a95a22076c771aa88822 Mon Sep 17 00:00:00 2001 From: Vivek Anand Date: Feb 09 2017 16:51:20 +0000 Subject: [PATCH 4/5] Fix indentation in ui/repo.py Signed-off-by: Vivek Anand --- diff --git a/pagure/ui/repo.py b/pagure/ui/repo.py index cb5be2f..cf265d9 100644 --- a/pagure/ui/repo.py +++ b/pagure/ui/repo.py @@ -1933,9 +1933,9 @@ def regenerate_git(repo, username=None, namespace=None): repofolder=APP.config['REQUESTS_FOLDER']) flask.flash('Requests git repo updated') elif ( - regenerate.lower() == 'tickets' and - repo.settings.get('issue_tracker') and - pagure.APP.config.get('ENABLE_TICKETS')): + 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 From b8f58206f101dd3cc228a3860624b0f3a086e151 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Feb 09 2017 17:55:35 +0000 Subject: [PATCH 5/5] Adjust the logic around re-generating the backend git repos --- diff --git a/pagure/ui/repo.py b/pagure/ui/repo.py index cf265d9..c3d672a 100644 --- a/pagure/ui/repo.py +++ b/pagure/ui/repo.py @@ -1918,7 +1918,9 @@ def regenerate_git(repo, username=None, namespace=None): form = pagure.forms.ConfirmationForm() if form.validate_on_submit(): - if regenerate.lower() == 'requests': + if regenerate.lower() == 'requests'\ + and repo.settings.get('pull_requests'): + # delete the requests repo and reinit # in case there are no requests @@ -1932,10 +1934,10 @@ def regenerate_git(repo, username=None, namespace=None): request, repo=repo, repofolder=APP.config['REQUESTS_FOLDER']) flask.flash('Requests git repo updated') - elif ( - regenerate.lower() == 'tickets' and - repo.settings.get('issue_tracker') and - pagure.APP.config.get('ENABLE_TICKETS')): + + elif 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