shelve: use listshelves() in cleanupoldbackups()
With this patch, there are no more assumptions outside the `Shelf`
class about which files (`.patch`, `.hg`, `.shelve`) make up a
shelf. As such, this finishes the preparations for making phase-based
shelve (perhaps optionally) not write the `.patch` and `.hg` files.
Differential Revision: https://phab.mercurial-scm.org/D9740
--- a/mercurial/shelve.py Mon Jan 11 23:02:20 2021 -0800
+++ b/mercurial/shelve.py Mon Jan 11 23:06:45 2021 -0800
@@ -325,19 +325,17 @@
def cleanupoldbackups(repo):
vfs = vfsmod.vfs(repo.vfs.join(backupdir))
maxbackups = repo.ui.configint(b'shelve', b'maxbackups')
- hgfiles = [f for f in vfs.listdir() if f.endswith(b'.' + patchextension)]
- hgfiles = sorted([(vfs.stat(f)[stat.ST_MTIME], f) for f in hgfiles])
+ hgfiles = listshelves(vfs)
if maxbackups > 0 and maxbackups < len(hgfiles):
- bordermtime = hgfiles[-maxbackups][0]
+ bordermtime = hgfiles[maxbackups - 1][0]
else:
bordermtime = None
- for mtime, f in hgfiles[: len(hgfiles) - maxbackups]:
+ for mtime, name in hgfiles[maxbackups:]:
if mtime == bordermtime:
# keep it, because timestamp can't decide exact order of backups
continue
- base = f[: -(1 + len(patchextension))]
for ext in shelvefileextensions:
- vfs.tryunlink(base + b'.' + ext)
+ vfs.tryunlink(name + b'.' + ext)
def _backupactivebookmark(repo):