From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) by finch.gentoo.org (Postfix) with ESMTP id A90451387FF for ; Tue, 21 Oct 2014 05:05:25 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 44036E08C1; Tue, 21 Oct 2014 05:05:16 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id 9D80BE0882 for ; Tue, 21 Oct 2014 05:05:14 +0000 (UTC) Received: from oystercatcher.gentoo.org (oystercatcher.gentoo.org [148.251.78.52]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 028ED340475 for ; Tue, 21 Oct 2014 05:05:12 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id 086068622 for ; Tue, 21 Oct 2014 05:05:09 +0000 (UTC) From: "Zac Medico" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Zac Medico" Message-ID: <1413867848.739b01280b3e94f3527af1764062d76629aeae5d.zmedico@gentoo> Subject: [gentoo-commits] proj/portage:plugin-sync commit in: pym/portage/sync/, pym/portage/emaint/modules/sync/ X-VCS-Repository: proj/portage X-VCS-Files: pym/portage/emaint/modules/sync/sync.py pym/portage/sync/__init__.py X-VCS-Directories: pym/portage/sync/ pym/portage/emaint/modules/sync/ X-VCS-Committer: zmedico X-VCS-Committer-Name: Zac Medico X-VCS-Revision: 739b01280b3e94f3527af1764062d76629aeae5d X-VCS-Branch: plugin-sync Date: Tue, 21 Oct 2014 05:05:09 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Archives-Salt: da987ddb-766b-4370-895f-329fc168a21a X-Archives-Hash: e6e1986103ccd593d6820ae38296d110 commit: 739b01280b3e94f3527af1764062d76629aeae5d Author: Zac Medico gentoo org> AuthorDate: Tue Oct 21 04:10:36 2014 +0000 Commit: Zac Medico gentoo org> CommitDate: Tue Oct 21 05:04:08 2014 +0000 URL: http://sources.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=739b0128 SyncRepos: manage global variables After calling load_emerge_config, use _reset_legacy_globals to cleanly destroy existing portage.db / settings instances. Then update portage.db and portage.settings to refer to the new instances. Also, instantiate a local instance of SyncManager, so that we can remove the global instance that was previous accessed via get_syncer. There's no reason to have a global instance, and global instances are a maintenance nightmare (see portage.db and portage.settings changes above). --- pym/portage/emaint/modules/sync/sync.py | 23 ++++++++++++++++------- pym/portage/sync/__init__.py | 23 ----------------------- 2 files changed, 16 insertions(+), 30 deletions(-) diff --git a/pym/portage/emaint/modules/sync/sync.py b/pym/portage/emaint/modules/sync/sync.py index 4369a2a..4a17c9e 100644 --- a/pym/portage/emaint/modules/sync/sync.py +++ b/pym/portage/emaint/modules/sync/sync.py @@ -10,8 +10,8 @@ portage._internal_caller = True portage._sync_mode = True from portage.localization import _ from portage.output import bold, create_color_func -from portage.sync import get_syncer from portage._global_updates import _global_updates +from portage.sync.controller import SyncManager from portage.util import writemsg_level import _emerge @@ -52,13 +52,21 @@ class SyncRepos(object): @param emerge_config: optional an emerge_config instance to use @param emerge_logging: boolean, defaults to False ''' - if emerge_config: - self.emerge_config = emerge_config - else: + if emerge_config is None: # need a basic options instance actions, opts, _files = parse_opts([], silent=True) - self.emerge_config = load_emerge_config( - action='sync', args=_files, trees=[], opts=opts) + emerge_config = load_emerge_config( + action='sync', args=_files, opts=opts) + + if hasattr(portage, 'settings'): + # cleanly destroy global objects + portage._reset_legacy_globals() + # update redundant global variables, for consistency + # and in order to conserve memory + portage.settings = emerge_config.target_config.settings + portage.db = emerge_config.trees + + self.emerge_config = emerge_config if emerge_logging: _emerge.emergelog._disable = False self.xterm_titles = "notitles" not in \ @@ -176,7 +184,8 @@ class SyncRepos(object): # Portage needs to ensure a sane umask for the files it creates. os.umask(0o22) - sync_manager = get_syncer(self.emerge_config.target_config.settings, emergelog) + sync_manager = SyncManager( + self.emerge_config.target_config.settings, emergelog) retvals = [] for repo in selected_repos: if repo.sync_type is not None: diff --git a/pym/portage/sync/__init__.py b/pym/portage/sync/__init__.py index 58a1298..0f6c566 100644 --- a/pym/portage/sync/__init__.py +++ b/pym/portage/sync/__init__.py @@ -7,8 +7,6 @@ from portage.module import Modules from portage.sync.controller import SyncManager from portage.sync.config_checks import check_type -sync_manager = None - path = os.path.join(os.path.dirname(__file__), "modules") # initial development debug info #print("module path:", path) @@ -20,27 +18,6 @@ module_controller = Modules(path=path, namepath="portage.sync.modules") module_names = module_controller.module_names[:] -def get_syncer(settings=None, logger=None): - '''Initializes and returns the SyncManager instance - to be used for sync operations - - @param settings: emerge.settings instance - @param logger: emerge logger instance - @returns SyncManager instance - ''' - global sync_manager - if sync_manager and not settings and not logger: - return sync_manager - if settings is None: - from _emerge.actions import load_emerge_config - emerge_config = load_emerge_config() - settings = emerge_config.target_config.settings - if logger is None: - from _emerge.emergelog import emergelog as logger - sync_manager = SyncManager(settings, logger) - return sync_manager - - def validate_config(repo, logger): '''Validate the repos.conf settings for the repo''' global module_names, module_controller