Issue #28764: Fix a test_mailbox failure on Android API 24 when run as a non-root user.
This commit is contained in:
parent
b227227cb5
commit
452b3a6a3e
@ -313,11 +313,12 @@ class Maildir(Mailbox):
|
|||||||
# final position in order to prevent race conditions with changes
|
# final position in order to prevent race conditions with changes
|
||||||
# from other programs
|
# from other programs
|
||||||
try:
|
try:
|
||||||
if hasattr(os, 'link'):
|
try:
|
||||||
os.link(tmp_file.name, dest)
|
os.link(tmp_file.name, dest)
|
||||||
os.remove(tmp_file.name)
|
except (AttributeError, PermissionError):
|
||||||
else:
|
|
||||||
os.rename(tmp_file.name, dest)
|
os.rename(tmp_file.name, dest)
|
||||||
|
else:
|
||||||
|
os.remove(tmp_file.name)
|
||||||
except OSError as e:
|
except OSError as e:
|
||||||
os.remove(tmp_file.name)
|
os.remove(tmp_file.name)
|
||||||
if e.errno == errno.EEXIST:
|
if e.errno == errno.EEXIST:
|
||||||
@ -1200,13 +1201,14 @@ class MH(Mailbox):
|
|||||||
for key in self.iterkeys():
|
for key in self.iterkeys():
|
||||||
if key - 1 != prev:
|
if key - 1 != prev:
|
||||||
changes.append((key, prev + 1))
|
changes.append((key, prev + 1))
|
||||||
if hasattr(os, 'link'):
|
try:
|
||||||
os.link(os.path.join(self._path, str(key)),
|
os.link(os.path.join(self._path, str(key)),
|
||||||
os.path.join(self._path, str(prev + 1)))
|
os.path.join(self._path, str(prev + 1)))
|
||||||
os.unlink(os.path.join(self._path, str(key)))
|
except (AttributeError, PermissionError):
|
||||||
else:
|
|
||||||
os.rename(os.path.join(self._path, str(key)),
|
os.rename(os.path.join(self._path, str(key)),
|
||||||
os.path.join(self._path, str(prev + 1)))
|
os.path.join(self._path, str(prev + 1)))
|
||||||
|
else:
|
||||||
|
os.unlink(os.path.join(self._path, str(key)))
|
||||||
prev += 1
|
prev += 1
|
||||||
self._next_key = prev + 1
|
self._next_key = prev + 1
|
||||||
if len(changes) == 0:
|
if len(changes) == 0:
|
||||||
@ -2076,13 +2078,14 @@ def _lock_file(f, dotlock=True):
|
|||||||
else:
|
else:
|
||||||
raise
|
raise
|
||||||
try:
|
try:
|
||||||
if hasattr(os, 'link'):
|
try:
|
||||||
os.link(pre_lock.name, f.name + '.lock')
|
os.link(pre_lock.name, f.name + '.lock')
|
||||||
dotlock_done = True
|
dotlock_done = True
|
||||||
os.unlink(pre_lock.name)
|
except (AttributeError, PermissionError):
|
||||||
else:
|
|
||||||
os.rename(pre_lock.name, f.name + '.lock')
|
os.rename(pre_lock.name, f.name + '.lock')
|
||||||
dotlock_done = True
|
dotlock_done = True
|
||||||
|
else:
|
||||||
|
os.unlink(pre_lock.name)
|
||||||
except FileExistsError:
|
except FileExistsError:
|
||||||
os.remove(pre_lock.name)
|
os.remove(pre_lock.name)
|
||||||
raise ExternalClashError('dot lock unavailable: %s' %
|
raise ExternalClashError('dot lock unavailable: %s' %
|
||||||
|
@ -2137,9 +2137,9 @@ class MaildirTestCase(unittest.TestCase):
|
|||||||
if mbox:
|
if mbox:
|
||||||
fp.write(FROM_)
|
fp.write(FROM_)
|
||||||
fp.write(DUMMY_MESSAGE)
|
fp.write(DUMMY_MESSAGE)
|
||||||
if hasattr(os, "link"):
|
try:
|
||||||
os.link(tmpname, newname)
|
os.link(tmpname, newname)
|
||||||
else:
|
except (AttributeError, PermissionError):
|
||||||
with open(newname, "w") as fp:
|
with open(newname, "w") as fp:
|
||||||
fp.write(DUMMY_MESSAGE)
|
fp.write(DUMMY_MESSAGE)
|
||||||
self._msgfiles.append(newname)
|
self._msgfiles.append(newname)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user