Index: trac/versioncontrol/web_ui/log.py
===================================================================
--- trac/versioncontrol/web_ui/log.py	(revision 4687)
+++ trac/versioncontrol/web_ui/log.py	(working copy)
@@ -112,12 +112,16 @@
                             rev = repos.normalize_rev(b)
                             node = get_existing_node(req, repos, prevpath, rev)
                             node_history = list(node.get_history(2))
-                            rev = node_history[0][1]
+                            p, rev, chg = node_history[0]
                             if rev < a:
+                                yield (p, rev, None) # separator
                                 break
                             yield node_history[0]
                             prevpath = node_history[-1][0] # follow copy
                             b = rev-1
+                            if b < a and len(node_history) > 1:
+                                p, rev, chg = node_history[1]
+                                yield (p, rev, None)
 
         # -- retrieve history, asking for limit+1 results
         info = []
@@ -125,6 +129,7 @@
         fix_deleted_rev = False
         previous_path = normpath
         for old_path, old_rev, old_chg in history(limit+1):
+            print old_path, old_rev, old_chg
             if fix_deleted_rev:
                 fix_deleted_rev['existing_rev'] = old_rev
                 fix_deleted_rev = False
@@ -173,8 +178,8 @@
             add_link(req, 'next', make_log_href(next_path, rev=next_rev),
                      'Revision Log (restarting at %s, rev. %s)'
                      % (next_path, next_rev))
-            # now, only show 'limit' results
-            del info[-1]
+            # only show fully 'limit' results, use `change == None` as a marker
+            info[-1]['change'] = None
         
         revs = [i['rev'] for i in info]
         changes = get_changes(repos, revs)
Index: templates/revisionlog.html
===================================================================
--- templates/revisionlog.html	(revision 4687)
+++ templates/revisionlog.html	(working copy)
@@ -102,20 +102,21 @@
                              change_context = context('changeset', change.rev);
                              odd_even = idx % 2 and 'odd' or 'even'">
                 <!--! highlight copy or rename operations -->
-                <tr py:if="item.copyfrom_path" class="$odd_even">
+                <tr py:if="item.change and item.copyfrom_path" class="$odd_even">
                   <td />
                   <td class="copyfrom_path" colspan="7" style="padding-left: ${item.depth - 1}em">
                     copied from <a href="${href.browser(item.path, rev=item.rev)}">$item.copyfrom_path</a>:
                   </td>
                 </tr>
 
-                <tr class="$odd_even">
+                <tr class="$odd_even" py:choose="">
                   <td class="diff">
                     <input type="radio" name="old" value="${item.rev}@${item.path}"
                            checked="${idx == (len(items) - 1) or None}" />
                     <input type="radio" name="new" value="${item.rev}@${item.path}"
                            checked="${idx == 0 or None}" />
                   </td>
+                  <py:when test="item.change">
                   <td class="change" style="padding-left: ${item.depth}em">
                     <a title="View log starting at this revision" href="${href.log(item.path, rev=item.rev)}">
                       <span class="$item.change"></span>
@@ -139,6 +140,8 @@
                     </py:when>
                     <py:otherwise>shorten_line(change.message)</py:otherwise>
                   </td>
+                  </py:when>
+                  <td colspan="6" py:otherwise="" />
                 </tr>
 
                 <tr py:if="verbose">

