def __init__(self, emerge_config=None, emerge_logging=False): '''Class init function @param emerge_config: optional an emerge_config instance to use @param emerge_logging: boolean, defaults to False ''' if emerge_config is None: # need a basic options instance actions, opts, _files = parse_opts([], silent=True) emerge_config = load_emerge_config( action='sync', args=_files, opts=opts) # Parse EMERGE_DEFAULT_OPTS, for settings like # --package-moves=n. cmdline = portage.util.shlex_split( emerge_config.target_config.settings.get( "EMERGE_DEFAULT_OPTS", "")) emerge_config.opts = parse_opts(cmdline, silent=True)[1] 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 portage.root = portage.db._target_eroot self.emerge_config = emerge_config if emerge_logging: _emerge.emergelog._disable = False self.xterm_titles = "notitles" not in \ self.emerge_config.target_config.settings.features emergelog(self.xterm_titles, " === sync")
def __init__(self, emerge_config=None, emerge_logging=False): '''Class init function @param emerge_config: optional an emerge_config instance to use @param emerge_logging: boolean, defaults to False ''' if emerge_config is None: # need a basic options instance actions, opts, _files = parse_opts([], silent=True) emerge_config = load_emerge_config(action='sync', args=_files, opts=opts) # Parse EMERGE_DEFAULT_OPTS, for settings like # --package-moves=n. cmdline = portage.util.shlex_split( emerge_config.target_config.settings.get( "EMERGE_DEFAULT_OPTS", "")) emerge_config.opts = parse_opts(cmdline, silent=True)[1] 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 portage.root = portage.db._target_eroot self.emerge_config = emerge_config if emerge_logging: _emerge.emergelog._disable = False self.xterm_titles = "notitles" not in \ self.emerge_config.target_config.settings.features emergelog(self.xterm_titles, " === sync")
def fix(self, **kwargs): """Attempt to fix any failed merges.""" module_output = kwargs.get('module_output', None) failed_pkgs = self._failed_pkgs() if not failed_pkgs: return ['No failed merges found.'] pkg_invalid_entries = set() pkg_atoms = set() self._get_pkg_atoms(failed_pkgs, pkg_atoms, pkg_invalid_entries) if pkg_invalid_entries: return pkg_invalid_entries try: self._tracking_file.save(failed_pkgs) except IOError as ex: errors = ['Unable to save failed merges to tracking file: %s\n' % str(ex)] errors.append(', '.join(sorted(failed_pkgs))) return errors self._remove_failed_dirs(failed_pkgs) results = self._emerge_pkg_atoms(module_output, pkg_atoms) # list any new failed merges for pkg in sorted(self._scan()): results.append("'%s' still found as a failed merge." % pkg) # reload config and remove successful packages from tracking file portage._reset_legacy_globals() vardb = portage.db[portage.root]['vartree'].dbapi still_failed_pkgs = {} for pkg, mtime in failed_pkgs.items(): pkg_name = '%s' % pkg.replace(MERGING_IDENTIFIER, '') if not vardb.cpv_exists(pkg_name): still_failed_pkgs[pkg] = mtime self._tracking_file.save(still_failed_pkgs) return results
def fix(self, **kwargs): """Attempt to fix any failed merges.""" module_output = kwargs.get("module_output", None) failed_pkgs = self._failed_pkgs() if not failed_pkgs: return (True, ["No failed merges found."]) pkg_invalid_entries = set() pkg_atoms = set() self._get_pkg_atoms(failed_pkgs, pkg_atoms, pkg_invalid_entries) if pkg_invalid_entries: return (False, pkg_invalid_entries) try: self._tracking_file.save(failed_pkgs) except IOError as ex: errors = [ "Unable to save failed merges to tracking file: %s\n" % str(ex) ] errors.append(", ".join(sorted(failed_pkgs))) return (False, errors) self._remove_failed_dirs(failed_pkgs) results = self._emerge_pkg_atoms(module_output, pkg_atoms, yes=kwargs.get("options", {}).get("yes", False)) # list any new failed merges for pkg in sorted(self._scan()): results.append("'%s' still found as a failed merge." % pkg) # reload config and remove successful packages from tracking file portage._reset_legacy_globals() vardb = portage.db[portage.root]["vartree"].dbapi still_failed_pkgs = {} for pkg, mtime in failed_pkgs.items(): pkg_name = "%s" % pkg.replace(MERGING_IDENTIFIER, "") if not vardb.cpv_exists(pkg_name): still_failed_pkgs[pkg] = mtime self._tracking_file.save(still_failed_pkgs) if still_failed_pkgs: return (False, results) return (True, results)
def fix(self, **kwargs): """Attempt to fix any failed merges.""" module_output = kwargs.get('module_output', None) failed_pkgs = self._failed_pkgs() if not failed_pkgs: return ['No failed merges found.'] pkg_invalid_entries = set() pkg_atoms = set() self._get_pkg_atoms(failed_pkgs, pkg_atoms, pkg_invalid_entries) if pkg_invalid_entries: return pkg_invalid_entries try: self._tracking_file.save(failed_pkgs) except IOError as ex: errors = [ 'Unable to save failed merges to tracking file: %s\n' % str(ex) ] errors.append(', '.join(sorted(failed_pkgs))) return errors self._remove_failed_dirs(failed_pkgs) results = self._emerge_pkg_atoms(module_output, pkg_atoms) # list any new failed merges for pkg in sorted(self._scan()): results.append("'%s' still found as a failed merge." % pkg) # reload config and remove successful packages from tracking file portage._reset_legacy_globals() vardb = portage.db[portage.root]['vartree'].dbapi still_failed_pkgs = {} for pkg, mtime in failed_pkgs.items(): pkg_name = '%s' % pkg.replace(MERGING_IDENTIFIER, '') if not vardb.cpv_exists(pkg_name): still_failed_pkgs[pkg] = mtime self._tracking_file.save(still_failed_pkgs) return results