Skip to content
Snippets Groups Projects

show open merge requests

4 files
+ 176
0
Compare changes
  • Side-by-side
  • Inline

Files

+ 112
0
<?php
final class MergerequestsController extends TracToGitlab\GitlabController
{
public function before_filter(&$action, &$args)
{
parent::before_filter($action, $args);
PageLayout::setTitle(_('Merge Requests'));
$this->activateNavigation('merge-requests');
}
public function index_action()
{
$data = $this->readFromCache('merge-requests', true);
if ($data === false) {
$this->mrs = $this->fetchMergeRequests();
$this->writeToCache('merge-requests', $this->issues);
} else {
$this->mrs = $data['data'];
Sidebar::get()->addWidget(new TemplateWidget(
'Aus dem Cache',
$this->get_template_factory()->open(
$this->get_default_template('sidebar')
),
['time' => $data['time']]
));
}
}
public function diff_action($mr_iid)
{
// $versions = $this->gitlab->mergeRequests()->
}
private function fetchMergeRequests(): array
{
$mrs = $this->gitlabPager->fetchAll(
$this->gitlab->mergeRequests(),
'all',
[
$this->gitlabProjectId,
[
'sort' => 'asc',
'scope' => 'all',
'state' => 'opened',
]
]
);
$mrs = array_filter($mrs, function ($mr) {
if ($mr['draft'] || $mr['work_in_progress'] || $mr['merge_when_pipeline_succeeds']) {
return false;
}
return true;
// foreach (['worksforme', 'wontfix', 'Duplicate', 'invalid'] as $label) {
// if (in_array($label, $issue['labels'])) {
// return false;
// }
// }
//
// $has_version = array_reduce($issue['labels'], function ($has_version, $label) {
// return $has_version || strpos($label, 'Version::') === 0;
// }, false);
// return $has_version;
});
// var_dump($mrs);die;
//
// $issues = array_map(function ($issue) {
// $issue['studip_version'] = $this->extractVersion($issue['labels']);
// $issue['mr'] = $this->fetchRelatedMergeRequest($issue['iid']);
// return $issue;
// }, $issues);
//
usort($mrs, function ($a, $b) {
return strcmp($b['updated_at'], $a['updated_at']);
});
return $mrs;
}
private function fetchRelatedMergeRequest(int $issue_id)
{
$mrs = $this->gitlab->issues()->closedByMergeRequests(
$this->gitlabProjectId,
$issue_id
);
foreach ($mrs as $mr) {
if ($mr['state'] === 'merged') {
return $mr['iid'];
}
}
return null;
}
private function extractVersion(array $labels): string
{
$version = '';
foreach ($labels as $label) {
if (strpos($label, 'Version::') === 0) {
$v = substr($label, 9);
if (!$version || $v < $version) {
$version = $v;
}
}
}
return $version;
}
}
Loading