From 67824bccdcee8800f45e5da37b6c2282d6fc0ee5 Mon Sep 17 00:00:00 2001 From: Robert Sesek Date: Mon, 29 Aug 2005 00:44:20 +0000 Subject: [PATCH] Lots of inter-page link work; revision stuff is now handled through the path manager --- blame.php | 20 +++++++++- browse.php | 26 ++++++++----- diff.php | 18 +++++---- includes/paths.php | 95 ++++++++++++++++++++++++++++++++++++++++++++- includes/svnlib.php | 5 +++ log.php | 13 ++++--- view.php | 15 +++---- 7 files changed, 160 insertions(+), 32 deletions(-) diff --git a/blame.php b/blame.php index 9b66167..8f1ac06 100644 --- a/blame.php +++ b/blame.php @@ -18,9 +18,25 @@ $relpath = $viewsvn->paths->fetch_path($path); echo $viewsvn->paths->construct_breadcrumb($path, false); -$blame = new SVNBlame($repos, $relpath, @$viewsvn->in['rev']); +echo '
'; -echo ''; +echo 'View Log'; + +if ($viewsvn->svn->common->fetch_head_rev($path) != $viewsvn->paths->fetch_rev_num() AND $viewsvn->paths->fetch_rev_num() != 'HEAD') +{ + echo ' - Go to HEAD'; + echo ' - Diff to HEAD'; +} + +$prev = $viewsvn->svn->common->fetch_prev_rev($path, $viewsvn->paths->fetch_rev_num()); +if ($prev != -1) +{ + echo ' - Diff to PREV'; +} + +$blame = new SVNBlame($repos, $relpath, $viewsvn->paths->fetch_rev_num()); + +echo '
'; foreach ($blame->fetch() AS $entry) { diff --git a/browse.php b/browse.php index 63b5e6a..ad370af 100644 --- a/browse.php +++ b/browse.php @@ -20,12 +20,18 @@ echo $viewsvn->paths->construct_breadcrumb($path); echo '
'; -$prev = $viewsvn->svn->common->fetch_prev_rev($path, @$viewsvn->in['rev']); -echo ($viewsvn->svn->common->fetch_head_rev($path) != @$viewsvn->in['rev'] ? 'Diff to HEAD' : '') . -($prev != -1 ? ' - Diff to PREV' : '') . -' - View Log'; +$prev = $viewsvn->svn->common->fetch_prev_rev($path, $viewsvn->paths->fetch_rev_num()); -echo '
' . print_r($viewsvn->svn->common->fetch_log($path, @$viewsvn->in['rev']), true) . '
'; +if ($viewsvn->svn->common->fetch_head_rev($path) != $viewsvn->paths->fetch_rev_num() AND $viewsvn->paths->fetch_rev_num() != 'HEAD') +{ + echo 'Go to HEAD'; +} + +echo ' - Diff to HEAD' . +($prev != -1 ? ' - Diff to PREV' : '') . +' - View Log'; + +echo '
' . print_r($viewsvn->svn->common->fetch_log($path, $viewsvn->paths->fetch_rev_num()), true) . '
'; $listing = $viewsvn->svn->ls($repos, $relpath, @$viewsvn->in['rev']); @@ -37,16 +43,16 @@ foreach ($listing AS $item) echo '
  • '; if ($item{ strlen($item) - 1 } == '/') { - echo '' . $item . ''; + echo '' . $item . ''; } else { - echo ''. $item . ''; - echo ' - Blame'; + echo ''. $item . ''; + echo ' - Blame'; } - echo ' - View Log'; - echo ' - Diff to PREV'; + echo ' - View Log'; + //echo ' - Diff to PREV'; echo '
  • '; echo "\n"; diff --git a/diff.php b/diff.php index 0376bbf..fd6f8dd 100644 --- a/diff.php +++ b/diff.php @@ -18,17 +18,21 @@ $relpath = $viewsvn->paths->fetch_path($path); echo $viewsvn->paths->construct_breadcrumb($path, false); -if (empty($viewsvn->in['high'])) +$revs = $viewsvn->paths->fetch_rev_num(true); +$high = $revs['high']; +$low = $revs['low']; + +if ($high == 'HEAD') { - $viewsvn->in['high'] = $viewsvn->svn->common->fetch_head_rev($path); + $high = $viewsvn->svn->common->fetch_head_rev($path); } -if (empty($viewsvn->in['low'])) +if ($low == 0) { - $viewsvn->in['low'] = $viewsvn->svn->common->fetch_prev_rev($path, $viewsvn->in['high']); + $low = $viewsvn->svn->common->fetch_prev_rev($path, $high); } -$diff = new SVNDiff($repos, $relpath, $viewsvn->in['low'], $viewsvn->in['high']); +$diff = new SVNDiff($repos, $relpath, $low, $high); $isdir = (bool)$viewsvn->svn->common->isdir($path); @@ -70,8 +74,8 @@ foreach ($diff->fetch() AS $filename => $file) $filepath = ($isdir ? $path . $filename : $path); echo ' - - + + '; continue; diff --git a/includes/paths.php b/includes/paths.php index af5b1d8..2b46045 100644 --- a/includes/paths.php +++ b/includes/paths.php @@ -142,7 +142,7 @@ class Paths foreach ($temp AS $val => $item) { $itembit .= $item . (($count != $val) ? '/' : ($doslash ? '/' : '')); - $html .= ($count == $val ? '' : '') . $item . ($count == $val ? '' : '') . ($count != $val ? ' / ' : ''); + $html .= ($count == $val ? '' : '') . $item . ($count == $val ? '' : '') . ($count != $val ? ' / ' : ''); } return $html; @@ -232,6 +232,99 @@ class Paths } } + /** + * Returns the current sanitized revision + * + * @access public + * + * @param bool High-low or not + * @param mixed High revision (or regular) + * @param mixed Low revision + * + * @return mixed Revision number or HEAD + */ + function fetch_rev_num($highlow = false, $high = null, $low = null) + { + global $viewsvn; + + if ($highlow) + { + if (isset($viewsvn->in['high']) AND is_null($high)) + { + $high = $viewsvn->svn->rev($viewsvn->in['high']); + } + else if (is_null($high)) + { + $high = 'HEAD'; + } + + if (isset($viewsvn->in['low'])) + { + $low = $viewsvn->svn->rev($viewsvn->in['low']); + } + else if (is_null($low)) + { + $low = 0; + } + + if ($low == 'HEAD') + { + $low = 0; + } + + if (is_int($high) AND is_int($low) AND $low > $high) + { + $temp = $high; + $high = $low; + $low = $temp; + } + + return array('high' => $high, 'low' => $low); + } + else + { + if (isset($viewsvn->in['rev']) AND is_null($high)) + { + $rev = $viewsvn->svn->rev($viewsvn->in['rev']); + } + else if (is_null($high)) + { + $rev = 'HEAD'; + } + else + { + $rev = $high; + } + + return $rev; + } + } + + /** + * Returns a GET string with sanitized revision data + * + * @access public + * + * @param bool High-low or not + * @param mixed High revision (or regular) + * @param mixed Low revision + * + * @return string Revision GET data + */ + function fetch_rev_str($highlow = false, $high = null, $low = null) + { + $rev = $this->fetch_rev_num($highlow, $high, $low); + + if ($highlow) + { + return '?low=' . $rev['low'] . '&high=' . $rev['high']; + } + else + { + return '?rev=' . $rev; + } + } + /** * Sanitizes a path for passing * diff --git a/includes/svnlib.php b/includes/svnlib.php index 0a5a9bd..98d149e 100644 --- a/includes/svnlib.php +++ b/includes/svnlib.php @@ -405,6 +405,11 @@ class SVNCommon { $revs = $this->fetch_revs($path); + if ($current == 'HEAD') + { + $current = $this->fetch_head_rev($path); + } + $index = array_search($current, $revs['revs']); if ($current === false) { diff --git a/log.php b/log.php index b16e8e1..5cdd2d3 100644 --- a/log.php +++ b/log.php @@ -18,7 +18,10 @@ $relpath = $viewsvn->paths->fetch_path($path); echo $viewsvn->paths->construct_breadcrumb($path, false); -$logs = new SVNLog($repos, $relpath, 0, @$viewsvn->in['rev']); +echo '
    '; + +// this is NOT supposed to allow for revision ranges +$logs = new SVNLog($repos, $relpath, 0, $viewsvn->paths->fetch_rev_num()); $isdir = $viewsvn->svn->common->isdir($path); @@ -29,10 +32,10 @@ foreach ($logs->fetch() AS $log) { $prev = $viewsvn->svn->common->fetch_prev_rev($path, $log['rev']); echo '
  • ' . $log['rev'] . - (!$isdir ? ' - View' : '') . - ' - Blame' . - ($viewsvn->svn->common->fetch_head_rev($path) != $log['rev'] ? ' - Diff to HEAD' : '') . - ($prev != -1 ? ' - Diff to PREV' : ''); + (!$isdir ? ' - View' : '') . + ' - Blame' . + ($viewsvn->svn->common->fetch_head_rev($path) != $log['rev'] ? ' - Diff to HEAD' : '') . + ($prev != -1 ? ' - Diff to PREV' : ''); echo "\n"; echo '
  • r' . $viewsvn->in['low'] . 'r' . $viewsvn->in['high'] . 'r' . $low . 'r' . $high . '