From 313da1d5eb473e85e317462ed0ea56d41e741061 Mon Sep 17 00:00:00 2001 From: jungejason Date: Fri, 1 Apr 2011 15:34:45 -0700 Subject: [PATCH] Support blame on blame for svn Summary: add the column for the blame on blame for svn. We will support git once we have the 'parent' info of the commits saved in the database for git. Test Plan: in svn it should work. In git is doesn't break things. Reviewed By: epriestley Reviewers: epriestley CC: epriestley Differential Revision: 95 --- .../file/DiffusionBrowseFileController.php | 84 ++++++++++++++++--- .../base/DiffusionFileContentQuery.php | 10 +++ .../svn/DiffusionSvnFileContentQuery.php | 8 ++ 3 files changed, 89 insertions(+), 13 deletions(-) diff --git a/src/applications/diffusion/controller/file/DiffusionBrowseFileController.php b/src/applications/diffusion/controller/file/DiffusionBrowseFileController.php index c70ad1c9d2..6427611ffe 100644 --- a/src/applications/diffusion/controller/file/DiffusionBrowseFileController.php +++ b/src/applications/diffusion/controller/file/DiffusionBrowseFileController.php @@ -26,6 +26,7 @@ class DiffusionBrowseFileController extends DiffusionController { 'jpeg'=> 'image/jpeg' ); + public function processRequest() { // Build the view selection form. @@ -90,6 +91,20 @@ class DiffusionBrowseFileController extends DiffusionController { } + /* + * Returns a content-type corrsponding to an image file extension + * + * @param string $path File path + * @return mixed A content-type string or NULL if path doesn't end with a + * recognized image extension + */ + public function getImageType($path) { + $ext = pathinfo($path); + $ext = $ext['extension']; + return idx($this->imageTypes, $ext); + } + + private function buildCorpus($selected) { $needs_blame = ($selected == 'blame' || $selected == 'plainblame'); @@ -166,7 +181,7 @@ class DiffusionBrowseFileController extends DiffusionController { implode("\n", $text_list))); $rows = $this->buildDisplayRows($text_list, $rev_list, $blame_dict, - $needs_blame, $drequest); + $needs_blame, $drequest, $file_query, $selected); $corpus_table = phutil_render_tag( 'table', @@ -189,7 +204,7 @@ class DiffusionBrowseFileController extends DiffusionController { private static function buildDisplayRows($text_list, $rev_list, $blame_dict, - $needs_blame, DiffusionRequest $drequest) { + $needs_blame, DiffusionRequest $drequest, $file_query, $selected) { $last_rev = null; $color = null; $rows = array(); @@ -208,6 +223,8 @@ class DiffusionBrowseFileController extends DiffusionController { $rev = $rev_list[$k]; if ($last_rev == $rev) { $blame_info = + ($file_query->getSupportsBlameOnBlame() ? + '' : ''). ''. ''; } else { @@ -220,8 +237,25 @@ class DiffusionBrowseFileController extends DiffusionController { $drequest, substr($rev, 0, 7)); + if (!$file_query->getSupportsBlameOnBlame()) { + $prev_link = ''; + } else { + $prev_rev = $file_query->getPrevRev($rev); + $path = $drequest->getPath(); + $prev_link = self::renderBrowse( + $drequest, + $path, + "\xC2\xAB", + $prev_rev, + $n, + $selected); + $prev_link = '' . $prev_link . ''; + } + $author_link = $blame_dict[$rev]['author']; $blame_info = + $prev_link . ''.$revision_link.''. 'request; } diff --git a/src/applications/diffusion/query/filecontent/svn/DiffusionSvnFileContentQuery.php b/src/applications/diffusion/query/filecontent/svn/DiffusionSvnFileContentQuery.php index 64e7f9f085..3371c3027b 100644 --- a/src/applications/diffusion/query/filecontent/svn/DiffusionSvnFileContentQuery.php +++ b/src/applications/diffusion/query/filecontent/svn/DiffusionSvnFileContentQuery.php @@ -18,6 +18,14 @@ final class DiffusionSvnFileContentQuery extends DiffusionFileContentQuery { + public function getSupportsBlameOnBlame() { + return true; + } + + public function getPrevRev($rev) { + return max($rev - 1, 0); + } + protected function executeQuery() { $drequest = $this->getRequest();