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:

Reply via email to