373 key = maxrev |
373 key = maxrev |
374 obsrevs = frozenset() |
374 obsrevs = frozenset() |
375 |
375 |
376 result = cl._filteredrevs_hashcache.get(key) |
376 result = cl._filteredrevs_hashcache.get(key) |
377 if not result: |
377 if not result: |
378 revs = sorted(r for r in cl.filteredrevs | obsrevs if r <= maxrev) |
378 revs, obs_revs = _filtered_and_obs_revs(repo, maxrev) |
|
379 if needobsolete: |
|
380 revs = revs | obs_revs |
|
381 revs = sorted(revs) |
379 if revs: |
382 if revs: |
380 result = _hash_revs(revs) |
383 result = _hash_revs(revs) |
381 cl._filteredrevs_hashcache[key] = result |
384 cl._filteredrevs_hashcache[key] = result |
382 return result |
385 return result |
|
386 |
|
387 |
|
388 def _filtered_and_obs_revs(repo, max_rev): |
|
389 """return the set of filtered and non-filtered obsolete revision""" |
|
390 cl = repo.changelog |
|
391 obs_set = obsolete.getrevs(repo, b'obsolete') |
|
392 filtered_set = cl.filteredrevs |
|
393 if cl.filteredrevs: |
|
394 obs_set = obs_set - cl.filteredrevs |
|
395 if max_rev < (len(cl) - 1): |
|
396 # there might be revision to filter out |
|
397 filtered_set = set(r for r in filtered_set if r <= max_rev) |
|
398 obs_set = set(r for r in obs_set if r <= max_rev) |
|
399 return (filtered_set, obs_set) |
383 |
400 |
384 |
401 |
385 def _hash_revs(revs): |
402 def _hash_revs(revs): |
386 """return a hash from a list of revision numbers""" |
403 """return a hash from a list of revision numbers""" |
387 s = hashutil.sha1() |
404 s = hashutil.sha1() |