Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/src/applications/diffusion/controller/DiffusionChangeController.php
12242 views
1
<?php
2
3
final class DiffusionChangeController extends DiffusionController {
4
5
public function shouldAllowPublic() {
6
return true;
7
}
8
9
public function handleRequest(AphrontRequest $request) {
10
$response = $this->loadDiffusionContext();
11
if ($response) {
12
return $response;
13
}
14
15
$viewer = $this->getViewer();
16
$drequest = $this->getDiffusionRequest();
17
18
$data = $this->callConduitWithDiffusionRequest(
19
'diffusion.diffquery',
20
array(
21
'commit' => $drequest->getCommit(),
22
'path' => $drequest->getPath(),
23
));
24
25
$drequest->updateSymbolicCommit($data['effectiveCommit']);
26
27
$raw_changes = ArcanistDiffChange::newFromConduit($data['changes']);
28
$diff = DifferentialDiff::newEphemeralFromRawChanges(
29
$raw_changes);
30
$changesets = $diff->getChangesets();
31
$changeset = reset($changesets);
32
33
if (!$changeset) {
34
// TODO: Refine this.
35
return new Aphront404Response();
36
}
37
38
$repository = $drequest->getRepository();
39
$changesets = array(
40
0 => $changeset,
41
);
42
43
$changeset_header = $this->buildChangesetHeader($drequest);
44
45
$changeset_view = new DifferentialChangesetListView();
46
$changeset_view->setChangesets($changesets);
47
$changeset_view->setBackground(PHUIObjectBoxView::BLUE_PROPERTY);
48
$changeset_view->setVisibleChangesets($changesets);
49
$changeset_view->setRenderingReferences(
50
array(
51
0 => $drequest->generateURI(array('action' => 'rendering-ref')),
52
));
53
54
$raw_params = array(
55
'action' => 'browse',
56
'params' => array(
57
'view' => 'raw',
58
),
59
);
60
61
$right_uri = $drequest->generateURI($raw_params);
62
$raw_params['params']['before'] = $drequest->getStableCommit();
63
$left_uri = $drequest->generateURI($raw_params);
64
$changeset_view->setRawFileURIs($left_uri, $right_uri);
65
66
$changeset_view->setRenderURI($repository->getPathURI('diff/'));
67
$changeset_view->setUser($viewer);
68
$changeset_view->setHeader($changeset_header);
69
70
// TODO: This is pretty awkward, unify the CSS between Diffusion and
71
// Differential better.
72
require_celerity_resource('differential-core-view-css');
73
74
$crumbs = $this->buildCrumbs(
75
array(
76
'branch' => true,
77
'path' => true,
78
'view' => 'change',
79
));
80
$crumbs->setBorder(true);
81
82
$links = $this->renderPathLinks($drequest, $mode = 'browse');
83
$header = $this->buildHeader($drequest, $links);
84
85
$view = id(new PHUITwoColumnView())
86
->setHeader($header)
87
->setMainColumn(array(
88
))
89
->setFooter(array(
90
$changeset_view,
91
));
92
93
return $this->newPage()
94
->setTitle(
95
array(
96
basename($drequest->getPath()),
97
$repository->getDisplayName(),
98
))
99
->setCrumbs($crumbs)
100
->appendChild(
101
array(
102
$view,
103
));
104
}
105
106
private function buildHeader(
107
DiffusionRequest $drequest,
108
$links) {
109
$viewer = $this->getViewer();
110
111
$tag = $this->renderCommitHashTag($drequest);
112
113
$header = id(new PHUIHeaderView())
114
->setHeader($links)
115
->setUser($viewer)
116
->setPolicyObject($drequest->getRepository())
117
->addTag($tag);
118
119
return $header;
120
}
121
122
private function buildChangesetHeader(DiffusionRequest $drequest) {
123
$viewer = $this->getViewer();
124
125
$header = id(new PHUIHeaderView())
126
->setHeader(pht('Changes'));
127
128
$history_uri = $drequest->generateURI(
129
array(
130
'action' => 'history',
131
));
132
133
$header->addActionLink(
134
id(new PHUIButtonView())
135
->setTag('a')
136
->setText(pht('View History'))
137
->setHref($history_uri)
138
->setIcon('fa-clock-o'));
139
140
$browse_uri = $drequest->generateURI(
141
array(
142
'action' => 'browse',
143
));
144
145
$header->addActionLink(
146
id(new PHUIButtonView())
147
->setTag('a')
148
->setText(pht('Browse Content'))
149
->setHref($browse_uri)
150
->setIcon('fa-files-o'));
151
152
return $header;
153
}
154
155
protected function buildPropertyView(
156
DiffusionRequest $drequest,
157
PhabricatorActionListView $actions) {
158
159
$viewer = $this->getRequest()->getUser();
160
161
$view = id(new PHUIPropertyListView())
162
->setUser($viewer)
163
->setActionList($actions);
164
165
$stable_commit = $drequest->getStableCommit();
166
167
$view->addProperty(
168
pht('Commit'),
169
phutil_tag(
170
'a',
171
array(
172
'href' => $drequest->generateURI(
173
array(
174
'action' => 'commit',
175
'commit' => $stable_commit,
176
)),
177
),
178
$drequest->getRepository()->formatCommitName($stable_commit)));
179
180
return $view;
181
}
182
183
}
184
185