=== trac/versioncontrol/cache.py
==================================================================
--- trac/versioncontrol/cache.py  (revision 145)
+++ trac/versioncontrol/cache.py  (local)
@@ -46,8 +46,11 @@
         if not self.synced:
             self.sync()
             self.synced = 1
-        return CachedChangeset(self.repos.normalize_rev(rev), self.db,
-                               self.authz)
+        try:
+            return CachedChangeset(self.repos.normalize_rev(rev), self.db,
+                                   self.authz)
+        except TracError:
+            return self.repos.get_changeset(rev)
 
     def sync(self):
         self.log.debug("Checking whether sync with repository is needed")
=== trac/versioncontrol/svn_fs.py
==================================================================
--- trac/versioncontrol/svn_fs.py  (revision 145)
+++ trac/versioncontrol/svn_fs.py  (local)
@@ -230,7 +230,7 @@
         rev = int(rev)
         if rev == 0:
             return None
-        if self.scope == '/':
+        if self.scope == '/' or not rev in self.history:
             return rev - 1
         idx = self.history.index(rev)
         if idx + 1 < len(self.history):
@@ -241,7 +241,7 @@
         rev = int(rev)
         if rev == self.rev:
             return None
-        if self.scope == '/':
+        if self.scope == '/' or not rev in self.history:
             return rev + 1
         if rev == 0:
             return self.oldest_rev

