Lots of inter-page link work; revision stuff is now handled through the path manager
authorRobert Sesek <rsesek@bluestatic.org>
Mon, 29 Aug 2005 00:44:20 +0000 (00:44 +0000)
committerRobert Sesek <rsesek@bluestatic.org>
Mon, 29 Aug 2005 00:44:20 +0000 (00:44 +0000)
blame.php
browse.php
diff.php
includes/paths.php
includes/svnlib.php
log.php
view.php

index 9b661672c849c43d79cf62ee3aaa0e8a1ca952ac..8f1ac06b56e18795f1d9419993b23d92c8666b8f 100644 (file)
--- 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 '<br />';
 
-echo '<table cellspacing="1" cellpadding="1" style="background-color: #EFEFEF" width="100%">';
+echo '<a href="/viewsvn/' . $viewsvn->paths->out('log.php' . $viewsvn->paths->fetch_rev_str(), $path) . '">View Log</a>';
+
+if ($viewsvn->svn->common->fetch_head_rev($path) != $viewsvn->paths->fetch_rev_num() AND $viewsvn->paths->fetch_rev_num() != 'HEAD')
+{
+       echo ' - <a href="/viewsvn/' . $viewsvn->paths->out('blame.php' . $viewsvn->paths->fetch_rev_str(false, 'HEAD'), $path) . '">Go to HEAD</a>';
+       echo ' - <a href="/viewsvn/' . $viewsvn->paths->out('diff.php' . $viewsvn->paths->fetch_rev_str(true, 'HEAD', $viewsvn->paths->fetch_rev_num()), $path) . '">Diff to HEAD</a>';
+}
+
+$prev = $viewsvn->svn->common->fetch_prev_rev($path, $viewsvn->paths->fetch_rev_num());
+if ($prev != -1)
+{
+       echo ' - <a href="/viewsvn/' . $viewsvn->paths->out('diff.php' . $viewsvn->paths->fetch_rev_str(true, $viewsvn->paths->fetch_rev_num(), $prev), $path) . '">Diff to PREV</a>';
+}
+
+$blame = new SVNBlame($repos, $relpath, $viewsvn->paths->fetch_rev_num());
+
+echo '<table cellspacing="1" cellpadding="1" style="background-color: #EFEFEF; font: 11px monospace" width="100%">';
 
 foreach ($blame->fetch() AS $entry)
 {
index 63b5e6afb54e310ac08f843d88d80787e8ba132f..ad370afe98811601315b4c1e24f6313f8c513e2d 100644 (file)
@@ -20,12 +20,18 @@ echo $viewsvn->paths->construct_breadcrumb($path);
 
 echo '<br />';
 
-$prev = $viewsvn->svn->common->fetch_prev_rev($path, @$viewsvn->in['rev']);
-echo ($viewsvn->svn->common->fetch_head_rev($path) != @$viewsvn->in['rev'] ? '<a href="/viewsvn/' . $viewsvn->paths->out('diff.php?low=' . @$viewsvn->in['rev'] . '&amp;high=HEAD', $path) . '">Diff to HEAD</a>' : '') .
-($prev != -1 ? ' - <a href="/viewsvn/' . $viewsvn->paths->out('diff.php?low=' . $prev . '&amp;high=' . @$viewsvn->in['rev'], $path) . '">Diff to PREV</a>' : '') . 
-' - <a href="/viewsvn/' . $viewsvn->paths->out('log.php?rev=' . @$viewsvn->in['rev'], $path) . '">View Log</a>';
+$prev = $viewsvn->svn->common->fetch_prev_rev($path, $viewsvn->paths->fetch_rev_num());
 
-echo '<pre>' . print_r($viewsvn->svn->common->fetch_log($path, @$viewsvn->in['rev']), true) . '</pre>';
+if ($viewsvn->svn->common->fetch_head_rev($path) != $viewsvn->paths->fetch_rev_num() AND $viewsvn->paths->fetch_rev_num() != 'HEAD')
+{
+       echo '<a href="/viewsvn/' . $viewsvn->paths->out('browse.php' . $viewsvn->paths->fetch_rev_str(false, 'HEAD'), $path) . '">Go to HEAD</a>';
+}
+
+echo ' - <a href="/viewsvn/' . $viewsvn->paths->out('diff.php' . $viewsvn->paths->fetch_rev_str(true, 'HEAD', $viewsvn->paths->fetch_rev_num()), $path) . '">Diff to HEAD</a>' .
+($prev != -1 ? ' - <a href="/viewsvn/' . $viewsvn->paths->out('diff.php' . $viewsvn->paths->fetch_rev_str(true, $prev), $path) . '">Diff to PREV</a>' : '') . 
+' - <a href="/viewsvn/' . $viewsvn->paths->out('log.php' . $viewsvn->paths->fetch_rev_str(), $path) . '">View Log</a>';
+
+echo '<pre>' . print_r($viewsvn->svn->common->fetch_log($path, $viewsvn->paths->fetch_rev_num()), true) . '</pre>';
 
 $listing = $viewsvn->svn->ls($repos, $relpath, @$viewsvn->in['rev']);
 
@@ -37,16 +43,16 @@ foreach ($listing AS $item)
        echo '<li>';
        if ($item{ strlen($item) - 1 } == '/')
        {
-               echo '<a href="/viewsvn/' . $viewsvn->paths->out('browse.php' . (@$viewsvn->in['rev'] ? '?rev=' . $viewsvn->in['rev'] : ''), $path . $item) . '">' . $item . '</a>';
+               echo '<a href="/viewsvn/' . $viewsvn->paths->out('browse.php' . $viewsvn->paths->fetch_rev_str(), $path . $item) . '">' . $item . '</a>';
        }
        else
        {
-               echo '<a href="/viewsvn/' . $viewsvn->paths->out('log.php' . (@$viewsvn->in['rev'] ? '?rev=' . $viewsvn->in['rev'] : ''), $path . $item) . '">'. $item . '</a>';
-               echo ' - <a href="/viewsvn/' . $viewsvn->paths->out('blame.php?rev=' . @$viewsvn['rev'], $path . $item) . '">Blame</a>';
+               echo '<a href="/viewsvn/' . $viewsvn->paths->out('log.php' . $viewsvn->paths->fetch_rev_str(), $path . $item) . '">'. $item . '</a>';
+               echo ' - <a href="/viewsvn/' . $viewsvn->paths->out('blame.php' . $viewsvn->paths->fetch_rev_str(), $path . $item) . '">Blame</a>';
        }
        
-       echo ' - <a href="/viewsvn/' . $viewsvn->paths->out('log.php?rev=' . @$viewsvn->in['rev'], $path . $item) . '">View Log</a>';
-       echo ' - <a href="/viewsvn/' . $viewsvn->paths->out('diff.php', $path . $item) . '">Diff to PREV</a>';
+       echo ' - <a href="/viewsvn/' . $viewsvn->paths->out('log.php' . $viewsvn->paths->fetch_rev_str(), $path . $item) . '">View Log</a>';
+       //echo ' - <a href="/viewsvn/' . $viewsvn->paths->out('diff.php' . $viewsvn->paths->fetch_rev_str(true, $viewsvn->paths->fetch_rev_num()), $path . $item) . '">Diff to PREV</a>';
        
        echo '</li>';
        echo "\n";
index 0376bbfb9553911e139322add9cb9ceb174bcaef..fd6f8dd2d53196d65e351bb50c3c59fc24e694fd 100644 (file)
--- 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 '
                        <tr style="background-color: #F7F7F7">
-                               <td><a href="/viewsvn/' . $viewsvn->paths->out('view.php?rev=' . $viewsvn->in['low'], $filepath) . '">r' . $viewsvn->in['low'] . '</a></td>
-                               <td><a href="/viewsvn/' . $viewsvn->paths->out('view.php?rev=' . $viewsvn->in['high'], $filepath) . '">r' . $viewsvn->in['high'] . '</a></td>
+                               <td><a href="/viewsvn/' . $viewsvn->paths->out('view.php' . $viewsvn->paths->fetch_rev_str(false, $low), $filepath) . '">r' . $low . '</a></td>
+                               <td><a href="/viewsvn/' . $viewsvn->paths->out('view.php' . $viewsvn->paths->fetch_rev_str(false, $high), $filepath) . '">r' . $high . '</a></td>
                                <td>&nbsp;</td>
                        </tr>';
                                continue;
index af5b1d8135940d72b5308049345c25f5cec177f1..2b46045af05ff229635b2bebd56f0ae3cfe12b5c 100644 (file)
@@ -142,7 +142,7 @@ class Paths
                foreach ($temp AS $val => $item)
                {
                        $itembit .= $item . (($count != $val) ? '/' : ($doslash ? '/' : ''));
-                       $html .= ($count == $val ? '<strong>' : '<a href="/viewsvn/' . $this->out('browse.php', $itembit) . '">') . $item . ($count == $val ? '</strong>' : '</a>') . ($count != $val ? ' / ' : '');
+                       $html .= ($count == $val ? '<strong>' : '<a href="/viewsvn/' . $this->out('browse.php' . $this->fetch_rev_str(), $itembit) . '">') . $item . ($count == $val ? '</strong>' : '</a>') . ($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'] . '&amp;high=' . $rev['high'];
+               }
+               else
+               {
+                       return '?rev=' . $rev;
+               }
+       }
+       
        /**
        * Sanitizes a path for passing
        *
index 0a5a9bd53fda3ad8dd0d52becb7b9f4841e4ad42..98d149ea859760935b4262cbbc10292a1be83165 100644 (file)
@@ -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 b16e8e1945f9a51ed647501658444066fe94d88f..5cdd2d3e06b9e8589bf6d9ebf85e09fe4457f6df 100644 (file)
--- 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 '<br />';
+
+// 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 '<li>' . $log['rev'] .
-               (!$isdir ? ' - <a href="/viewsvn/' . $viewsvn->paths->out('view.php?rev=' . $log['rev'], $path) . '">View</a>' : '') . 
-               ' - <a href="/viewsvn/' . $viewsvn->paths->out('blame.php?rev=' . $log['rev'], $path) . '">Blame</a>' .
-               ($viewsvn->svn->common->fetch_head_rev($path) != $log['rev'] ? ' - <a href="/viewsvn/' . $viewsvn->paths->out('diff.php?low=' . $log['rev'] . '&amp;high=HEAD', $path) . '">Diff to HEAD</a>' : '') .
-               ($prev != -1 ? ' - <a href="/viewsvn/' . $viewsvn->paths->out('diff.php?low=' . $prev . '&amp;high=' . $log['rev'], $path) . '">Diff to PREV</a>' : '');
+               (!$isdir ? ' - <a href="/viewsvn/' . $viewsvn->paths->out('view.php' . $viewsvn->paths->fetch_rev_str(false, $log['rev']), $path) . '">View</a>' : '') . 
+               ' - <a href="/viewsvn/' . $viewsvn->paths->out('blame.php' . $viewsvn->paths->fetch_rev_str(false, $log['rev']), $path) . '">Blame</a>' .
+               ($viewsvn->svn->common->fetch_head_rev($path) != $log['rev'] ? ' - <a href="/viewsvn/' . $viewsvn->paths->out('diff.php' . $viewsvn->paths->fetch_rev_str(true, 'HEAD', $log['rev']), $path) . '">Diff to HEAD</a>' : '') .
+               ($prev != -1 ? ' - <a href="/viewsvn/' . $viewsvn->paths->out('diff.php' . $viewsvn->paths->fetch_rev_str(true, $log['rev'], $prev), $path) . '">Diff to PREV</a>' : '');
        echo "\n";
        echo '<ul>';
        echo "\n";
index f70d61a570d8df06c9fd0b399d4ea840751b07a7..0972e7ec835b3a6355ac39286b1523217589ceea 100644 (file)
--- a/view.php
+++ b/view.php
@@ -20,20 +20,21 @@ echo $viewsvn->paths->construct_breadcrumb($path, false);
 
 echo '<br />';
 
-echo '<a href="/viewsvn/' . $viewsvn->paths->out('log.php', $path) . '">View Log</a>';
-if ($viewsvn->svn->common->fetch_head_rev($path) != @$viewsvn->in['rev'] AND @$viewsvn->in['rev'] != 'HEAD')
+echo '<a href="/viewsvn/' . $viewsvn->paths->out('log.php' . $viewsvn->paths->fetch_rev_str(), $path) . '">View Log</a>';
+
+if ($viewsvn->svn->common->fetch_head_rev($path) != $viewsvn->paths->fetch_rev_num() AND $viewsvn->paths->fetch_rev_num() != 'HEAD')
 {
-       echo ' - <a href="/viewsvn/' . $viewsvn->paths->out('view.php?rev=HEAD', $path) . '">Go to HEAD</a>';
-       echo ' - <a href="/viewsvn/' . $viewsvn->paths->out('diff.php?low=' . @$viewsvn->in['rev'] . '&amp;high=HEAD', $path) . '">Diff to HEAD</a>';
+       echo ' - <a href="/viewsvn/' . $viewsvn->paths->out('view.php' . $viewsvn->paths->fetch_rev_str(false, 'HEAD'), $path) . '">Go to HEAD</a>';
+       echo ' - <a href="/viewsvn/' . $viewsvn->paths->out('diff.php' . $viewsvn->paths->fetch_rev_str(true, 'HEAD', $viewsvn->paths->fetch_rev_num()), $path) . '">Diff to HEAD</a>';
 }
 
-$prev = $viewsvn->svn->common->fetch_prev_rev($path, @$viewsvn->in['rev']);
+$prev = $viewsvn->svn->common->fetch_prev_rev($path, $viewsvn->paths->fetch_rev_num());
 if ($prev != -1)
 {
-       echo ' - <a href="/viewsvn/' . $viewsvn->paths->out('diff.php?low=' . $prev . '&amp;high=' . @$viewsvn->in['rev'], $path) . '">Diff to PREV</a>';
+       echo ' - <a href="/viewsvn/' . $viewsvn->paths->out('diff.php' . $viewsvn->paths->fetch_rev_str(true, $viewsvn->paths->fetch_rev_num(), $prev), $path) . '">Diff to PREV</a>';
 }
 
-$logmsg = $viewsvn->svn->common->fetch_log($path, @$viewsvn->in['rev']);
+$logmsg = $viewsvn->svn->common->fetch_log($path, $viewsvn->paths->fetch_rev_num());
 unset($logmsg['files']);
 echo '<pre>' . print_r($logmsg, true) . '</pre>';