Skip to content

Commit

Permalink
Merge 3d3af54 into dfdd08d
Browse files Browse the repository at this point in the history
  • Loading branch information
eiriksm committed Sep 10, 2022
2 parents dfdd08d + 3d3af54 commit 1a0ab19
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 9 deletions.
22 changes: 14 additions & 8 deletions src/CosyComposer.php
Original file line number Diff line number Diff line change
Expand Up @@ -539,7 +539,7 @@ protected function exportEnvVars()
}
}

protected function closeOutdatedPrsForPackage($package_name, $current_version, Config $config, $pr_id, $prs_named)
protected function closeOutdatedPrsForPackage($package_name, $current_version, Config $config, $pr_id, $prs_named, $default_branch)
{
$fake_item = (object) [
'name' => $package_name,
Expand All @@ -548,6 +548,12 @@ protected function closeOutdatedPrsForPackage($package_name, $current_version, C
];
$branch_name_prefix = $this->createBranchName($fake_item, false, $config);
foreach ($prs_named as $branch_name => $pr) {
if (!empty($pr["base"]["ref"])) {
// The base ref should be what we are actually using for merge requests.
if ($pr["base"]["ref"] != $default_branch) {
continue;
}
}
if ($pr["number"] == $pr_id) {
// We really don't want to close the one we are considering as the latest one, do we?
continue;
Expand Down Expand Up @@ -978,7 +984,7 @@ public function run()
'package' => $item->name,
]);
unset($data[$delta]);
$this->closeOutdatedPrsForPackage($item->name, $item->version, $config, $prs_named[$branch_name]['number'], $prs_named);
$this->closeOutdatedPrsForPackage($item->name, $item->version, $config, $prs_named[$branch_name]['number'], $prs_named, $default_branch);
$total_prs++;
}
// Is the pr up to date?
Expand Down Expand Up @@ -1019,7 +1025,7 @@ public function run()
$context['url'] = $prs_named[$branch_name]['html_url'];
}
$this->log(sprintf('Skipping %s because a pull request already exists', $item->name), Message::PR_EXISTS, $context);
$this->closeOutdatedPrsForPackage($item->name, $item->version, $config, $prs_named[$branch_name]['number'], $prs_named);
$this->closeOutdatedPrsForPackage($item->name, $item->version, $config, $prs_named[$branch_name]['number'], $prs_named, $default_branch);
unset($data[$delta]);
$total_prs++;
}
Expand Down Expand Up @@ -1500,7 +1506,7 @@ protected function handleIndividualUpdates($data, $lockdata, $cdata, $one_pr_per
'package' => $item->name,
]);
$total_prs++;
$this->closeOutdatedPrsForPackage($item->name, $item->version, $config, $prs_named[$branch_name]['number'], $prs_named);
$this->closeOutdatedPrsForPackage($item->name, $item->version, $config, $prs_named[$branch_name]['number'], $prs_named, $default_branch);
continue;
}
// Is the pr up to date?
Expand All @@ -1509,7 +1515,7 @@ protected function handleIndividualUpdates($data, $lockdata, $cdata, $one_pr_per
'package' => $item->name,
]);
$total_prs++;
$this->closeOutdatedPrsForPackage($item->name, $item->version, $config, $prs_named[$branch_name]['number'], $prs_named);
$this->closeOutdatedPrsForPackage($item->name, $item->version, $config, $prs_named[$branch_name]['number'], $prs_named, $default_branch);
continue;
}
}
Expand Down Expand Up @@ -1549,7 +1555,7 @@ protected function handleIndividualUpdates($data, $lockdata, $cdata, $one_pr_per
]);
$this->handleAutomerge($config, $pullRequest, $security_update);
if (!empty($pullRequest['number'])) {
$this->closeOutdatedPrsForPackage($item->name, $item->version, $config, $pullRequest['number'], $prs_named);
$this->closeOutdatedPrsForPackage($item->name, $item->version, $config, $pullRequest['number'], $prs_named, $default_branch);
}
}
$total_prs++;
Expand Down Expand Up @@ -1590,12 +1596,12 @@ protected function handleIndividualUpdates($data, $lockdata, $cdata, $one_pr_per
// If it failed validation because it already exists, we also want to make sure all outdated PRs are
// closed.
if (!empty($prs_named[$branch_name]['number'])) {
$this->closeOutdatedPrsForPackage($item->name, $item->version, $config, $prs_named[$branch_name]['number'], $prs_named);
$this->closeOutdatedPrsForPackage($item->name, $item->version, $config, $prs_named[$branch_name]['number'], $prs_named, $default_branch);
}
} catch (\Gitlab\Exception\RuntimeException $e) {
$this->handlePossibleUpdatePrScenario($e, $branch_name, $pr_params, $prs_named, $config, $security_update);
if (!empty($prs_named[$branch_name]['number'])) {
$this->closeOutdatedPrsForPackage($item->name, $item->version, $config, $prs_named[$branch_name]['number'], $prs_named);
$this->closeOutdatedPrsForPackage($item->name, $item->version, $config, $prs_named[$branch_name]['number'], $prs_named, $default_branch);
}
} catch (ComposerUpdateProcessFailedException $e) {
$this->log('Caught an exception: ' . $e->getMessage(), 'error');
Expand Down
1 change: 1 addition & 0 deletions src/Providers/Bitbucket.php
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@ public function getPrsNamed(Slug $slug) : array
$prs_named[$pr["source"]["branch"]["name"]] = [
'base' => [
'sha' => $pr["destination"]["commit"]["hash"],
'ref' => $pr["destination"]["branch"]["name"],
],
'html_url' => $pr["links"]["html"]["href"],
'number' => $pr["id"],
Expand Down
1 change: 1 addition & 0 deletions src/Providers/Gitlab.php
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@ public function getPrsNamed(Slug $slug) : array
'number' => $pr["iid"],
'base' => [
'sha' => !empty($commits[1]["id"]) ? $commits[1]["id"] : $pr['sha'],
'ref' => $pr["target_branch"],
],
];
}
Expand Down
14 changes: 13 additions & 1 deletion test/integration/CloseOutdatedTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,26 +23,38 @@ class CloseOutdatedTest extends CloseOutdatedBase
protected $packageVersionForToUpdateOutput = '1.1.4';
protected $composerAssetFiles = 'composer.close.outdated';
protected $checkPrUrl = true;
protected $expectedClosedPrs = [123, 124, 125];
protected $expectedClosedPrs = [124, 125];

protected function getPrsNamed()
{
return [
'psrlog100114' => [
'number' => 456,
'title' => 'Test update',
'base' => [
'ref' => 'master',
]
],
'psrlog100113' => [
'number' => 123,
'title' => 'Test update',
'base' => [
'ref' => 'notmaster',
]
],
'psrlog100112' => [
'number' => 124,
'title' => 'Test update',
'base' => [
'ref' => 'master',
]
],
'psrlog100111' => [
'number' => 125,
'title' => 'Test update',
'base' => [
'ref' => 'master',
]
]
];
}
Expand Down
2 changes: 2 additions & 0 deletions test/unit/Providers/ProvidersTestBase.php
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,7 @@ public function testPrsNamed()
],
'state' => 'opened',
'source_branch' => 'patch-1',
'target_branch' => 'master',
'title' => 'Patch 1',
'iid' => 123,
'sha' => 'abab',
Expand All @@ -175,6 +176,7 @@ public function testPrsNamed()
],
'state' => 'opened',
'source_branch' => 'patch-2',
'target_branch' => 'master',
'title' => 'Patch 2',
'iid' => 456,
'sha' => 'fefe',
Expand Down

0 comments on commit 1a0ab19

Please sign in to comment.