Index: pym/portage/locks.py =================================================================== --- pym/portage/locks.py (revision 12520) +++ pym/portage/locks.py (revision 12521) @@ -9,7 +9,7 @@ import errno, os, stat, time, types from portage.exception import DirectoryNotFound, FileNotFound, \ - InvalidData, TryAgain + InvalidData, TryAgain, OperationNotPermitted, PermissionDenied from portage.data import portage_gid from portage.output import EOutput from portage.util import writemsg @@ -55,22 +55,31 @@ if type(mypath) == types.StringType: if not os.path.exists(os.path.dirname(mypath)): raise DirectoryNotFound(os.path.dirname(mypath)) - if not os.path.exists(lockfilename): - old_mask=os.umask(000) - myfd = os.open(lockfilename, os.O_CREAT|os.O_RDWR,0660) + old_mask = os.umask(000) + try: try: + myfd = os.open(lockfilename, os.O_CREAT|os.O_RDWR, 0660) + except OSError, e: + func_call = "open('%s')" % lockfilename + if e.errno == OperationNotPermitted.errno: + raise OperationNotPermitted(func_call) + elif e.errno == PermissionDenied.errno: + raise PermissionDenied(func_call) + else: + raise + try: if os.stat(lockfilename).st_gid != portage_gid: - os.chown(lockfilename,os.getuid(),portage_gid) + os.chown(lockfilename, os.getuid(), portage_gid) except OSError, e: - if e[0] == 2: # No such file or directory + if e.errno == errno.ENOENT: # No such file or directory return lockfile(mypath, wantnewlockfile=wantnewlockfile, unlinkfile=unlinkfile, waiting_msg=waiting_msg, flags=flags) else: - writemsg("Cannot chown a lockfile. This could cause inconvenience later.\n"); + writemsg("Cannot chown a lockfile. This could " + \ + "cause inconvenience later.\n") + finally: os.umask(old_mask) - else: - myfd = os.open(lockfilename, os.O_CREAT|os.O_RDWR,0660) elif type(mypath) == types.IntType: myfd = mypath Index: pym/portage/news.py =================================================================== --- pym/portage/news.py (revision 12520) +++ pym/portage/news.py (revision 12521) @@ -157,7 +157,7 @@ try: unread_lock = lockfile(unread_filename, wantnewlockfile=1) except (InvalidLocation, OperationNotPermitted, PermissionDenied): - return 0 + pass try: try: return len(grabfile(unread_filename))