commit: e6121d92e586c0f9b75998eca2d1fbb46db7c821 Author: Zac Medico <zmedico <AT> gentoo <DOT> org> AuthorDate: Mon Nov 10 06:25:10 2014 +0000 Commit: Zac Medico <zmedico <AT> gentoo <DOT> org> CommitDate: Tue Nov 18 01:02:03 2014 +0000 URL: http://sources.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=e6121d92
NewsManager.getUnreadItems: handle EROFS (490732) When getUnreadItems tries to lock the news.unread file, it's safe to ignore EROFS. This is handled with a ReadOnlyFileSystem exception raised from the portage.locks.lockfile function. X-Gentoo-Bug: 490732 X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=490732 Acked-by: Brian Dolbec <dolsen <AT> gentoo.org> --- pym/portage/exception.py | 1 + pym/portage/locks.py | 9 +++++++-- pym/portage/news.py | 9 +++++---- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/pym/portage/exception.py b/pym/portage/exception.py index ef62e7a..857a727 100644 --- a/pym/portage/exception.py +++ b/pym/portage/exception.py @@ -133,6 +133,7 @@ class AlarmSignal(TimeoutException): class ReadOnlyFileSystem(PortageException): """Read-only file system""" + from errno import EROFS as errno class CommandNotFound(PortageException): """A required binary was not available or executable""" diff --git a/pym/portage/locks.py b/pym/portage/locks.py index 0789f89..fdfe4a5 100644 --- a/pym/portage/locks.py +++ b/pym/portage/locks.py @@ -15,8 +15,9 @@ import warnings import portage from portage import os, _encodings, _unicode_decode -from portage.exception import DirectoryNotFound, FileNotFound, \ - InvalidData, TryAgain, OperationNotPermitted, PermissionDenied +from portage.exception import (DirectoryNotFound, FileNotFound, + InvalidData, TryAgain, OperationNotPermitted, PermissionDenied, + ReadOnlyFileSystem) from portage.util import writemsg from portage.localization import _ @@ -110,6 +111,8 @@ def lockfile(mypath, wantnewlockfile=0, unlinkfile=0, raise OperationNotPermitted(func_call) elif e.errno == PermissionDenied.errno: raise PermissionDenied(func_call) + elif e.errno == ReadOnlyFileSystem.errno: + raise ReadOnlyFileSystem(func_call) else: raise @@ -404,6 +407,8 @@ def hardlink_lockfile(lockfilename, max_wait=DeprecationWarning, raise OperationNotPermitted(func_call) elif e.errno == PermissionDenied.errno: raise PermissionDenied(func_call) + elif e.errno == ReadOnlyFileSystem.errno: + raise ReadOnlyFileSystem(func_call) else: raise else: diff --git a/pym/portage/news.py b/pym/portage/news.py index 0d72b00..2c45f85 100644 --- a/pym/portage/news.py +++ b/pym/portage/news.py @@ -1,5 +1,5 @@ # portage: news management code -# Copyright 2006-2013 Gentoo Foundation +# Copyright 2006-2014 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 from __future__ import print_function, unicode_literals @@ -27,8 +27,8 @@ from portage.dep import isvalidatom from portage.localization import _ from portage.locks import lockfile, unlockfile from portage.output import colorize -from portage.exception import InvalidLocation, OperationNotPermitted, \ - PermissionDenied +from portage.exception import (InvalidLocation, OperationNotPermitted, + PermissionDenied, ReadOnlyFileSystem) class NewsManager(object): """ @@ -180,7 +180,8 @@ class NewsManager(object): unread_lock = None try: unread_lock = lockfile(unread_filename, wantnewlockfile=1) - except (InvalidLocation, OperationNotPermitted, PermissionDenied): + except (InvalidLocation, OperationNotPermitted, PermissionDenied, + ReadOnlyFileSystem): pass try: try: