localCommits = $local_commits;
return $this;
}
public function setUser(PhabricatorUser $user) {
$this->user = $user;
return $this;
}
public function render() {
$user = $this->user;
if (!$user) {
throw new Exception("Call setUser() before render()-ing this view.");
}
$local = $this->localCommits;
if (!$local) {
return null;
}
require_celerity_resource('differential-local-commits-view-css');
$has_tree = false;
$has_local = false;
foreach ($local as $commit) {
if (idx($commit, 'tree')) {
$has_tree = true;
}
if (idx($commit, 'local')) {
$has_local = true;
}
}
$rows = array();
foreach ($local as $commit) {
$row = array();
if (idx($commit, 'commit')) {
$commit_hash = substr($commit['commit'], 0, 16);
} else if (isset($commit['rev'])) {
$commit_hash = substr($commit['rev'], 0, 16);
} else {
$commit_hash = null;
}
$row[] = '
'.phutil_escape_html($commit_hash).' | ';
if ($has_tree) {
$tree = idx($commit, 'tree');
$tree = substr($tree, 0, 16);
$row[] = ''.phutil_escape_html($tree).' | ';
}
if ($has_local) {
$local_rev = idx($commit, 'local', null);
$row[] = ''.phutil_escape_html($local_rev).' | ';
}
$parents = idx($commit, 'parents', array());
foreach ($parents as $k => $parent) {
if (is_array($parent)) {
$parent = idx($parent, 'rev');
}
$parents[$k] = phutil_escape_html(substr($parent, 0, 16));
}
$parents = implode('
', $parents);
$row[] = ''.$parents.' | ';
$author = nonempty(
idx($commit, 'user'),
idx($commit, 'author'));
$row[] = ''.phutil_escape_html($author).' | ';
$message = idx($commit, 'message');
$summary = idx($commit, 'summary');
$summary = phutil_utf8_shorten($summary, 80);
$view = new AphrontMoreView();
$view->setSome(phutil_escape_html($summary));
if ($message && (trim($summary) != trim($message))) {
$view->setMore(nl2br(phutil_escape_html($message)));
}
$row[] = phutil_render_tag(
'td',
array(
'class' => 'summary',
),
$view->render());
$date = nonempty(
idx($commit, 'date'),
idx($commit, 'time'));
if ($date) {
$date = phabricator_datetime($date, $user);
}
$row[] = ''.$date.' | ';
$rows[] = ''.implode('', $row).'
';
}
$headers = array();
$headers[] = 'Commit | ';
if ($has_tree) {
$headers[] = 'Tree | ';
}
if ($has_local) {
$headers[] = 'Local | ';
}
$headers[] = 'Parents | ';
$headers[] = 'Author | ';
$headers[] = 'Summary | ';
$headers[] = 'Date | ';
$headers = ''.implode('', $headers).'
';
return
id(new PhabricatorHeaderView())
->setHeader(pht('Local Commits'))
->render().
''.
'
'.
$headers.
implode("\n", $rows).
'
'.
'
';
}
}