phase-shelve: honor and prefer obs shelves for existence and modified time
authorJason R. Coombs <jaraco@jaraco.com>
Thu, 28 Jul 2022 13:17:36 -0400
changeset 49427 c4417029e6c2
parent 49426 24ffd13893cc
child 49428 cc7eb0b558c0
phase-shelve: honor and prefer obs shelves for existence and modified time
mercurial/shelve.py
tests/test-shelve.t
--- a/mercurial/shelve.py	Thu Jul 28 12:53:11 2022 -0400
+++ b/mercurial/shelve.py	Thu Jul 28 13:17:36 2022 -0400
@@ -112,12 +112,19 @@
         self.name = name
 
     def exists(self):
-        return self.vfs.exists(self.name + b'.patch') and self.vfs.exists(
-            self.name + b'.hg'
-        )
+        return self._exists(b'.shelve') or self._exists(b'.patch', b'.hg')
+
+    def _exists(self, *exts):
+        return all(self.vfs.exists(self.name + ext) for ext in exts)
 
     def mtime(self):
-        return self.vfs.stat(self.name + b'.patch')[stat.ST_MTIME]
+        try:
+            return self._stat(b'.shelve')[stat.ST_MTIME]
+        except FileNotFoundError:
+            return self._stat(b'.patch')[stat.ST_MTIME]
+
+    def _stat(self, ext):
+        return self.vfs.stat(self.name + ext)
 
     def writeinfo(self, info):
         scmutil.simplekeyvaluefile(self.vfs, self.name + b'.shelve').write(info)
--- a/tests/test-shelve.t	Thu Jul 28 12:53:11 2022 -0400
+++ b/tests/test-shelve.t	Thu Jul 28 13:17:36 2022 -0400
@@ -243,12 +243,12 @@
 (this also tests that same timestamp prevents backups from being
 removed, even though there are more than 'maxbackups' backups)
 
-  $ f -t .hg/shelve-backup/default.patch
-  .hg/shelve-backup/default.patch: file
-  $ touch -t 200001010000 .hg/shelve-backup/default.patch
-  $ f -t .hg/shelve-backup/default-1.patch
-  .hg/shelve-backup/default-1.patch: file
-  $ touch -t 200001010000 .hg/shelve-backup/default-1.patch
+  $ f -t .hg/shelve-backup/default.shelve
+  .hg/shelve-backup/default.shelve: file
+  $ touch -t 200001010000 .hg/shelve-backup/default.shelve
+  $ f -t .hg/shelve-backup/default-1.shelve
+  .hg/shelve-backup/default-1.shelve: file
+  $ touch -t 200001010000 .hg/shelve-backup/default-1.shelve
 
   $ hg unshelve
   unshelving change 'default-01'