Skip to content

Commit

Permalink
repository3.list: more efficient implementation
Browse files Browse the repository at this point in the history
  • Loading branch information
ThomasWaldmann committed Aug 20, 2024
1 parent df9f2e7 commit 928846d
Showing 1 changed file with 19 additions and 10 deletions.
29 changes: 19 additions & 10 deletions src/borg/repository3.py
Original file line number Diff line number Diff line change
Expand Up @@ -293,16 +293,25 @@ def list(self, limit=None, marker=None):
list <limit> IDs starting from after id <marker>.
"""
self._lock_refresh()
infos = self.store.list("data") # XXX we can only get the full list from the store
try:
ids = [hex_to_bin(info.name) for info in infos]
except StoreObjectNotFound:
ids = []
if marker is not None:
idx = ids.index(marker)
ids = ids[idx + 1 :]
if limit is not None:
return ids[:limit]
collect = True if marker is None else False
ids = []
infos = self.store.list("data") # generator yielding ItemInfos
while True:
try:
info = next(infos)
except StoreObjectNotFound:
break # can happen e.g. if "data" does not exist, pointless to continue in that case
except StopIteration:
break
else:
id = hex_to_bin(info.name)
if collect:
ids.append(id)
if len(ids) == limit:
break
elif id == marker:
collect = True
# note: do not collect the marker id
return ids

def get(self, id, read_data=True):
Expand Down

0 comments on commit 928846d

Please sign in to comment.