comparison mercurial/revlog.py @ 1463:26e73acc0cdf

Fix to handle case of empty list for roots or heads in nodesbetween.
author Eric Hopper <hopper@omnifarious.org>
date Mon, 10 Oct 2005 17:20:38 -0700
parents 106fdec8e1fb
children 0847c45ffee6
comparison
equal deleted inserted replaced
1462:12a8d772fa32 1463:26e73acc0cdf
259 259
260 If roots is unspecified, nullid is assumed as the only root. 260 If roots is unspecified, nullid is assumed as the only root.
261 If heads is unspecified, it is taken to be the output of the 261 If heads is unspecified, it is taken to be the output of the
262 heads method (i.e. a list of all nodes in the repository that 262 heads method (i.e. a list of all nodes in the repository that
263 have no children).""" 263 have no children)."""
264 nonodes = ([], [], [])
264 if roots is not None: 265 if roots is not None:
265 roots = list(roots) 266 roots = list(roots)
267 if not roots:
268 return nonodes
266 lowestrev = min([self.rev(n) for n in roots]) 269 lowestrev = min([self.rev(n) for n in roots])
267 else: 270 else:
268 roots = [nullid] # Everybody's a descendent of nullid 271 roots = [nullid] # Everybody's a descendent of nullid
269 lowestrev = -1 272 lowestrev = -1
270 if (lowestrev == -1) and (heads is None): 273 if (lowestrev == -1) and (heads is None):
278 # Set ancestors to None to signal that every node is an ancestor. 281 # Set ancestors to None to signal that every node is an ancestor.
279 ancestors = None 282 ancestors = None
280 # Set heads to an empty dictionary for later discovery of heads 283 # Set heads to an empty dictionary for later discovery of heads
281 heads = {} 284 heads = {}
282 else: 285 else:
286 heads = list(heads)
287 if not heads:
288 return nonodes
283 ancestors = {} 289 ancestors = {}
284 # Start at the top and keep marking parents until we're done. 290 # Start at the top and keep marking parents until we're done.
285 nodestotag = list(heads) 291 nodestotag = heads[:]
286 # Turn heads into a dictionary so we can remove 'fake' heads. 292 # Turn heads into a dictionary so we can remove 'fake' heads.
287 # Also, later we will be using it to filter out the heads we can't 293 # Also, later we will be using it to filter out the heads we can't
288 # find from roots. 294 # find from roots.
289 heads = dict.fromkeys(heads, 0) 295 heads = dict.fromkeys(heads, 0)
290 # Remember where the top was so we can use it as a limit later. 296 # Remember where the top was so we can use it as a limit later.
309 elif n in heads: # We've seen it before, is it a fake head? 315 elif n in heads: # We've seen it before, is it a fake head?
310 # So it is, real heads should not be the ancestors of 316 # So it is, real heads should not be the ancestors of
311 # any other heads. 317 # any other heads.
312 heads.pop(n) 318 heads.pop(n)
313 if not ancestors: 319 if not ancestors:
314 return ([], [], []) 320 return nonodes
315 # Now that we have our set of ancestors, we want to remove any 321 # Now that we have our set of ancestors, we want to remove any
316 # roots that are not ancestors. 322 # roots that are not ancestors.
317 323
318 # If one of the roots was nullid, everything is included anyway. 324 # If one of the roots was nullid, everything is included anyway.
319 if lowestrev > -1: 325 if lowestrev > -1:
325 # Recompute the lowest revision 331 # Recompute the lowest revision
326 if roots: 332 if roots:
327 lowestrev = min([self.rev(n) for n in roots]) 333 lowestrev = min([self.rev(n) for n in roots])
328 else: 334 else:
329 # No more roots? Return empty list 335 # No more roots? Return empty list
330 return ([], [], []) 336 return nonodes
331 else: 337 else:
332 # We are descending from nullid, and don't need to care about 338 # We are descending from nullid, and don't need to care about
333 # any other roots. 339 # any other roots.
334 lowestrev = -1 340 lowestrev = -1
335 roots = [nullid] 341 roots = [nullid]