Added format_log_message() to SVNLib
authorRobert Sesek <rsesek@bluestatic.org>
Fri, 23 Dec 2005 20:30:57 +0000 (20:30 +0000)
committerRobert Sesek <rsesek@bluestatic.org>
Fri, 23 Dec 2005 20:30:57 +0000 (20:30 +0000)
browse.php
diff.php
includes/svnlib.php
log.php
view.php

index a9ef900aa1e88438e86490a9ed11ce3a84320d3e..ebe2a1030e5edb272640ced872178d0c94a14019 100644 (file)
@@ -49,7 +49,7 @@ if ($show['prev'])
 
 $revinfo = $viewsvn->svn->common->fetch_log($path, $viewsvn->paths->fetch_rev_num());
 
-$revinfo['message_clean'] = nl2br(htmlspecialchars($revinfo['message']));
+$revinfo['message_clean'] = $viewsvn->svn->format_log_message($revinfo['message']);
 
 $listing = $viewsvn->svn->ls($repos, $relpath, $viewsvn->paths->fetch_rev_num());
 
index ce500c51fe470a7b0aeaa4d0f2d101423533da50..067cbdb8d31199da333c77a669b8f7c926d3ee17 100644 (file)
--- a/diff.php
+++ b/diff.php
@@ -62,7 +62,7 @@ if ($show['fullchangeset'])
 
 $log = $viewsvn->svn->common->fetch_log($path, $high);
 
-$log['message_clean'] = nl2br(htmlspecialchars($log['message']));
+$log['message_clean'] = $viewsvn->svn->format_log_message($log['message']);
 
 $files = $viewsvn->svn->common->construct_file_changes($log['files'], $repos, $high);
 
index e2a7283458b5814c5e7216cd746880a5075f3142..a36ec776da6a8f9d7b4ce4daca5003fb6ecc8604 100644 (file)
@@ -110,6 +110,69 @@ class SVNLib
                return $string;
        }
        
+       /**
+       * Formats a SVN log message
+       *
+       * @access       public
+       *
+       * @param        string  Unformatted log message
+       *
+       * @return       string  Output-ready log message
+       */
+       function format_log_message($message)
+       {
+               global $viewsvn;
+               
+               $message = $viewsvn->entity_encode($message);
+               
+               $message = preg_replace('#(^| )r([0-9]*)( |$)#e', '$viewsvn->paths->out("diff.php" . $viewsvn->paths->fetch_rev_str(true, \2, 0), $viewsvn->paths->fetch_repos())', $message);
+               
+               $list = false;
+               $lines = explode("\n", $message);
+               $message = '';
+               foreach ($lines AS $line)
+               {
+                       if (preg_match('#^\s*?(\*|\-)\s?(.*)#', $line, $matches))
+                       {
+                               if ($list)
+                               {
+                                       $message .= '<li>' . $matches[2] . '</li>';
+                               }
+                               else
+                               {
+                                       $message .= '<ul>';
+                                       $message .= '<li>' . $matches[2] . '</li>';
+                               }
+                               $list = true;
+                       }
+                       else
+                       {
+                               if ($list)
+                               {
+                                       $message .= '</ul>';
+                                       $message .= $line;
+                               }
+                               else
+                               {
+                                       $message .= $line;
+                                       $message .= '<br />';
+                               }
+                               $list = false;
+                       }
+                       
+                       $message .= "\n";
+               }
+               
+               if ($list)
+               {
+                       $message .= '</ul>';
+               }
+               
+               $message = preg_replace('#(<br />)*$#', '', $message);
+               
+               return $message;
+       }
+       
        /**
        * Counts the spaces and replaces two or more ones
        *
diff --git a/log.php b/log.php
index 236d76a05df0f4f6267e23ca15d4266052d4d66a..4041c1bfb84353692862014575d9419c410283b0 100644 (file)
--- a/log.php
+++ b/log.php
@@ -56,7 +56,7 @@ foreach ($logs->fetch() AS $log)
                $link['diffprev'] = $viewsvn->paths->out('diff.php' . $viewsvn->paths->fetch_rev_str(true, $log['rev'], $prev), $path);
        }
        
-       $log['message_clean'] = nl2br(htmlspecialchars($log['message']));
+       $log['message_clean'] = $viewsvn->svn->format_log_message($log['message']);
 
        eval('$nodes .= "' . $template->fetch('log_node') . '";');
 }
index 2489e4dab8ff404c9c086315ef151ab27fec2f8d..3c49e76fb3929b684c19fef9f78b3baeaf6457a0 100644 (file)
--- a/view.php
+++ b/view.php
@@ -49,7 +49,7 @@ if ($show['prev'])
 $logmsg = $viewsvn->svn->common->fetch_log($path, $viewsvn->paths->fetch_rev_num());
 unset($logmsg['files']);
 
-$logmsg['message_clean'] = nl2br(htmlspecialchars($logmsg['message']));
+$logmsg['message_clean'] = $viewsvn->svn->format_log_message($logmsg['message']);
 
 $catdata = implode("\n", $viewsvn->svn->cat($repos, $relpath, $viewsvn->paths->fetch_rev_num()));