diff --git a/trac/versioncontrol/templates/dir_entries.html b/trac/versioncontrol/templates/dir_entries.html
--- a/trac/versioncontrol/templates/dir_entries.html
+++ b/trac/versioncontrol/templates/dir_entries.html
@@ -7,7 +7,9 @@
   </py:if>
   <py:for each="idx, entry in enumerate(dir.entries)">
     <py:with vars="change = dir.changes[entry.rev]">
-      <tr class="${idx % 2 and 'even' or 'odd'}">
+      <tr class="${idx % 2 and 'even' or 'odd'}" py:with="chgset_context = context('changeset', change.rev);
+                                                          allowed = change and 'CHANGESET_VIEW' in perm(chgset_context.resource) 
+                                                                    and any(change.get_changes())">
         <td class="name">
           <a class="$entry.kind" title="View ${entry.kind.capitalize()}"
              href="${href.browser(entry.path, rev=stickyrev, order=(dir.order != 'name' and dir.order or None), desc=dir.desc)}">$entry.name</a>
@@ -16,18 +18,18 @@
         <td class="rev">
           <a title="View Revision Log" href="${href.log(entry.path, rev=rev)}">$entry.rev</a>
         </td>
-        <td class="age" style="${change and dir.timerange and 'border-color: rgb(%s,%s,%s)' %
+        <td class="age" style="${allowed and dir.timerange and 'border-color: rgb(%s,%s,%s)' %
           dir.colorize_age(dir.timerange.relative(change.date)) or None}">
-          ${change and dateinfo(change.date) or '-'}
+          ${allowed and dateinfo(change.date) or None}
         </td>
         <td class="change">
-          <span class="author" py:if="change">${authorinfo(change.author)}:</span>
-          <span class="change" py:choose="" py:with="chgset_context = context('changeset', change.rev)">
-            <py:when test="not change or 'CHANGESET_VIEW' not in perm(chgset_context.resource)">-</py:when>
+          <span class="author" py:if="allowed">${authorinfo(change.author)}:</span>
+          <span class="change" py:choose="">
+            <py:when test="not allowed"></py:when>
             <py:when test="wiki_format_messages">
-              ${change and wiki_to_oneliner(chgset_context, change.message, shorten=True)}
+              ${wiki_to_oneliner(chgset_context, change.message, shorten=True)}
             </py:when>
-            <py:otherwise>${change and shorten_line(change.message)}</py:otherwise>
+            <py:otherwise>${shorten_line(change.message)}</py:otherwise>
           </span>
         </td>
       </tr>
diff --git a/trac/versioncontrol/templates/revisionlog.html b/trac/versioncontrol/templates/revisionlog.html
--- a/trac/versioncontrol/templates/revisionlog.html
+++ b/trac/versioncontrol/templates/revisionlog.html
@@ -108,7 +108,8 @@
             <py:for each="idx, item in enumerate(items)">
               <py:with vars="change = changes[item.rev];
                              chgset_context = context('changeset', change.rev);
-                             odd_even = idx % 2 and 'odd' or 'even'">
+                             odd_even = idx % 2 and 'odd' or 'even';
+                             allowed = 'CHANGESET_VIEW' in perm(chgset_context.resource) and any(change.get_changes())">
                 <!--! highlight copy or rename operations -->
                 <tr py:if="item.change and item.get('copyfrom_path')" class="$odd_even">
                   <td />
@@ -139,10 +140,10 @@
                       <a title="View changeset [$item.rev] for $item.path" href="${href.changeset(item.rev, item.path)}">
                         [$item.rev]</a>
                     </td>
-                    <td class="date" py:content="dateinfo(change.date)" />
-                    <td class="author" py:content="authorinfo(change.author)" />
+                    <td class="date" py:content="allowed and dateinfo(change.date) or ''" />
+                    <td class="author" py:content="allowed and authorinfo(change.author) or ''" />
                     <td class="summary" py:choose="">
-                      <py:when test="verbose or 'CHANGESET_VIEW' not in perm(chgset_context.resource)"></py:when>
+                      <py:when test="verbose or not allowed"></py:when>
                       <py:when test="wiki_format_messages">
                         ${wiki_to_oneliner(chgset_context, change.message, shorten=True)}
                       </py:when>
@@ -154,6 +155,7 @@
 
                 <tr py:if="verbose" class="$odd_even verbose">
                   <td class="summary" colspan="6" py:choose="" xml:space="preserve">
+                    <py:when test="not allowed"></py:when>
                     <py:when test="wiki_format_messages">
                       ${wiki_to_html(chgset_context, change.message, escape_newlines=True)}
                     </py:when>

