From 46cb74fbac6d2636f84e6e38982e088893427bed Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Sat, 3 Mar 2007 09:49:30 +0000 Subject: For bug #138840, show a more informative message when waiting for a distfiles lock due to parallel-fetch. Thanks to David Watzke for the initial patch. svn path=/main/trunk/; revision=6143 --- pym/portage/__init__.py | 13 +++++++++++-- pym/portage/locks.py | 13 ++++++++----- 2 files changed, 19 insertions(+), 7 deletions(-) (limited to 'pym') diff --git a/pym/portage/__init__.py b/pym/portage/__init__.py index f5e00b060..77b730715 100644 --- a/pym/portage/__init__.py +++ b/pym/portage/__init__.py @@ -2360,10 +2360,19 @@ def fetch(myuris, mysettings, listonly=0, fetchonly=0, locks_in_subdir=".locks", writemsg_stdout("\n", noiselevel=-1) else: if use_locks and can_fetch: + waiting_msg = None + if "parallel-fetch" in features: + waiting_msg = ("Downloading '%s'... " + \ + "see /var/log/emerge-fetch.log for details.") % myfile if locks_in_subdir: - file_lock = portage.locks.lockfile(mysettings["DISTDIR"]+"/"+locks_in_subdir+"/"+myfile,wantnewlockfile=1) + file_lock = portage.locks.lockfile( + os.path.join(mysettings["DISTDIR"], + locks_in_subdir, myfile), wantnewlockfile=1, + waiting_msg=waiting_msg) else: - file_lock = portage.locks.lockfile(mysettings["DISTDIR"]+"/"+myfile,wantnewlockfile=1) + file_lock = portage.locks.lockfile( + myfile_path, wantnewlockfile=1, + waiting_msg=waiting_msg) try: if not listonly: if fsmirrors and not os.path.exists(myfile_path): diff --git a/pym/portage/locks.py b/pym/portage/locks.py index 3def88a38..cbf7ee4b5 100644 --- a/pym/portage/locks.py +++ b/pym/portage/locks.py @@ -17,7 +17,7 @@ def lockdir(mydir): def unlockdir(mylock): return unlockfile(mylock) -def lockfile(mypath,wantnewlockfile=0,unlinkfile=0): +def lockfile(mypath, wantnewlockfile=0, unlinkfile=0, waiting_msg=None): """Creates all dirs upto, the given dir. Creates a lockfile for the given directory as the file: directoryname+'.portage_lockfile'.""" import fcntl @@ -76,10 +76,13 @@ def lockfile(mypath,wantnewlockfile=0,unlinkfile=0): raise if e.errno == errno.EAGAIN: # resource temp unavailable; eg, someone beat us to the lock. - if type(mypath) == types.IntType: - print "waiting for lock on fd %i" % myfd - else: - print "waiting for lock on %s" % lockfilename + if waiting_msg is None: + if isinstance(mypath, int): + print "waiting for lock on fd %i" % myfd + else: + print "waiting for lock on %s" % lockfilename + elif waiting_msg: + print waiting_msg # try for the exclusive lock now. fcntl.lockf(myfd,fcntl.LOCK_EX) elif e.errno == errno.ENOLCK: -- cgit v1.2.3-1-g7c22