@@ -93,6 +93,10 @@ class Versions(object):
9393 URLs are just '.' initially. Set after instantiation by another function elsewhere. Will be relative URL path.
9494
9595 :ivar iter remotes: List of dicts for every branch/tag.
96+ :ivar dict greatest_tag_remote: Tag with the highest version number if it's a valid semver.
97+ :ivar dict recent_branch_remote: Most recently committed branch.
98+ :ivar dict recent_remote: Most recently committed branch/tag.
99+ :ivar dict recent_tag_remote: Most recently committed tag.
96100 :ivar dict root_remote: Branch/tag at the root of all HTML docs.
97101 """
98102
@@ -114,6 +118,10 @@ def __init__(self, remotes, sort=None, prioritize=None, invert=False):
114118 found_docs = tuple (), # tuple of str
115119 url = '.' , # str
116120 ) for r in remotes ]
121+ self .greatest_tag_remote = None
122+ self .recent_branch_remote = None
123+ self .recent_remote = None
124+ self .recent_tag_remote = None
117125 self .root_remote = None
118126
119127 # Sort one or more times.
@@ -130,6 +138,19 @@ def __init__(self, remotes, sort=None, prioritize=None, invert=False):
130138 if invert :
131139 self .remotes .reverse ()
132140
141+ # Get significant remotes.
142+ if self .remotes :
143+ remotes = self .remotes [:]
144+ multi_sort (remotes , ('chrono' ,))
145+ self .recent_remote = remotes [0 ]
146+ self .recent_branch_remote = ([r for r in remotes if r ['kind' ] != 'tags' ] or [None ])[0 ]
147+ self .recent_tag_remote = ([r for r in remotes if r ['kind' ] == 'tags' ] or [None ])[0 ]
148+ if self .recent_tag_remote :
149+ multi_sort (remotes , ('semver' ,))
150+ greatest_tag_remote = [r for r in remotes if r ['kind' ] == 'tags' ][0 ]
151+ if RE_SEMVER .search (greatest_tag_remote ['name' ]):
152+ self .greatest_tag_remote = greatest_tag_remote
153+
133154 def __bool__ (self ):
134155 """True if self.remotes is not empty. Python 3.x."""
135156 return bool (self .remotes )
@@ -209,7 +230,15 @@ def copy(self, sub_depth=0, pagename=None):
209230 else :
210231 remote_new ['url' ] = '{}.html' .format (pagename )
211232
212- # Handle root_remote.
233+ # Handle pinned remotes.
234+ if self .greatest_tag_remote == remote_old :
235+ new .greatest_tag_remote = remote_new
236+ if self .recent_branch_remote == remote_old :
237+ new .recent_branch_remote = remote_new
238+ if self .recent_remote == remote_old :
239+ new .recent_remote = remote_new
240+ if self .recent_tag_remote == remote_old :
241+ new .recent_tag_remote = remote_new
213242 if self .root_remote == remote_old :
214243 new .root_remote = remote_new
215244 return new
0 commit comments