mirror of
https://github.com/borgbackup/borg.git
synced 2025-01-01 12:45:34 +00:00
repository3.list: more efficient implementation
This commit is contained in:
parent
68e64adb9f
commit
5c325e3254
1 changed files with 19 additions and 10 deletions
|
@ -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:
|
||||
collect = True if marker is None else False
|
||||
ids = []
|
||||
if marker is not None:
|
||||
idx = ids.index(marker)
|
||||
ids = ids[idx + 1 :]
|
||||
if limit is not None:
|
||||
return ids[:limit]
|
||||
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):
|
||||
|
|
Loading…
Reference in a new issue