roundabout,
created on Monday, 3 June 2024, 07:05:58 (1717398358),
received on Wednesday, 31 July 2024, 06:54:49 (1722408889)
Author identity: vlad <vlad.muntoiu@gmail.com>
2793c055bee6f4c03095a8117a5add06902a10cc
celery_tasks.py
@@ -8,6 +8,8 @@ from celery import shared_task
from app import db, _ from smtplib import SMTP from celery.utils.log import get_task_logger from sqlalchemy.orm import make_transient from datetime import datetime@shared_task(ignore_result=False)
@@ -34,7 +36,7 @@ def send_notification(user_notification_id):
@shared_task(ignore_result=False) def merge_heads(head_route, head_branch, base_route, base_branch, simulate=True): from models import Repofrom models import Repo, Commitserver_repo_location = os.path.join(config.REPOS_PATH, base_route.lstrip("/")) if not os.path.isdir(server_repo_location): raise FileNotFoundError(f"Repo {server_repo_location} not found, cannot merge.")
@@ -66,6 +68,8 @@ def merge_heads(head_route, head_branch, base_route, base_branch, simulate=True)
part_out, part_err = common.git_command(server_repo_location, b"", "checkout", f"{base_branch}", return_err=True) out += part_out err += part_err new_commits = common.git_command(server_repo_location, b"", "log", "--oneline", f"{base_branch}..{head_branch}")if simulate: part_out, part_err, merge_exit = common.git_command(server_repo_location, b"", "merge", "--allow-unrelated-histories", "--no-commit", "--no-ff", f"NEW/{head_branch}", return_err=True, return_exit=True)
@@ -83,6 +87,18 @@ def merge_heads(head_route, head_branch, base_route, base_branch, simulate=True)
if simulate: # Undo the merge. common.git_command(server_repo_location, b"", "merge", "--abort") else: # Copy the commits rows from the head repo to the base repo for commit in new_commits: commit_data = Commit.query.filter_by(repo_name=head_route, sha=commit.split()) db.session.expunge(commit_data) make_transient(commit_data) commit_data.repo_name = base_route commit_data.identifier = f"{base_route}/{commit_data.sha}" commit_data.receive_date = datetime.now() db.session.add(commit_data)return "merge_simulator" if simulate else "merge", out, err, head_route, head_branch, base_route, base_branch, merge_exit