|
|
|
|
@@ -65,7 +65,7 @@ index 0000000..e69de29
|
|
|
|
|
print("Waiting for all expected review requests and approving them...")
|
|
|
|
|
# Expected reviewers based on manual-merge branch config and pkgA maintainership
|
|
|
|
|
expected_reviewers = {"usera", "userb", "ownerA", "ownerX", "ownerY"}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# ManualMergeOnly still requires regular reviews to be satisfied.
|
|
|
|
|
# We poll until all expected reviewers are requested, then approve them.
|
|
|
|
|
all_requested = False
|
|
|
|
|
@@ -73,7 +73,7 @@ index 0000000..e69de29
|
|
|
|
|
# Trigger approvals for whatever is already requested
|
|
|
|
|
gitea_env.approve_requested_reviews("mypool/pkgA", package_pr_number)
|
|
|
|
|
gitea_env.approve_requested_reviews("myproducts/mySLFO", project_pr_number)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Explicitly handle staging bot if it is requested or pending
|
|
|
|
|
prj_reviews = gitea_env.list_reviews("myproducts/mySLFO", project_pr_number)
|
|
|
|
|
if any(r["user"]["login"] == "autogits_obs_staging_bot" and r["state"] in ["REQUEST_REVIEW", "PENDING"] for r in prj_reviews):
|
|
|
|
|
@@ -83,7 +83,7 @@ index 0000000..e69de29
|
|
|
|
|
# Check if all expected reviewers have at least one review record (any state)
|
|
|
|
|
pkg_reviews = gitea_env.list_reviews("mypool/pkgA", package_pr_number)
|
|
|
|
|
current_reviewers = {r["user"]["login"] for r in pkg_reviews}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if expected_reviewers.issubset(current_reviewers):
|
|
|
|
|
# Also ensure they are all approved (not just requested)
|
|
|
|
|
approved_reviewers = {r["user"]["login"] for r in pkg_reviews if r["state"] == "APPROVED"}
|
|
|
|
|
@@ -94,13 +94,13 @@ index 0000000..e69de29
|
|
|
|
|
all_requested = True
|
|
|
|
|
print(f"All expected reviewers {expected_reviewers} and staging bot have approved.")
|
|
|
|
|
break
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pkg_details = gitea_env.get_pr_details("mypool/pkgA", package_pr_number)
|
|
|
|
|
prj_details = gitea_env.get_pr_details("myproducts/mySLFO", project_pr_number)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assert not pkg_details.get("merged"), "Package PR merged prematurely (ManualMergeOnly ignored?)"
|
|
|
|
|
assert not prj_details.get("merged"), "Project PR merged prematurely (ManualMergeOnly ignored?)"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
time.sleep(2)
|
|
|
|
|
|
|
|
|
|
assert all_requested, f"Timed out waiting for all expected reviewers {expected_reviewers} to approve. Current: {current_reviewers}"
|
|
|
|
|
@@ -114,25 +114,25 @@ index 0000000..e69de29
|
|
|
|
|
print("Polling for PR merge status...")
|
|
|
|
|
package_merged = False
|
|
|
|
|
project_merged = False
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for i in range(20): # Poll for up to 20 seconds
|
|
|
|
|
if not package_merged:
|
|
|
|
|
pkg_details = gitea_env.get_pr_details("mypool/pkgA", package_pr_number)
|
|
|
|
|
if pkg_details.get("merged"):
|
|
|
|
|
package_merged = True
|
|
|
|
|
print(f"Package PR mypool/pkgA#{package_pr_number} merged.")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if not project_merged:
|
|
|
|
|
prj_details = gitea_env.get_pr_details("myproducts/mySLFO", project_pr_number)
|
|
|
|
|
if prj_details.get("merged"):
|
|
|
|
|
project_merged = True
|
|
|
|
|
print(f"Project PR myproducts/mySLFO#{project_pr_number} merged.")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if package_merged and project_merged:
|
|
|
|
|
break
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
time.sleep(1)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assert package_merged, f"Package PR mypool/pkgA#{package_pr_number} was not merged after 'merge ok'."
|
|
|
|
|
assert project_merged, f"Project PR myproducts/mySLFO#{project_pr_number} was not merged after 'merge ok'."
|
|
|
|
|
print("Both PRs merged successfully after 'merge ok'.")
|
|
|
|
|
@@ -167,7 +167,7 @@ index 0000000..e69de29
|
|
|
|
|
print("Waiting for all expected review requests and approving them...")
|
|
|
|
|
# Expected reviewers based on manual-merge branch config and pkgA maintainership
|
|
|
|
|
expected_reviewers = {"usera", "userb", "ownerA", "ownerX", "ownerY"}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# ManualMergeOnly still requires regular reviews to be satisfied.
|
|
|
|
|
# We poll until all expected reviewers are requested, then approve them.
|
|
|
|
|
all_requested = False
|
|
|
|
|
@@ -175,7 +175,7 @@ index 0000000..e69de29
|
|
|
|
|
# Trigger approvals for whatever is already requested
|
|
|
|
|
gitea_env.approve_requested_reviews("mypool/pkgA", package_pr_number)
|
|
|
|
|
gitea_env.approve_requested_reviews("myproducts/mySLFO", project_pr_number)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Explicitly handle staging bot if it is requested or pending
|
|
|
|
|
prj_reviews = gitea_env.list_reviews("myproducts/mySLFO", project_pr_number)
|
|
|
|
|
if any(r["user"]["login"] == "autogits_obs_staging_bot" and r["state"] in ["REQUEST_REVIEW", "PENDING"] for r in prj_reviews):
|
|
|
|
|
@@ -185,7 +185,7 @@ index 0000000..e69de29
|
|
|
|
|
# Check if all expected reviewers have at least one review record (any state)
|
|
|
|
|
pkg_reviews = gitea_env.list_reviews("mypool/pkgA", package_pr_number)
|
|
|
|
|
current_reviewers = {r["user"]["login"] for r in pkg_reviews}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if expected_reviewers.issubset(current_reviewers):
|
|
|
|
|
# Also ensure they are all approved (not just requested)
|
|
|
|
|
approved_reviewers = {r["user"]["login"] for r in pkg_reviews if r["state"] == "APPROVED"}
|
|
|
|
|
@@ -196,13 +196,13 @@ index 0000000..e69de29
|
|
|
|
|
all_requested = True
|
|
|
|
|
print(f"All expected reviewers {expected_reviewers} and staging bot have approved.")
|
|
|
|
|
break
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pkg_details = gitea_env.get_pr_details("mypool/pkgA", package_pr_number)
|
|
|
|
|
prj_details = gitea_env.get_pr_details("myproducts/mySLFO", project_pr_number)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assert not pkg_details.get("merged"), "Package PR merged prematurely (ManualMergeOnly ignored?)"
|
|
|
|
|
assert not prj_details.get("merged"), "Project PR merged prematurely (ManualMergeOnly ignored?)"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
time.sleep(2)
|
|
|
|
|
|
|
|
|
|
assert all_requested, f"Timed out waiting for all expected reviewers {expected_reviewers} to approve. Current: {current_reviewers}"
|
|
|
|
|
@@ -216,29 +216,157 @@ index 0000000..e69de29
|
|
|
|
|
print("Polling for PR merge status...")
|
|
|
|
|
package_merged = False
|
|
|
|
|
project_merged = False
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for i in range(20): # Poll for up to 20 seconds
|
|
|
|
|
if not package_merged:
|
|
|
|
|
pkg_details = gitea_env.get_pr_details("mypool/pkgA", package_pr_number)
|
|
|
|
|
if pkg_details.get("merged"):
|
|
|
|
|
package_merged = True
|
|
|
|
|
print(f"Package PR mypool/pkgA#{package_pr_number} merged.")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if not project_merged:
|
|
|
|
|
prj_details = gitea_env.get_pr_details("myproducts/mySLFO", project_pr_number)
|
|
|
|
|
if prj_details.get("merged"):
|
|
|
|
|
project_merged = True
|
|
|
|
|
print(f"Project PR myproducts/mySLFO#{project_pr_number} merged.")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if package_merged and project_merged:
|
|
|
|
|
break
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
time.sleep(1)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assert not package_merged, f"Package PR mypool/pkgA#{package_pr_number} was merged after 'merge ok'."
|
|
|
|
|
assert not project_merged, f"Project PR myproducts/mySLFO#{project_pr_number} was merged after 'merge ok'."
|
|
|
|
|
print("Both PRs merged not after 'merge ok'.")
|
|
|
|
|
|
|
|
|
|
@pytest.mark.t004
|
|
|
|
|
def test_004_multiple_packages_manual_merge(manual_multipkg_merge_env, test_user_client, usera_client, ownerB_client, staging_bot_client):
|
|
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
Test scenario TC-MERGE-004:
|
|
|
|
|
|
|
|
|
|
1. Create a ProjectGit PR that references multiple PackageGit PRs with ManualMergeOnly set to true.
|
|
|
|
|
2. Ensure all mandatory reviews are completed on both project and package PRs.
|
|
|
|
|
3. Comment merge ok on each package PR from the account of a package maintainer.
|
|
|
|
|
4. Verify PR is merged only after merge ok is commented on all associated PackageGit PRs.
|
|
|
|
|
"""
|
|
|
|
|
gitea_env, test_full_repo_name, merge_branch_name = manual_multipkg_merge_env
|
|
|
|
|
|
|
|
|
|
# 1. Create a package PR
|
|
|
|
|
diff = """diff --git a/manual_merge_test.txt b/manual_merge_test.txt
|
|
|
|
|
new file mode 100644
|
|
|
|
|
index 0000000..e69de29
|
|
|
|
|
"""
|
|
|
|
|
print(f"--- Creating package PR in mypool/pkgA on branch {merge_branch_name} ---")
|
|
|
|
|
package_pr1 = test_user_client.create_gitea_pr("mypool/pkgA", diff, "Test Manual Merge Fixture (MultiPKG)", False, base_branch=merge_branch_name)
|
|
|
|
|
package_pr1_number = package_pr1["number"]
|
|
|
|
|
print(f"Created package PR mypool/pkgA#{package_pr1_number}")
|
|
|
|
|
|
|
|
|
|
print(f"--- Creating package PR in mypool/pkgB on branch {merge_branch_name} ---")
|
|
|
|
|
package_pr2 = test_user_client.create_gitea_pr("mypool/pkgB", diff, "Test Manual Merge Fixture (MultiPKG)", False, base_branch=merge_branch_name)
|
|
|
|
|
package_pr2_number = package_pr2["number"]
|
|
|
|
|
print(f"Created package PR mypool/pkgB#{package_pr2_number}")
|
|
|
|
|
|
|
|
|
|
project_pr_number = gitea_env.wait_for_project_pr("mypool/pkgA", package_pr1_number)
|
|
|
|
|
assert project_pr_number is not None, "Workflow bot did not create a project PR (pkgA)."
|
|
|
|
|
print(f"Found project PR: myproducts/mySLFO#{project_pr_number}")
|
|
|
|
|
|
|
|
|
|
project_pr_number = gitea_env.wait_for_project_pr("mypool/pkgB", package_pr2_number)
|
|
|
|
|
assert project_pr_number is not None, "Workflow bot did not create a project PR (pkgB)."
|
|
|
|
|
print(f"Found project PR: myproducts/mySLFO#{project_pr_number}")
|
|
|
|
|
|
|
|
|
|
# 3. Approve reviews and verify NOT merged
|
|
|
|
|
print("Waiting for all expected review requests and approving them...")
|
|
|
|
|
# Expected reviewers based on manual-merge branch config and pkgA maintainership
|
|
|
|
|
expected_reviewers = {"usera", "userb", "ownerA", "ownerX", "ownerY"}
|
|
|
|
|
|
|
|
|
|
# ManualMergeOnly still requires regular reviews to be satisfied.
|
|
|
|
|
# We poll until all expected reviewers are requested, then approve them.
|
|
|
|
|
all_requested = False
|
|
|
|
|
for _ in range(30):
|
|
|
|
|
# Trigger approvals for whatever is already requested
|
|
|
|
|
gitea_env.approve_requested_reviews("mypool/pkgA", package_pr1_number)
|
|
|
|
|
gitea_env.approve_requested_reviews("mypool/pkgB", package_pr2_number)
|
|
|
|
|
gitea_env.approve_requested_reviews("myproducts/mySLFO", project_pr_number)
|
|
|
|
|
|
|
|
|
|
# Explicitly handle staging bot if it is requested or pending
|
|
|
|
|
prj_reviews = gitea_env.list_reviews("myproducts/mySLFO", project_pr_number)
|
|
|
|
|
if any(r["user"]["login"] == "autogits_obs_staging_bot" and r["state"] in ["REQUEST_REVIEW", "PENDING"] for r in prj_reviews):
|
|
|
|
|
print("Staging bot has a pending/requested review. Approving...")
|
|
|
|
|
staging_bot_client.create_review("myproducts/mySLFO", project_pr_number, event="APPROVED", body="Staging bot approves")
|
|
|
|
|
|
|
|
|
|
# Check if all expected reviewers have at least one review record (any state)
|
|
|
|
|
pkg_reviews = gitea_env.list_reviews("mypool/pkgA", package_pr1_number)
|
|
|
|
|
current_reviewers = {r["user"]["login"] for r in pkg_reviews}
|
|
|
|
|
|
|
|
|
|
pkg_reviews = gitea_env.list_reviews("mypool/pkgB", package_pr2_number)
|
|
|
|
|
current_reviewers = {r["user"]["login"] for r in pkg_reviews}
|
|
|
|
|
|
|
|
|
|
if expected_reviewers.issubset(current_reviewers):
|
|
|
|
|
# Also ensure they are all approved (not just requested)
|
|
|
|
|
approved_reviewers = {r["user"]["login"] for r in pkg_reviews if r["state"] == "APPROVED"}
|
|
|
|
|
if expected_reviewers.issubset(approved_reviewers):
|
|
|
|
|
# And check project PR for bot approval
|
|
|
|
|
prj_approved = any(r["user"]["login"] == "autogits_obs_staging_bot" and r["state"] == "APPROVED" for r in prj_reviews)
|
|
|
|
|
if prj_approved:
|
|
|
|
|
all_requested = True
|
|
|
|
|
print(f"All expected reviewers {expected_reviewers} and staging bot have approved.")
|
|
|
|
|
break
|
|
|
|
|
|
|
|
|
|
pkg1_details = gitea_env.get_pr_details("mypool/pkgA", package_pr1_number)
|
|
|
|
|
pkg2_details = gitea_env.get_pr_details("mypool/pkgB", package_pr2_number)
|
|
|
|
|
prj_details = gitea_env.get_pr_details("myproducts/mySLFO", project_pr_number)
|
|
|
|
|
|
|
|
|
|
assert not pkg1_details.get("merged"), "Package 1 PR merged prematurely (ManualMergeOnly ignored?)"
|
|
|
|
|
assert not pkg2_details.get("merged"), "Package 2 PR merged prematurely (ManualMergeOnly ignored?)"
|
|
|
|
|
assert not prj_details.get("merged"), "Project PR merged prematurely (ManualMergeOnly ignored?)"
|
|
|
|
|
|
|
|
|
|
time.sleep(2)
|
|
|
|
|
|
|
|
|
|
assert all_requested, f"Timed out waiting for all expected reviewers {expected_reviewers} to approve. Current: {current_reviewers}"
|
|
|
|
|
print("All PRs have all required approvals but are not merged (as expected with ManualMergeOnly).")
|
|
|
|
|
|
|
|
|
|
# 4. Comment "merge ok" from a requested reviewer (usera)
|
|
|
|
|
print("Commenting 'merge ok' on package PR as user usera ...")
|
|
|
|
|
usera_client.create_issue_comment("mypool/pkgA", package_pr1_number, "merge ok")
|
|
|
|
|
ownerB_client.create_issue_comment("mypool/pkgB", package_pr2_number, "merge ok")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 5. Verify both PRs are merged
|
|
|
|
|
print("Polling for PR merge status...")
|
|
|
|
|
package1_merged = False
|
|
|
|
|
package2_merged = False
|
|
|
|
|
project_merged = False
|
|
|
|
|
|
|
|
|
|
for i in range(20): # Poll for up to 20 seconds
|
|
|
|
|
if not package1_merged:
|
|
|
|
|
pkg_details = gitea_env.get_pr_details("mypool/pkgA", package_pr1_number)
|
|
|
|
|
if pkg_details.get("merged"):
|
|
|
|
|
package1_merged = True
|
|
|
|
|
print(f"Package PR mypool/pkgA#{package_pr1_number} merged.")
|
|
|
|
|
|
|
|
|
|
if not package2_merged:
|
|
|
|
|
pkg_details = gitea_env.get_pr_details("mypool/pkgB", package_pr2_number)
|
|
|
|
|
if pkg_details.get("merged"):
|
|
|
|
|
package2_merged = True
|
|
|
|
|
print(f"Package PR mypool/pkgB#{package_pr2_number} merged.")
|
|
|
|
|
|
|
|
|
|
if not project_merged:
|
|
|
|
|
prj_details = gitea_env.get_pr_details("myproducts/mySLFO", project_pr_number)
|
|
|
|
|
if prj_details.get("merged"):
|
|
|
|
|
project_merged = True
|
|
|
|
|
print(f"Project PR myproducts/mySLFO#{project_pr_number} merged.")
|
|
|
|
|
|
|
|
|
|
if package1_merged and package2_merged and project_merged:
|
|
|
|
|
break
|
|
|
|
|
|
|
|
|
|
time.sleep(1)
|
|
|
|
|
|
|
|
|
|
assert not package1_merged, f"Package PR mypool/pkgA#{package_pr1_number} was merged after 'merge ok'."
|
|
|
|
|
assert not package2_merged, f"Package PR mypool/pkgB#{package_pr2_number} was merged after 'merge ok'."
|
|
|
|
|
assert not project_merged, f"Project PR myproducts/mySLFO#{project_pr_number} was merged after 'merge ok'."
|
|
|
|
|
print("Both PRs merged not after 'merge ok'.")
|
|
|
|
|
|
|
|
|
|
@pytest.mark.t008
|
|
|
|
|
def test_008_merge_mode_ff_only_success(merge_ff_env, test_user_client):
|
|
|
|
|
"""
|
|
|
|
|
@@ -253,7 +381,7 @@ index 0000000..e69de29
|
|
|
|
|
"""
|
|
|
|
|
package_pr = test_user_client.create_gitea_pr("mypool/pkgA", diff, "Test FF Merge", False, base_branch=merge_branch_name)
|
|
|
|
|
package_pr_number = package_pr["number"]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
project_pr_number = gitea_env.wait_for_project_pr("mypool/pkgA", package_pr_number)
|
|
|
|
|
assert project_pr_number is not None
|
|
|
|
|
|
|
|
|
|
@@ -281,7 +409,7 @@ index 0000000..e69de29
|
|
|
|
|
"""
|
|
|
|
|
package_pr = ownerA_client.create_gitea_pr("mypool/pkgA", diff, "Test FF Merge Failure (Conflict)", False, base_branch=merge_branch_name)
|
|
|
|
|
package_pr_number = package_pr["number"]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 2. Wait for project PR to be created
|
|
|
|
|
project_pr_number = gitea_env.wait_for_project_pr("mypool/pkgA", package_pr_number)
|
|
|
|
|
assert project_pr_number is not None
|
|
|
|
|
@@ -294,24 +422,24 @@ index 0000000..e69de29
|
|
|
|
|
gitea_env.approve_requested_reviews("myproducts/mySLFO", project_pr_number)
|
|
|
|
|
|
|
|
|
|
print("Pushing another change to PR branch to trigger sync...")
|
|
|
|
|
gitea_env.modify_gitea_pr("mypool/pkgA", package_pr_number,
|
|
|
|
|
gitea_env.modify_gitea_pr("mypool/pkgA", package_pr_number,
|
|
|
|
|
"diff --git a/sync_test.txt b/sync_test.txt\nnew file mode 100644\nindex 0000000..e69de29\n",
|
|
|
|
|
"Trigger Sync")
|
|
|
|
|
|
|
|
|
|
# The bot should detect it's not FF and NOT merge, and re-request reviews because of the new commit
|
|
|
|
|
print("Waiting for reviews to be re-requested and approving again...")
|
|
|
|
|
time.sleep(10) # Wait for bot to process sync
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Approve again and verify it is NOT merged
|
|
|
|
|
print("Approving again and verifying PR is NOT merged (because it's not FF)...")
|
|
|
|
|
for i in range(15):
|
|
|
|
|
gitea_env.approve_requested_reviews("mypool/pkgA", package_pr_number)
|
|
|
|
|
gitea_env.approve_requested_reviews("myproducts/mySLFO", project_pr_number)
|
|
|
|
|
time.sleep(1)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pkg_details = gitea_env.get_pr_details("mypool/pkgA", package_pr_number)
|
|
|
|
|
assert not pkg_details.get("merged"), "Package PR merged despite NOT being FF-mergeable!"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
print("FF-only failure (not merged after sync) verified.")
|
|
|
|
|
|
|
|
|
|
@pytest.mark.t010
|
|
|
|
|
@@ -335,7 +463,7 @@ index 0000000..e69de29
|
|
|
|
|
"""
|
|
|
|
|
package_pr = ownerA_client.create_gitea_pr("mypool/pkgA", diff, "Test Devel Merge (Conflict)", False, base_branch=merge_branch_name)
|
|
|
|
|
package_pr_number = package_pr["number"]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 2. Create a content conflict by committing the same file to the base branch
|
|
|
|
|
gitea_env.create_file("mypool", "pkgA", filename, "Conflicting base content\n", branch=merge_branch_name)
|
|
|
|
|
|
|
|
|
|
@@ -377,10 +505,10 @@ index 0000000..e69de29
|
|
|
|
|
"""
|
|
|
|
|
package_pr = ownerA_client.create_gitea_pr("mypool/pkgA", diff, "Test Replace Merge (Conflict)", False, base_branch=merge_branch_name)
|
|
|
|
|
package_pr_number = package_pr["number"]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Enable "Allow edits from maintainers"
|
|
|
|
|
ownerA_client.update_gitea_pr_properties("mypool/pkgA", package_pr_number, allow_maintainer_edit=True)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 2. Create a content conflict by committing the same file to the base branch
|
|
|
|
|
gitea_env.create_file("mypool", "pkgA", filename, "Conflicting base content\n", branch=merge_branch_name)
|
|
|
|
|
|
|
|
|
|
@@ -400,7 +528,7 @@ index 0000000..e69de29
|
|
|
|
|
# Verify that the project branch HEAD is a merge commit
|
|
|
|
|
branch_info = gitea_env._request("GET", f"repos/myproducts/mySLFO/branches/{merge_branch_name}").json()
|
|
|
|
|
new_head_sha = branch_info["commit"]["id"]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
commit_details = gitea_env._request("GET", f"repos/myproducts/mySLFO/git/commits/{new_head_sha}").json()
|
|
|
|
|
assert len(commit_details["parents"]) > 1, f"Project branch {merge_branch_name} HEAD should be a merge commit but has {len(commit_details['parents'])} parents"
|
|
|
|
|
|
|
|
|
|
@@ -429,7 +557,7 @@ index 0000000..e69de29
|
|
|
|
|
"""
|
|
|
|
|
package_pr = ownerA_client.create_gitea_pr("mypool/pkgA", diff, "Test Devel FF Merge", False, base_branch=merge_branch_name)
|
|
|
|
|
package_pr_number = package_pr["number"]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
project_pr_number = gitea_env.wait_for_project_pr("mypool/pkgA", package_pr_number)
|
|
|
|
|
assert project_pr_number is not None
|
|
|
|
|
|
|
|
|
|
@@ -444,7 +572,7 @@ index 0000000..e69de29
|
|
|
|
|
branch_info = gitea_env._request("GET", f"repos/mypool/pkgA/branches/{merge_branch_name}").json()
|
|
|
|
|
new_head_sha = branch_info["commit"]["id"]
|
|
|
|
|
assert new_head_sha == pkg_head_sha, f"Package branch {merge_branch_name} HEAD should be {pkg_head_sha} but is {new_head_sha}"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
commit_details = gitea_env._request("GET", f"repos/mypool/pkgA/git/commits/{new_head_sha}").json()
|
|
|
|
|
assert len(commit_details["parents"]) == 1, f"Package branch {merge_branch_name} HEAD should have 1 parent but has {len(commit_details['parents'])}"
|
|
|
|
|
|
|
|
|
|
@@ -469,7 +597,7 @@ index 0000000..e69de29
|
|
|
|
|
"""
|
|
|
|
|
package_pr = ownerA_client.create_gitea_pr("mypool/pkgA", diff, "Test Replace FF Merge", False, base_branch=merge_branch_name)
|
|
|
|
|
package_pr_number = package_pr["number"]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
project_pr_number = gitea_env.wait_for_project_pr("mypool/pkgA", package_pr_number)
|
|
|
|
|
assert project_pr_number is not None
|
|
|
|
|
|
|
|
|
|
@@ -484,7 +612,7 @@ index 0000000..e69de29
|
|
|
|
|
branch_info = gitea_env._request("GET", f"repos/mypool/pkgA/branches/{merge_branch_name}").json()
|
|
|
|
|
new_head_sha = branch_info["commit"]["id"]
|
|
|
|
|
assert new_head_sha == pkg_head_sha, f"Package branch {merge_branch_name} HEAD should be {pkg_head_sha} but is {new_head_sha}"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
commit_details = gitea_env._request("GET", f"repos/mypool/pkgA/git/commits/{new_head_sha}").json()
|
|
|
|
|
assert len(commit_details["parents"]) == 1, f"Package branch {merge_branch_name} HEAD should have 1 parent but has {len(commit_details['parents'])}"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|