diff --git a/trac/versioncontrol/svn_fs.py b/trac/versioncontrol/svn_fs.py
--- a/trac/versioncontrol/svn_fs.py
+++ b/trac/versioncontrol/svn_fs.py
@@ -786,6 +786,11 @@
         return fs.node_prop(self.root, self._scoped_path_utf8, name,
                             self.pool())
 
+    def get_branch_origin(self):
+        root_and_path = fs.closest_copy(self.root, self._scoped_path_utf8)
+        if root_and_path:
+            return fs.revision_root_revision(root_and_path[0])
+
     def get_copy_ancestry(self):
         """Retrieve the list of `(path,rev)` copy ancestors of this node.
         Most recent ancestor first. Each ancestor `(path, rev)` corresponds 
diff --git a/trac/versioncontrol/svn_prop.py b/trac/versioncontrol/svn_prop.py
--- a/trac/versioncontrol/svn_prop.py
+++ b/trac/versioncontrol/svn_prop.py
@@ -172,11 +172,16 @@
                            _get_revs_link(revs_label, context, spath, revs)]
                     if has_eligible:
                         first_rev = branch_starts.get(spath)
-                        eligible = set(repos._get_node_revs(spath, target_rev,
-                                                            first_rev))
+                        if not first_rev:
+                            first_rev = node.get_branch_origin()
+                        eligible = set(xrange(first_rev or 1, target_rev + 1))
                         eligible -= set(Ranges(revs))
                         blocked = _get_blocked_revs(props, name, spath)
                         eligible -= set(Ranges(blocked))
+                        if eligible:
+                            noderevs = repos._get_node_revs(spath, target_rev,
+                                                            min(eligible))
+                            eligible &= set(noderevs)
                         eligible = to_ranges(eligible)
                         row.append(_get_revs_link(_('eligible'), context,
                                                   spath, eligible))

