From 0d2cd06c85b3ef31cb491f31edfa319fcc4adf25 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Thu, 12 Mar 2009 05:32:59 +0000 Subject: [PATCH] Bug #261992 - Replace the EbuildBuildDir.clean() method with a clean_log() method since log cleanup is all that's currently needed and shutil.rmtree() can fail with "OSError: [Errno 36] File name too long" due to strange file names, or on FreeBSD it can fail with EPERM due to file flags in $D. svn path=/main/trunk/; revision=13071 --- pym/_emerge/__init__.py | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/pym/_emerge/__init__.py b/pym/_emerge/__init__.py index 04c8d72b5..2fb2003a8 100644 --- a/pym/_emerge/__init__.py +++ b/pym/_emerge/__init__.py @@ -2507,7 +2507,7 @@ class EbuildFetcher(SpawnProcess): if not self.prefetch: self._build_dir = EbuildBuildDir(pkg=self.pkg, settings=settings) self._build_dir.lock() - self._build_dir.clean() + self._build_dir.clean_log() portage.prepare_build_dirs(self.pkg.root, self._build_dir.settings, 0) if self.logfile is None: self.logfile = settings.get("PORTAGE_LOG_FILE") @@ -2578,7 +2578,7 @@ class EbuildFetcher(SpawnProcess): portage.elog.elog_process(self.pkg.cpv, self._build_dir.settings) features = self._build_dir.settings.features if self.returncode == os.EX_OK: - self._build_dir.clean() + self._build_dir.clean_log() self._build_dir.unlock() self.config_pool.deallocate(self._build_dir.settings) self._build_dir = None @@ -2633,18 +2633,16 @@ class EbuildBuildDir(SlotObject): if catdir_lock is not None: portage.locks.unlockdir(catdir_lock) - def clean(self): + def clean_log(self): """Uses shutil.rmtree() rather than spawning a 'clean' phase. Disabled by keepwork or keeptemp in FEATURES.""" settings = self.settings - features = settings.features - if not ("keepwork" in features or "keeptemp" in features): + + for x in ('.logid', 'temp/build.log'): try: - shutil.rmtree(settings["PORTAGE_BUILDDIR"]) - except EnvironmentError, e: - if e.errno != errno.ENOENT: - raise - del e + os.unlink(os.path.join(settings["PORTAGE_BUILDDIR"], x)) + except OSError: + pass def unlock(self): if self._lock_obj is None: @@ -3415,11 +3413,7 @@ class Binpkg(CompositeTask): self._build_dir.lock() # If necessary, discard old log so that we don't # append to it. - for x in ('.logid', 'temp/build.log'): - try: - os.unlink(os.path.join(self._build_dir.dir_path, x)) - except OSError: - pass + self._build_dir.clean_log() # Initialze PORTAGE_LOG_FILE. portage.prepare_build_dirs(self.settings["ROOT"], self.settings, 1) fetcher = BinpkgFetcher(background=self.background, -- 2.26.2