shelve: trust caller of shelvedfile.opener() to check that the file exists
The only place we call `shelvedfile.opener()` is when we're about to
apply a bundle. The file should always exist. If it doesn't, the
`.hg/` directory is corrupt and we don't provide any guarantees about
supporting corrupt repos (besides, telling the user that the shelve
doesn't exist when `hg shelve --list` lists it is not very helpful).
Differential Revision: https://phab.mercurial-scm.org/D9698
--- a/mercurial/shelve.py Thu Jan 07 12:22:39 2021 -0800
+++ b/mercurial/shelve.py Thu Jan 07 12:58:43 2021 -0800
@@ -117,12 +117,7 @@
return self.vfs.stat(self.fname)
def opener(self, mode=b'rb'):
- try:
- return self.vfs(self.fname, mode)
- except IOError as err:
- if err.errno != errno.ENOENT:
- raise
- raise error.Abort(_(b"shelved change '%s' not found") % self.name)
+ return self.vfs(self.fname, mode)
def applybundle(self, tr):
fp = self.opener()
--- a/tests/test-shelve2.t Thu Jan 07 12:22:39 2021 -0800
+++ b/tests/test-shelve2.t Thu Jan 07 12:58:43 2021 -0800
@@ -756,7 +756,7 @@
junk1 (* ago) (glob)
$ hg unshelve
unshelving change 'junk1'
- abort: shelved change 'junk1' not found
+ abort: $ENOENT$: '$TESTTMP/corrupt-shelves/.hg/shelved/junk1.hg'
[255]
$ hg shelve -d junk1
$ find .hg/shelve* | sort