commit: 205d41608e55f78b620f8c3a0cb204c88df041ee Author: Mike Gilbert <floppym <AT> gentoo <DOT> org> AuthorDate: Sat Jul 9 04:26:12 2022 +0000 Commit: Mike Gilbert <floppym <AT> gentoo <DOT> org> CommitDate: Mon Aug 1 17:30:28 2022 +0000 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=205d4160
Avoid calling root-level logging functions Instead, establish a named logger in each module. This will allow for easier filtering of log messages if we ever expand the use of the logging module. Closes: https://github.com/gentoo/portage/pull/849 Signed-off-by: Mike Gilbert <floppym <AT> gentoo.org> bin/doins.py | 8 +++-- lib/portage/_emirrordist/Config.py | 10 +++---- lib/portage/_emirrordist/ContentDB.py | 6 ++-- lib/portage/_emirrordist/DeletionIterator.py | 8 +++-- lib/portage/_emirrordist/DeletionTask.py | 28 +++++++++--------- lib/portage/_emirrordist/FetchTask.py | 44 +++++++++++++++------------- lib/portage/_emirrordist/MirrorDistTask.py | 36 +++++++++++------------ lib/portage/eapi.py | 2 ++ lib/portage/util/shelve.py | 4 ++- 9 files changed, 79 insertions(+), 67 deletions(-) diff --git a/bin/doins.py b/bin/doins.py index 087756218..7905c5c0d 100644 --- a/bin/doins.py +++ b/bin/doins.py @@ -26,6 +26,8 @@ import sys from portage.util import movefile from portage.util.file_copy import copyfile +logger = logging.getLogger("portage.bin.doins") + def _warn(helper, msg): """Output warning message to stderr. @@ -199,7 +201,7 @@ class _InsInProcessInstallRunner: if self._parsed_options.preserve_timestamps: _set_timestamps(sstat, dest) except Exception: - logging.exception( + logger.exception( "Failed to copy file: " "_parsed_options=%r, source=%r, dest_dir=%r", self._parsed_options, source, @@ -383,7 +385,7 @@ class _InstallRunner: except Exception: if self._helpers_can_die: raise - logging.exception("install_dir failed.") + logger.exception("install_dir failed.") def _doins(opts, install_runner, relpath, source_root): @@ -428,7 +430,7 @@ def _doins(opts, install_runner, relpath, source_root): os.symlink(linkto, dest) return True except Exception: - logging.exception( + logger.exception( "Failed to create symlink: " "opts=%r, relpath=%r, source_root=%r", opts, relpath, diff --git a/lib/portage/_emirrordist/Config.py b/lib/portage/_emirrordist/Config.py index 78b7a482a..734313c07 100644 --- a/lib/portage/_emirrordist/Config.py +++ b/lib/portage/_emirrordist/Config.py @@ -12,6 +12,8 @@ from portage.package.ebuild.fetch import MirrorLayoutConfig from portage.util import grabdict, grablines from .ContentDB import ContentDB +logger = logging.getLogger(__name__) + class Config: def __init__(self, options, portdb, event_loop): @@ -89,13 +91,11 @@ class Config: def _open_log(self, log_desc, log_path, mode): if log_path is None or getattr(self.options, "dry_run", False): - log_func = logging.info + log_func = logger.info line_format = "%s: %%s" % log_desc add_newline = False if log_path is not None: - logging.warning( - "dry-run: %s log " "redirected to logging.info" % log_desc - ) + logger.warning("dry-run: %s log redirected to logging.info" % log_desc) else: self._open_files.append(io.open(log_path, mode=mode, encoding="utf_8")) line_format = "%s\n" @@ -137,7 +137,7 @@ class Config: db = dbshelve.open(db_file, flags=open_flag) if dry_run: - logging.warning("dry-run: %s db opened in readonly mode" % db_desc) + logger.warning("dry-run: %s db opened in readonly mode" % db_desc) if not isinstance(db, dict): volatile_db = dict((k, db[k]) for k in db) db.close() diff --git a/lib/portage/_emirrordist/ContentDB.py b/lib/portage/_emirrordist/ContentDB.py index 6a5efbe95..ac6140257 100644 --- a/lib/portage/_emirrordist/ContentDB.py +++ b/lib/portage/_emirrordist/ContentDB.py @@ -8,6 +8,8 @@ import typing from portage.package.ebuild.fetch import DistfileName +logger = logging.getLogger(__name__) + class ContentDB: """ @@ -110,10 +112,10 @@ class ContentDB: pass if remaining: - logging.debug(("drop '%s' revision(s) from content db") % filename) + logger.debug(("drop '%s' revision(s) from content db") % filename) self._shelve[distfile_key] = remaining else: - logging.debug(("drop '%s' from content db") % filename) + logger.debug(("drop '%s' from content db") % filename) try: del self._shelve[distfile_key] except KeyError: diff --git a/lib/portage/_emirrordist/DeletionIterator.py b/lib/portage/_emirrordist/DeletionIterator.py index 59abce82f..6273ad281 100644 --- a/lib/portage/_emirrordist/DeletionIterator.py +++ b/lib/portage/_emirrordist/DeletionIterator.py @@ -9,6 +9,8 @@ from portage import os from portage.package.ebuild.fetch import DistfileName from .DeletionTask import DeletionTask +logger = logging.getLogger(__name__) + class DeletionIterator: def __init__(self, config): @@ -61,7 +63,7 @@ class DeletionIterator: break else: if exceptions: - logging.error( + logger.error( "stat failed on '%s' in distfiles: %s\n" % (filename, "; ".join(str(x) for x in exceptions)) ) @@ -103,7 +105,7 @@ class DeletionIterator: deletion_entry = deletion_db.get(filename) if deletion_entry is None: - logging.debug("add '%s' to deletion db" % filename) + logger.debug("add '%s' to deletion db" % filename) deletion_db[filename] = start_time elif deletion_entry + deletion_delay <= start_time: @@ -123,4 +125,4 @@ class DeletionIterator: except KeyError: pass else: - logging.debug("drop '%s' from deletion db" % filename) + logger.debug("drop '%s' from deletion db" % filename) diff --git a/lib/portage/_emirrordist/DeletionTask.py b/lib/portage/_emirrordist/DeletionTask.py index 7066e57a7..a5d96a9d9 100644 --- a/lib/portage/_emirrordist/DeletionTask.py +++ b/lib/portage/_emirrordist/DeletionTask.py @@ -9,6 +9,8 @@ from portage.package.ebuild.fetch import ContentHashLayout from portage.util._async.FileCopier import FileCopier from _emerge.CompositeTask import CompositeTask +logger = logging.getLogger(__name__) + class DeletionTask(CompositeTask): @@ -18,19 +20,17 @@ class DeletionTask(CompositeTask): if self.config.options.recycle_dir is not None: recycle_path = os.path.join(self.config.options.recycle_dir, self.distfile) if self.config.options.dry_run: - logging.info( + logger.info( ("dry-run: move '%s' from " "distfiles to recycle") % self.distfile ) else: - logging.debug( - ("move '%s' from " "distfiles to recycle") % self.distfile - ) + logger.debug(("move '%s' from " "distfiles to recycle") % self.distfile) try: # note: distfile_path can be a symlink here os.rename(os.path.realpath(self.distfile_path), recycle_path) except OSError as e: if e.errno != errno.EXDEV: - logging.error( + logger.error( ("rename %s from distfiles to " "recycle failed: %s") % (self.distfile, e) ) @@ -52,14 +52,14 @@ class DeletionTask(CompositeTask): success = True if self.config.options.dry_run: - logging.info(("dry-run: delete '%s' from " "distfiles") % self.distfile) + logger.info(("dry-run: delete '%s' from " "distfiles") % self.distfile) else: - logging.debug(("delete '%s' from " "distfiles") % self.distfile) + logger.debug(("delete '%s' from " "distfiles") % self.distfile) try: os.unlink(self.distfile_path) except OSError as e: if e.errno not in (errno.ENOENT, errno.ESTALE): - logging.error( + logger.error( "%s unlink failed in distfiles: %s" % (self.distfile, e) ) success = False @@ -85,13 +85,13 @@ class DeletionTask(CompositeTask): os.unlink(copier.src_path) except OSError as e: if e.errno not in (errno.ENOENT, errno.ESTALE): - logging.error( + logger.error( "%s unlink failed in distfiles: %s" % (self.distfile, e) ) success = False else: - logging.error( + logger.error( ("%s copy from distfiles " "to recycle failed: %s") % (self.distfile, copier.future.exception()) ) @@ -109,7 +109,7 @@ class DeletionTask(CompositeTask): success = True for layout in self.config.layouts: if isinstance(layout, ContentHashLayout) and not self.distfile.digests: - logging.debug(("_delete_links: '%s' has " "no digests") % self.distfile) + logger.debug(("_delete_links: '%s' has " "no digests") % self.distfile) continue distfile_path = os.path.join( self.config.options.distfiles, layout.get_path(self.distfile) @@ -118,7 +118,7 @@ class DeletionTask(CompositeTask): os.unlink(distfile_path) except OSError as e: if e.errno not in (errno.ENOENT, errno.ESTALE): - logging.error( + logger.error( "%s unlink failed in distfiles: %s" % (self.distfile, e) ) success = False @@ -144,7 +144,7 @@ class DeletionTask(CompositeTask): except KeyError: pass else: - logging.debug(("drop '%s' from " "distfiles db") % self.distfile) + logger.debug(("drop '%s' from " "distfiles db") % self.distfile) if self.config.content_db is not None: self.config.content_db.remove(self.distfile) @@ -155,4 +155,4 @@ class DeletionTask(CompositeTask): except KeyError: pass else: - logging.debug(("drop '%s' from " "deletion db") % self.distfile) + logger.debug(("drop '%s' from " "deletion db") % self.distfile) diff --git a/lib/portage/_emirrordist/FetchTask.py b/lib/portage/_emirrordist/FetchTask.py index 304837332..89fd1657e 100644 --- a/lib/portage/_emirrordist/FetchTask.py +++ b/lib/portage/_emirrordist/FetchTask.py @@ -17,6 +17,8 @@ from portage.util._async.PipeLogger import PipeLogger from portage.util._async.PopenProcess import PopenProcess from _emerge.CompositeTask import CompositeTask +logger = logging.getLogger(__name__) + default_hash_name = portage.const.MANIFEST2_HASH_DEFAULT # Use --no-check-certificate since Manifest digests should provide @@ -91,7 +93,7 @@ class FetchTask(CompositeTask): self.scheduler.output( msg + "\n", background=True, log_path=self._log_path ) - logging.error(msg) + logger.error(msg) else: break @@ -100,7 +102,7 @@ class FetchTask(CompositeTask): if not size_ok: if self.config.options.dry_run: if st is not None: - logging.info( + logger.info( ("dry-run: delete '%s' with " "wrong size from distfiles") % (self.distfile,) ) @@ -115,7 +117,7 @@ class FetchTask(CompositeTask): ) if self._unlink_file(unlink_path, "distfiles"): if st is not None: - logging.debug( + logger.debug( ("delete '%s' with " "wrong size from distfiles") % (self.distfile,) ) @@ -172,14 +174,14 @@ class FetchTask(CompositeTask): if self.config.options.dry_run: if os.path.exists(recycle_file): - logging.info("dry-run: delete '%s' from recycle" % (self.distfile,)) + logger.info("dry-run: delete '%s' from recycle" % (self.distfile,)) else: try: os.unlink(recycle_file) except OSError: pass else: - logging.debug("delete '%s' from recycle" % (self.distfile,)) + logger.debug("delete '%s' from recycle" % (self.distfile,)) def _distfiles_digester_exit(self, digester): @@ -195,7 +197,7 @@ class FetchTask(CompositeTask): # from the administrator. msg = "%s distfiles digester failed unexpectedly" % (self.distfile,) self.scheduler.output(msg + "\n", background=True, log_path=self._log_path) - logging.error(msg) + logger.error(msg) self.config.log_failure("%s\t%s\t%s" % (self.cpv, self.distfile, msg)) self.config.file_failures[self.distfile] = self.cpv self.wait() @@ -312,7 +314,7 @@ class FetchTask(CompositeTask): self.scheduler.output( msg + "\n", background=True, log_path=self._log_path ) - logging.error(msg) + logger.error(msg) else: size_ok = st.st_size == self.digests["size"] self._current_stat = st @@ -345,7 +347,7 @@ class FetchTask(CompositeTask): current_mirror.name, ) self.scheduler.output(msg + "\n", background=True, log_path=self._log_path) - logging.error(msg) + logger.error(msg) else: bad_digest = self._find_bad_digest(digester.digests) if bad_digest is not None: @@ -359,18 +361,18 @@ class FetchTask(CompositeTask): self.scheduler.output( msg + "\n", background=True, log_path=self._log_path ) - logging.error(msg) + logger.error(msg) elif self.config.options.dry_run: # Report success without actually touching any files if self._same_device( current_mirror.location, self.config.options.distfiles ): - logging.info( + logger.info( ("dry-run: hardlink '%s' from %s " "to distfiles") % (self.distfile, current_mirror.name) ) else: - logging.info( + logger.info( "dry-run: copy '%s' from %s to distfiles" % (self.distfile, current_mirror.name) ) @@ -387,7 +389,7 @@ class FetchTask(CompositeTask): if self._hardlink_atomic( src, dest, "%s to %s" % (current_mirror.name, "distfiles") ): - logging.debug( + logger.debug( "hardlink '%s' from %s to distfiles" % (self.distfile, current_mirror.name) ) @@ -424,10 +426,10 @@ class FetchTask(CompositeTask): copier.future.exception(), ) self.scheduler.output(msg + "\n", background=True, log_path=self._log_path) - logging.error(msg) + logger.error(msg) else: - logging.debug( + logger.debug( "copy '%s' from %s to distfiles" % (self.distfile, current_mirror.name) ) @@ -447,7 +449,7 @@ class FetchTask(CompositeTask): self.scheduler.output( msg + "\n", background=True, log_path=self._log_path ) - logging.error(msg) + logger.error(msg) self._success() self.returncode = os.EX_OK @@ -460,7 +462,7 @@ class FetchTask(CompositeTask): if self.config.options.dry_run: # Simply report success. - logging.info("dry-run: fetch '%s' from '%s'" % (self.distfile, uri)) + logger.info("dry-run: fetch '%s' from '%s'" % (self.distfile, uri)) self._success() self.returncode = os.EX_OK self._async_wait() @@ -543,7 +545,7 @@ class FetchTask(CompositeTask): self._fetch_tmp_dir_info, ) self.scheduler.output(msg + "\n", background=True, log_path=self._log_path) - logging.error(msg) + logger.error(msg) else: bad_digest = self._find_bad_digest(digester.digests) if bad_digest is not None: @@ -608,7 +610,7 @@ class FetchTask(CompositeTask): copier.future.exception(), ) self.scheduler.output(msg + "\n", background=True, log_path=self._log_path) - logging.error(msg) + logger.error(msg) self.config.log_failure("%s\t%s\t%s" % (self.cpv, self.distfile, msg)) self.config.file_failures[self.distfile] = self.cpv self.returncode = 1 @@ -662,7 +664,7 @@ class FetchTask(CompositeTask): self.scheduler.output( msg + "\n", background=True, log_path=self._log_path ) - logging.error(msg) + logger.error(msg) return False return True @@ -720,7 +722,7 @@ class FetchTask(CompositeTask): self.scheduler.output( msg + "\n", background=True, log_path=self._log_path ) - logging.error(msg) + logger.error(msg) return False try: @@ -734,7 +736,7 @@ class FetchTask(CompositeTask): self.scheduler.output( msg + "\n", background=True, log_path=self._log_path ) - logging.error(msg) + logger.error(msg) return False finally: try: diff --git a/lib/portage/_emirrordist/MirrorDistTask.py b/lib/portage/_emirrordist/MirrorDistTask.py index 28164e645..9423125df 100644 --- a/lib/portage/_emirrordist/MirrorDistTask.py +++ b/lib/portage/_emirrordist/MirrorDistTask.py @@ -17,6 +17,8 @@ from _emerge.CompositeTask import CompositeTask from .FetchIterator import FetchIterator from .DeletionIterator import DeletionIterator +logger = logging.getLogger(__name__) + class MirrorDistTask(CompositeTask): @@ -99,14 +101,14 @@ class MirrorDistTask(CompositeTask): st = os.stat(recycle_file) except OSError as e: if e.errno not in (errno.ENOENT, errno.ESTALE): - logging.error( + logger.error( ("stat failed for '%s' in " "recycle: %s") % (filename, e) ) continue value = recycle_db_cache.pop(filename, None) if value is None: - logging.debug(("add '%s' to " "recycle db") % filename) + logger.debug(("add '%s' to " "recycle db") % filename) recycle_db[filename] = (st.st_size, start_time) else: r_size, r_time = value @@ -114,27 +116,25 @@ class MirrorDistTask(CompositeTask): recycle_db[filename] = (st.st_size, start_time) elif r_time + r_deletion_delay < start_time: if self._config.options.dry_run: - logging.info( - ("dry-run: delete '%s' from " "recycle") % filename - ) - logging.info(("drop '%s' from " "recycle db") % filename) + logger.info(("dry-run: delete '%s' from " "recycle") % filename) + logger.info(("drop '%s' from " "recycle db") % filename) else: try: os.unlink(recycle_file) except OSError as e: if e.errno not in (errno.ENOENT, errno.ESTALE): - logging.error( + logger.error( ("delete '%s' from " "recycle failed: %s") % (filename, e) ) else: - logging.debug(("delete '%s' from " "recycle") % filename) + logger.debug(("delete '%s' from " "recycle") % filename) try: del recycle_db[filename] except KeyError: pass else: - logging.debug( + logger.debug( ("drop '%s' from " "recycle db") % filename ) @@ -147,7 +147,7 @@ class MirrorDistTask(CompositeTask): except KeyError: pass else: - logging.debug(("drop non-existent '%s' from " "recycle db") % filename) + logger.debug(("drop non-existent '%s' from " "recycle db") % filename) def _scheduled_deletion_log(self): @@ -169,7 +169,7 @@ class MirrorDistTask(CompositeTask): date_files.append(filename) if dry_run: - logging.warning( + logger.warning( "dry-run: scheduled-deletions log " "will be summarized via logging.info" ) @@ -178,7 +178,7 @@ class MirrorDistTask(CompositeTask): for date in sorted(date_map): date_files = date_map[date] if dry_run: - logging.info( + logger.info( ("dry-run: scheduled deletions for %s: %s files") % (date, len(date_files)) ) @@ -202,12 +202,12 @@ class MirrorDistTask(CompositeTask): added_file_count = self._config.added_file_count added_byte_count = self._config.added_byte_count - logging.info("finished in %i seconds" % elapsed_time) - logging.info("failed to fetch %i files" % fail_count) - logging.info("deleted %i files" % delete_count) - logging.info("deletion of %i files scheduled" % scheduled_deletion_count) - logging.info("added %i files" % added_file_count) - logging.info("added %i bytes total" % added_byte_count) + logger.info("finished in %i seconds" % elapsed_time) + logger.info("failed to fetch %i files" % fail_count) + logger.info("deleted %i files" % delete_count) + logger.info("deletion of %i files scheduled" % scheduled_deletion_count) + logger.info("added %i files" % added_file_count) + logger.info("added %i bytes total" % added_byte_count) def _cleanup(self): """ diff --git a/lib/portage/eapi.py b/lib/portage/eapi.py index 2c1701870..969cf9027 100644 --- a/lib/portage/eapi.py +++ b/lib/portage/eapi.py @@ -7,6 +7,8 @@ from typing import Optional from portage import eapi_is_supported +logger = logging.getLogger(__name__) + def eapi_has_iuse_defaults(eapi: str) -> bool: return _get_eapi_attrs(eapi).iuse_defaults diff --git a/lib/portage/util/shelve.py b/lib/portage/util/shelve.py index 6100c8719..85d5829f3 100644 --- a/lib/portage/util/shelve.py +++ b/lib/portage/util/shelve.py @@ -5,6 +5,8 @@ import logging import pickle import shelve +logger = logging.getLogger(__name__) + def open_shelve(db_file, flag="r"): """ @@ -36,7 +38,7 @@ def dump(args): try: value = src[key] except KeyError: - logging.exception(key) + logger.exception(key) continue pickle.dump((key, value), dest) finally: