pathChanges = $path_changes; return $this; } public function render() { $rows = array(); // TODO: Experiment with path stack rendering. // TODO: Copy Away and Move Away are rendered junkily still. foreach ($this->pathChanges as $change) { $change_verb = DifferentialChangeType::getFullNameForChangeType( $change->getChangeType()); $suffix = null; if ($change->getFileType() == DifferentialChangeType::FILE_DIRECTORY) { $suffix = '/'; } $path = $change->getPath(); $hash = substr(sha1($path), 0, 7); $rows[] = array( $this->linkHistory($change->getPath()), $this->linkBrowse($change->getPath()), $this->linkChange( $change->getChangeType(), $change->getFileType(), $change->getPath()), phutil_render_tag( 'a', array( 'href' => '#'.$hash, ), phutil_escape_html($path).$suffix), ); } $view = new AphrontTableView($rows); $view->setHeaders( array( 'History', 'Browse', 'Change', 'Path', )); $view->setColumnClasses( array( '', '', '', 'wide', )); $view->setNoDataString('This change has not been fully parsed yet.'); return $view->render(); } }