Index: templates/revisionlog.html
===================================================================
--- templates/revisionlog.html	(revision 4434)
+++ templates/revisionlog.html	(working copy)
@@ -120,6 +120,7 @@
                       <span class="comment">($item.change)</span>
                     </a>
                   </td>
+                  <py:if test="not item.courtesy">
                   <td class="rev">
                     <a title="Browse at revision $item.rev" href="${href.browser(item.path, rev=item.existing_rev)}">
                       @$item.existing_rev</a>
@@ -133,10 +134,10 @@
                   <td class="summary">${
                     not verbose and (wiki_format_messages and wiki_to_oneliner(change.message) \
                                  or shorten_line(change.message)) or ''
-                    }</td>
+                    }</td></py:if>
                 </tr>
 
-                <tr py:if="verbose">
+                <tr py:if="verbose and not item.courtesy">
                   <td class="summary" colspan="7" py:choose="">
                     <py:when test="wiki_format_messages">
                       ${wiki_to_html(change.message, escape_newlines=True)}
Index: trac/versioncontrol/web_ui/log.py
===================================================================
--- trac/versioncontrol/web_ui/log.py	(revision 4434)
+++ trac/versioncontrol/web_ui/log.py	(working copy)
@@ -73,6 +73,8 @@
         verbose = req.args.get('verbose')
         limit = int(req.args.get('limit', LOG_LIMIT))
 
+        peek_back = format not in ('rss', 'changelog')
+
         repos = self.env.get_repository(req.authname)
         normpath = repos.normalize_path(path)
         revranges = None
@@ -104,6 +106,11 @@
             else:
                 def history(limit):
                     prevpath = path
+                    # Support for the phantom diff source
+                    if peek_back and len(revranges.pairs):
+                        x = revranges.pairs[0]
+                        if x[0] > 1:
+                            revranges.pairs[0] = (x[0]-1, x[1])
                     ranges = list(revranges.pairs)
                     ranges.reverse()
                     for (a,b) in ranges:
@@ -123,12 +130,15 @@
         depth = 1
         fix_deleted_rev = False
         previous_path = normpath
+        stop_flag = 0
         for old_path, old_rev, old_chg in history(limit+1):
             if fix_deleted_rev:
                 fix_deleted_rev['existing_rev'] = old_rev
                 fix_deleted_rev = False
             if stop_rev and repos.rev_older_than(old_rev, stop_rev):
-                break
+                # Get one more rev to support peek_back
+                if stop_flag == 1: break
+                stop_flag = 1
             old_path = repos.normalize_path(old_path)
 
             item = {
@@ -173,7 +183,13 @@
                      'Revision Log (restarting at %s, rev. %s)'
                      % (next_path, next_rev))
             # now, only show 'limit' results
-            del info[-1]
+            if peek_back:
+                info[-1]['courtesy'] = True
+            else:
+                del info[-1]
+        elif peek_back and revranges and len(revranges.pairs) and info[-1]['rev'] < revranges.a:
+            #FIXME: this needs to act on 
+            info[-1]['courtesy'] = True
         
         revs = [i['rev'] for i in info]
         changes = get_changes(repos, revs)

