Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/src/applications/diffusion/view/DiffusionBranchListView.php
12242 views
1
<?php
2
3
final class DiffusionBranchListView extends DiffusionView {
4
5
private $branches;
6
private $commits = array();
7
8
public function setBranches(array $branches) {
9
assert_instances_of($branches, 'DiffusionRepositoryRef');
10
$this->branches = $branches;
11
return $this;
12
}
13
14
public function setCommits(array $commits) {
15
assert_instances_of($commits, 'PhabricatorRepositoryCommit');
16
$this->commits = mpull($commits, null, 'getCommitIdentifier');
17
return $this;
18
}
19
20
public function render() {
21
$drequest = $this->getDiffusionRequest();
22
$current_branch = $drequest->getBranch();
23
$repository = $drequest->getRepository();
24
$commits = $this->commits;
25
$viewer = $this->getUser();
26
require_celerity_resource('diffusion-css');
27
28
$buildables = $this->loadBuildables($commits);
29
$have_builds = false;
30
31
$can_close_branches = ($repository->isHg());
32
33
Javelin::initBehavior('phabricator-tooltips');
34
35
$list = id(new PHUIObjectItemListView())
36
->addClass('diffusion-history-list')
37
->addClass('diffusion-branch-list');
38
39
$publisher = $repository->newPublisher();
40
41
foreach ($this->branches as $branch) {
42
$build_view = null;
43
$button_bar = new PHUIButtonBarView();
44
$commit = idx($commits, $branch->getCommitIdentifier());
45
if ($commit) {
46
$details = $commit->getSummary();
47
$datetime = phabricator_datetime($commit->getEpoch(), $viewer);
48
49
$buildable = idx($buildables, $commit->getPHID());
50
if ($buildable) {
51
$build_view = $this->renderBuildable($buildable, 'button');
52
}
53
} else {
54
$datetime = null;
55
$details = null;
56
}
57
58
if ($repository->supportsBranchComparison()) {
59
$compare_uri = $drequest->generateURI(
60
array(
61
'action' => 'compare',
62
'head' => $branch->getShortName(),
63
));
64
$can_compare = ($branch->getShortName() != $current_branch);
65
if ($can_compare) {
66
$button_bar->addButton(
67
id(new PHUIButtonView())
68
->setTag('a')
69
->setIcon('fa-balance-scale')
70
->setToolTip(pht('Compare'))
71
->setButtonType(PHUIButtonView::BUTTONTYPE_SIMPLE)
72
->setWorkflow(true)
73
->setHref($compare_uri));
74
}
75
}
76
77
$browse_href = $drequest->generateURI(
78
array(
79
'action' => 'browse',
80
'branch' => $branch->getShortName(),
81
));
82
83
$button_bar->addButton(
84
id(new PHUIButtonView())
85
->setIcon('fa-code')
86
->setHref($browse_href)
87
->setTag('a')
88
->setTooltip(pht('Browse'))
89
->setButtonType(PHUIButtonView::BUTTONTYPE_SIMPLE));
90
91
$commit_link = $repository->getCommitURI(
92
$branch->getCommitIdentifier());
93
94
$commit_name = $repository->formatCommitName(
95
$branch->getCommitIdentifier(), $local = true);
96
97
$commit_tag = id(new PHUITagView())
98
->setName($commit_name)
99
->setHref($commit_link)
100
->setType(PHUITagView::TYPE_SHADE)
101
->setColor(PHUITagView::COLOR_INDIGO)
102
->setBorder(PHUITagView::BORDER_NONE)
103
->setSlimShady(true);
104
$subhead = array($commit_tag, ' ', $details);
105
106
$item = id(new PHUIObjectItemView())
107
->setHeader($branch->getShortName())
108
->setHref($drequest->generateURI(
109
array(
110
'action' => 'history',
111
'branch' => $branch->getShortName(),
112
)))
113
->setSubhead($subhead)
114
->setSideColumn(array(
115
$build_view,
116
$button_bar,
117
));
118
119
if ($branch->getShortName() == $repository->getDefaultBranch()) {
120
$item->setStatusIcon('fa-star', pht('Default Branch'));
121
} else {
122
if ($publisher->shouldPublishRef($branch)) {
123
$item->setStatusIcon('fa-code-fork', pht('Permanent Ref'));
124
} else {
125
$item->setStatusIcon(
126
'fa-folder-open-o grey', pht('Not a Permanent Ref'));
127
}
128
}
129
130
$item->addAttribute(array($datetime));
131
132
if ($can_close_branches) {
133
$fields = $branch->getRawFields();
134
$closed = idx($fields, 'closed');
135
if ($closed) {
136
$status = pht('Branch Closed');
137
$item->setDisabled(true);
138
} else {
139
$status = pht('Branch Open');
140
}
141
$item->addAttribute($status);
142
}
143
144
$list->addItem($item);
145
146
}
147
return $list;
148
149
}
150
}
151
152