diff -urN portage-3.0.82-orig/lib/_emerge/EbuildBuild.py portage-3.0.82/lib/_emerge/EbuildBuild.py --- portage-3.0.82-orig/lib/_emerge/EbuildBuild.py 2026-08-22 14:02:19 +0900 +++ portage-3.0.82/lib/_emerge/EbuildBuild.py 2026-08-24 01:25:07 +0900 @@ -214,19 +214,20 @@ return lock_task.future.result() - # Cleaning needs to happen before fetch, since the build dir - # is used for log handling. - msg = f" === ({self.pkg_count.curval} of {self.pkg_count.maxval}) Cleaning ({self.pkg.cpv}::{self._ebuild_path})" - short_msg = f"emerge: ({self.pkg_count.curval} of {self.pkg_count.maxval}) {self.pkg.cpv} Clean" - self.logger.log(msg, short_msg=short_msg) + if 'noclean' not in self.settings.features: + # Cleaning needs to happen before fetch, since the build dir + # is used for log handling. + msg = f" === ({self.pkg_count.curval} of {self.pkg_count.maxval}) Cleaning ({self.pkg.cpv}::{self._ebuild_path})" + short_msg = f"emerge: ({self.pkg_count.curval} of {self.pkg_count.maxval}) {self.pkg.cpv} Clean" + self.logger.log(msg, short_msg=short_msg) - pre_clean_phase = EbuildPhase( - background=self.background, - phase="clean", - scheduler=self.scheduler, - settings=self.settings, - ) - self._start_task(pre_clean_phase, self._pre_clean_exit) + pre_clean_phase = EbuildPhase( + background=self.background, + phase="clean", + scheduler=self.scheduler, + settings=self.settings, + ) + self._start_task(pre_clean_phase, self._pre_clean_exit) def _fetchonly_exit(self, fetcher): if not fetcher.cancelled and isinstance(fetcher, AsyncTaskFuture):